Initial commit
This commit is contained in:
72
node_modules/delay/index.js
generated
vendored
Normal file
72
node_modules/delay/index.js
generated
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
'use strict';
|
||||
|
||||
// From https://github.com/sindresorhus/random-int/blob/c37741b56f76b9160b0b63dae4e9c64875128146/index.js#L13-L15
|
||||
const randomInteger = (minimum, maximum) => Math.floor((Math.random() * (maximum - minimum + 1)) + minimum);
|
||||
|
||||
const createAbortError = () => {
|
||||
const error = new Error('Delay aborted');
|
||||
error.name = 'AbortError';
|
||||
return error;
|
||||
};
|
||||
|
||||
const createDelay = ({clearTimeout: defaultClear, setTimeout: set, willResolve}) => (ms, {value, signal} = {}) => {
|
||||
if (signal && signal.aborted) {
|
||||
return Promise.reject(createAbortError());
|
||||
}
|
||||
|
||||
let timeoutId;
|
||||
let settle;
|
||||
let rejectFn;
|
||||
const clear = defaultClear || clearTimeout;
|
||||
|
||||
const signalListener = () => {
|
||||
clear(timeoutId);
|
||||
rejectFn(createAbortError());
|
||||
};
|
||||
|
||||
const cleanup = () => {
|
||||
if (signal) {
|
||||
signal.removeEventListener('abort', signalListener);
|
||||
}
|
||||
};
|
||||
|
||||
const delayPromise = new Promise((resolve, reject) => {
|
||||
settle = () => {
|
||||
cleanup();
|
||||
if (willResolve) {
|
||||
resolve(value);
|
||||
} else {
|
||||
reject(value);
|
||||
}
|
||||
};
|
||||
|
||||
rejectFn = reject;
|
||||
timeoutId = (set || setTimeout)(settle, ms);
|
||||
});
|
||||
|
||||
if (signal) {
|
||||
signal.addEventListener('abort', signalListener, {once: true});
|
||||
}
|
||||
|
||||
delayPromise.clear = () => {
|
||||
clear(timeoutId);
|
||||
timeoutId = null;
|
||||
settle();
|
||||
};
|
||||
|
||||
return delayPromise;
|
||||
};
|
||||
|
||||
const createWithTimers = clearAndSet => {
|
||||
const delay = createDelay({...clearAndSet, willResolve: true});
|
||||
delay.reject = createDelay({...clearAndSet, willResolve: false});
|
||||
delay.range = (minimum, maximum, options) => delay(randomInteger(minimum, maximum), options);
|
||||
return delay;
|
||||
};
|
||||
|
||||
const delay = createWithTimers();
|
||||
delay.createWithTimers = createWithTimers;
|
||||
|
||||
module.exports = delay;
|
||||
// TODO: Remove this for the next major release
|
||||
module.exports.default = delay;
|
||||
Reference in New Issue
Block a user