Files
myprojplanet_vite/js/promise.js
Surya Paolo c52ca22c83 PASSAGGIO A VITE !
AGG. 1.1.23
2025-03-01 14:16:45 +01:00

369 lines
9.0 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* setImmediate polyfill v1.0.1, supports IE9+
* © 20142015 Dmitry Korobkin
* Released under the MIT license
* github.com/Octane/setImmediate
*/
window.setImmediate || (function () {
let uid = 0;
const storage = {};
let firstCall = true;
const { slice } = Array.prototype;
const message = 'setImmediatePolyfillMessage';
function fastApply(args) {
const func = args[0];
switch (args.length) {
case 1:
return func();
case 2:
return func(args[1]);
case 3:
return func(args[1], args[2]);
}
return func.apply(window, slice.call(args, 1));
}
function callback(event) {
const key = event.data;
let data;
if (typeof key === 'string' && key.indexOf(message) == 0) {
data = storage[key];
if (data) {
delete storage[key];
fastApply(data);
}
}
}
window.setImmediate = function setImmediate() {
const id = uid++;
const key = message + id;
let i = arguments.length;
const args = new Array(i);
while (i--) {
args[i] = arguments[i];
}
storage[key] = args;
if (firstCall) {
firstCall = false;
window.addEventListener('message', callback);
}
window.postMessage(key, '*');
return id;
};
window.clearImmediate = function clearImmediate(id) {
delete storage[message + id];
};
}());
/**
* Promise polyfill v1.0.10
* requires setImmediate
*
* © 20142015 Dmitry Korobkin
* Released under the MIT license
* github.com/Octane/Promise
*/
(function (global) {
const STATUS = '[[PromiseStatus]]';
const VALUE = '[[PromiseValue]]';
const ON_FUlFILLED = '[[OnFulfilled]]';
const ON_REJECTED = '[[OnRejected]]';
const ORIGINAL_ERROR = '[[OriginalError]]';
const PENDING = 'pending';
const INTERNAL_PENDING = 'internal pending';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';
const NOT_ARRAY = 'not an array.';
const REQUIRES_NEW = 'constructor Promise requires "new".';
const CHAINING_CYCLE = 'then() cannot return same Promise that it resolves.';
const setImmediate = global.setImmediate || require('timers').setImmediate;
const isArray = Array.isArray || function (anything) {
return Object.prototype.toString.call(anything) == '[object Array]';
};
function InternalError(originalError) {
this[ORIGINAL_ERROR] = originalError;
}
function isInternalError(anything) {
return anything instanceof InternalError;
}
function isObject(anything) {
// Object.create(null) instanceof Object → false
return Object(anything) === anything;
}
function isCallable(anything) {
return typeof anything === 'function';
}
function isPromise(anything) {
return anything instanceof Promise;
}
function identity(value) {
return value;
}
function thrower(reason) {
throw reason;
}
function enqueue(promise, onFulfilled, onRejected) {
if (!promise[ON_FUlFILLED]) {
promise[ON_FUlFILLED] = [];
promise[ON_REJECTED] = [];
}
promise[ON_FUlFILLED].push(onFulfilled);
promise[ON_REJECTED].push(onRejected);
}
function clearAllQueues(promise) {
delete promise[ON_FUlFILLED];
delete promise[ON_REJECTED];
}
function callEach(queue) {
let i;
const { length } = queue;
for (i = 0; i < length; i++) {
queue[i]();
}
}
function call(resolve, reject, value) {
const anything = toPromise(value);
if (isPromise(anything)) {
anything.then(resolve, reject);
} else if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
resolve(value);
}
}
function toPromise(anything) {
let then;
if (isPromise(anything)) {
return anything;
}
if (isObject(anything)) {
try {
then = anything.then;
} catch (error) {
return new InternalError(error);
}
if (isCallable(then)) {
return new Promise((resolve, reject) => {
setImmediate(() => {
try {
then.call(anything, resolve, reject);
} catch (error) {
reject(error);
}
});
});
}
}
return null;
}
function resolvePromise(promise, resolver) {
function resolve(value) {
if (promise[STATUS] == PENDING) {
fulfillPromise(promise, value);
}
}
function reject(reason) {
if (promise[STATUS] == PENDING) {
rejectPromise(promise, reason);
}
}
try {
resolver(resolve, reject);
} catch (error) {
reject(error);
}
}
function fulfillPromise(promise, value) {
let queue;
const anything = toPromise(value);
if (isPromise(anything)) {
promise[STATUS] = INTERNAL_PENDING;
anything.then(
(value) => {
fulfillPromise(promise, value);
},
(reason) => {
rejectPromise(promise, reason);
},
);
} else if (isInternalError(anything)) {
rejectPromise(promise, anything[ORIGINAL_ERROR]);
} else {
promise[STATUS] = FULFILLED;
promise[VALUE] = value;
queue = promise[ON_FUlFILLED];
if (queue && queue.length) {
clearAllQueues(promise);
callEach(queue);
}
}
}
function rejectPromise(promise, reason) {
const queue = promise[ON_REJECTED];
promise[STATUS] = REJECTED;
promise[VALUE] = reason;
if (queue && queue.length) {
clearAllQueues(promise);
callEach(queue);
}
}
function Promise(resolver) {
const promise = this;
if (!isPromise(promise)) {
throw new TypeError(REQUIRES_NEW);
}
promise[STATUS] = PENDING;
promise[VALUE] = undefined;
resolvePromise(promise, resolver);
}
Promise.prototype.then = function (onFulfilled, onRejected) {
const promise = this;
let nextPromise;
onFulfilled = isCallable(onFulfilled) ? onFulfilled : identity;
onRejected = isCallable(onRejected) ? onRejected : thrower;
nextPromise = new Promise((resolve, reject) => {
function tryCall(func) {
let value;
try {
value = func(promise[VALUE]);
} catch (error) {
reject(error);
return;
}
if (value === nextPromise) {
reject(new TypeError(CHAINING_CYCLE));
} else {
call(resolve, reject, value);
}
}
function asyncOnFulfilled() {
setImmediate(tryCall, onFulfilled);
}
function asyncOnRejected() {
setImmediate(tryCall, onRejected);
}
switch (promise[STATUS]) {
case FULFILLED:
asyncOnFulfilled();
break;
case REJECTED:
asyncOnRejected();
break;
default:
enqueue(promise, asyncOnFulfilled, asyncOnRejected);
}
});
return nextPromise;
};
Promise.prototype.catch = function (onRejected) {
return this.then(identity, onRejected);
};
Promise.resolve = function (value) {
const anything = toPromise(value);
if (isPromise(anything)) {
return anything;
}
return new Promise((resolve, reject) => {
if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
resolve(value);
}
});
};
Promise.reject = function (reason) {
return new Promise((resolve, reject) => {
reject(reason);
});
};
Promise.race = function (values) {
return new Promise((resolve, reject) => {
let i;
let length;
if (isArray(values)) {
length = values.length;
for (i = 0; i < length; i++) {
call(resolve, reject, values[i]);
}
} else {
reject(new TypeError(NOT_ARRAY));
}
});
};
Promise.all = function (values) {
return new Promise((resolve, reject) => {
let fulfilledCount = 0;
let promiseCount = 0;
let anything;
let length;
let value;
let i;
if (isArray(values)) {
values = values.slice(0);
length = values.length;
for (i = 0; i < length; i++) {
value = values[i];
anything = toPromise(value);
if (isPromise(anything)) {
promiseCount++;
anything.then(
(function (index) {
return function (value) {
values[index] = value;
fulfilledCount++;
if (fulfilledCount == promiseCount) {
resolve(values);
}
};
}(i)),
reject,
);
} else if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
// [1, , 3] → [1, undefined, 3]
values[i] = value;
}
}
if (!promiseCount) {
resolve(values);
}
} else {
reject(new TypeError(NOT_ARRAY));
}
});
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = global.Promise || Promise;
} else if (!global.Promise) {
global.Promise = Promise;
}
}(this));