UNPKG

@theintern/leadfoot

Version:

Leadfoot. A JavaScript client library that brings cross-platform consistency to the Selenium WebDriver API.

95 lines 3.68 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var util = __importStar(require("../lib/util")); function pollUntil(poller, argsOrTimeout, timeout, pollInterval) { var args; if (typeof argsOrTimeout === 'number') { pollInterval = timeout; timeout = argsOrTimeout; } else { args = argsOrTimeout; } args = args || []; pollInterval = pollInterval || 67; return function () { var session = this.session; var originalTimeout; return session.getExecuteAsyncTimeout().then(function (currentTimeout) { var resultOrError; function storeResult(result) { resultOrError = result; } function finish() { if (resultOrError instanceof Error) { throw resultOrError; } if (resultOrError == null) { var error = new Error('Polling timed out with no result'); error.name = 'ScriptTimeout'; throw error; } return resultOrError; } function cleanup() { if (!isNaN(originalTimeout)) { return session.setExecuteAsyncTimeout(originalTimeout).then(finish); } return finish(); } if (!isNaN(timeout)) { originalTimeout = currentTimeout; } else { timeout = currentTimeout; } return session .setExecuteAsyncTimeout(timeout) .then(function () { /* jshint maxlen:140 */ return session.executeAsync( /* istanbul ignore next */ function (poller, args, timeout, pollInterval, done) { /* jshint evil:true */ poller = new Function(poller); var endTime = Number(new Date()) + timeout; (function poll() { var result = poller.apply(this, args); /*jshint evil:true */ if (result != null) { done(result); } else if (Number(new Date()) < endTime) { setTimeout(poll, pollInterval); } else { done(null); } })(); }, [util.toExecuteString(poller), args, timeout, pollInterval]); }) .then(storeResult, storeResult) .then(cleanup, cleanup); }); }; } exports.default = pollUntil; //# sourceMappingURL=pollUntil.js.map