UNPKG

selenium-state-machine

Version:
93 lines (92 loc) 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueDependency = exports.StaleDependencyReferenceError = void 0; const selenium_webdriver_1 = require("selenium-webdriver"); const Error_1 = require("./Error"); /** * Stale dependency has become stale. It extends StaleElementReferenceError but it tracks which * element is stale. */ class StaleDependencyReferenceError extends selenium_webdriver_1.error.StaleElementReferenceError { constructor(dependency) { super(); this.dependency = dependency; } } exports.StaleDependencyReferenceError = StaleDependencyReferenceError; /** * Generic dependency type. */ class ValueDependency { constructor(config) { this._value = config?.value; this._name = config?.name; this.invalidate = this.invalidate.bind(this); } invalidate() { this._value = undefined; throw new StaleDependencyReferenceError(this); } /** * Get who provides the dependency. */ get provider() { return this._provider; } /** * Set new dependency provider. Must be first in invalid state before assigning. */ set provider(v) { if (this._provider !== undefined && this._provider.name !== v?.name) { throw new Error_1.CriticalError(`provider cannot be set more than once, "${this.name}" has conflicting providers.`); } this._provider = v; } /** * Check if dependency is in ok state. */ get ready() { return this._value !== undefined; } get name() { if (this._name === undefined) { throw new Error_1.CriticalError('dependency is missing name'); } return this._name; } set name(v) { this._name = v; } get id() { return this.name; } get value() { if (this._value === undefined) { throw new Error_1.CriticalError(`${this._name ? `[${this._name}] ` : ''}dependency not set.`); } return this._value; } /** * Assign new value to dependency. This is immutable method. * @param value new value * @param provider new provider * @returns new Dependency with new values */ set(value, provider) { return this.clone({ value, provider }); } /** * Make clone of the dependency. * @param newValues optional new values * @returns new Dependency */ clone(newValues) { const dep = new ValueDependency({ name: newValues?.name ?? this._name, value: newValues?.value ?? this._value }); dep.provider = newValues.provider; return dep; } } exports.ValueDependency = ValueDependency;