jam-cloud/jam-ui/node_modules/@playwright/test/lib/utils/async.js

105 lines
2.0 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.raceAgainstDeadline = raceAgainstDeadline;
exports.ManualPromise = exports.DeadlineRunner = void 0;
var _utils = require("./utils");
let _Symbol$species, _Symbol$toStringTag;
class DeadlineRunner {
constructor(promise, deadline) {
this._timer = void 0;
this.result = new ManualPromise();
promise.then(result => {
this._finish({
result
});
}).catch(e => {
this._finish(undefined, e);
});
this.updateDeadline(deadline);
}
_finish(success, error) {
if (this.result.isDone()) return;
this.updateDeadline(0);
if (success) this.result.resolve(success);else this.result.reject(error);
}
interrupt() {
this.updateDeadline(-1);
}
updateDeadline(deadline) {
if (this._timer) {
clearTimeout(this._timer);
this._timer = undefined;
}
if (deadline === 0) return;
const timeout = deadline - (0, _utils.monotonicTime)();
if (timeout <= 0) this._finish({
timedOut: true
});else this._timer = setTimeout(() => this._finish({
timedOut: true
}), timeout);
}
}
exports.DeadlineRunner = DeadlineRunner;
async function raceAgainstDeadline(promise, deadline) {
return new DeadlineRunner(promise, deadline).result;
}
_Symbol$species = Symbol.species;
_Symbol$toStringTag = Symbol.toStringTag;
class ManualPromise extends Promise {
constructor() {
let resolve;
let reject;
super((f, r) => {
resolve = f;
reject = r;
});
this._resolve = void 0;
this._reject = void 0;
this._isDone = void 0;
this._isDone = false;
this._resolve = resolve;
this._reject = reject;
}
isDone() {
return this._isDone;
}
resolve(t) {
this._isDone = true;
this._resolve(t);
}
reject(e) {
this._isDone = true;
this._reject(e);
}
static get [_Symbol$species]() {
return Promise;
}
get [_Symbol$toStringTag]() {
return 'ManualPromise';
}
}
exports.ManualPromise = ManualPromise;