123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 'use strict';
-
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- exports.default = queueRunner;
-
- var _jestUtil = require('jest-util');
-
- var _PCancelable = _interopRequireDefault(require('./PCancelable'));
-
- var _pTimeout = _interopRequireDefault(require('./pTimeout'));
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {default: obj};
- }
-
- var global = (function () {
- if (typeof globalThis !== 'undefined') {
- return globalThis;
- } else if (typeof global !== 'undefined') {
- return global;
- } else if (typeof self !== 'undefined') {
- return self;
- } else if (typeof window !== 'undefined') {
- return window;
- } else {
- return Function('return this')();
- }
- })();
-
- var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
-
- var global = (function () {
- if (typeof globalThis !== 'undefined') {
- return globalThis;
- } else if (typeof global !== 'undefined') {
- return global;
- } else if (typeof self !== 'undefined') {
- return self;
- } else if (typeof window !== 'undefined') {
- return window;
- } else {
- return Function('return this')();
- }
- })();
-
- var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
-
- var global = (function () {
- if (typeof globalThis !== 'undefined') {
- return globalThis;
- } else if (typeof global !== 'undefined') {
- return global;
- } else if (typeof self !== 'undefined') {
- return self;
- } else if (typeof window !== 'undefined') {
- return window;
- } else {
- return Function('return this')();
- }
- })();
-
- var Promise = global[Symbol.for('jest-native-promise')] || global.Promise;
-
- function queueRunner(options) {
- const token = new _PCancelable.default((onCancel, resolve) => {
- onCancel(resolve);
- });
-
- const mapper = ({fn, timeout, initError = new Error()}) => {
- let promise = new Promise(resolve => {
- const next = function (...args) {
- const err = args[0];
-
- if (err) {
- options.fail.apply(null, args);
- }
-
- resolve();
- };
-
- next.fail = function (...args) {
- options.fail.apply(null, args);
- resolve();
- };
-
- try {
- fn.call(options.userContext, next);
- } catch (e) {
- options.onException(e);
- resolve();
- }
- });
- promise = Promise.race([promise, token]);
-
- if (!timeout) {
- return promise;
- }
-
- const timeoutMs = timeout();
- return (0, _pTimeout.default)(
- promise,
- timeoutMs,
- options.clearTimeout,
- options.setTimeout,
- () => {
- initError.message =
- 'Timeout - Async callback was not invoked within the ' +
- (0, _jestUtil.formatTime)(timeoutMs) +
- ' timeout specified by jest.setTimeout.';
- initError.stack = initError.message + initError.stack;
- options.onException(initError);
- }
- );
- };
-
- const result = options.queueableFns.reduce(
- (promise, fn) => promise.then(() => mapper(fn)),
- Promise.resolve()
- );
- return {
- cancel: token.cancel.bind(token),
- catch: result.catch.bind(result),
- then: result.then.bind(result)
- };
- }
|