"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // TODO: Fix https://github.com/DevExpress/testcafe/issues/4139 to get rid of Pinkie const pinkie_1 = __importDefault(require("pinkie")); const lodash_1 = require("lodash"); const test_run_tracker_1 = __importDefault(require("../api/test-run-tracker")); class ReExecutablePromise extends pinkie_1.default { constructor(executorFn) { super(lodash_1.noop); this._fn = executorFn; this._taskPromise = null; } _ensureExecuting() { if (!this._taskPromise) this._taskPromise = new pinkie_1.default(this._fn); } _reExecute() { this._taskPromise = null; return this; } then(onFulfilled, onRejected) { this._ensureExecuting(); return this._taskPromise.then(onFulfilled, onRejected); } catch(onRejected) { this._ensureExecuting(); return this._taskPromise.catch(onRejected); } static fromFn(asyncExecutorFn) { const testRunId = test_run_tracker_1.default.getContextTestRunId(); if (testRunId) asyncExecutorFn = test_run_tracker_1.default.addTrackingMarkerToFunction(testRunId, asyncExecutorFn); return new ReExecutablePromise((resolve) => resolve(asyncExecutorFn())); } } exports.default = ReExecutablePromise; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmUtZXhlY3V0YWJsZS1wcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlLWV4ZWN1dGFibGUtcHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBQThCO0FBQzlCLCtFQUFxRDtBQU1yRCxNQUFxQixtQkFBb0IsU0FBUSxnQkFBZ0I7SUFJN0QsWUFBb0IsVUFBc0I7UUFDdEMsS0FBSyxDQUFDLGFBQUksQ0FBQyxDQUFDO1FBRVosSUFBSSxDQUFDLEdBQUcsR0FBWSxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGdCQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLElBQUksQ0FBRSxXQUEyQixFQUFFLFVBQXlCO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE9BQVEsSUFBSSxDQUFDLFlBQWlDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sS0FBSyxDQUFFLFVBQXlCO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE9BQVEsSUFBSSxDQUFDLFlBQWlDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBTSxDQUFFLGVBQXlCO1FBQzNDLE1BQU0sU0FBUyxHQUFHLDBCQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUV2RCxJQUFJLFNBQVM7WUFDVCxlQUFlLEdBQUcsMEJBQWMsQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFN0YsT0FBTyxJQUFJLG1CQUFtQixDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0o7QUExQ0Qsc0NBMENDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogRml4IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL3Rlc3RjYWZlL2lzc3Vlcy80MTM5IHRvIGdldCByaWQgb2YgUGlua2llXG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdGVzdFJ1blRyYWNrZXIgZnJvbSAnLi4vYXBpL3Rlc3QtcnVuLXRyYWNrZXInO1xuXG50eXBlIEV4ZWN1dG9yRm4gPSAocmVzb2x2ZTogKHZhbHVlPzogdW5rbm93bikgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xudHlwZSBPbkZ1bGZpbGxlZEZuID0gKCh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2VMaWtlPHVua25vd24+KSB8IHVuZGVmaW5lZCB8IG51bGw7XG50eXBlIE9uUmVqZWN0ZWRGbiA9ICgocmVhc29uPzogdW5rbm93bikgPT4gUHJvbWlzZUxpa2U8bmV2ZXI+KSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlRXhlY3V0YWJsZVByb21pc2UgZXh0ZW5kcyBQcm9taXNlPHVua25vd24+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mbjogRXhlY3V0b3JGbjtcbiAgICBwcml2YXRlIF90YXNrUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPiB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGV4ZWN1dG9yRm46IEV4ZWN1dG9yRm4pIHtcbiAgICAgICAgc3VwZXIobm9vcCk7XG5cbiAgICAgICAgdGhpcy5fZm4gICAgICAgICAgPSBleGVjdXRvckZuO1xuICAgICAgICB0aGlzLl90YXNrUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5zdXJlRXhlY3V0aW5nICgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrUHJvbWlzZSlcbiAgICAgICAgICAgIHRoaXMuX3Rhc2tQcm9taXNlID0gbmV3IFByb21pc2UodGhpcy5fZm4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBfcmVFeGVjdXRlICgpOiBSZUV4ZWN1dGFibGVQcm9taXNlIHtcbiAgICAgICAgdGhpcy5fdGFza1Byb21pc2UgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aGVuIChvbkZ1bGZpbGxlZD86IE9uRnVsZmlsbGVkRm4sIG9uUmVqZWN0ZWQ/OiBPblJlamVjdGVkRm4pOiBhbnkge1xuICAgICAgICB0aGlzLl9lbnN1cmVFeGVjdXRpbmcoKTtcblxuICAgICAgICByZXR1cm4gKHRoaXMuX3Rhc2tQcm9taXNlIGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYXRjaCAob25SZWplY3RlZD86IE9uUmVqZWN0ZWRGbik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICB0aGlzLl9lbnN1cmVFeGVjdXRpbmcoKTtcblxuICAgICAgICByZXR1cm4gKHRoaXMuX3Rhc2tQcm9taXNlIGFzIFByb21pc2U8dW5rbm93bj4pLmNhdGNoKG9uUmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUZuIChhc3luY0V4ZWN1dG9yRm46IEZ1bmN0aW9uKTogUmVFeGVjdXRhYmxlUHJvbWlzZSB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5JZCA9IHRlc3RSdW5UcmFja2VyLmdldENvbnRleHRUZXN0UnVuSWQoKTtcblxuICAgICAgICBpZiAodGVzdFJ1bklkKVxuICAgICAgICAgICAgYXN5bmNFeGVjdXRvckZuID0gdGVzdFJ1blRyYWNrZXIuYWRkVHJhY2tpbmdNYXJrZXJUb0Z1bmN0aW9uKHRlc3RSdW5JZCwgYXN5bmNFeGVjdXRvckZuKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJlRXhlY3V0YWJsZVByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiByZXNvbHZlKGFzeW5jRXhlY3V0b3JGbigpKSk7XG4gICAgfVxufVxuIl19