react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / har-validator / node_modules / bluebird / js / main / promise_resolver.js
81160 views"use strict";1var util = require("./util.js");2var maybeWrapAsError = util.maybeWrapAsError;3var errors = require("./errors.js");4var TimeoutError = errors.TimeoutError;5var OperationalError = errors.OperationalError;6var haveGetters = util.haveGetters;7var es5 = require("./es5.js");89function isUntypedError(obj) {10return obj instanceof Error &&11es5.getPrototypeOf(obj) === Error.prototype;12}1314var rErrorKey = /^(?:name|message|stack|cause)$/;15function wrapAsOperationalError(obj) {16var ret;17if (isUntypedError(obj)) {18ret = new OperationalError(obj);19ret.name = obj.name;20ret.message = obj.message;21ret.stack = obj.stack;22var keys = es5.keys(obj);23for (var i = 0; i < keys.length; ++i) {24var key = keys[i];25if (!rErrorKey.test(key)) {26ret[key] = obj[key];27}28}29return ret;30}31util.markAsOriginatingFromRejection(obj);32return obj;33}3435function nodebackForPromise(promise) {36return function(err, value) {37if (promise === null) return;3839if (err) {40var wrapped = wrapAsOperationalError(maybeWrapAsError(err));41promise._attachExtraTrace(wrapped);42promise._reject(wrapped);43} else if (arguments.length > 2) {44var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}45promise._fulfill(args);46} else {47promise._fulfill(value);48}4950promise = null;51};52}535455var PromiseResolver;56if (!haveGetters) {57PromiseResolver = function (promise) {58this.promise = promise;59this.asCallback = nodebackForPromise(promise);60this.callback = this.asCallback;61};62}63else {64PromiseResolver = function (promise) {65this.promise = promise;66};67}68if (haveGetters) {69var prop = {70get: function() {71return nodebackForPromise(this.promise);72}73};74es5.defineProperty(PromiseResolver.prototype, "asCallback", prop);75es5.defineProperty(PromiseResolver.prototype, "callback", prop);76}7778PromiseResolver._nodebackForPromise = nodebackForPromise;7980PromiseResolver.prototype.toString = function () {81return "[object PromiseResolver]";82};8384PromiseResolver.prototype.resolve =85PromiseResolver.prototype.fulfill = function (value) {86if (!(this instanceof PromiseResolver)) {87throw 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");88}89this.promise._resolveCallback(value);90};9192PromiseResolver.prototype.reject = function (reason) {93if (!(this instanceof PromiseResolver)) {94throw 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");95}96this.promise._rejectCallback(reason);97};9899PromiseResolver.prototype.progress = function (value) {100if (!(this instanceof PromiseResolver)) {101throw 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");102}103this.promise._progress(value);104};105106PromiseResolver.prototype.cancel = function (err) {107this.promise.cancel(err);108};109110PromiseResolver.prototype.timeout = function () {111this.reject(new TimeoutError("timeout"));112};113114PromiseResolver.prototype.isResolved = function () {115return this.promise.isResolved();116};117118PromiseResolver.prototype.toJSON = function () {119return this.promise.toJSON();120};121122module.exports = PromiseResolver;123124125