react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / har-validator / node_modules / bluebird / js / browser / bluebird.js
81160 views/* @preserve1* The MIT License (MIT)2*3* Copyright (c) 2014 Petka Antonov4*5* Permission is hereby granted, free of charge, to any person obtaining a copy6* of this software and associated documentation files (the "Software"), to deal7* in the Software without restriction, including without limitation the rights8* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell9* copies of the Software, and to permit persons to whom the Software is10* furnished to do so, subject to the following conditions:</p>11*12* The above copyright notice and this permission notice shall be included in13* all copies or substantial portions of the Software.14*15* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR16* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,17* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE18* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER19* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,20* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN21* THE SOFTWARE.22*23*/24/**25* bluebird build version 2.9.2726* Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, cancel, using, filter, any, each, timers27*/28!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){29"use strict";30module.exports = function(Promise) {31var SomePromiseArray = Promise._SomePromiseArray;32function any(promises) {33var ret = new SomePromiseArray(promises);34var promise = ret.promise();35ret.setHowMany(1);36ret.setUnwrap();37ret.init();38return promise;39}4041Promise.any = function (promises) {42return any(promises);43};4445Promise.prototype.any = function () {46return any(this);47};4849};5051},{}],2:[function(_dereq_,module,exports){52"use strict";53var firstLineError;54try {throw new Error(); } catch (e) {firstLineError = e;}55var schedule = _dereq_("./schedule.js");56var Queue = _dereq_("./queue.js");57var util = _dereq_("./util.js");5859function Async() {60this._isTickUsed = false;61this._lateQueue = new Queue(16);62this._normalQueue = new Queue(16);63this._trampolineEnabled = true;64var self = this;65this.drainQueues = function () {66self._drainQueues();67};68this._schedule =69schedule.isStatic ? schedule(this.drainQueues) : schedule;70}7172Async.prototype.disableTrampolineIfNecessary = function() {73if (util.hasDevTools) {74this._trampolineEnabled = false;75}76};7778Async.prototype.enableTrampoline = function() {79if (!this._trampolineEnabled) {80this._trampolineEnabled = true;81this._schedule = function(fn) {82setTimeout(fn, 0);83};84}85};8687Async.prototype.haveItemsQueued = function () {88return this._normalQueue.length() > 0;89};9091Async.prototype.throwLater = function(fn, arg) {92if (arguments.length === 1) {93arg = fn;94fn = function () { throw arg; };95}96var domain = this._getDomain();97if (domain !== undefined) fn = domain.bind(fn);98if (typeof setTimeout !== "undefined") {99setTimeout(function() {100fn(arg);101}, 0);102} else try {103this._schedule(function() {104fn(arg);105});106} catch (e) {107throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a");108}109};110111Async.prototype._getDomain = function() {};112113if (!true) {114if (util.isNode) {115var EventsModule = _dereq_("events");116117var domainGetter = function() {118var domain = process.domain;119if (domain === null) return undefined;120return domain;121};122123if (EventsModule.usingDomains) {124Async.prototype._getDomain = domainGetter;125} else {126var descriptor =127Object.getOwnPropertyDescriptor(EventsModule, "usingDomains");128129if (descriptor) {130if (!descriptor.configurable) {131process.on("domainsActivated", function() {132Async.prototype._getDomain = domainGetter;133});134} else {135var usingDomains = false;136Object.defineProperty(EventsModule, "usingDomains", {137configurable: false,138enumerable: true,139get: function() {140return usingDomains;141},142set: function(value) {143if (usingDomains || !value) return;144usingDomains = true;145Async.prototype._getDomain = domainGetter;146util.toFastProperties(process);147process.emit("domainsActivated");148}149});150}151}152}153}154}155156function AsyncInvokeLater(fn, receiver, arg) {157var domain = this._getDomain();158if (domain !== undefined) fn = domain.bind(fn);159this._lateQueue.push(fn, receiver, arg);160this._queueTick();161}162163function AsyncInvoke(fn, receiver, arg) {164var domain = this._getDomain();165if (domain !== undefined) fn = domain.bind(fn);166this._normalQueue.push(fn, receiver, arg);167this._queueTick();168}169170function AsyncSettlePromises(promise) {171var domain = this._getDomain();172if (domain !== undefined) {173var fn = domain.bind(promise._settlePromises);174this._normalQueue.push(fn, promise, undefined);175} else {176this._normalQueue._pushOne(promise);177}178this._queueTick();179}180181if (!util.hasDevTools) {182Async.prototype.invokeLater = AsyncInvokeLater;183Async.prototype.invoke = AsyncInvoke;184Async.prototype.settlePromises = AsyncSettlePromises;185} else {186Async.prototype.invokeLater = function (fn, receiver, arg) {187if (this._trampolineEnabled) {188AsyncInvokeLater.call(this, fn, receiver, arg);189} else {190setTimeout(function() {191fn.call(receiver, arg);192}, 100);193}194};195196Async.prototype.invoke = function (fn, receiver, arg) {197if (this._trampolineEnabled) {198AsyncInvoke.call(this, fn, receiver, arg);199} else {200setTimeout(function() {201fn.call(receiver, arg);202}, 0);203}204};205206Async.prototype.settlePromises = function(promise) {207if (this._trampolineEnabled) {208AsyncSettlePromises.call(this, promise);209} else {210setTimeout(function() {211promise._settlePromises();212}, 0);213}214};215}216217Async.prototype.invokeFirst = function (fn, receiver, arg) {218var domain = this._getDomain();219if (domain !== undefined) fn = domain.bind(fn);220this._normalQueue.unshift(fn, receiver, arg);221this._queueTick();222};223224Async.prototype._drainQueue = function(queue) {225while (queue.length() > 0) {226var fn = queue.shift();227if (typeof fn !== "function") {228fn._settlePromises();229continue;230}231var receiver = queue.shift();232var arg = queue.shift();233fn.call(receiver, arg);234}235};236237Async.prototype._drainQueues = function () {238this._drainQueue(this._normalQueue);239this._reset();240this._drainQueue(this._lateQueue);241};242243Async.prototype._queueTick = function () {244if (!this._isTickUsed) {245this._isTickUsed = true;246this._schedule(this.drainQueues);247}248};249250Async.prototype._reset = function () {251this._isTickUsed = false;252};253254module.exports = new Async();255module.exports.firstLineError = firstLineError;256257},{"./queue.js":28,"./schedule.js":31,"./util.js":38,"events":39}],3:[function(_dereq_,module,exports){258"use strict";259module.exports = function(Promise, INTERNAL, tryConvertToPromise) {260var rejectThis = function(_, e) {261this._reject(e);262};263264var targetRejected = function(e, context) {265context.promiseRejectionQueued = true;266context.bindingPromise._then(rejectThis, rejectThis, null, this, e);267};268269var bindingResolved = function(thisArg, context) {270this._setBoundTo(thisArg);271if (this._isPending()) {272this._resolveCallback(context.target);273}274};275276var bindingRejected = function(e, context) {277if (!context.promiseRejectionQueued) this._reject(e);278};279280Promise.prototype.bind = function (thisArg) {281var maybePromise = tryConvertToPromise(thisArg);282var ret = new Promise(INTERNAL);283ret._propagateFrom(this, 1);284var target = this._target();285if (maybePromise instanceof Promise) {286var context = {287promiseRejectionQueued: false,288promise: ret,289target: target,290bindingPromise: maybePromise291};292target._then(INTERNAL, targetRejected, ret._progress, ret, context);293maybePromise._then(294bindingResolved, bindingRejected, ret._progress, ret, context);295} else {296ret._setBoundTo(thisArg);297ret._resolveCallback(target);298}299return ret;300};301302Promise.prototype._setBoundTo = function (obj) {303if (obj !== undefined) {304this._bitField = this._bitField | 131072;305this._boundTo = obj;306} else {307this._bitField = this._bitField & (~131072);308}309};310311Promise.prototype._isBound = function () {312return (this._bitField & 131072) === 131072;313};314315Promise.bind = function (thisArg, value) {316var maybePromise = tryConvertToPromise(thisArg);317var ret = new Promise(INTERNAL);318319if (maybePromise instanceof Promise) {320maybePromise._then(function(thisArg) {321ret._setBoundTo(thisArg);322ret._resolveCallback(value);323}, ret._reject, ret._progress, ret, null);324} else {325ret._setBoundTo(thisArg);326ret._resolveCallback(value);327}328return ret;329};330};331332},{}],4:[function(_dereq_,module,exports){333"use strict";334var old;335if (typeof Promise !== "undefined") old = Promise;336function noConflict() {337try { if (Promise === bluebird) Promise = old; }338catch (e) {}339return bluebird;340}341var bluebird = _dereq_("./promise.js")();342bluebird.noConflict = noConflict;343module.exports = bluebird;344345},{"./promise.js":23}],5:[function(_dereq_,module,exports){346"use strict";347var cr = Object.create;348if (cr) {349var callerCache = cr(null);350var getterCache = cr(null);351callerCache[" size"] = getterCache[" size"] = 0;352}353354module.exports = function(Promise) {355var util = _dereq_("./util.js");356var canEvaluate = util.canEvaluate;357var isIdentifier = util.isIdentifier;358359var getMethodCaller;360var getGetter;361if (!true) {362var makeMethodCaller = function (methodName) {363return new Function("ensureMethod", " \n\364return function(obj) { \n\365'use strict' \n\366var len = this.length; \n\367ensureMethod(obj, 'methodName'); \n\368switch(len) { \n\369case 1: return obj.methodName(this[0]); \n\370case 2: return obj.methodName(this[0], this[1]); \n\371case 3: return obj.methodName(this[0], this[1], this[2]); \n\372case 0: return obj.methodName(); \n\373default: \n\374return obj.methodName.apply(obj, this); \n\375} \n\376}; \n\377".replace(/methodName/g, methodName))(ensureMethod);378};379380var makeGetter = function (propertyName) {381return new Function("obj", " \n\382'use strict'; \n\383return obj.propertyName; \n\384".replace("propertyName", propertyName));385};386387var getCompiled = function(name, compiler, cache) {388var ret = cache[name];389if (typeof ret !== "function") {390if (!isIdentifier(name)) {391return null;392}393ret = compiler(name);394cache[name] = ret;395cache[" size"]++;396if (cache[" size"] > 512) {397var keys = Object.keys(cache);398for (var i = 0; i < 256; ++i) delete cache[keys[i]];399cache[" size"] = keys.length - 256;400}401}402return ret;403};404405getMethodCaller = function(name) {406return getCompiled(name, makeMethodCaller, callerCache);407};408409getGetter = function(name) {410return getCompiled(name, makeGetter, getterCache);411};412}413414function ensureMethod(obj, methodName) {415var fn;416if (obj != null) fn = obj[methodName];417if (typeof fn !== "function") {418var message = "Object " + util.classString(obj) + " has no method '" +419util.toString(methodName) + "'";420throw new Promise.TypeError(message);421}422return fn;423}424425function caller(obj) {426var methodName = this.pop();427var fn = ensureMethod(obj, methodName);428return fn.apply(obj, this);429}430Promise.prototype.call = function (methodName) {431var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}432if (!true) {433if (canEvaluate) {434var maybeCaller = getMethodCaller(methodName);435if (maybeCaller !== null) {436return this._then(437maybeCaller, undefined, undefined, args, undefined);438}439}440}441args.push(methodName);442return this._then(caller, undefined, undefined, args, undefined);443};444445function namedGetter(obj) {446return obj[this];447}448function indexedGetter(obj) {449var index = +this;450if (index < 0) index = Math.max(0, index + obj.length);451return obj[index];452}453Promise.prototype.get = function (propertyName) {454var isIndex = (typeof propertyName === "number");455var getter;456if (!isIndex) {457if (canEvaluate) {458var maybeGetter = getGetter(propertyName);459getter = maybeGetter !== null ? maybeGetter : namedGetter;460} else {461getter = namedGetter;462}463} else {464getter = indexedGetter;465}466return this._then(getter, undefined, undefined, propertyName, undefined);467};468};469470},{"./util.js":38}],6:[function(_dereq_,module,exports){471"use strict";472module.exports = function(Promise) {473var errors = _dereq_("./errors.js");474var async = _dereq_("./async.js");475var CancellationError = errors.CancellationError;476477Promise.prototype._cancel = function (reason) {478if (!this.isCancellable()) return this;479var parent;480var promiseToReject = this;481while ((parent = promiseToReject._cancellationParent) !== undefined &&482parent.isCancellable()) {483promiseToReject = parent;484}485this._unsetCancellable();486promiseToReject._target()._rejectCallback(reason, false, true);487};488489Promise.prototype.cancel = function (reason) {490if (!this.isCancellable()) return this;491if (reason === undefined) reason = new CancellationError();492async.invokeLater(this._cancel, this, reason);493return this;494};495496Promise.prototype.cancellable = function () {497if (this._cancellable()) return this;498async.enableTrampoline();499this._setCancellable();500this._cancellationParent = undefined;501return this;502};503504Promise.prototype.uncancellable = function () {505var ret = this.then();506ret._unsetCancellable();507return ret;508};509510Promise.prototype.fork = function (didFulfill, didReject, didProgress) {511var ret = this._then(didFulfill, didReject, didProgress,512undefined, undefined);513514ret._setCancellable();515ret._cancellationParent = undefined;516return ret;517};518};519520},{"./async.js":2,"./errors.js":13}],7:[function(_dereq_,module,exports){521"use strict";522module.exports = function() {523var async = _dereq_("./async.js");524var util = _dereq_("./util.js");525var bluebirdFramePattern =526/[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/;527var stackFramePattern = null;528var formatStack = null;529var indentStackFrames = false;530var warn;531532function CapturedTrace(parent) {533this._parent = parent;534var length = this._length = 1 + (parent === undefined ? 0 : parent._length);535captureStackTrace(this, CapturedTrace);536if (length > 32) this.uncycle();537}538util.inherits(CapturedTrace, Error);539540CapturedTrace.prototype.uncycle = function() {541var length = this._length;542if (length < 2) return;543var nodes = [];544var stackToIndex = {};545546for (var i = 0, node = this; node !== undefined; ++i) {547nodes.push(node);548node = node._parent;549}550length = this._length = i;551for (var i = length - 1; i >= 0; --i) {552var stack = nodes[i].stack;553if (stackToIndex[stack] === undefined) {554stackToIndex[stack] = i;555}556}557for (var i = 0; i < length; ++i) {558var currentStack = nodes[i].stack;559var index = stackToIndex[currentStack];560if (index !== undefined && index !== i) {561if (index > 0) {562nodes[index - 1]._parent = undefined;563nodes[index - 1]._length = 1;564}565nodes[i]._parent = undefined;566nodes[i]._length = 1;567var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;568569if (index < length - 1) {570cycleEdgeNode._parent = nodes[index + 1];571cycleEdgeNode._parent.uncycle();572cycleEdgeNode._length =573cycleEdgeNode._parent._length + 1;574} else {575cycleEdgeNode._parent = undefined;576cycleEdgeNode._length = 1;577}578var currentChildLength = cycleEdgeNode._length + 1;579for (var j = i - 2; j >= 0; --j) {580nodes[j]._length = currentChildLength;581currentChildLength++;582}583return;584}585}586};587588CapturedTrace.prototype.parent = function() {589return this._parent;590};591592CapturedTrace.prototype.hasParent = function() {593return this._parent !== undefined;594};595596CapturedTrace.prototype.attachExtraTrace = function(error) {597if (error.__stackCleaned__) return;598this.uncycle();599var parsed = CapturedTrace.parseStackAndMessage(error);600var message = parsed.message;601var stacks = [parsed.stack];602603var trace = this;604while (trace !== undefined) {605stacks.push(cleanStack(trace.stack.split("\n")));606trace = trace._parent;607}608removeCommonRoots(stacks);609removeDuplicateOrEmptyJumps(stacks);610util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));611util.notEnumerableProp(error, "__stackCleaned__", true);612};613614function reconstructStack(message, stacks) {615for (var i = 0; i < stacks.length - 1; ++i) {616stacks[i].push("From previous event:");617stacks[i] = stacks[i].join("\n");618}619if (i < stacks.length) {620stacks[i] = stacks[i].join("\n");621}622return message + "\n" + stacks.join("\n");623}624625function removeDuplicateOrEmptyJumps(stacks) {626for (var i = 0; i < stacks.length; ++i) {627if (stacks[i].length === 0 ||628((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {629stacks.splice(i, 1);630i--;631}632}633}634635function removeCommonRoots(stacks) {636var current = stacks[0];637for (var i = 1; i < stacks.length; ++i) {638var prev = stacks[i];639var currentLastIndex = current.length - 1;640var currentLastLine = current[currentLastIndex];641var commonRootMeetPoint = -1;642643for (var j = prev.length - 1; j >= 0; --j) {644if (prev[j] === currentLastLine) {645commonRootMeetPoint = j;646break;647}648}649650for (var j = commonRootMeetPoint; j >= 0; --j) {651var line = prev[j];652if (current[currentLastIndex] === line) {653current.pop();654currentLastIndex--;655} else {656break;657}658}659current = prev;660}661}662663function cleanStack(stack) {664var ret = [];665for (var i = 0; i < stack.length; ++i) {666var line = stack[i];667var isTraceLine = stackFramePattern.test(line) ||668" (No stack trace)" === line;669var isInternalFrame = isTraceLine && shouldIgnore(line);670if (isTraceLine && !isInternalFrame) {671if (indentStackFrames && line.charAt(0) !== " ") {672line = " " + line;673}674ret.push(line);675}676}677return ret;678}679680function stackFramesAsArray(error) {681var stack = error.stack.replace(/\s+$/g, "").split("\n");682for (var i = 0; i < stack.length; ++i) {683var line = stack[i];684if (" (No stack trace)" === line || stackFramePattern.test(line)) {685break;686}687}688if (i > 0) {689stack = stack.slice(i);690}691return stack;692}693694CapturedTrace.parseStackAndMessage = function(error) {695var stack = error.stack;696var message = error.toString();697stack = typeof stack === "string" && stack.length > 0698? stackFramesAsArray(error) : [" (No stack trace)"];699return {700message: message,701stack: cleanStack(stack)702};703};704705CapturedTrace.formatAndLogError = function(error, title) {706if (typeof console !== "undefined") {707var message;708if (typeof error === "object" || typeof error === "function") {709var stack = error.stack;710message = title + formatStack(stack, error);711} else {712message = title + String(error);713}714if (typeof warn === "function") {715warn(message);716} else if (typeof console.log === "function" ||717typeof console.log === "object") {718console.log(message);719}720}721};722723CapturedTrace.unhandledRejection = function (reason) {724CapturedTrace.formatAndLogError(reason, "^--- With additional stack trace: ");725};726727CapturedTrace.isSupported = function () {728return typeof captureStackTrace === "function";729};730731CapturedTrace.fireRejectionEvent =732function(name, localHandler, reason, promise) {733var localEventFired = false;734try {735if (typeof localHandler === "function") {736localEventFired = true;737if (name === "rejectionHandled") {738localHandler(promise);739} else {740localHandler(reason, promise);741}742}743} catch (e) {744async.throwLater(e);745}746747var globalEventFired = false;748try {749globalEventFired = fireGlobalEvent(name, reason, promise);750} catch (e) {751globalEventFired = true;752async.throwLater(e);753}754755var domEventFired = false;756if (fireDomEvent) {757try {758domEventFired = fireDomEvent(name.toLowerCase(), {759reason: reason,760promise: promise761});762} catch (e) {763domEventFired = true;764async.throwLater(e);765}766}767768if (!globalEventFired && !localEventFired && !domEventFired &&769name === "unhandledRejection") {770CapturedTrace.formatAndLogError(reason, "Unhandled rejection ");771}772};773774function formatNonError(obj) {775var str;776if (typeof obj === "function") {777str = "[function " +778(obj.name || "anonymous") +779"]";780} else {781str = obj.toString();782var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;783if (ruselessToString.test(str)) {784try {785var newStr = JSON.stringify(obj);786str = newStr;787}788catch(e) {789790}791}792if (str.length === 0) {793str = "(empty array)";794}795}796return ("(<" + snip(str) + ">, no stack trace)");797}798799function snip(str) {800var maxChars = 41;801if (str.length < maxChars) {802return str;803}804return str.substr(0, maxChars - 3) + "...";805}806807var shouldIgnore = function() { return false; };808var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;809function parseLineInfo(line) {810var matches = line.match(parseLineInfoRegex);811if (matches) {812return {813fileName: matches[1],814line: parseInt(matches[2], 10)815};816}817}818CapturedTrace.setBounds = function(firstLineError, lastLineError) {819if (!CapturedTrace.isSupported()) return;820var firstStackLines = firstLineError.stack.split("\n");821var lastStackLines = lastLineError.stack.split("\n");822var firstIndex = -1;823var lastIndex = -1;824var firstFileName;825var lastFileName;826for (var i = 0; i < firstStackLines.length; ++i) {827var result = parseLineInfo(firstStackLines[i]);828if (result) {829firstFileName = result.fileName;830firstIndex = result.line;831break;832}833}834for (var i = 0; i < lastStackLines.length; ++i) {835var result = parseLineInfo(lastStackLines[i]);836if (result) {837lastFileName = result.fileName;838lastIndex = result.line;839break;840}841}842if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||843firstFileName !== lastFileName || firstIndex >= lastIndex) {844return;845}846847shouldIgnore = function(line) {848if (bluebirdFramePattern.test(line)) return true;849var info = parseLineInfo(line);850if (info) {851if (info.fileName === firstFileName &&852(firstIndex <= info.line && info.line <= lastIndex)) {853return true;854}855}856return false;857};858};859860var captureStackTrace = (function stackDetection() {861var v8stackFramePattern = /^\s*at\s*/;862var v8stackFormatter = function(stack, error) {863if (typeof stack === "string") return stack;864865if (error.name !== undefined &&866error.message !== undefined) {867return error.toString();868}869return formatNonError(error);870};871872if (typeof Error.stackTraceLimit === "number" &&873typeof Error.captureStackTrace === "function") {874Error.stackTraceLimit = Error.stackTraceLimit + 6;875stackFramePattern = v8stackFramePattern;876formatStack = v8stackFormatter;877var captureStackTrace = Error.captureStackTrace;878879shouldIgnore = function(line) {880return bluebirdFramePattern.test(line);881};882return function(receiver, ignoreUntil) {883Error.stackTraceLimit = Error.stackTraceLimit + 6;884captureStackTrace(receiver, ignoreUntil);885Error.stackTraceLimit = Error.stackTraceLimit - 6;886};887}888var err = new Error();889890if (typeof err.stack === "string" &&891err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {892stackFramePattern = /@/;893formatStack = v8stackFormatter;894indentStackFrames = true;895return function captureStackTrace(o) {896o.stack = new Error().stack;897};898}899900var hasStackAfterThrow;901try { throw new Error(); }902catch(e) {903hasStackAfterThrow = ("stack" in e);904}905if (!("stack" in err) && hasStackAfterThrow) {906stackFramePattern = v8stackFramePattern;907formatStack = v8stackFormatter;908return function captureStackTrace(o) {909Error.stackTraceLimit = Error.stackTraceLimit + 6;910try { throw new Error(); }911catch(e) { o.stack = e.stack; }912Error.stackTraceLimit = Error.stackTraceLimit - 6;913};914}915916formatStack = function(stack, error) {917if (typeof stack === "string") return stack;918919if ((typeof error === "object" ||920typeof error === "function") &&921error.name !== undefined &&922error.message !== undefined) {923return error.toString();924}925return formatNonError(error);926};927928return null;929930})([]);931932var fireDomEvent;933var fireGlobalEvent = (function() {934if (util.isNode) {935return function(name, reason, promise) {936if (name === "rejectionHandled") {937return process.emit(name, promise);938} else {939return process.emit(name, reason, promise);940}941};942} else {943var customEventWorks = false;944var anyEventWorks = true;945try {946var ev = new self.CustomEvent("test");947customEventWorks = ev instanceof CustomEvent;948} catch (e) {}949if (!customEventWorks) {950try {951var event = document.createEvent("CustomEvent");952event.initCustomEvent("testingtheevent", false, true, {});953self.dispatchEvent(event);954} catch (e) {955anyEventWorks = false;956}957}958if (anyEventWorks) {959fireDomEvent = function(type, detail) {960var event;961if (customEventWorks) {962event = new self.CustomEvent(type, {963detail: detail,964bubbles: false,965cancelable: true966});967} else if (self.dispatchEvent) {968event = document.createEvent("CustomEvent");969event.initCustomEvent(type, false, true, detail);970}971972return event ? !self.dispatchEvent(event) : false;973};974}975976var toWindowMethodNameMap = {};977toWindowMethodNameMap["unhandledRejection"] = ("on" +978"unhandledRejection").toLowerCase();979toWindowMethodNameMap["rejectionHandled"] = ("on" +980"rejectionHandled").toLowerCase();981982return function(name, reason, promise) {983var methodName = toWindowMethodNameMap[name];984var method = self[methodName];985if (!method) return false;986if (name === "rejectionHandled") {987method.call(self, promise);988} else {989method.call(self, reason, promise);990}991return true;992};993}994})();995996if (typeof console !== "undefined" && typeof console.warn !== "undefined") {997warn = function (message) {998console.warn(message);999};1000if (util.isNode && process.stderr.isTTY) {1001warn = function(message) {1002process.stderr.write("\u001b[31m" + message + "\u001b[39m\n");1003};1004} else if (!util.isNode && typeof (new Error().stack) === "string") {1005warn = function(message) {1006console.warn("%c" + message, "color: red");1007};1008}1009}10101011return CapturedTrace;1012};10131014},{"./async.js":2,"./util.js":38}],8:[function(_dereq_,module,exports){1015"use strict";1016module.exports = function(NEXT_FILTER) {1017var util = _dereq_("./util.js");1018var errors = _dereq_("./errors.js");1019var tryCatch = util.tryCatch;1020var errorObj = util.errorObj;1021var keys = _dereq_("./es5.js").keys;1022var TypeError = errors.TypeError;10231024function CatchFilter(instances, callback, promise) {1025this._instances = instances;1026this._callback = callback;1027this._promise = promise;1028}10291030function safePredicate(predicate, e) {1031var safeObject = {};1032var retfilter = tryCatch(predicate).call(safeObject, e);10331034if (retfilter === errorObj) return retfilter;10351036var safeKeys = keys(safeObject);1037if (safeKeys.length) {1038errorObj.e = new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a");1039return errorObj;1040}1041return retfilter;1042}10431044CatchFilter.prototype.doFilter = function (e) {1045var cb = this._callback;1046var promise = this._promise;1047var boundTo = promise._boundTo;1048for (var i = 0, len = this._instances.length; i < len; ++i) {1049var item = this._instances[i];1050var itemIsErrorType = item === Error ||1051(item != null && item.prototype instanceof Error);10521053if (itemIsErrorType && e instanceof item) {1054var ret = tryCatch(cb).call(boundTo, e);1055if (ret === errorObj) {1056NEXT_FILTER.e = ret.e;1057return NEXT_FILTER;1058}1059return ret;1060} else if (typeof item === "function" && !itemIsErrorType) {1061var shouldHandle = safePredicate(item, e);1062if (shouldHandle === errorObj) {1063e = errorObj.e;1064break;1065} else if (shouldHandle) {1066var ret = tryCatch(cb).call(boundTo, e);1067if (ret === errorObj) {1068NEXT_FILTER.e = ret.e;1069return NEXT_FILTER;1070}1071return ret;1072}1073}1074}1075NEXT_FILTER.e = e;1076return NEXT_FILTER;1077};10781079return CatchFilter;1080};10811082},{"./errors.js":13,"./es5.js":14,"./util.js":38}],9:[function(_dereq_,module,exports){1083"use strict";1084module.exports = function(Promise, CapturedTrace, isDebugging) {1085var contextStack = [];1086function Context() {1087this._trace = new CapturedTrace(peekContext());1088}1089Context.prototype._pushContext = function () {1090if (!isDebugging()) return;1091if (this._trace !== undefined) {1092contextStack.push(this._trace);1093}1094};10951096Context.prototype._popContext = function () {1097if (!isDebugging()) return;1098if (this._trace !== undefined) {1099contextStack.pop();1100}1101};11021103function createContext() {1104if (isDebugging()) return new Context();1105}11061107function peekContext() {1108var lastIndex = contextStack.length - 1;1109if (lastIndex >= 0) {1110return contextStack[lastIndex];1111}1112return undefined;1113}11141115Promise.prototype._peekContext = peekContext;1116Promise.prototype._pushContext = Context.prototype._pushContext;1117Promise.prototype._popContext = Context.prototype._popContext;11181119return createContext;1120};11211122},{}],10:[function(_dereq_,module,exports){1123"use strict";1124module.exports = function(Promise, CapturedTrace) {1125var async = _dereq_("./async.js");1126var Warning = _dereq_("./errors.js").Warning;1127var util = _dereq_("./util.js");1128var canAttachTrace = util.canAttachTrace;1129var unhandledRejectionHandled;1130var possiblyUnhandledRejection;1131var debugging = false || (util.isNode &&1132(!!process.env["BLUEBIRD_DEBUG"] ||1133process.env["NODE_ENV"] === "development"));11341135if (debugging) {1136async.disableTrampolineIfNecessary();1137}11381139Promise.prototype._ensurePossibleRejectionHandled = function () {1140this._setRejectionIsUnhandled();1141async.invokeLater(this._notifyUnhandledRejection, this, undefined);1142};11431144Promise.prototype._notifyUnhandledRejectionIsHandled = function () {1145CapturedTrace.fireRejectionEvent("rejectionHandled",1146unhandledRejectionHandled, undefined, this);1147};11481149Promise.prototype._notifyUnhandledRejection = function () {1150if (this._isRejectionUnhandled()) {1151var reason = this._getCarriedStackTrace() || this._settledValue;1152this._setUnhandledRejectionIsNotified();1153CapturedTrace.fireRejectionEvent("unhandledRejection",1154possiblyUnhandledRejection, reason, this);1155}1156};11571158Promise.prototype._setUnhandledRejectionIsNotified = function () {1159this._bitField = this._bitField | 524288;1160};11611162Promise.prototype._unsetUnhandledRejectionIsNotified = function () {1163this._bitField = this._bitField & (~524288);1164};11651166Promise.prototype._isUnhandledRejectionNotified = function () {1167return (this._bitField & 524288) > 0;1168};11691170Promise.prototype._setRejectionIsUnhandled = function () {1171this._bitField = this._bitField | 2097152;1172};11731174Promise.prototype._unsetRejectionIsUnhandled = function () {1175this._bitField = this._bitField & (~2097152);1176if (this._isUnhandledRejectionNotified()) {1177this._unsetUnhandledRejectionIsNotified();1178this._notifyUnhandledRejectionIsHandled();1179}1180};11811182Promise.prototype._isRejectionUnhandled = function () {1183return (this._bitField & 2097152) > 0;1184};11851186Promise.prototype._setCarriedStackTrace = function (capturedTrace) {1187this._bitField = this._bitField | 1048576;1188this._fulfillmentHandler0 = capturedTrace;1189};11901191Promise.prototype._isCarryingStackTrace = function () {1192return (this._bitField & 1048576) > 0;1193};11941195Promise.prototype._getCarriedStackTrace = function () {1196return this._isCarryingStackTrace()1197? this._fulfillmentHandler01198: undefined;1199};12001201Promise.prototype._captureStackTrace = function () {1202if (debugging) {1203this._trace = new CapturedTrace(this._peekContext());1204}1205return this;1206};12071208Promise.prototype._attachExtraTrace = function (error, ignoreSelf) {1209if (debugging && canAttachTrace(error)) {1210var trace = this._trace;1211if (trace !== undefined) {1212if (ignoreSelf) trace = trace._parent;1213}1214if (trace !== undefined) {1215trace.attachExtraTrace(error);1216} else if (!error.__stackCleaned__) {1217var parsed = CapturedTrace.parseStackAndMessage(error);1218util.notEnumerableProp(error, "stack",1219parsed.message + "\n" + parsed.stack.join("\n"));1220util.notEnumerableProp(error, "__stackCleaned__", true);1221}1222}1223};12241225Promise.prototype._warn = function(message) {1226var warning = new Warning(message);1227var ctx = this._peekContext();1228if (ctx) {1229ctx.attachExtraTrace(warning);1230} else {1231var parsed = CapturedTrace.parseStackAndMessage(warning);1232warning.stack = parsed.message + "\n" + parsed.stack.join("\n");1233}1234CapturedTrace.formatAndLogError(warning, "");1235};12361237Promise.onPossiblyUnhandledRejection = function (fn) {1238possiblyUnhandledRejection = typeof fn === "function" ? fn : undefined;1239};12401241Promise.onUnhandledRejectionHandled = function (fn) {1242unhandledRejectionHandled = typeof fn === "function" ? fn : undefined;1243};12441245Promise.longStackTraces = function () {1246if (async.haveItemsQueued() &&1247debugging === false1248) {1249throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/DT1qyG\u000a");1250}1251debugging = CapturedTrace.isSupported();1252if (debugging) {1253async.disableTrampolineIfNecessary();1254}1255};12561257Promise.hasLongStackTraces = function () {1258return debugging && CapturedTrace.isSupported();1259};12601261if (!CapturedTrace.isSupported()) {1262Promise.longStackTraces = function(){};1263debugging = false;1264}12651266return function() {1267return debugging;1268};1269};12701271},{"./async.js":2,"./errors.js":13,"./util.js":38}],11:[function(_dereq_,module,exports){1272"use strict";1273var util = _dereq_("./util.js");1274var isPrimitive = util.isPrimitive;1275var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;12761277module.exports = function(Promise) {1278var returner = function () {1279return this;1280};1281var thrower = function () {1282throw this;1283};1284var returnUndefined = function() {};1285var throwUndefined = function() {1286throw undefined;1287};12881289var wrapper = function (value, action) {1290if (action === 1) {1291return function () {1292throw value;1293};1294} else if (action === 2) {1295return function () {1296return value;1297};1298}1299};130013011302Promise.prototype["return"] =1303Promise.prototype.thenReturn = function (value) {1304if (value === undefined) return this.then(returnUndefined);13051306if (wrapsPrimitiveReceiver && isPrimitive(value)) {1307return this._then(1308wrapper(value, 2),1309undefined,1310undefined,1311undefined,1312undefined1313);1314}1315return this._then(returner, undefined, undefined, value, undefined);1316};13171318Promise.prototype["throw"] =1319Promise.prototype.thenThrow = function (reason) {1320if (reason === undefined) return this.then(throwUndefined);13211322if (wrapsPrimitiveReceiver && isPrimitive(reason)) {1323return this._then(1324wrapper(reason, 1),1325undefined,1326undefined,1327undefined,1328undefined1329);1330}1331return this._then(thrower, undefined, undefined, reason, undefined);1332};1333};13341335},{"./util.js":38}],12:[function(_dereq_,module,exports){1336"use strict";1337module.exports = function(Promise, INTERNAL) {1338var PromiseReduce = Promise.reduce;13391340Promise.prototype.each = function (fn) {1341return PromiseReduce(this, fn, null, INTERNAL);1342};13431344Promise.each = function (promises, fn) {1345return PromiseReduce(promises, fn, null, INTERNAL);1346};1347};13481349},{}],13:[function(_dereq_,module,exports){1350"use strict";1351var es5 = _dereq_("./es5.js");1352var Objectfreeze = es5.freeze;1353var util = _dereq_("./util.js");1354var inherits = util.inherits;1355var notEnumerableProp = util.notEnumerableProp;13561357function subError(nameProperty, defaultMessage) {1358function SubError(message) {1359if (!(this instanceof SubError)) return new SubError(message);1360notEnumerableProp(this, "message",1361typeof message === "string" ? message : defaultMessage);1362notEnumerableProp(this, "name", nameProperty);1363if (Error.captureStackTrace) {1364Error.captureStackTrace(this, this.constructor);1365} else {1366Error.call(this);1367}1368}1369inherits(SubError, Error);1370return SubError;1371}13721373var _TypeError, _RangeError;1374var Warning = subError("Warning", "warning");1375var CancellationError = subError("CancellationError", "cancellation error");1376var TimeoutError = subError("TimeoutError", "timeout error");1377var AggregateError = subError("AggregateError", "aggregate error");1378try {1379_TypeError = TypeError;1380_RangeError = RangeError;1381} catch(e) {1382_TypeError = subError("TypeError", "type error");1383_RangeError = subError("RangeError", "range error");1384}13851386var methods = ("join pop push shift unshift slice filter forEach some " +1387"every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");13881389for (var i = 0; i < methods.length; ++i) {1390if (typeof Array.prototype[methods[i]] === "function") {1391AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];1392}1393}13941395es5.defineProperty(AggregateError.prototype, "length", {1396value: 0,1397configurable: false,1398writable: true,1399enumerable: true1400});1401AggregateError.prototype["isOperational"] = true;1402var level = 0;1403AggregateError.prototype.toString = function() {1404var indent = Array(level * 4 + 1).join(" ");1405var ret = "\n" + indent + "AggregateError of:" + "\n";1406level++;1407indent = Array(level * 4 + 1).join(" ");1408for (var i = 0; i < this.length; ++i) {1409var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";1410var lines = str.split("\n");1411for (var j = 0; j < lines.length; ++j) {1412lines[j] = indent + lines[j];1413}1414str = lines.join("\n");1415ret += str + "\n";1416}1417level--;1418return ret;1419};14201421function OperationalError(message) {1422if (!(this instanceof OperationalError))1423return new OperationalError(message);1424notEnumerableProp(this, "name", "OperationalError");1425notEnumerableProp(this, "message", message);1426this.cause = message;1427this["isOperational"] = true;14281429if (message instanceof Error) {1430notEnumerableProp(this, "message", message.message);1431notEnumerableProp(this, "stack", message.stack);1432} else if (Error.captureStackTrace) {1433Error.captureStackTrace(this, this.constructor);1434}14351436}1437inherits(OperationalError, Error);14381439var errorTypes = Error["__BluebirdErrorTypes__"];1440if (!errorTypes) {1441errorTypes = Objectfreeze({1442CancellationError: CancellationError,1443TimeoutError: TimeoutError,1444OperationalError: OperationalError,1445RejectionError: OperationalError,1446AggregateError: AggregateError1447});1448notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes);1449}14501451module.exports = {1452Error: Error,1453TypeError: _TypeError,1454RangeError: _RangeError,1455CancellationError: errorTypes.CancellationError,1456OperationalError: errorTypes.OperationalError,1457TimeoutError: errorTypes.TimeoutError,1458AggregateError: errorTypes.AggregateError,1459Warning: Warning1460};14611462},{"./es5.js":14,"./util.js":38}],14:[function(_dereq_,module,exports){1463var isES5 = (function(){1464"use strict";1465return this === undefined;1466})();14671468if (isES5) {1469module.exports = {1470freeze: Object.freeze,1471defineProperty: Object.defineProperty,1472getDescriptor: Object.getOwnPropertyDescriptor,1473keys: Object.keys,1474names: Object.getOwnPropertyNames,1475getPrototypeOf: Object.getPrototypeOf,1476isArray: Array.isArray,1477isES5: isES5,1478propertyIsWritable: function(obj, prop) {1479var descriptor = Object.getOwnPropertyDescriptor(obj, prop);1480return !!(!descriptor || descriptor.writable || descriptor.set);1481}1482};1483} else {1484var has = {}.hasOwnProperty;1485var str = {}.toString;1486var proto = {}.constructor.prototype;14871488var ObjectKeys = function (o) {1489var ret = [];1490for (var key in o) {1491if (has.call(o, key)) {1492ret.push(key);1493}1494}1495return ret;1496};14971498var ObjectGetDescriptor = function(o, key) {1499return {value: o[key]};1500};15011502var ObjectDefineProperty = function (o, key, desc) {1503o[key] = desc.value;1504return o;1505};15061507var ObjectFreeze = function (obj) {1508return obj;1509};15101511var ObjectGetPrototypeOf = function (obj) {1512try {1513return Object(obj).constructor.prototype;1514}1515catch (e) {1516return proto;1517}1518};15191520var ArrayIsArray = function (obj) {1521try {1522return str.call(obj) === "[object Array]";1523}1524catch(e) {1525return false;1526}1527};15281529module.exports = {1530isArray: ArrayIsArray,1531keys: ObjectKeys,1532names: ObjectKeys,1533defineProperty: ObjectDefineProperty,1534getDescriptor: ObjectGetDescriptor,1535freeze: ObjectFreeze,1536getPrototypeOf: ObjectGetPrototypeOf,1537isES5: isES5,1538propertyIsWritable: function() {1539return true;1540}1541};1542}15431544},{}],15:[function(_dereq_,module,exports){1545"use strict";1546module.exports = function(Promise, INTERNAL) {1547var PromiseMap = Promise.map;15481549Promise.prototype.filter = function (fn, options) {1550return PromiseMap(this, fn, options, INTERNAL);1551};15521553Promise.filter = function (promises, fn, options) {1554return PromiseMap(promises, fn, options, INTERNAL);1555};1556};15571558},{}],16:[function(_dereq_,module,exports){1559"use strict";1560module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {1561var util = _dereq_("./util.js");1562var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;1563var isPrimitive = util.isPrimitive;1564var thrower = util.thrower;15651566function returnThis() {1567return this;1568}1569function throwThis() {1570throw this;1571}1572function return$(r) {1573return function() {1574return r;1575};1576}1577function throw$(r) {1578return function() {1579throw r;1580};1581}1582function promisedFinally(ret, reasonOrValue, isFulfilled) {1583var then;1584if (wrapsPrimitiveReceiver && isPrimitive(reasonOrValue)) {1585then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);1586} else {1587then = isFulfilled ? returnThis : throwThis;1588}1589return ret._then(then, thrower, undefined, reasonOrValue, undefined);1590}15911592function finallyHandler(reasonOrValue) {1593var promise = this.promise;1594var handler = this.handler;15951596var ret = promise._isBound()1597? handler.call(promise._boundTo)1598: handler();15991600if (ret !== undefined) {1601var maybePromise = tryConvertToPromise(ret, promise);1602if (maybePromise instanceof Promise) {1603maybePromise = maybePromise._target();1604return promisedFinally(maybePromise, reasonOrValue,1605promise.isFulfilled());1606}1607}16081609if (promise.isRejected()) {1610NEXT_FILTER.e = reasonOrValue;1611return NEXT_FILTER;1612} else {1613return reasonOrValue;1614}1615}16161617function tapHandler(value) {1618var promise = this.promise;1619var handler = this.handler;16201621var ret = promise._isBound()1622? handler.call(promise._boundTo, value)1623: handler(value);16241625if (ret !== undefined) {1626var maybePromise = tryConvertToPromise(ret, promise);1627if (maybePromise instanceof Promise) {1628maybePromise = maybePromise._target();1629return promisedFinally(maybePromise, value, true);1630}1631}1632return value;1633}16341635Promise.prototype._passThroughHandler = function (handler, isFinally) {1636if (typeof handler !== "function") return this.then();16371638var promiseAndHandler = {1639promise: this,1640handler: handler1641};16421643return this._then(1644isFinally ? finallyHandler : tapHandler,1645isFinally ? finallyHandler : undefined, undefined,1646promiseAndHandler, undefined);1647};16481649Promise.prototype.lastly =1650Promise.prototype["finally"] = function (handler) {1651return this._passThroughHandler(handler, true);1652};16531654Promise.prototype.tap = function (handler) {1655return this._passThroughHandler(handler, false);1656};1657};16581659},{"./util.js":38}],17:[function(_dereq_,module,exports){1660"use strict";1661module.exports = function(Promise,1662apiRejection,1663INTERNAL,1664tryConvertToPromise) {1665var errors = _dereq_("./errors.js");1666var TypeError = errors.TypeError;1667var util = _dereq_("./util.js");1668var errorObj = util.errorObj;1669var tryCatch = util.tryCatch;1670var yieldHandlers = [];16711672function promiseFromYieldHandler(value, yieldHandlers, traceParent) {1673for (var i = 0; i < yieldHandlers.length; ++i) {1674traceParent._pushContext();1675var result = tryCatch(yieldHandlers[i])(value);1676traceParent._popContext();1677if (result === errorObj) {1678traceParent._pushContext();1679var ret = Promise.reject(errorObj.e);1680traceParent._popContext();1681return ret;1682}1683var maybePromise = tryConvertToPromise(result, traceParent);1684if (maybePromise instanceof Promise) return maybePromise;1685}1686return null;1687}16881689function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {1690var promise = this._promise = new Promise(INTERNAL);1691promise._captureStackTrace();1692this._stack = stack;1693this._generatorFunction = generatorFunction;1694this._receiver = receiver;1695this._generator = undefined;1696this._yieldHandlers = typeof yieldHandler === "function"1697? [yieldHandler].concat(yieldHandlers)1698: yieldHandlers;1699}17001701PromiseSpawn.prototype.promise = function () {1702return this._promise;1703};17041705PromiseSpawn.prototype._run = function () {1706this._generator = this._generatorFunction.call(this._receiver);1707this._receiver =1708this._generatorFunction = undefined;1709this._next(undefined);1710};17111712PromiseSpawn.prototype._continue = function (result) {1713if (result === errorObj) {1714return this._promise._rejectCallback(result.e, false, true);1715}17161717var value = result.value;1718if (result.done === true) {1719this._promise._resolveCallback(value);1720} else {1721var maybePromise = tryConvertToPromise(value, this._promise);1722if (!(maybePromise instanceof Promise)) {1723maybePromise =1724promiseFromYieldHandler(maybePromise,1725this._yieldHandlers,1726this._promise);1727if (maybePromise === null) {1728this._throw(1729new TypeError(1730"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) +1731"From coroutine:\u000a" +1732this._stack.split("\n").slice(1, -7).join("\n")1733)1734);1735return;1736}1737}1738maybePromise._then(1739this._next,1740this._throw,1741undefined,1742this,1743null1744);1745}1746};17471748PromiseSpawn.prototype._throw = function (reason) {1749this._promise._attachExtraTrace(reason);1750this._promise._pushContext();1751var result = tryCatch(this._generator["throw"])1752.call(this._generator, reason);1753this._promise._popContext();1754this._continue(result);1755};17561757PromiseSpawn.prototype._next = function (value) {1758this._promise._pushContext();1759var result = tryCatch(this._generator.next).call(this._generator, value);1760this._promise._popContext();1761this._continue(result);1762};17631764Promise.coroutine = function (generatorFunction, options) {1765if (typeof generatorFunction !== "function") {1766throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a");1767}1768var yieldHandler = Object(options).yieldHandler;1769var PromiseSpawn$ = PromiseSpawn;1770var stack = new Error().stack;1771return function () {1772var generator = generatorFunction.apply(this, arguments);1773var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,1774stack);1775spawn._generator = generator;1776spawn._next(undefined);1777return spawn.promise();1778};1779};17801781Promise.coroutine.addYieldHandler = function(fn) {1782if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");1783yieldHandlers.push(fn);1784};17851786Promise.spawn = function (generatorFunction) {1787if (typeof generatorFunction !== "function") {1788return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a");1789}1790var spawn = new PromiseSpawn(generatorFunction, this);1791var ret = spawn.promise();1792spawn._run(Promise.spawn);1793return ret;1794};1795};17961797},{"./errors.js":13,"./util.js":38}],18:[function(_dereq_,module,exports){1798"use strict";1799module.exports =1800function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {1801var util = _dereq_("./util.js");1802var canEvaluate = util.canEvaluate;1803var tryCatch = util.tryCatch;1804var errorObj = util.errorObj;1805var reject;18061807if (!true) {1808if (canEvaluate) {1809var thenCallback = function(i) {1810return new Function("value", "holder", " \n\1811'use strict'; \n\1812holder.pIndex = value; \n\1813holder.checkFulfillment(this); \n\1814".replace(/Index/g, i));1815};18161817var caller = function(count) {1818var values = [];1819for (var i = 1; i <= count; ++i) values.push("holder.p" + i);1820return new Function("holder", " \n\1821'use strict'; \n\1822var callback = holder.fn; \n\1823return callback(values); \n\1824".replace(/values/g, values.join(", ")));1825};1826var thenCallbacks = [];1827var callers = [undefined];1828for (var i = 1; i <= 5; ++i) {1829thenCallbacks.push(thenCallback(i));1830callers.push(caller(i));1831}18321833var Holder = function(total, fn) {1834this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;1835this.fn = fn;1836this.total = total;1837this.now = 0;1838};18391840Holder.prototype.callers = callers;1841Holder.prototype.checkFulfillment = function(promise) {1842var now = this.now;1843now++;1844var total = this.total;1845if (now >= total) {1846var handler = this.callers[total];1847promise._pushContext();1848var ret = tryCatch(handler)(this);1849promise._popContext();1850if (ret === errorObj) {1851promise._rejectCallback(ret.e, false, true);1852} else {1853promise._resolveCallback(ret);1854}1855} else {1856this.now = now;1857}1858};18591860var reject = function (reason) {1861this._reject(reason);1862};1863}1864}18651866Promise.join = function () {1867var last = arguments.length - 1;1868var fn;1869if (last > 0 && typeof arguments[last] === "function") {1870fn = arguments[last];1871if (!true) {1872if (last < 6 && canEvaluate) {1873var ret = new Promise(INTERNAL);1874ret._captureStackTrace();1875var holder = new Holder(last, fn);1876var callbacks = thenCallbacks;1877for (var i = 0; i < last; ++i) {1878var maybePromise = tryConvertToPromise(arguments[i], ret);1879if (maybePromise instanceof Promise) {1880maybePromise = maybePromise._target();1881if (maybePromise._isPending()) {1882maybePromise._then(callbacks[i], reject,1883undefined, ret, holder);1884} else if (maybePromise._isFulfilled()) {1885callbacks[i].call(ret,1886maybePromise._value(), holder);1887} else {1888ret._reject(maybePromise._reason());1889}1890} else {1891callbacks[i].call(ret, maybePromise, holder);1892}1893}1894return ret;1895}1896}1897}1898var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}1899if (fn) args.pop();1900var ret = new PromiseArray(args).promise();1901return fn !== undefined ? ret.spread(fn) : ret;1902};19031904};19051906},{"./util.js":38}],19:[function(_dereq_,module,exports){1907"use strict";1908module.exports = function(Promise,1909PromiseArray,1910apiRejection,1911tryConvertToPromise,1912INTERNAL) {1913var async = _dereq_("./async.js");1914var util = _dereq_("./util.js");1915var tryCatch = util.tryCatch;1916var errorObj = util.errorObj;1917var PENDING = {};1918var EMPTY_ARRAY = [];19191920function MappingPromiseArray(promises, fn, limit, _filter) {1921this.constructor$(promises);1922this._promise._captureStackTrace();1923this._callback = fn;1924this._preservedValues = _filter === INTERNAL1925? new Array(this.length())1926: null;1927this._limit = limit;1928this._inFlight = 0;1929this._queue = limit >= 1 ? [] : EMPTY_ARRAY;1930async.invoke(init, this, undefined);1931}1932util.inherits(MappingPromiseArray, PromiseArray);1933function init() {this._init$(undefined, -2);}19341935MappingPromiseArray.prototype._init = function () {};19361937MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {1938var values = this._values;1939var length = this.length();1940var preservedValues = this._preservedValues;1941var limit = this._limit;1942if (values[index] === PENDING) {1943values[index] = value;1944if (limit >= 1) {1945this._inFlight--;1946this._drainQueue();1947if (this._isResolved()) return;1948}1949} else {1950if (limit >= 1 && this._inFlight >= limit) {1951values[index] = value;1952this._queue.push(index);1953return;1954}1955if (preservedValues !== null) preservedValues[index] = value;19561957var callback = this._callback;1958var receiver = this._promise._boundTo;1959this._promise._pushContext();1960var ret = tryCatch(callback).call(receiver, value, index, length);1961this._promise._popContext();1962if (ret === errorObj) return this._reject(ret.e);19631964var maybePromise = tryConvertToPromise(ret, this._promise);1965if (maybePromise instanceof Promise) {1966maybePromise = maybePromise._target();1967if (maybePromise._isPending()) {1968if (limit >= 1) this._inFlight++;1969values[index] = PENDING;1970return maybePromise._proxyPromiseArray(this, index);1971} else if (maybePromise._isFulfilled()) {1972ret = maybePromise._value();1973} else {1974return this._reject(maybePromise._reason());1975}1976}1977values[index] = ret;1978}1979var totalResolved = ++this._totalResolved;1980if (totalResolved >= length) {1981if (preservedValues !== null) {1982this._filter(values, preservedValues);1983} else {1984this._resolve(values);1985}19861987}1988};19891990MappingPromiseArray.prototype._drainQueue = function () {1991var queue = this._queue;1992var limit = this._limit;1993var values = this._values;1994while (queue.length > 0 && this._inFlight < limit) {1995if (this._isResolved()) return;1996var index = queue.pop();1997this._promiseFulfilled(values[index], index);1998}1999};20002001MappingPromiseArray.prototype._filter = function (booleans, values) {2002var len = values.length;2003var ret = new Array(len);2004var j = 0;2005for (var i = 0; i < len; ++i) {2006if (booleans[i]) ret[j++] = values[i];2007}2008ret.length = j;2009this._resolve(ret);2010};20112012MappingPromiseArray.prototype.preservedValues = function () {2013return this._preservedValues;2014};20152016function map(promises, fn, options, _filter) {2017var limit = typeof options === "object" && options !== null2018? options.concurrency2019: 0;2020limit = typeof limit === "number" &&2021isFinite(limit) && limit >= 1 ? limit : 0;2022return new MappingPromiseArray(promises, fn, limit, _filter);2023}20242025Promise.prototype.map = function (fn, options) {2026if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");20272028return map(this, fn, options, null).promise();2029};20302031Promise.map = function (promises, fn, options, _filter) {2032if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");2033return map(promises, fn, options, _filter).promise();2034};203520362037};20382039},{"./async.js":2,"./util.js":38}],20:[function(_dereq_,module,exports){2040"use strict";2041module.exports =2042function(Promise, INTERNAL, tryConvertToPromise, apiRejection) {2043var util = _dereq_("./util.js");2044var tryCatch = util.tryCatch;20452046Promise.method = function (fn) {2047if (typeof fn !== "function") {2048throw new Promise.TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");2049}2050return function () {2051var ret = new Promise(INTERNAL);2052ret._captureStackTrace();2053ret._pushContext();2054var value = tryCatch(fn).apply(this, arguments);2055ret._popContext();2056ret._resolveFromSyncValue(value);2057return ret;2058};2059};20602061Promise.attempt = Promise["try"] = function (fn, args, ctx) {2062if (typeof fn !== "function") {2063return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");2064}2065var ret = new Promise(INTERNAL);2066ret._captureStackTrace();2067ret._pushContext();2068var value = util.isArray(args)2069? tryCatch(fn).apply(ctx, args)2070: tryCatch(fn).call(ctx, args);2071ret._popContext();2072ret._resolveFromSyncValue(value);2073return ret;2074};20752076Promise.prototype._resolveFromSyncValue = function (value) {2077if (value === util.errorObj) {2078this._rejectCallback(value.e, false, true);2079} else {2080this._resolveCallback(value, true);2081}2082};2083};20842085},{"./util.js":38}],21:[function(_dereq_,module,exports){2086"use strict";2087module.exports = function(Promise) {2088var util = _dereq_("./util.js");2089var async = _dereq_("./async.js");2090var tryCatch = util.tryCatch;2091var errorObj = util.errorObj;20922093function spreadAdapter(val, nodeback) {2094var promise = this;2095if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);2096var ret = tryCatch(nodeback).apply(promise._boundTo, [null].concat(val));2097if (ret === errorObj) {2098async.throwLater(ret.e);2099}2100}21012102function successAdapter(val, nodeback) {2103var promise = this;2104var receiver = promise._boundTo;2105var ret = val === undefined2106? tryCatch(nodeback).call(receiver, null)2107: tryCatch(nodeback).call(receiver, null, val);2108if (ret === errorObj) {2109async.throwLater(ret.e);2110}2111}2112function errorAdapter(reason, nodeback) {2113var promise = this;2114if (!reason) {2115var target = promise._target();2116var newReason = target._getCarriedStackTrace();2117newReason.cause = reason;2118reason = newReason;2119}2120var ret = tryCatch(nodeback).call(promise._boundTo, reason);2121if (ret === errorObj) {2122async.throwLater(ret.e);2123}2124}21252126Promise.prototype.asCallback =2127Promise.prototype.nodeify = function (nodeback, options) {2128if (typeof nodeback == "function") {2129var adapter = successAdapter;2130if (options !== undefined && Object(options).spread) {2131adapter = spreadAdapter;2132}2133this._then(2134adapter,2135errorAdapter,2136undefined,2137this,2138nodeback2139);2140}2141return this;2142};2143};21442145},{"./async.js":2,"./util.js":38}],22:[function(_dereq_,module,exports){2146"use strict";2147module.exports = function(Promise, PromiseArray) {2148var util = _dereq_("./util.js");2149var async = _dereq_("./async.js");2150var tryCatch = util.tryCatch;2151var errorObj = util.errorObj;21522153Promise.prototype.progressed = function (handler) {2154return this._then(undefined, undefined, handler, undefined, undefined);2155};21562157Promise.prototype._progress = function (progressValue) {2158if (this._isFollowingOrFulfilledOrRejected()) return;2159this._target()._progressUnchecked(progressValue);21602161};21622163Promise.prototype._progressHandlerAt = function (index) {2164return index === 02165? this._progressHandler02166: this[(index << 2) + index - 5 + 2];2167};21682169Promise.prototype._doProgressWith = function (progression) {2170var progressValue = progression.value;2171var handler = progression.handler;2172var promise = progression.promise;2173var receiver = progression.receiver;21742175var ret = tryCatch(handler).call(receiver, progressValue);2176if (ret === errorObj) {2177if (ret.e != null &&2178ret.e.name !== "StopProgressPropagation") {2179var trace = util.canAttachTrace(ret.e)2180? ret.e : new Error(util.toString(ret.e));2181promise._attachExtraTrace(trace);2182promise._progress(ret.e);2183}2184} else if (ret instanceof Promise) {2185ret._then(promise._progress, null, null, promise, undefined);2186} else {2187promise._progress(ret);2188}2189};219021912192Promise.prototype._progressUnchecked = function (progressValue) {2193var len = this._length();2194var progress = this._progress;2195for (var i = 0; i < len; i++) {2196var handler = this._progressHandlerAt(i);2197var promise = this._promiseAt(i);2198if (!(promise instanceof Promise)) {2199var receiver = this._receiverAt(i);2200if (typeof handler === "function") {2201handler.call(receiver, progressValue, promise);2202} else if (receiver instanceof PromiseArray &&2203!receiver._isResolved()) {2204receiver._promiseProgressed(progressValue, promise);2205}2206continue;2207}22082209if (typeof handler === "function") {2210async.invoke(this._doProgressWith, this, {2211handler: handler,2212promise: promise,2213receiver: this._receiverAt(i),2214value: progressValue2215});2216} else {2217async.invoke(progress, promise, progressValue);2218}2219}2220};2221};22222223},{"./async.js":2,"./util.js":38}],23:[function(_dereq_,module,exports){2224"use strict";2225module.exports = function() {2226var makeSelfResolutionError = function () {2227return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/LhFpo0\u000a");2228};2229var reflect = function() {2230return new Promise.PromiseInspection(this._target());2231};2232var apiRejection = function(msg) {2233return Promise.reject(new TypeError(msg));2234};2235var util = _dereq_("./util.js");2236var async = _dereq_("./async.js");2237var errors = _dereq_("./errors.js");2238var TypeError = Promise.TypeError = errors.TypeError;2239Promise.RangeError = errors.RangeError;2240Promise.CancellationError = errors.CancellationError;2241Promise.TimeoutError = errors.TimeoutError;2242Promise.OperationalError = errors.OperationalError;2243Promise.RejectionError = errors.OperationalError;2244Promise.AggregateError = errors.AggregateError;2245var INTERNAL = function(){};2246var APPLY = {};2247var NEXT_FILTER = {e: null};2248var tryConvertToPromise = _dereq_("./thenables.js")(Promise, INTERNAL);2249var PromiseArray =2250_dereq_("./promise_array.js")(Promise, INTERNAL,2251tryConvertToPromise, apiRejection);2252var CapturedTrace = _dereq_("./captured_trace.js")();2253var isDebugging = _dereq_("./debuggability.js")(Promise, CapturedTrace);2254/*jshint unused:false*/2255var createContext =2256_dereq_("./context.js")(Promise, CapturedTrace, isDebugging);2257var CatchFilter = _dereq_("./catch_filter.js")(NEXT_FILTER);2258var PromiseResolver = _dereq_("./promise_resolver.js");2259var nodebackForPromise = PromiseResolver._nodebackForPromise;2260var errorObj = util.errorObj;2261var tryCatch = util.tryCatch;2262function Promise(resolver) {2263if (typeof resolver !== "function") {2264throw new TypeError("the promise constructor requires a resolver function\u000a\u000a See http://goo.gl/EC22Yn\u000a");2265}2266if (this.constructor !== Promise) {2267throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/KsIlge\u000a");2268}2269this._bitField = 0;2270this._fulfillmentHandler0 = undefined;2271this._rejectionHandler0 = undefined;2272this._progressHandler0 = undefined;2273this._promise0 = undefined;2274this._receiver0 = undefined;2275this._settledValue = undefined;2276if (resolver !== INTERNAL) this._resolveFromResolver(resolver);2277}22782279Promise.prototype.toString = function () {2280return "[object Promise]";2281};22822283Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {2284var len = arguments.length;2285if (len > 1) {2286var catchInstances = new Array(len - 1),2287j = 0, i;2288for (i = 0; i < len - 1; ++i) {2289var item = arguments[i];2290if (typeof item === "function") {2291catchInstances[j++] = item;2292} else {2293return Promise.reject(2294new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a"));2295}2296}2297catchInstances.length = j;2298fn = arguments[i];2299var catchFilter = new CatchFilter(catchInstances, fn, this);2300return this._then(undefined, catchFilter.doFilter, undefined,2301catchFilter, undefined);2302}2303return this._then(undefined, fn, undefined, undefined, undefined);2304};23052306Promise.prototype.reflect = function () {2307return this._then(reflect, reflect, undefined, this, undefined);2308};23092310Promise.prototype.then = function (didFulfill, didReject, didProgress) {2311if (isDebugging() && arguments.length > 0 &&2312typeof didFulfill !== "function" &&2313typeof didReject !== "function") {2314var msg = ".then() only accepts functions but was passed: " +2315util.classString(didFulfill);2316if (arguments.length > 1) {2317msg += ", " + util.classString(didReject);2318}2319this._warn(msg);2320}2321return this._then(didFulfill, didReject, didProgress,2322undefined, undefined);2323};23242325Promise.prototype.done = function (didFulfill, didReject, didProgress) {2326var promise = this._then(didFulfill, didReject, didProgress,2327undefined, undefined);2328promise._setIsFinal();2329};23302331Promise.prototype.spread = function (didFulfill, didReject) {2332return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);2333};23342335Promise.prototype.isCancellable = function () {2336return !this.isResolved() &&2337this._cancellable();2338};23392340Promise.prototype.toJSON = function () {2341var ret = {2342isFulfilled: false,2343isRejected: false,2344fulfillmentValue: undefined,2345rejectionReason: undefined2346};2347if (this.isFulfilled()) {2348ret.fulfillmentValue = this.value();2349ret.isFulfilled = true;2350} else if (this.isRejected()) {2351ret.rejectionReason = this.reason();2352ret.isRejected = true;2353}2354return ret;2355};23562357Promise.prototype.all = function () {2358return new PromiseArray(this).promise();2359};23602361Promise.prototype.error = function (fn) {2362return this.caught(util.originatesFromRejection, fn);2363};23642365Promise.is = function (val) {2366return val instanceof Promise;2367};23682369Promise.fromNode = function(fn) {2370var ret = new Promise(INTERNAL);2371var result = tryCatch(fn)(nodebackForPromise(ret));2372if (result === errorObj) {2373ret._rejectCallback(result.e, true, true);2374}2375return ret;2376};23772378Promise.all = function (promises) {2379return new PromiseArray(promises).promise();2380};23812382Promise.defer = Promise.pending = function () {2383var promise = new Promise(INTERNAL);2384return new PromiseResolver(promise);2385};23862387Promise.cast = function (obj) {2388var ret = tryConvertToPromise(obj);2389if (!(ret instanceof Promise)) {2390var val = ret;2391ret = new Promise(INTERNAL);2392ret._fulfillUnchecked(val);2393}2394return ret;2395};23962397Promise.resolve = Promise.fulfilled = Promise.cast;23982399Promise.reject = Promise.rejected = function (reason) {2400var ret = new Promise(INTERNAL);2401ret._captureStackTrace();2402ret._rejectCallback(reason, true);2403return ret;2404};24052406Promise.setScheduler = function(fn) {2407if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");2408var prev = async._schedule;2409async._schedule = fn;2410return prev;2411};24122413Promise.prototype._then = function (2414didFulfill,2415didReject,2416didProgress,2417receiver,2418internalData2419) {2420var haveInternalData = internalData !== undefined;2421var ret = haveInternalData ? internalData : new Promise(INTERNAL);24222423if (!haveInternalData) {2424ret._propagateFrom(this, 4 | 1);2425ret._captureStackTrace();2426}24272428var target = this._target();2429if (target !== this) {2430if (receiver === undefined) receiver = this._boundTo;2431if (!haveInternalData) ret._setIsMigrated();2432}24332434var callbackIndex =2435target._addCallbacks(didFulfill, didReject, didProgress, ret, receiver);24362437if (target._isResolved() && !target._isSettlePromisesQueued()) {2438async.invoke(2439target._settlePromiseAtPostResolution, target, callbackIndex);2440}24412442return ret;2443};24442445Promise.prototype._settlePromiseAtPostResolution = function (index) {2446if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();2447this._settlePromiseAt(index);2448};24492450Promise.prototype._length = function () {2451return this._bitField & 131071;2452};24532454Promise.prototype._isFollowingOrFulfilledOrRejected = function () {2455return (this._bitField & 939524096) > 0;2456};24572458Promise.prototype._isFollowing = function () {2459return (this._bitField & 536870912) === 536870912;2460};24612462Promise.prototype._setLength = function (len) {2463this._bitField = (this._bitField & -131072) |2464(len & 131071);2465};24662467Promise.prototype._setFulfilled = function () {2468this._bitField = this._bitField | 268435456;2469};24702471Promise.prototype._setRejected = function () {2472this._bitField = this._bitField | 134217728;2473};24742475Promise.prototype._setFollowing = function () {2476this._bitField = this._bitField | 536870912;2477};24782479Promise.prototype._setIsFinal = function () {2480this._bitField = this._bitField | 33554432;2481};24822483Promise.prototype._isFinal = function () {2484return (this._bitField & 33554432) > 0;2485};24862487Promise.prototype._cancellable = function () {2488return (this._bitField & 67108864) > 0;2489};24902491Promise.prototype._setCancellable = function () {2492this._bitField = this._bitField | 67108864;2493};24942495Promise.prototype._unsetCancellable = function () {2496this._bitField = this._bitField & (~67108864);2497};24982499Promise.prototype._setIsMigrated = function () {2500this._bitField = this._bitField | 4194304;2501};25022503Promise.prototype._unsetIsMigrated = function () {2504this._bitField = this._bitField & (~4194304);2505};25062507Promise.prototype._isMigrated = function () {2508return (this._bitField & 4194304) > 0;2509};25102511Promise.prototype._receiverAt = function (index) {2512var ret = index === 02513? this._receiver02514: this[2515index * 5 - 5 + 4];2516if (ret === undefined && this._isBound()) {2517return this._boundTo;2518}2519return ret;2520};25212522Promise.prototype._promiseAt = function (index) {2523return index === 02524? this._promise02525: this[index * 5 - 5 + 3];2526};25272528Promise.prototype._fulfillmentHandlerAt = function (index) {2529return index === 02530? this._fulfillmentHandler02531: this[index * 5 - 5 + 0];2532};25332534Promise.prototype._rejectionHandlerAt = function (index) {2535return index === 02536? this._rejectionHandler02537: this[index * 5 - 5 + 1];2538};25392540Promise.prototype._migrateCallbacks = function (follower, index) {2541var fulfill = follower._fulfillmentHandlerAt(index);2542var reject = follower._rejectionHandlerAt(index);2543var progress = follower._progressHandlerAt(index);2544var promise = follower._promiseAt(index);2545var receiver = follower._receiverAt(index);2546if (promise instanceof Promise) promise._setIsMigrated();2547this._addCallbacks(fulfill, reject, progress, promise, receiver);2548};25492550Promise.prototype._addCallbacks = function (2551fulfill,2552reject,2553progress,2554promise,2555receiver2556) {2557var index = this._length();25582559if (index >= 131071 - 5) {2560index = 0;2561this._setLength(0);2562}25632564if (index === 0) {2565this._promise0 = promise;2566if (receiver !== undefined) this._receiver0 = receiver;2567if (typeof fulfill === "function" && !this._isCarryingStackTrace())2568this._fulfillmentHandler0 = fulfill;2569if (typeof reject === "function") this._rejectionHandler0 = reject;2570if (typeof progress === "function") this._progressHandler0 = progress;2571} else {2572var base = index * 5 - 5;2573this[base + 3] = promise;2574this[base + 4] = receiver;2575if (typeof fulfill === "function")2576this[base + 0] = fulfill;2577if (typeof reject === "function")2578this[base + 1] = reject;2579if (typeof progress === "function")2580this[base + 2] = progress;2581}2582this._setLength(index + 1);2583return index;2584};25852586Promise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) {2587var index = this._length();25882589if (index >= 131071 - 5) {2590index = 0;2591this._setLength(0);2592}2593if (index === 0) {2594this._promise0 = promiseSlotValue;2595this._receiver0 = receiver;2596} else {2597var base = index * 5 - 5;2598this[base + 3] = promiseSlotValue;2599this[base + 4] = receiver;2600}2601this._setLength(index + 1);2602};26032604Promise.prototype._proxyPromiseArray = function (promiseArray, index) {2605this._setProxyHandlers(promiseArray, index);2606};26072608Promise.prototype._resolveCallback = function(value, shouldBind) {2609if (this._isFollowingOrFulfilledOrRejected()) return;2610if (value === this)2611return this._rejectCallback(makeSelfResolutionError(), false, true);2612var maybePromise = tryConvertToPromise(value, this);2613if (!(maybePromise instanceof Promise)) return this._fulfill(value);26142615var propagationFlags = 1 | (shouldBind ? 4 : 0);2616this._propagateFrom(maybePromise, propagationFlags);2617var promise = maybePromise._target();2618if (promise._isPending()) {2619var len = this._length();2620for (var i = 0; i < len; ++i) {2621promise._migrateCallbacks(this, i);2622}2623this._setFollowing();2624this._setLength(0);2625this._setFollowee(promise);2626} else if (promise._isFulfilled()) {2627this._fulfillUnchecked(promise._value());2628} else {2629this._rejectUnchecked(promise._reason(),2630promise._getCarriedStackTrace());2631}2632};26332634Promise.prototype._rejectCallback =2635function(reason, synchronous, shouldNotMarkOriginatingFromRejection) {2636if (!shouldNotMarkOriginatingFromRejection) {2637util.markAsOriginatingFromRejection(reason);2638}2639var trace = util.ensureErrorObject(reason);2640var hasStack = trace === reason;2641this._attachExtraTrace(trace, synchronous ? hasStack : false);2642this._reject(reason, hasStack ? undefined : trace);2643};26442645Promise.prototype._resolveFromResolver = function (resolver) {2646var promise = this;2647this._captureStackTrace();2648this._pushContext();2649var synchronous = true;2650var r = tryCatch(resolver)(function(value) {2651if (promise === null) return;2652promise._resolveCallback(value);2653promise = null;2654}, function (reason) {2655if (promise === null) return;2656promise._rejectCallback(reason, synchronous);2657promise = null;2658});2659synchronous = false;2660this._popContext();26612662if (r !== undefined && r === errorObj && promise !== null) {2663promise._rejectCallback(r.e, true, true);2664promise = null;2665}2666};26672668Promise.prototype._settlePromiseFromHandler = function (2669handler, receiver, value, promise2670) {2671if (promise._isRejected()) return;2672promise._pushContext();2673var x;2674if (receiver === APPLY && !this._isRejected()) {2675x = tryCatch(handler).apply(this._boundTo, value);2676} else {2677x = tryCatch(handler).call(receiver, value);2678}2679promise._popContext();26802681if (x === errorObj || x === promise || x === NEXT_FILTER) {2682var err = x === promise ? makeSelfResolutionError() : x.e;2683promise._rejectCallback(err, false, true);2684} else {2685promise._resolveCallback(x);2686}2687};26882689Promise.prototype._target = function() {2690var ret = this;2691while (ret._isFollowing()) ret = ret._followee();2692return ret;2693};26942695Promise.prototype._followee = function() {2696return this._rejectionHandler0;2697};26982699Promise.prototype._setFollowee = function(promise) {2700this._rejectionHandler0 = promise;2701};27022703Promise.prototype._cleanValues = function () {2704if (this._cancellable()) {2705this._cancellationParent = undefined;2706}2707};27082709Promise.prototype._propagateFrom = function (parent, flags) {2710if ((flags & 1) > 0 && parent._cancellable()) {2711this._setCancellable();2712this._cancellationParent = parent;2713}2714if ((flags & 4) > 0 && parent._isBound()) {2715this._setBoundTo(parent._boundTo);2716}2717};27182719Promise.prototype._fulfill = function (value) {2720if (this._isFollowingOrFulfilledOrRejected()) return;2721this._fulfillUnchecked(value);2722};27232724Promise.prototype._reject = function (reason, carriedStackTrace) {2725if (this._isFollowingOrFulfilledOrRejected()) return;2726this._rejectUnchecked(reason, carriedStackTrace);2727};27282729Promise.prototype._settlePromiseAt = function (index) {2730var promise = this._promiseAt(index);2731var isPromise = promise instanceof Promise;27322733if (isPromise && promise._isMigrated()) {2734promise._unsetIsMigrated();2735return async.invoke(this._settlePromiseAt, this, index);2736}2737var handler = this._isFulfilled()2738? this._fulfillmentHandlerAt(index)2739: this._rejectionHandlerAt(index);27402741var carriedStackTrace =2742this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined;2743var value = this._settledValue;2744var receiver = this._receiverAt(index);274527462747this._clearCallbackDataAtIndex(index);27482749if (typeof handler === "function") {2750if (!isPromise) {2751handler.call(receiver, value, promise);2752} else {2753this._settlePromiseFromHandler(handler, receiver, value, promise);2754}2755} else if (receiver instanceof PromiseArray) {2756if (!receiver._isResolved()) {2757if (this._isFulfilled()) {2758receiver._promiseFulfilled(value, promise);2759}2760else {2761receiver._promiseRejected(value, promise);2762}2763}2764} else if (isPromise) {2765if (this._isFulfilled()) {2766promise._fulfill(value);2767} else {2768promise._reject(value, carriedStackTrace);2769}2770}27712772if (index >= 4 && (index & 31) === 4)2773async.invokeLater(this._setLength, this, 0);2774};27752776Promise.prototype._clearCallbackDataAtIndex = function(index) {2777if (index === 0) {2778if (!this._isCarryingStackTrace()) {2779this._fulfillmentHandler0 = undefined;2780}2781this._rejectionHandler0 =2782this._progressHandler0 =2783this._receiver0 =2784this._promise0 = undefined;2785} else {2786var base = index * 5 - 5;2787this[base + 3] =2788this[base + 4] =2789this[base + 0] =2790this[base + 1] =2791this[base + 2] = undefined;2792}2793};27942795Promise.prototype._isSettlePromisesQueued = function () {2796return (this._bitField &2797-1073741824) === -1073741824;2798};27992800Promise.prototype._setSettlePromisesQueued = function () {2801this._bitField = this._bitField | -1073741824;2802};28032804Promise.prototype._unsetSettlePromisesQueued = function () {2805this._bitField = this._bitField & (~-1073741824);2806};28072808Promise.prototype._queueSettlePromises = function() {2809async.settlePromises(this);2810this._setSettlePromisesQueued();2811};28122813Promise.prototype._fulfillUnchecked = function (value) {2814if (value === this) {2815var err = makeSelfResolutionError();2816this._attachExtraTrace(err);2817return this._rejectUnchecked(err, undefined);2818}2819this._setFulfilled();2820this._settledValue = value;2821this._cleanValues();28222823if (this._length() > 0) {2824this._queueSettlePromises();2825}2826};28272828Promise.prototype._rejectUncheckedCheckError = function (reason) {2829var trace = util.ensureErrorObject(reason);2830this._rejectUnchecked(reason, trace === reason ? undefined : trace);2831};28322833Promise.prototype._rejectUnchecked = function (reason, trace) {2834if (reason === this) {2835var err = makeSelfResolutionError();2836this._attachExtraTrace(err);2837return this._rejectUnchecked(err);2838}2839this._setRejected();2840this._settledValue = reason;2841this._cleanValues();28422843if (this._isFinal()) {2844async.throwLater(function(e) {2845if ("stack" in e) {2846async.invokeFirst(2847CapturedTrace.unhandledRejection, undefined, e);2848}2849throw e;2850}, trace === undefined ? reason : trace);2851return;2852}28532854if (trace !== undefined && trace !== reason) {2855this._setCarriedStackTrace(trace);2856}28572858if (this._length() > 0) {2859this._queueSettlePromises();2860} else {2861this._ensurePossibleRejectionHandled();2862}2863};28642865Promise.prototype._settlePromises = function () {2866this._unsetSettlePromisesQueued();2867var len = this._length();2868for (var i = 0; i < len; i++) {2869this._settlePromiseAt(i);2870}2871};28722873Promise._makeSelfResolutionError = makeSelfResolutionError;2874_dereq_("./progress.js")(Promise, PromiseArray);2875_dereq_("./method.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection);2876_dereq_("./bind.js")(Promise, INTERNAL, tryConvertToPromise);2877_dereq_("./finally.js")(Promise, NEXT_FILTER, tryConvertToPromise);2878_dereq_("./direct_resolve.js")(Promise);2879_dereq_("./synchronous_inspection.js")(Promise);2880_dereq_("./join.js")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);2881Promise.Promise = Promise;2882_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);2883_dereq_('./cancel.js')(Promise);2884_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext);2885_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise);2886_dereq_('./nodeify.js')(Promise);2887_dereq_('./call_get.js')(Promise);2888_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);2889_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);2890_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);2891_dereq_('./settle.js')(Promise, PromiseArray);2892_dereq_('./some.js')(Promise, PromiseArray, apiRejection);2893_dereq_('./promisify.js')(Promise, INTERNAL);2894_dereq_('./any.js')(Promise);2895_dereq_('./each.js')(Promise, INTERNAL);2896_dereq_('./timers.js')(Promise, INTERNAL);2897_dereq_('./filter.js')(Promise, INTERNAL);28982899util.toFastProperties(Promise);2900util.toFastProperties(Promise.prototype);2901function fillTypes(value) {2902var p = new Promise(INTERNAL);2903p._fulfillmentHandler0 = value;2904p._rejectionHandler0 = value;2905p._progressHandler0 = value;2906p._promise0 = value;2907p._receiver0 = value;2908p._settledValue = value;2909}2910// Complete slack tracking, opt out of field-type tracking and2911// stabilize map2912fillTypes({a: 1});2913fillTypes({b: 2});2914fillTypes({c: 3});2915fillTypes(1);2916fillTypes(function(){});2917fillTypes(undefined);2918fillTypes(false);2919fillTypes(new Promise(INTERNAL));2920CapturedTrace.setBounds(async.firstLineError, util.lastLineError);2921return Promise;29222923};29242925},{"./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){2926"use strict";2927module.exports = function(Promise, INTERNAL, tryConvertToPromise,2928apiRejection) {2929var util = _dereq_("./util.js");2930var isArray = util.isArray;29312932function toResolutionValue(val) {2933switch(val) {2934case -2: return [];2935case -3: return {};2936}2937}29382939function PromiseArray(values) {2940var promise = this._promise = new Promise(INTERNAL);2941var parent;2942if (values instanceof Promise) {2943parent = values;2944promise._propagateFrom(parent, 1 | 4);2945}2946this._values = values;2947this._length = 0;2948this._totalResolved = 0;2949this._init(undefined, -2);2950}2951PromiseArray.prototype.length = function () {2952return this._length;2953};29542955PromiseArray.prototype.promise = function () {2956return this._promise;2957};29582959PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {2960var values = tryConvertToPromise(this._values, this._promise);2961if (values instanceof Promise) {2962values = values._target();2963this._values = values;2964if (values._isFulfilled()) {2965values = values._value();2966if (!isArray(values)) {2967var err = new Promise.TypeError("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a");2968this.__hardReject__(err);2969return;2970}2971} else if (values._isPending()) {2972values._then(2973init,2974this._reject,2975undefined,2976this,2977resolveValueIfEmpty2978);2979return;2980} else {2981this._reject(values._reason());2982return;2983}2984} else if (!isArray(values)) {2985this._promise._reject(apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a")._reason());2986return;2987}29882989if (values.length === 0) {2990if (resolveValueIfEmpty === -5) {2991this._resolveEmptyArray();2992}2993else {2994this._resolve(toResolutionValue(resolveValueIfEmpty));2995}2996return;2997}2998var len = this.getActualLength(values.length);2999this._length = len;3000this._values = this.shouldCopyValues() ? new Array(len) : this._values;3001var promise = this._promise;3002for (var i = 0; i < len; ++i) {3003var isResolved = this._isResolved();3004var maybePromise = tryConvertToPromise(values[i], promise);3005if (maybePromise instanceof Promise) {3006maybePromise = maybePromise._target();3007if (isResolved) {3008maybePromise._unsetRejectionIsUnhandled();3009} else if (maybePromise._isPending()) {3010maybePromise._proxyPromiseArray(this, i);3011} else if (maybePromise._isFulfilled()) {3012this._promiseFulfilled(maybePromise._value(), i);3013} else {3014this._promiseRejected(maybePromise._reason(), i);3015}3016} else if (!isResolved) {3017this._promiseFulfilled(maybePromise, i);3018}3019}3020};30213022PromiseArray.prototype._isResolved = function () {3023return this._values === null;3024};30253026PromiseArray.prototype._resolve = function (value) {3027this._values = null;3028this._promise._fulfill(value);3029};30303031PromiseArray.prototype.__hardReject__ =3032PromiseArray.prototype._reject = function (reason) {3033this._values = null;3034this._promise._rejectCallback(reason, false, true);3035};30363037PromiseArray.prototype._promiseProgressed = function (progressValue, index) {3038this._promise._progress({3039index: index,3040value: progressValue3041});3042};304330443045PromiseArray.prototype._promiseFulfilled = function (value, index) {3046this._values[index] = value;3047var totalResolved = ++this._totalResolved;3048if (totalResolved >= this._length) {3049this._resolve(this._values);3050}3051};30523053PromiseArray.prototype._promiseRejected = function (reason, index) {3054this._totalResolved++;3055this._reject(reason);3056};30573058PromiseArray.prototype.shouldCopyValues = function () {3059return true;3060};30613062PromiseArray.prototype.getActualLength = function (len) {3063return len;3064};30653066return PromiseArray;3067};30683069},{"./util.js":38}],25:[function(_dereq_,module,exports){3070"use strict";3071var util = _dereq_("./util.js");3072var maybeWrapAsError = util.maybeWrapAsError;3073var errors = _dereq_("./errors.js");3074var TimeoutError = errors.TimeoutError;3075var OperationalError = errors.OperationalError;3076var haveGetters = util.haveGetters;3077var es5 = _dereq_("./es5.js");30783079function isUntypedError(obj) {3080return obj instanceof Error &&3081es5.getPrototypeOf(obj) === Error.prototype;3082}30833084var rErrorKey = /^(?:name|message|stack|cause)$/;3085function wrapAsOperationalError(obj) {3086var ret;3087if (isUntypedError(obj)) {3088ret = new OperationalError(obj);3089ret.name = obj.name;3090ret.message = obj.message;3091ret.stack = obj.stack;3092var keys = es5.keys(obj);3093for (var i = 0; i < keys.length; ++i) {3094var key = keys[i];3095if (!rErrorKey.test(key)) {3096ret[key] = obj[key];3097}3098}3099return ret;3100}3101util.markAsOriginatingFromRejection(obj);3102return obj;3103}31043105function nodebackForPromise(promise) {3106return function(err, value) {3107if (promise === null) return;31083109if (err) {3110var wrapped = wrapAsOperationalError(maybeWrapAsError(err));3111promise._attachExtraTrace(wrapped);3112promise._reject(wrapped);3113} else if (arguments.length > 2) {3114var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}3115promise._fulfill(args);3116} else {3117promise._fulfill(value);3118}31193120promise = null;3121};3122}312331243125var PromiseResolver;3126if (!haveGetters) {3127PromiseResolver = function (promise) {3128this.promise = promise;3129this.asCallback = nodebackForPromise(promise);3130this.callback = this.asCallback;3131};3132}3133else {3134PromiseResolver = function (promise) {3135this.promise = promise;3136};3137}3138if (haveGetters) {3139var prop = {3140get: function() {3141return nodebackForPromise(this.promise);3142}3143};3144es5.defineProperty(PromiseResolver.prototype, "asCallback", prop);3145es5.defineProperty(PromiseResolver.prototype, "callback", prop);3146}31473148PromiseResolver._nodebackForPromise = nodebackForPromise;31493150PromiseResolver.prototype.toString = function () {3151return "[object PromiseResolver]";3152};31533154PromiseResolver.prototype.resolve =3155PromiseResolver.prototype.fulfill = function (value) {3156if (!(this instanceof PromiseResolver)) {3157throw 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");3158}3159this.promise._resolveCallback(value);3160};31613162PromiseResolver.prototype.reject = function (reason) {3163if (!(this instanceof PromiseResolver)) {3164throw 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");3165}3166this.promise._rejectCallback(reason);3167};31683169PromiseResolver.prototype.progress = function (value) {3170if (!(this instanceof PromiseResolver)) {3171throw 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");3172}3173this.promise._progress(value);3174};31753176PromiseResolver.prototype.cancel = function (err) {3177this.promise.cancel(err);3178};31793180PromiseResolver.prototype.timeout = function () {3181this.reject(new TimeoutError("timeout"));3182};31833184PromiseResolver.prototype.isResolved = function () {3185return this.promise.isResolved();3186};31873188PromiseResolver.prototype.toJSON = function () {3189return this.promise.toJSON();3190};31913192module.exports = PromiseResolver;31933194},{"./errors.js":13,"./es5.js":14,"./util.js":38}],26:[function(_dereq_,module,exports){3195"use strict";3196module.exports = function(Promise, INTERNAL) {3197var THIS = {};3198var util = _dereq_("./util.js");3199var nodebackForPromise = _dereq_("./promise_resolver.js")3200._nodebackForPromise;3201var withAppended = util.withAppended;3202var maybeWrapAsError = util.maybeWrapAsError;3203var canEvaluate = util.canEvaluate;3204var TypeError = _dereq_("./errors").TypeError;3205var defaultSuffix = "Async";3206var defaultPromisified = {__isPromisified__: true};3207var noCopyPropsPattern =3208/^(?:length|name|arguments|caller|callee|prototype|__isPromisified__)$/;3209var defaultFilter = function(name, func) {3210return util.isIdentifier(name) &&3211name.charAt(0) !== "_" &&3212!util.isClass(func);3213};32143215function propsFilter(key) {3216return !noCopyPropsPattern.test(key);3217}32183219function isPromisified(fn) {3220try {3221return fn.__isPromisified__ === true;3222}3223catch (e) {3224return false;3225}3226}32273228function hasPromisified(obj, key, suffix) {3229var val = util.getDataPropertyOrDefault(obj, key + suffix,3230defaultPromisified);3231return val ? isPromisified(val) : false;3232}3233function checkValid(ret, suffix, suffixRegexp) {3234for (var i = 0; i < ret.length; i += 2) {3235var key = ret[i];3236if (suffixRegexp.test(key)) {3237var keyWithoutAsyncSuffix = key.replace(suffixRegexp, "");3238for (var j = 0; j < ret.length; j += 2) {3239if (ret[j] === keyWithoutAsyncSuffix) {3240throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/iWrZbw\u000a"3241.replace("%s", suffix));3242}3243}3244}3245}3246}32473248function promisifiableMethods(obj, suffix, suffixRegexp, filter) {3249var keys = util.inheritedDataKeys(obj);3250var ret = [];3251for (var i = 0; i < keys.length; ++i) {3252var key = keys[i];3253var value = obj[key];3254var passesDefaultFilter = filter === defaultFilter3255? true : defaultFilter(key, value, obj);3256if (typeof value === "function" &&3257!isPromisified(value) &&3258!hasPromisified(obj, key, suffix) &&3259filter(key, value, obj, passesDefaultFilter)) {3260ret.push(key, value);3261}3262}3263checkValid(ret, suffix, suffixRegexp);3264return ret;3265}32663267var escapeIdentRegex = function(str) {3268return str.replace(/([$])/, "\\$");3269};32703271var makeNodePromisifiedEval;3272if (!true) {3273var switchCaseArgumentOrder = function(likelyArgumentCount) {3274var ret = [likelyArgumentCount];3275var min = Math.max(0, likelyArgumentCount - 1 - 3);3276for(var i = likelyArgumentCount - 1; i >= min; --i) {3277ret.push(i);3278}3279for(var i = likelyArgumentCount + 1; i <= 3; ++i) {3280ret.push(i);3281}3282return ret;3283};32843285var argumentSequence = function(argumentCount) {3286return util.filledRange(argumentCount, "_arg", "");3287};32883289var parameterDeclaration = function(parameterCount) {3290return util.filledRange(3291Math.max(parameterCount, 3), "_arg", "");3292};32933294var parameterCount = function(fn) {3295if (typeof fn.length === "number") {3296return Math.max(Math.min(fn.length, 1023 + 1), 0);3297}3298return 0;3299};33003301makeNodePromisifiedEval =3302function(callback, receiver, originalName, fn) {3303var newParameterCount = Math.max(0, parameterCount(fn) - 1);3304var argumentOrder = switchCaseArgumentOrder(newParameterCount);3305var shouldProxyThis = typeof callback === "string" || receiver === THIS;33063307function generateCallForArgumentCount(count) {3308var args = argumentSequence(count).join(", ");3309var comma = count > 0 ? ", " : "";3310var ret;3311if (shouldProxyThis) {3312ret = "ret = callback.call(this, {{args}}, nodeback); break;\n";3313} else {3314ret = receiver === undefined3315? "ret = callback({{args}}, nodeback); break;\n"3316: "ret = callback.call(receiver, {{args}}, nodeback); break;\n";3317}3318return ret.replace("{{args}}", args).replace(", ", comma);3319}33203321function generateArgumentSwitchCase() {3322var ret = "";3323for (var i = 0; i < argumentOrder.length; ++i) {3324ret += "case " + argumentOrder[i] +":" +3325generateCallForArgumentCount(argumentOrder[i]);3326}33273328ret += " \n\3329default: \n\3330var args = new Array(len + 1); \n\3331var i = 0; \n\3332for (var i = 0; i < len; ++i) { \n\3333args[i] = arguments[i]; \n\3334} \n\3335args[i] = nodeback; \n\3336[CodeForCall] \n\3337break; \n\3338".replace("[CodeForCall]", (shouldProxyThis3339? "ret = callback.apply(this, args);\n"3340: "ret = callback.apply(receiver, args);\n"));3341return ret;3342}33433344var getFunctionCode = typeof callback === "string"3345? ("this != null ? this['"+callback+"'] : fn")3346: "fn";33473348return new Function("Promise",3349"fn",3350"receiver",3351"withAppended",3352"maybeWrapAsError",3353"nodebackForPromise",3354"tryCatch",3355"errorObj",3356"INTERNAL","'use strict'; \n\3357var ret = function (Parameters) { \n\3358'use strict'; \n\3359var len = arguments.length; \n\3360var promise = new Promise(INTERNAL); \n\3361promise._captureStackTrace(); \n\3362var nodeback = nodebackForPromise(promise); \n\3363var ret; \n\3364var callback = tryCatch([GetFunctionCode]); \n\3365switch(len) { \n\3366[CodeForSwitchCase] \n\3367} \n\3368if (ret === errorObj) { \n\3369promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\3370} \n\3371return promise; \n\3372}; \n\3373ret.__isPromisified__ = true; \n\3374return ret; \n\3375"3376.replace("Parameters", parameterDeclaration(newParameterCount))3377.replace("[CodeForSwitchCase]", generateArgumentSwitchCase())3378.replace("[GetFunctionCode]", getFunctionCode))(3379Promise,3380fn,3381receiver,3382withAppended,3383maybeWrapAsError,3384nodebackForPromise,3385util.tryCatch,3386util.errorObj,3387INTERNAL3388);3389};3390}33913392function makeNodePromisifiedClosure(callback, receiver, _, fn) {3393var defaultThis = (function() {return this;})();3394var method = callback;3395if (typeof method === "string") {3396callback = fn;3397}3398function promisified() {3399var _receiver = receiver;3400if (receiver === THIS) _receiver = this;3401var promise = new Promise(INTERNAL);3402promise._captureStackTrace();3403var cb = typeof method === "string" && this !== defaultThis3404? this[method] : callback;3405var fn = nodebackForPromise(promise);3406try {3407cb.apply(_receiver, withAppended(arguments, fn));3408} catch(e) {3409promise._rejectCallback(maybeWrapAsError(e), true, true);3410}3411return promise;3412}3413promisified.__isPromisified__ = true;3414return promisified;3415}34163417var makeNodePromisified = canEvaluate3418? makeNodePromisifiedEval3419: makeNodePromisifiedClosure;34203421function promisifyAll(obj, suffix, filter, promisifier) {3422var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$");3423var methods =3424promisifiableMethods(obj, suffix, suffixRegexp, filter);34253426for (var i = 0, len = methods.length; i < len; i+= 2) {3427var key = methods[i];3428var fn = methods[i+1];3429var promisifiedKey = key + suffix;3430obj[promisifiedKey] = promisifier === makeNodePromisified3431? makeNodePromisified(key, THIS, key, fn, suffix)3432: promisifier(fn, function() {3433return makeNodePromisified(key, THIS, key, fn, suffix);3434});3435}3436util.toFastProperties(obj);3437return obj;3438}34393440function promisify(callback, receiver) {3441return makeNodePromisified(callback, receiver, undefined, callback);3442}34433444Promise.promisify = function (fn, receiver) {3445if (typeof fn !== "function") {3446throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");3447}3448if (isPromisified(fn)) {3449return fn;3450}3451var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);3452util.copyDescriptors(fn, ret, propsFilter);3453return ret;3454};34553456Promise.promisifyAll = function (target, options) {3457if (typeof target !== "function" && typeof target !== "object") {3458throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/9ITlV0\u000a");3459}3460options = Object(options);3461var suffix = options.suffix;3462if (typeof suffix !== "string") suffix = defaultSuffix;3463var filter = options.filter;3464if (typeof filter !== "function") filter = defaultFilter;3465var promisifier = options.promisifier;3466if (typeof promisifier !== "function") promisifier = makeNodePromisified;34673468if (!util.isIdentifier(suffix)) {3469throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/8FZo5V\u000a");3470}34713472var keys = util.inheritedDataKeys(target);3473for (var i = 0; i < keys.length; ++i) {3474var value = target[keys[i]];3475if (keys[i] !== "constructor" &&3476util.isClass(value)) {3477promisifyAll(value.prototype, suffix, filter, promisifier);3478promisifyAll(value, suffix, filter, promisifier);3479}3480}34813482return promisifyAll(target, suffix, filter, promisifier);3483};3484};348534863487},{"./errors":13,"./promise_resolver.js":25,"./util.js":38}],27:[function(_dereq_,module,exports){3488"use strict";3489module.exports = function(3490Promise, PromiseArray, tryConvertToPromise, apiRejection) {3491var util = _dereq_("./util.js");3492var isObject = util.isObject;3493var es5 = _dereq_("./es5.js");34943495function PropertiesPromiseArray(obj) {3496var keys = es5.keys(obj);3497var len = keys.length;3498var values = new Array(len * 2);3499for (var i = 0; i < len; ++i) {3500var key = keys[i];3501values[i] = obj[key];3502values[i + len] = key;3503}3504this.constructor$(values);3505}3506util.inherits(PropertiesPromiseArray, PromiseArray);35073508PropertiesPromiseArray.prototype._init = function () {3509this._init$(undefined, -3) ;3510};35113512PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {3513this._values[index] = value;3514var totalResolved = ++this._totalResolved;3515if (totalResolved >= this._length) {3516var val = {};3517var keyOffset = this.length();3518for (var i = 0, len = this.length(); i < len; ++i) {3519val[this._values[i + keyOffset]] = this._values[i];3520}3521this._resolve(val);3522}3523};35243525PropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {3526this._promise._progress({3527key: this._values[index + this.length()],3528value: value3529});3530};35313532PropertiesPromiseArray.prototype.shouldCopyValues = function () {3533return false;3534};35353536PropertiesPromiseArray.prototype.getActualLength = function (len) {3537return len >> 1;3538};35393540function props(promises) {3541var ret;3542var castValue = tryConvertToPromise(promises);35433544if (!isObject(castValue)) {3545return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/OsFKC8\u000a");3546} else if (castValue instanceof Promise) {3547ret = castValue._then(3548Promise.props, undefined, undefined, undefined, undefined);3549} else {3550ret = new PropertiesPromiseArray(castValue).promise();3551}35523553if (castValue instanceof Promise) {3554ret._propagateFrom(castValue, 4);3555}3556return ret;3557}35583559Promise.prototype.props = function () {3560return props(this);3561};35623563Promise.props = function (promises) {3564return props(promises);3565};3566};35673568},{"./es5.js":14,"./util.js":38}],28:[function(_dereq_,module,exports){3569"use strict";3570function arrayMove(src, srcIndex, dst, dstIndex, len) {3571for (var j = 0; j < len; ++j) {3572dst[j + dstIndex] = src[j + srcIndex];3573src[j + srcIndex] = void 0;3574}3575}35763577function Queue(capacity) {3578this._capacity = capacity;3579this._length = 0;3580this._front = 0;3581}35823583Queue.prototype._willBeOverCapacity = function (size) {3584return this._capacity < size;3585};35863587Queue.prototype._pushOne = function (arg) {3588var length = this.length();3589this._checkCapacity(length + 1);3590var i = (this._front + length) & (this._capacity - 1);3591this[i] = arg;3592this._length = length + 1;3593};35943595Queue.prototype._unshiftOne = function(value) {3596var capacity = this._capacity;3597this._checkCapacity(this.length() + 1);3598var front = this._front;3599var i = (((( front - 1 ) &3600( capacity - 1) ) ^ capacity ) - capacity );3601this[i] = value;3602this._front = i;3603this._length = this.length() + 1;3604};36053606Queue.prototype.unshift = function(fn, receiver, arg) {3607this._unshiftOne(arg);3608this._unshiftOne(receiver);3609this._unshiftOne(fn);3610};36113612Queue.prototype.push = function (fn, receiver, arg) {3613var length = this.length() + 3;3614if (this._willBeOverCapacity(length)) {3615this._pushOne(fn);3616this._pushOne(receiver);3617this._pushOne(arg);3618return;3619}3620var j = this._front + length - 3;3621this._checkCapacity(length);3622var wrapMask = this._capacity - 1;3623this[(j + 0) & wrapMask] = fn;3624this[(j + 1) & wrapMask] = receiver;3625this[(j + 2) & wrapMask] = arg;3626this._length = length;3627};36283629Queue.prototype.shift = function () {3630var front = this._front,3631ret = this[front];36323633this[front] = undefined;3634this._front = (front + 1) & (this._capacity - 1);3635this._length--;3636return ret;3637};36383639Queue.prototype.length = function () {3640return this._length;3641};36423643Queue.prototype._checkCapacity = function (size) {3644if (this._capacity < size) {3645this._resizeTo(this._capacity << 1);3646}3647};36483649Queue.prototype._resizeTo = function (capacity) {3650var oldCapacity = this._capacity;3651this._capacity = capacity;3652var front = this._front;3653var length = this._length;3654var moveItemsCount = (front + length) & (oldCapacity - 1);3655arrayMove(this, 0, this, oldCapacity, moveItemsCount);3656};36573658module.exports = Queue;36593660},{}],29:[function(_dereq_,module,exports){3661"use strict";3662module.exports = function(3663Promise, INTERNAL, tryConvertToPromise, apiRejection) {3664var isArray = _dereq_("./util.js").isArray;36653666var raceLater = function (promise) {3667return promise.then(function(array) {3668return race(array, promise);3669});3670};36713672function race(promises, parent) {3673var maybePromise = tryConvertToPromise(promises);36743675if (maybePromise instanceof Promise) {3676return raceLater(maybePromise);3677} else if (!isArray(promises)) {3678return apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a");3679}36803681var ret = new Promise(INTERNAL);3682if (parent !== undefined) {3683ret._propagateFrom(parent, 4 | 1);3684}3685var fulfill = ret._fulfill;3686var reject = ret._reject;3687for (var i = 0, len = promises.length; i < len; ++i) {3688var val = promises[i];36893690if (val === undefined && !(i in promises)) {3691continue;3692}36933694Promise.cast(val)._then(fulfill, reject, undefined, ret, null);3695}3696return ret;3697}36983699Promise.race = function (promises) {3700return race(promises, undefined);3701};37023703Promise.prototype.race = function () {3704return race(this, undefined);3705};37063707};37083709},{"./util.js":38}],30:[function(_dereq_,module,exports){3710"use strict";3711module.exports = function(Promise,3712PromiseArray,3713apiRejection,3714tryConvertToPromise,3715INTERNAL) {3716var async = _dereq_("./async.js");3717var util = _dereq_("./util.js");3718var tryCatch = util.tryCatch;3719var errorObj = util.errorObj;3720function ReductionPromiseArray(promises, fn, accum, _each) {3721this.constructor$(promises);3722this._promise._captureStackTrace();3723this._preservedValues = _each === INTERNAL ? [] : null;3724this._zerothIsAccum = (accum === undefined);3725this._gotAccum = false;3726this._reducingIndex = (this._zerothIsAccum ? 1 : 0);3727this._valuesPhase = undefined;3728var maybePromise = tryConvertToPromise(accum, this._promise);3729var rejected = false;3730var isPromise = maybePromise instanceof Promise;3731if (isPromise) {3732maybePromise = maybePromise._target();3733if (maybePromise._isPending()) {3734maybePromise._proxyPromiseArray(this, -1);3735} else if (maybePromise._isFulfilled()) {3736accum = maybePromise._value();3737this._gotAccum = true;3738} else {3739this._reject(maybePromise._reason());3740rejected = true;3741}3742}3743if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true;3744this._callback = fn;3745this._accum = accum;3746if (!rejected) async.invoke(init, this, undefined);3747}3748function init() {3749this._init$(undefined, -5);3750}3751util.inherits(ReductionPromiseArray, PromiseArray);37523753ReductionPromiseArray.prototype._init = function () {};37543755ReductionPromiseArray.prototype._resolveEmptyArray = function () {3756if (this._gotAccum || this._zerothIsAccum) {3757this._resolve(this._preservedValues !== null3758? [] : this._accum);3759}3760};37613762ReductionPromiseArray.prototype._promiseFulfilled = function (value, index) {3763var values = this._values;3764values[index] = value;3765var length = this.length();3766var preservedValues = this._preservedValues;3767var isEach = preservedValues !== null;3768var gotAccum = this._gotAccum;3769var valuesPhase = this._valuesPhase;3770var valuesPhaseIndex;3771if (!valuesPhase) {3772valuesPhase = this._valuesPhase = new Array(length);3773for (valuesPhaseIndex=0; valuesPhaseIndex<length; ++valuesPhaseIndex) {3774valuesPhase[valuesPhaseIndex] = 0;3775}3776}3777valuesPhaseIndex = valuesPhase[index];37783779if (index === 0 && this._zerothIsAccum) {3780this._accum = value;3781this._gotAccum = gotAccum = true;3782valuesPhase[index] = ((valuesPhaseIndex === 0)3783? 1 : 2);3784} else if (index === -1) {3785this._accum = value;3786this._gotAccum = gotAccum = true;3787} else {3788if (valuesPhaseIndex === 0) {3789valuesPhase[index] = 1;3790} else {3791valuesPhase[index] = 2;3792this._accum = value;3793}3794}3795if (!gotAccum) return;37963797var callback = this._callback;3798var receiver = this._promise._boundTo;3799var ret;38003801for (var i = this._reducingIndex; i < length; ++i) {3802valuesPhaseIndex = valuesPhase[i];3803if (valuesPhaseIndex === 2) {3804this._reducingIndex = i + 1;3805continue;3806}3807if (valuesPhaseIndex !== 1) return;3808value = values[i];3809this._promise._pushContext();3810if (isEach) {3811preservedValues.push(value);3812ret = tryCatch(callback).call(receiver, value, i, length);3813}3814else {3815ret = tryCatch(callback)3816.call(receiver, this._accum, value, i, length);3817}3818this._promise._popContext();38193820if (ret === errorObj) return this._reject(ret.e);38213822var maybePromise = tryConvertToPromise(ret, this._promise);3823if (maybePromise instanceof Promise) {3824maybePromise = maybePromise._target();3825if (maybePromise._isPending()) {3826valuesPhase[i] = 4;3827return maybePromise._proxyPromiseArray(this, i);3828} else if (maybePromise._isFulfilled()) {3829ret = maybePromise._value();3830} else {3831return this._reject(maybePromise._reason());3832}3833}38343835this._reducingIndex = i + 1;3836this._accum = ret;3837}38383839this._resolve(isEach ? preservedValues : this._accum);3840};38413842function reduce(promises, fn, initialValue, _each) {3843if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");3844var array = new ReductionPromiseArray(promises, fn, initialValue, _each);3845return array.promise();3846}38473848Promise.prototype.reduce = function (fn, initialValue) {3849return reduce(this, fn, initialValue, null);3850};38513852Promise.reduce = function (promises, fn, initialValue, _each) {3853return reduce(promises, fn, initialValue, _each);3854};3855};38563857},{"./async.js":2,"./util.js":38}],31:[function(_dereq_,module,exports){3858"use strict";3859var schedule;3860var util = _dereq_("./util");3861var noAsyncScheduler = function() {3862throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a");3863};3864if (util.isNode && typeof MutationObserver === "undefined") {3865var GlobalSetImmediate = global.setImmediate;3866var ProcessNextTick = process.nextTick;3867schedule = util.isRecentNode3868? function(fn) { GlobalSetImmediate.call(global, fn); }3869: function(fn) { ProcessNextTick.call(process, fn); };3870} else if (typeof MutationObserver !== "undefined") {3871schedule = function(fn) {3872var div = document.createElement("div");3873var observer = new MutationObserver(fn);3874observer.observe(div, {attributes: true});3875return function() { div.classList.toggle("foo"); };3876};3877schedule.isStatic = true;3878} else if (typeof setImmediate !== "undefined") {3879schedule = function (fn) {3880setImmediate(fn);3881};3882} else if (typeof setTimeout !== "undefined") {3883schedule = function (fn) {3884setTimeout(fn, 0);3885};3886} else {3887schedule = noAsyncScheduler;3888}3889module.exports = schedule;38903891},{"./util":38}],32:[function(_dereq_,module,exports){3892"use strict";3893module.exports =3894function(Promise, PromiseArray) {3895var PromiseInspection = Promise.PromiseInspection;3896var util = _dereq_("./util.js");38973898function SettledPromiseArray(values) {3899this.constructor$(values);3900}3901util.inherits(SettledPromiseArray, PromiseArray);39023903SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {3904this._values[index] = inspection;3905var totalResolved = ++this._totalResolved;3906if (totalResolved >= this._length) {3907this._resolve(this._values);3908}3909};39103911SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {3912var ret = new PromiseInspection();3913ret._bitField = 268435456;3914ret._settledValue = value;3915this._promiseResolved(index, ret);3916};3917SettledPromiseArray.prototype._promiseRejected = function (reason, index) {3918var ret = new PromiseInspection();3919ret._bitField = 134217728;3920ret._settledValue = reason;3921this._promiseResolved(index, ret);3922};39233924Promise.settle = function (promises) {3925return new SettledPromiseArray(promises).promise();3926};39273928Promise.prototype.settle = function () {3929return new SettledPromiseArray(this).promise();3930};3931};39323933},{"./util.js":38}],33:[function(_dereq_,module,exports){3934"use strict";3935module.exports =3936function(Promise, PromiseArray, apiRejection) {3937var util = _dereq_("./util.js");3938var RangeError = _dereq_("./errors.js").RangeError;3939var AggregateError = _dereq_("./errors.js").AggregateError;3940var isArray = util.isArray;394139423943function SomePromiseArray(values) {3944this.constructor$(values);3945this._howMany = 0;3946this._unwrap = false;3947this._initialized = false;3948}3949util.inherits(SomePromiseArray, PromiseArray);39503951SomePromiseArray.prototype._init = function () {3952if (!this._initialized) {3953return;3954}3955if (this._howMany === 0) {3956this._resolve([]);3957return;3958}3959this._init$(undefined, -5);3960var isArrayResolved = isArray(this._values);3961if (!this._isResolved() &&3962isArrayResolved &&3963this._howMany > this._canPossiblyFulfill()) {3964this._reject(this._getRangeError(this.length()));3965}3966};39673968SomePromiseArray.prototype.init = function () {3969this._initialized = true;3970this._init();3971};39723973SomePromiseArray.prototype.setUnwrap = function () {3974this._unwrap = true;3975};39763977SomePromiseArray.prototype.howMany = function () {3978return this._howMany;3979};39803981SomePromiseArray.prototype.setHowMany = function (count) {3982this._howMany = count;3983};39843985SomePromiseArray.prototype._promiseFulfilled = function (value) {3986this._addFulfilled(value);3987if (this._fulfilled() === this.howMany()) {3988this._values.length = this.howMany();3989if (this.howMany() === 1 && this._unwrap) {3990this._resolve(this._values[0]);3991} else {3992this._resolve(this._values);3993}3994}39953996};3997SomePromiseArray.prototype._promiseRejected = function (reason) {3998this._addRejected(reason);3999if (this.howMany() > this._canPossiblyFulfill()) {4000var e = new AggregateError();4001for (var i = this.length(); i < this._values.length; ++i) {4002e.push(this._values[i]);4003}4004this._reject(e);4005}4006};40074008SomePromiseArray.prototype._fulfilled = function () {4009return this._totalResolved;4010};40114012SomePromiseArray.prototype._rejected = function () {4013return this._values.length - this.length();4014};40154016SomePromiseArray.prototype._addRejected = function (reason) {4017this._values.push(reason);4018};40194020SomePromiseArray.prototype._addFulfilled = function (value) {4021this._values[this._totalResolved++] = value;4022};40234024SomePromiseArray.prototype._canPossiblyFulfill = function () {4025return this.length() - this._rejected();4026};40274028SomePromiseArray.prototype._getRangeError = function (count) {4029var message = "Input array must contain at least " +4030this._howMany + " items but contains only " + count + " items";4031return new RangeError(message);4032};40334034SomePromiseArray.prototype._resolveEmptyArray = function () {4035this._reject(this._getRangeError(0));4036};40374038function some(promises, howMany) {4039if ((howMany | 0) !== howMany || howMany < 0) {4040return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/1wAmHx\u000a");4041}4042var ret = new SomePromiseArray(promises);4043var promise = ret.promise();4044ret.setHowMany(howMany);4045ret.init();4046return promise;4047}40484049Promise.some = function (promises, howMany) {4050return some(promises, howMany);4051};40524053Promise.prototype.some = function (howMany) {4054return some(this, howMany);4055};40564057Promise._SomePromiseArray = SomePromiseArray;4058};40594060},{"./errors.js":13,"./util.js":38}],34:[function(_dereq_,module,exports){4061"use strict";4062module.exports = function(Promise) {4063function PromiseInspection(promise) {4064if (promise !== undefined) {4065promise = promise._target();4066this._bitField = promise._bitField;4067this._settledValue = promise._settledValue;4068}4069else {4070this._bitField = 0;4071this._settledValue = undefined;4072}4073}40744075PromiseInspection.prototype.value = function () {4076if (!this.isFulfilled()) {4077throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a");4078}4079return this._settledValue;4080};40814082PromiseInspection.prototype.error =4083PromiseInspection.prototype.reason = function () {4084if (!this.isRejected()) {4085throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a");4086}4087return this._settledValue;4088};40894090PromiseInspection.prototype.isFulfilled =4091Promise.prototype._isFulfilled = function () {4092return (this._bitField & 268435456) > 0;4093};40944095PromiseInspection.prototype.isRejected =4096Promise.prototype._isRejected = function () {4097return (this._bitField & 134217728) > 0;4098};40994100PromiseInspection.prototype.isPending =4101Promise.prototype._isPending = function () {4102return (this._bitField & 402653184) === 0;4103};41044105PromiseInspection.prototype.isResolved =4106Promise.prototype._isResolved = function () {4107return (this._bitField & 402653184) > 0;4108};41094110Promise.prototype.isPending = function() {4111return this._target()._isPending();4112};41134114Promise.prototype.isRejected = function() {4115return this._target()._isRejected();4116};41174118Promise.prototype.isFulfilled = function() {4119return this._target()._isFulfilled();4120};41214122Promise.prototype.isResolved = function() {4123return this._target()._isResolved();4124};41254126Promise.prototype._value = function() {4127return this._settledValue;4128};41294130Promise.prototype._reason = function() {4131this._unsetRejectionIsUnhandled();4132return this._settledValue;4133};41344135Promise.prototype.value = function() {4136var target = this._target();4137if (!target.isFulfilled()) {4138throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a");4139}4140return target._settledValue;4141};41424143Promise.prototype.reason = function() {4144var target = this._target();4145if (!target.isRejected()) {4146throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a");4147}4148target._unsetRejectionIsUnhandled();4149return target._settledValue;4150};415141524153Promise.PromiseInspection = PromiseInspection;4154};41554156},{}],35:[function(_dereq_,module,exports){4157"use strict";4158module.exports = function(Promise, INTERNAL) {4159var util = _dereq_("./util.js");4160var errorObj = util.errorObj;4161var isObject = util.isObject;41624163function tryConvertToPromise(obj, context) {4164if (isObject(obj)) {4165if (obj instanceof Promise) {4166return obj;4167}4168else if (isAnyBluebirdPromise(obj)) {4169var ret = new Promise(INTERNAL);4170obj._then(4171ret._fulfillUnchecked,4172ret._rejectUncheckedCheckError,4173ret._progressUnchecked,4174ret,4175null4176);4177return ret;4178}4179var then = util.tryCatch(getThen)(obj);4180if (then === errorObj) {4181if (context) context._pushContext();4182var ret = Promise.reject(then.e);4183if (context) context._popContext();4184return ret;4185} else if (typeof then === "function") {4186return doThenable(obj, then, context);4187}4188}4189return obj;4190}41914192function getThen(obj) {4193return obj.then;4194}41954196var hasProp = {}.hasOwnProperty;4197function isAnyBluebirdPromise(obj) {4198return hasProp.call(obj, "_promise0");4199}42004201function doThenable(x, then, context) {4202var promise = new Promise(INTERNAL);4203var ret = promise;4204if (context) context._pushContext();4205promise._captureStackTrace();4206if (context) context._popContext();4207var synchronous = true;4208var result = util.tryCatch(then).call(x,4209resolveFromThenable,4210rejectFromThenable,4211progressFromThenable);4212synchronous = false;4213if (promise && result === errorObj) {4214promise._rejectCallback(result.e, true, true);4215promise = null;4216}42174218function resolveFromThenable(value) {4219if (!promise) return;4220if (x === value) {4221promise._rejectCallback(4222Promise._makeSelfResolutionError(), false, true);4223} else {4224promise._resolveCallback(value);4225}4226promise = null;4227}42284229function rejectFromThenable(reason) {4230if (!promise) return;4231promise._rejectCallback(reason, synchronous, true);4232promise = null;4233}42344235function progressFromThenable(value) {4236if (!promise) return;4237if (typeof promise._progress === "function") {4238promise._progress(value);4239}4240}4241return ret;4242}42434244return tryConvertToPromise;4245};42464247},{"./util.js":38}],36:[function(_dereq_,module,exports){4248"use strict";4249module.exports = function(Promise, INTERNAL) {4250var util = _dereq_("./util.js");4251var TimeoutError = Promise.TimeoutError;42524253var afterTimeout = function (promise, message) {4254if (!promise.isPending()) return;4255if (typeof message !== "string") {4256message = "operation timed out";4257}4258var err = new TimeoutError(message);4259util.markAsOriginatingFromRejection(err);4260promise._attachExtraTrace(err);4261promise._cancel(err);4262};42634264var afterValue = function(value) { return delay(+this).thenReturn(value); };4265var delay = Promise.delay = function (value, ms) {4266if (ms === undefined) {4267ms = value;4268value = undefined;4269var ret = new Promise(INTERNAL);4270setTimeout(function() { ret._fulfill(); }, ms);4271return ret;4272}4273ms = +ms;4274return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);4275};42764277Promise.prototype.delay = function (ms) {4278return delay(this, ms);4279};42804281function successClear(value) {4282var handle = this;4283if (handle instanceof Number) handle = +handle;4284clearTimeout(handle);4285return value;4286}42874288function failureClear(reason) {4289var handle = this;4290if (handle instanceof Number) handle = +handle;4291clearTimeout(handle);4292throw reason;4293}42944295Promise.prototype.timeout = function (ms, message) {4296ms = +ms;4297var ret = this.then().cancellable();4298ret._cancellationParent = this;4299var handle = setTimeout(function timeoutTimeout() {4300afterTimeout(ret, message);4301}, ms);4302return ret._then(successClear, failureClear, undefined, handle, undefined);4303};43044305};43064307},{"./util.js":38}],37:[function(_dereq_,module,exports){4308"use strict";4309module.exports = function (Promise, apiRejection, tryConvertToPromise,4310createContext) {4311var TypeError = _dereq_("./errors.js").TypeError;4312var inherits = _dereq_("./util.js").inherits;4313var PromiseInspection = Promise.PromiseInspection;43144315function inspectionMapper(inspections) {4316var len = inspections.length;4317for (var i = 0; i < len; ++i) {4318var inspection = inspections[i];4319if (inspection.isRejected()) {4320return Promise.reject(inspection.error());4321}4322inspections[i] = inspection._settledValue;4323}4324return inspections;4325}43264327function thrower(e) {4328setTimeout(function(){throw e;}, 0);4329}43304331function castPreservingDisposable(thenable) {4332var maybePromise = tryConvertToPromise(thenable);4333if (maybePromise !== thenable &&4334typeof thenable._isDisposable === "function" &&4335typeof thenable._getDisposer === "function" &&4336thenable._isDisposable()) {4337maybePromise._setDisposable(thenable._getDisposer());4338}4339return maybePromise;4340}4341function dispose(resources, inspection) {4342var i = 0;4343var len = resources.length;4344var ret = Promise.defer();4345function iterator() {4346if (i >= len) return ret.resolve();4347var maybePromise = castPreservingDisposable(resources[i++]);4348if (maybePromise instanceof Promise &&4349maybePromise._isDisposable()) {4350try {4351maybePromise = tryConvertToPromise(4352maybePromise._getDisposer().tryDispose(inspection),4353resources.promise);4354} catch (e) {4355return thrower(e);4356}4357if (maybePromise instanceof Promise) {4358return maybePromise._then(iterator, thrower,4359null, null, null);4360}4361}4362iterator();4363}4364iterator();4365return ret.promise;4366}43674368function disposerSuccess(value) {4369var inspection = new PromiseInspection();4370inspection._settledValue = value;4371inspection._bitField = 268435456;4372return dispose(this, inspection).thenReturn(value);4373}43744375function disposerFail(reason) {4376var inspection = new PromiseInspection();4377inspection._settledValue = reason;4378inspection._bitField = 134217728;4379return dispose(this, inspection).thenThrow(reason);4380}43814382function Disposer(data, promise, context) {4383this._data = data;4384this._promise = promise;4385this._context = context;4386}43874388Disposer.prototype.data = function () {4389return this._data;4390};43914392Disposer.prototype.promise = function () {4393return this._promise;4394};43954396Disposer.prototype.resource = function () {4397if (this.promise().isFulfilled()) {4398return this.promise().value();4399}4400return null;4401};44024403Disposer.prototype.tryDispose = function(inspection) {4404var resource = this.resource();4405var context = this._context;4406if (context !== undefined) context._pushContext();4407var ret = resource !== null4408? this.doDispose(resource, inspection) : null;4409if (context !== undefined) context._popContext();4410this._promise._unsetDisposable();4411this._data = null;4412return ret;4413};44144415Disposer.isDisposer = function (d) {4416return (d != null &&4417typeof d.resource === "function" &&4418typeof d.tryDispose === "function");4419};44204421function FunctionDisposer(fn, promise, context) {4422this.constructor$(fn, promise, context);4423}4424inherits(FunctionDisposer, Disposer);44254426FunctionDisposer.prototype.doDispose = function (resource, inspection) {4427var fn = this.data();4428return fn.call(resource, resource, inspection);4429};44304431function maybeUnwrapDisposer(value) {4432if (Disposer.isDisposer(value)) {4433this.resources[this.index]._setDisposable(value);4434return value.promise();4435}4436return value;4437}44384439Promise.using = function () {4440var len = arguments.length;4441if (len < 2) return apiRejection(4442"you must pass at least 2 arguments to Promise.using");4443var fn = arguments[len - 1];4444if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");4445len--;4446var resources = new Array(len);4447for (var i = 0; i < len; ++i) {4448var resource = arguments[i];4449if (Disposer.isDisposer(resource)) {4450var disposer = resource;4451resource = resource.promise();4452resource._setDisposable(disposer);4453} else {4454var maybePromise = tryConvertToPromise(resource);4455if (maybePromise instanceof Promise) {4456resource =4457maybePromise._then(maybeUnwrapDisposer, null, null, {4458resources: resources,4459index: i4460}, undefined);4461}4462}4463resources[i] = resource;4464}44654466var promise = Promise.settle(resources)4467.then(inspectionMapper)4468.then(function(vals) {4469promise._pushContext();4470var ret;4471try {4472ret = fn.apply(undefined, vals);4473} finally {4474promise._popContext();4475}4476return ret;4477})4478._then(4479disposerSuccess, disposerFail, undefined, resources, undefined);4480resources.promise = promise;4481return promise;4482};44834484Promise.prototype._setDisposable = function (disposer) {4485this._bitField = this._bitField | 262144;4486this._disposer = disposer;4487};44884489Promise.prototype._isDisposable = function () {4490return (this._bitField & 262144) > 0;4491};44924493Promise.prototype._getDisposer = function () {4494return this._disposer;4495};44964497Promise.prototype._unsetDisposable = function () {4498this._bitField = this._bitField & (~262144);4499this._disposer = undefined;4500};45014502Promise.prototype.disposer = function (fn) {4503if (typeof fn === "function") {4504return new FunctionDisposer(fn, this, createContext());4505}4506throw new TypeError();4507};45084509};45104511},{"./errors.js":13,"./util.js":38}],38:[function(_dereq_,module,exports){4512"use strict";4513var es5 = _dereq_("./es5.js");4514var canEvaluate = typeof navigator == "undefined";4515var haveGetters = (function(){4516try {4517var o = {};4518es5.defineProperty(o, "f", {4519get: function () {4520return 3;4521}4522});4523return o.f === 3;4524}4525catch (e) {4526return false;4527}45284529})();45304531var errorObj = {e: {}};4532var tryCatchTarget;4533function tryCatcher() {4534try {4535return tryCatchTarget.apply(this, arguments);4536} catch (e) {4537errorObj.e = e;4538return errorObj;4539}4540}4541function tryCatch(fn) {4542tryCatchTarget = fn;4543return tryCatcher;4544}45454546var inherits = function(Child, Parent) {4547var hasProp = {}.hasOwnProperty;45484549function T() {4550this.constructor = Child;4551this.constructor$ = Parent;4552for (var propertyName in Parent.prototype) {4553if (hasProp.call(Parent.prototype, propertyName) &&4554propertyName.charAt(propertyName.length-1) !== "$"4555) {4556this[propertyName + "$"] = Parent.prototype[propertyName];4557}4558}4559}4560T.prototype = Parent.prototype;4561Child.prototype = new T();4562return Child.prototype;4563};456445654566function isPrimitive(val) {4567return val == null || val === true || val === false ||4568typeof val === "string" || typeof val === "number";45694570}45714572function isObject(value) {4573return !isPrimitive(value);4574}45754576function maybeWrapAsError(maybeError) {4577if (!isPrimitive(maybeError)) return maybeError;45784579return new Error(safeToString(maybeError));4580}45814582function withAppended(target, appendee) {4583var len = target.length;4584var ret = new Array(len + 1);4585var i;4586for (i = 0; i < len; ++i) {4587ret[i] = target[i];4588}4589ret[i] = appendee;4590return ret;4591}45924593function getDataPropertyOrDefault(obj, key, defaultValue) {4594if (es5.isES5) {4595var desc = Object.getOwnPropertyDescriptor(obj, key);4596if (desc != null) {4597return desc.get == null && desc.set == null4598? desc.value4599: defaultValue;4600}4601} else {4602return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;4603}4604}46054606function notEnumerableProp(obj, name, value) {4607if (isPrimitive(obj)) return obj;4608var descriptor = {4609value: value,4610configurable: true,4611enumerable: false,4612writable: true4613};4614es5.defineProperty(obj, name, descriptor);4615return obj;4616}461746184619var wrapsPrimitiveReceiver = (function() {4620return this !== "string";4621}).call("string");46224623function thrower(r) {4624throw r;4625}46264627var inheritedDataKeys = (function() {4628if (es5.isES5) {4629var oProto = Object.prototype;4630var getKeys = Object.getOwnPropertyNames;4631return function(obj) {4632var ret = [];4633var visitedKeys = Object.create(null);4634while (obj != null && obj !== oProto) {4635var keys;4636try {4637keys = getKeys(obj);4638} catch (e) {4639return ret;4640}4641for (var i = 0; i < keys.length; ++i) {4642var key = keys[i];4643if (visitedKeys[key]) continue;4644visitedKeys[key] = true;4645var desc = Object.getOwnPropertyDescriptor(obj, key);4646if (desc != null && desc.get == null && desc.set == null) {4647ret.push(key);4648}4649}4650obj = es5.getPrototypeOf(obj);4651}4652return ret;4653};4654} else {4655return function(obj) {4656var ret = [];4657/*jshint forin:false */4658for (var key in obj) {4659ret.push(key);4660}4661return ret;4662};4663}46644665})();46664667function isClass(fn) {4668try {4669if (typeof fn === "function") {4670var keys = es5.names(fn.prototype);4671if (es5.isES5) return keys.length > 1;4672return keys.length > 0 &&4673!(keys.length === 1 && keys[0] === "constructor");4674}4675return false;4676} catch (e) {4677return false;4678}4679}46804681function toFastProperties(obj) {4682/*jshint -W027,-W055,-W031*/4683function f() {}4684f.prototype = obj;4685var l = 8;4686while (l--) new f();4687return obj;4688eval(obj);4689}46904691var rident = /^[a-z$_][a-z$_0-9]*$/i;4692function isIdentifier(str) {4693return rident.test(str);4694}46954696function filledRange(count, prefix, suffix) {4697var ret = new Array(count);4698for(var i = 0; i < count; ++i) {4699ret[i] = prefix + i + suffix;4700}4701return ret;4702}47034704function safeToString(obj) {4705try {4706return obj + "";4707} catch (e) {4708return "[no string representation]";4709}4710}47114712function markAsOriginatingFromRejection(e) {4713try {4714notEnumerableProp(e, "isOperational", true);4715}4716catch(ignore) {}4717}47184719function originatesFromRejection(e) {4720if (e == null) return false;4721return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||4722e["isOperational"] === true);4723}47244725function canAttachTrace(obj) {4726return obj instanceof Error && es5.propertyIsWritable(obj, "stack");4727}47284729var ensureErrorObject = (function() {4730if (!("stack" in new Error())) {4731return function(value) {4732if (canAttachTrace(value)) return value;4733try {throw new Error(safeToString(value));}4734catch(err) {return err;}4735};4736} else {4737return function(value) {4738if (canAttachTrace(value)) return value;4739return new Error(safeToString(value));4740};4741}4742})();47434744function classString(obj) {4745return {}.toString.call(obj);4746}47474748function copyDescriptors(from, to, filter) {4749var keys = es5.names(from);4750for (var i = 0; i < keys.length; ++i) {4751var key = keys[i];4752if (filter(key)) {4753es5.defineProperty(to, key, es5.getDescriptor(from, key));4754}4755}4756}47574758var ret = {4759isClass: isClass,4760isIdentifier: isIdentifier,4761inheritedDataKeys: inheritedDataKeys,4762getDataPropertyOrDefault: getDataPropertyOrDefault,4763thrower: thrower,4764isArray: es5.isArray,4765haveGetters: haveGetters,4766notEnumerableProp: notEnumerableProp,4767isPrimitive: isPrimitive,4768isObject: isObject,4769canEvaluate: canEvaluate,4770errorObj: errorObj,4771tryCatch: tryCatch,4772inherits: inherits,4773withAppended: withAppended,4774maybeWrapAsError: maybeWrapAsError,4775wrapsPrimitiveReceiver: wrapsPrimitiveReceiver,4776toFastProperties: toFastProperties,4777filledRange: filledRange,4778toString: safeToString,4779canAttachTrace: canAttachTrace,4780ensureErrorObject: ensureErrorObject,4781originatesFromRejection: originatesFromRejection,4782markAsOriginatingFromRejection: markAsOriginatingFromRejection,4783classString: classString,4784copyDescriptors: copyDescriptors,4785hasDevTools: typeof chrome !== "undefined" && chrome &&4786typeof chrome.loadTimes === "function",4787isNode: typeof process !== "undefined" &&4788classString(process).toLowerCase() === "[object process]"4789};4790ret.isRecentNode = ret.isNode && (function() {4791var version = process.versions.node.split(".").map(Number);4792return (version[0] === 0 && version[1] > 10) || (version[0] > 0);4793})();4794try {throw new Error(); } catch (e) {ret.lastLineError = e;}4795module.exports = ret;47964797},{"./es5.js":14}],39:[function(_dereq_,module,exports){4798// Copyright Joyent, Inc. and other Node contributors.4799//4800// Permission is hereby granted, free of charge, to any person obtaining a4801// copy of this software and associated documentation files (the4802// "Software"), to deal in the Software without restriction, including4803// without limitation the rights to use, copy, modify, merge, publish,4804// distribute, sublicense, and/or sell copies of the Software, and to permit4805// persons to whom the Software is furnished to do so, subject to the4806// following conditions:4807//4808// The above copyright notice and this permission notice shall be included4809// in all copies or substantial portions of the Software.4810//4811// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS4812// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF4813// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN4814// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,4815// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR4816// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE4817// USE OR OTHER DEALINGS IN THE SOFTWARE.48184819function EventEmitter() {4820this._events = this._events || {};4821this._maxListeners = this._maxListeners || undefined;4822}4823module.exports = EventEmitter;48244825// Backwards-compat with node 0.10.x4826EventEmitter.EventEmitter = EventEmitter;48274828EventEmitter.prototype._events = undefined;4829EventEmitter.prototype._maxListeners = undefined;48304831// By default EventEmitters will print a warning if more than 10 listeners are4832// added to it. This is a useful default which helps finding memory leaks.4833EventEmitter.defaultMaxListeners = 10;48344835// Obviously not all Emitters should be limited to 10. This function allows4836// that to be increased. Set to zero for unlimited.4837EventEmitter.prototype.setMaxListeners = function(n) {4838if (!isNumber(n) || n < 0 || isNaN(n))4839throw TypeError('n must be a positive number');4840this._maxListeners = n;4841return this;4842};48434844EventEmitter.prototype.emit = function(type) {4845var er, handler, len, args, i, listeners;48464847if (!this._events)4848this._events = {};48494850// If there is no 'error' event listener then throw.4851if (type === 'error') {4852if (!this._events.error ||4853(isObject(this._events.error) && !this._events.error.length)) {4854er = arguments[1];4855if (er instanceof Error) {4856throw er; // Unhandled 'error' event4857}4858throw TypeError('Uncaught, unspecified "error" event.');4859}4860}48614862handler = this._events[type];48634864if (isUndefined(handler))4865return false;48664867if (isFunction(handler)) {4868switch (arguments.length) {4869// fast cases4870case 1:4871handler.call(this);4872break;4873case 2:4874handler.call(this, arguments[1]);4875break;4876case 3:4877handler.call(this, arguments[1], arguments[2]);4878break;4879// slower4880default:4881len = arguments.length;4882args = new Array(len - 1);4883for (i = 1; i < len; i++)4884args[i - 1] = arguments[i];4885handler.apply(this, args);4886}4887} else if (isObject(handler)) {4888len = arguments.length;4889args = new Array(len - 1);4890for (i = 1; i < len; i++)4891args[i - 1] = arguments[i];48924893listeners = handler.slice();4894len = listeners.length;4895for (i = 0; i < len; i++)4896listeners[i].apply(this, args);4897}48984899return true;4900};49014902EventEmitter.prototype.addListener = function(type, listener) {4903var m;49044905if (!isFunction(listener))4906throw TypeError('listener must be a function');49074908if (!this._events)4909this._events = {};49104911// To avoid recursion in the case that type === "newListener"! Before4912// adding it to the listeners, first emit "newListener".4913if (this._events.newListener)4914this.emit('newListener', type,4915isFunction(listener.listener) ?4916listener.listener : listener);49174918if (!this._events[type])4919// Optimize the case of one listener. Don't need the extra array object.4920this._events[type] = listener;4921else if (isObject(this._events[type]))4922// If we've already got an array, just append.4923this._events[type].push(listener);4924else4925// Adding the second element, need to change to array.4926this._events[type] = [this._events[type], listener];49274928// Check for listener leak4929if (isObject(this._events[type]) && !this._events[type].warned) {4930var m;4931if (!isUndefined(this._maxListeners)) {4932m = this._maxListeners;4933} else {4934m = EventEmitter.defaultMaxListeners;4935}49364937if (m && m > 0 && this._events[type].length > m) {4938this._events[type].warned = true;4939console.error('(node) warning: possible EventEmitter memory ' +4940'leak detected. %d listeners added. ' +4941'Use emitter.setMaxListeners() to increase limit.',4942this._events[type].length);4943if (typeof console.trace === 'function') {4944// not supported in IE 104945console.trace();4946}4947}4948}49494950return this;4951};49524953EventEmitter.prototype.on = EventEmitter.prototype.addListener;49544955EventEmitter.prototype.once = function(type, listener) {4956if (!isFunction(listener))4957throw TypeError('listener must be a function');49584959var fired = false;49604961function g() {4962this.removeListener(type, g);49634964if (!fired) {4965fired = true;4966listener.apply(this, arguments);4967}4968}49694970g.listener = listener;4971this.on(type, g);49724973return this;4974};49754976// emits a 'removeListener' event iff the listener was removed4977EventEmitter.prototype.removeListener = function(type, listener) {4978var list, position, length, i;49794980if (!isFunction(listener))4981throw TypeError('listener must be a function');49824983if (!this._events || !this._events[type])4984return this;49854986list = this._events[type];4987length = list.length;4988position = -1;49894990if (list === listener ||4991(isFunction(list.listener) && list.listener === listener)) {4992delete this._events[type];4993if (this._events.removeListener)4994this.emit('removeListener', type, listener);49954996} else if (isObject(list)) {4997for (i = length; i-- > 0;) {4998if (list[i] === listener ||4999(list[i].listener && list[i].listener === listener)) {5000position = i;5001break;5002}5003}50045005if (position < 0)5006return this;50075008if (list.length === 1) {5009list.length = 0;5010delete this._events[type];5011} else {5012list.splice(position, 1);5013}50145015if (this._events.removeListener)5016this.emit('removeListener', type, listener);5017}50185019return this;5020};50215022EventEmitter.prototype.removeAllListeners = function(type) {5023var key, listeners;50245025if (!this._events)5026return this;50275028// not listening for removeListener, no need to emit5029if (!this._events.removeListener) {5030if (arguments.length === 0)5031this._events = {};5032else if (this._events[type])5033delete this._events[type];5034return this;5035}50365037// emit removeListener for all listeners on all events5038if (arguments.length === 0) {5039for (key in this._events) {5040if (key === 'removeListener') continue;5041this.removeAllListeners(key);5042}5043this.removeAllListeners('removeListener');5044this._events = {};5045return this;5046}50475048listeners = this._events[type];50495050if (isFunction(listeners)) {5051this.removeListener(type, listeners);5052} else {5053// LIFO order5054while (listeners.length)5055this.removeListener(type, listeners[listeners.length - 1]);5056}5057delete this._events[type];50585059return this;5060};50615062EventEmitter.prototype.listeners = function(type) {5063var ret;5064if (!this._events || !this._events[type])5065ret = [];5066else if (isFunction(this._events[type]))5067ret = [this._events[type]];5068else5069ret = this._events[type].slice();5070return ret;5071};50725073EventEmitter.listenerCount = function(emitter, type) {5074var ret;5075if (!emitter._events || !emitter._events[type])5076ret = 0;5077else if (isFunction(emitter._events[type]))5078ret = 1;5079else5080ret = emitter._events[type].length;5081return ret;5082};50835084function isFunction(arg) {5085return typeof arg === 'function';5086}50875088function isNumber(arg) {5089return typeof arg === 'number';5090}50915092function isObject(arg) {5093return typeof arg === 'object' && arg !== null;5094}50955096function isUndefined(arg) {5097return arg === void 0;5098}50995100},{}]},{},[4])(4)5101}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }51025103