Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
package.modules.es.promise.constructor.js Maven / Gradle / Ivy
'use strict' ;
var $ = require ('../internals/export' );
var IS_PURE = require ('../internals/is-pure' );
var IS_NODE = require ('../internals/environment-is-node' );
var globalThis = require ('../internals/global-this' );
var call = require ('../internals/function-call' );
var defineBuiltIn = require ('../internals/define-built-in' );
var setPrototypeOf = require ('../internals/object-set-prototype-of' );
var setToStringTag = require ('../internals/set-to-string-tag' );
var setSpecies = require ('../internals/set-species' );
var aCallable = require ('../internals/a-callable' );
var isCallable = require ('../internals/is-callable' );
var isObject = require ('../internals/is-object' );
var anInstance = require ('../internals/an-instance' );
var speciesConstructor = require ('../internals/species-constructor' );
var task = require ('../internals/task' ).set;
var microtask = require ('../internals/microtask' );
var hostReportErrors = require ('../internals/host-report-errors' );
var perform = require ('../internals/perform' );
var Queue = require ('../internals/queue' );
var InternalStateModule = require ('../internals/internal-state' );
var NativePromiseConstructor = require ('../internals/promise-native-constructor' );
var PromiseConstructorDetection = require ('../internals/promise-constructor-detection' );
var newPromiseCapabilityModule = require ('../internals/new-promise-capability' );
var PROMISE = 'Promise' ;
var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;
var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
var setInternalState = InternalStateModule.set;
var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
var PromiseConstructor = NativePromiseConstructor;
var PromisePrototype = NativePromisePrototype;
var TypeError = globalThis.TypeError;
var document = globalThis.document;
var process = globalThis.process;
var newPromiseCapability = newPromiseCapabilityModule.f;
var newGenericPromiseCapability = newPromiseCapability;
var DISPATCH_EVENT = !!(document && document .createEvent && globalThis.dispatchEvent);
var UNHANDLED_REJECTION = 'unhandledrejection' ;
var REJECTION_HANDLED = 'rejectionhandled' ;
var PENDING = 0 ;
var FULFILLED = 1 ;
var REJECTED = 2 ;
var HANDLED = 1 ;
var UNHANDLED = 2 ;
var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
var isThenable = function (it ) {
var then;
return isObject(it) && isCallable(then = it.then) ? then : false ;
};
var callReaction = function (reaction, state ) {
var value = state.value;
var ok = state.state === FULFILLED;
var handler = ok ? reaction.ok : reaction.fail;
var resolve = reaction.resolve;
var reject = reaction.reject;
var domain = reaction.domain;
var result, then, exited;
try {
if (handler) {
if (!ok) {
if (state.rejection === UNHANDLED) onHandleUnhandled(state);
state.rejection = HANDLED;
}
if (handler === true ) result = value;
else {
if (domain) domain.enter();
result = handler(value);
if (domain) {
domain.exit();
exited = true ;
}
}
if (result === reaction.promise) {
reject(new TypeError ('Promise-chain cycle' ));
} else if (then = isThenable(result)) {
call(then, result, resolve, reject);
} else resolve(result);
} else reject(value);
} catch (error) {
if (domain && !exited) domain.exit();
reject(error);
}
};
var notify = function (state, isReject ) {
if (state.notified) return ;
state.notified = true ;
microtask(function ( ) {
var reactions = state.reactions;
var reaction;
while (reaction = reactions.get()) {
callReaction(reaction, state);
}
state.notified = false ;
if (isReject && !state.rejection) onUnhandled(state);
});
};
var dispatchEvent = function (name, promise, reason ) {
var event, handler;
if (DISPATCH_EVENT) {
event = document .createEvent('Event' );
event.promise = promise;
event.reason = reason;
event.initEvent(name, false , true );
globalThis.dispatchEvent(event);
} else event = { promise : promise, reason : reason };
if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = globalThis['on' + name])) handler(event);
else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection' , reason);
};
var onUnhandled = function (state ) {
call(task, globalThis, function ( ) {
var promise = state.facade;
var value = state.value;
var IS_UNHANDLED = isUnhandled(state);
var result;
if (IS_UNHANDLED) {
result = perform(function ( ) {
if (IS_NODE) {
process.emit('unhandledRejection' , value, promise);
} else dispatchEvent(UNHANDLED_REJECTION, promise, value);
});
state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
if (result.error) throw result.value;
}
});
};
var isUnhandled = function (state ) {
return state.rejection !== HANDLED && !state.parent;
};
var onHandleUnhandled = function (state ) {
call(task, globalThis, function ( ) {
var promise = state.facade;
if (IS_NODE) {
process.emit('rejectionHandled' , promise);
} else dispatchEvent(REJECTION_HANDLED, promise, state.value);
});
};
var bind = function (fn, state, unwrap ) {
return function (value ) {
fn(state, value, unwrap);
};
};
var internalReject = function (state, value, unwrap ) {
if (state.done) return ;
state.done = true ;
if (unwrap) state = unwrap;
state.value = value;
state.state = REJECTED;
notify(state, true );
};
var internalResolve = function (state, value, unwrap ) {
if (state.done) return ;
state.done = true ;
if (unwrap) state = unwrap;
try {
if (state.facade === value) throw new TypeError ("Promise can't be resolved itself" );
var then = isThenable(value);
if (then) {
microtask(function ( ) {
var wrapper = { done : false };
try {
call(then, value,
bind(internalResolve, wrapper, state),
bind(internalReject, wrapper, state)
);
} catch (error) {
internalReject(wrapper, error, state);
}
});
} else {
state.value = value;
state.state = FULFILLED;
notify(state, false );
}
} catch (error) {
internalReject({ done : false }, error, state);
}
};
if (FORCED_PROMISE_CONSTRUCTOR) {
PromiseConstructor = function Promise (executor ) {
anInstance(this , PromisePrototype);
aCallable(executor);
call(Internal, this );
var state = getInternalPromiseState(this );
try {
executor(bind(internalResolve, state), bind(internalReject, state));
} catch (error) {
internalReject(state, error);
}
};
PromisePrototype = PromiseConstructor.prototype;
Internal = function Promise (executor ) {
setInternalState(this , {
type : PROMISE,
done : false ,
notified : false ,
parent : false ,
reactions : new Queue(),
rejection : false ,
state : PENDING,
value : null
});
};
Internal.prototype = defineBuiltIn(PromisePrototype, 'then' , function then (onFulfilled, onRejected ) {
var state = getInternalPromiseState(this );
var reaction = newPromiseCapability(speciesConstructor(this , PromiseConstructor));
state.parent = true ;
reaction.ok = isCallable(onFulfilled) ? onFulfilled : true ;
reaction.fail = isCallable(onRejected) && onRejected;
reaction.domain = IS_NODE ? process.domain : undefined ;
if (state.state === PENDING) state.reactions.add(reaction);
else microtask(function ( ) {
callReaction(reaction, state);
});
return reaction.promise;
});
OwnPromiseCapability = function ( ) {
var promise = new Internal();
var state = getInternalPromiseState(promise);
this .promise = promise;
this .resolve = bind(internalResolve, state);
this .reject = bind(internalReject, state);
};
newPromiseCapabilityModule.f = newPromiseCapability = function (C ) {
return C === PromiseConstructor || C === PromiseWrapper
? new OwnPromiseCapability(C)
: newGenericPromiseCapability(C);
};
if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object .prototype) {
nativeThen = NativePromisePrototype.then;
if (!NATIVE_PROMISE_SUBCLASSING) {
defineBuiltIn(NativePromisePrototype, 'then' , function then (onFulfilled, onRejected ) {
var that = this ;
return new PromiseConstructor(function (resolve, reject ) {
call(nativeThen, that, resolve, reject);
}).then(onFulfilled, onRejected);
}, { unsafe : true });
}
try {
delete NativePromisePrototype.constructor;
} catch (error) { }
if (setPrototypeOf) {
setPrototypeOf(NativePromisePrototype, PromisePrototype);
}
}
}
$({ global : true , constructor : true , wrap : true , forced : FORCED_PROMISE_CONSTRUCTOR }, {
Promise : PromiseConstructor
});
setToStringTag(PromiseConstructor, PROMISE, false , true );
setSpecies(PROMISE);