@axe-core/watcher 0.0.1-next.581e3953 → 0.0.1-next.595683d8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/util.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  export declare const PATH_TO_EXTENSION: string;
2
2
  export declare const DEFAULT_SERVER_URL = "https://axe.deque.com/";
3
+ export declare const PATH_TO_SESSION_FILE: string;
4
+ export declare const PATH_TO_EXTENSION_VARIABLES: string;
3
5
  export declare const extensionArgs: readonly [`--disable-extensions-except=${string}`, `--load-extension=${string}`];
6
+ export declare class HeadlessNotSupportedError extends Error {
7
+ name: string;
8
+ constructor();
9
+ }
4
10
  export interface Configuration {
5
11
  axe: {
6
12
  /** Your axe API key. */
@@ -22,11 +28,12 @@ interface WriteVariablesParams {
22
28
  sessionId?: string;
23
29
  autoAnalyze?: boolean;
24
30
  }
31
+ /** Write the user's settings to the disk, so the extension can load them. */
25
32
  export declare function writeVariables({ apiKey, serverURL, sessionId, autoAnalyze }: WriteVariablesParams): void;
26
- export declare abstract class ManualController {
27
- protected abstract executeScript(fn: string | (() => Promise<void>)): Promise<void>;
28
- start(): Promise<void>;
29
- stop(): Promise<void>;
30
- analyze(): Promise<void>;
33
+ interface WriteManifestParams {
34
+ all_frames: boolean;
35
+ exclude_globs: string[];
31
36
  }
37
+ /** Update the extension manifest file. */
38
+ export declare function writeManifest({ all_frames, exclude_globs }: WriteManifestParams): void;
32
39
  export {};
package/dist/util.js CHANGED
@@ -1,4 +1,19 @@
1
1
  "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
2
17
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
18
  if (k2 === undefined) k2 = k;
4
19
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -22,53 +37,34 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
37
  __setModuleDefault(result, mod);
23
38
  return result;
24
39
  };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __generator = (this && this.__generator) || function (thisArg, body) {
35
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
- function verb(n) { return function (v) { return step([n, v]); }; }
38
- function step(op) {
39
- if (f) throw new TypeError("Generator is already executing.");
40
- while (_) try {
41
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
- if (y = 0, t) op = [op[0] & 2, t.value];
43
- switch (op[0]) {
44
- case 0: case 1: t = op; break;
45
- case 4: _.label++; return { value: op[1], done: false };
46
- case 5: _.label++; y = op[1]; op = [0]; continue;
47
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
- default:
49
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
- if (t[2]) _.ops.pop();
54
- _.trys.pop(); continue;
55
- }
56
- op = body.call(thisArg, _);
57
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
- }
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
60
42
  };
61
43
  Object.defineProperty(exports, "__esModule", { value: true });
62
- exports.ManualController = exports.writeVariables = exports.extensionArgs = exports.DEFAULT_SERVER_URL = exports.PATH_TO_EXTENSION = void 0;
63
- var fs = __importStar(require("fs"));
64
- var path = __importStar(require("path"));
65
- exports.PATH_TO_EXTENSION = path.join(__dirname, '..', 'extension');
44
+ exports.writeManifest = exports.writeVariables = exports.HeadlessNotSupportedError = exports.extensionArgs = exports.PATH_TO_EXTENSION_VARIABLES = exports.PATH_TO_SESSION_FILE = exports.DEFAULT_SERVER_URL = exports.PATH_TO_EXTENSION = void 0;
45
+ var fs_1 = __importDefault(require("fs"));
46
+ var path_1 = __importDefault(require("path"));
47
+ var os_1 = __importDefault(require("os"));
48
+ var git = __importStar(require("./git"));
49
+ exports.PATH_TO_EXTENSION = path_1.default.join(__dirname, '..', 'extension');
66
50
  exports.DEFAULT_SERVER_URL = 'https://axe.deque.com/';
51
+ exports.PATH_TO_SESSION_FILE = path_1.default.join(os_1.default.tmpdir(), 'axe-watcher-session.json');
52
+ exports.PATH_TO_EXTENSION_VARIABLES = path_1.default.join(exports.PATH_TO_EXTENSION, 'variables.json');
67
53
  exports.extensionArgs = [
68
54
  "--disable-extensions-except=".concat(exports.PATH_TO_EXTENSION),
69
55
  "--load-extension=".concat(exports.PATH_TO_EXTENSION)
70
56
  ];
71
- // Write the user's settings to the disk, so the extension can load them
57
+ var HeadlessNotSupportedError = /** @class */ (function (_super) {
58
+ __extends(HeadlessNotSupportedError, _super);
59
+ function HeadlessNotSupportedError() {
60
+ var _this = _super.call(this, 'Cannot use extension while headless.') || this;
61
+ _this.name = 'HeadlessNotSupportedError';
62
+ return _this;
63
+ }
64
+ return HeadlessNotSupportedError;
65
+ }(Error));
66
+ exports.HeadlessNotSupportedError = HeadlessNotSupportedError;
67
+ /** Write the user's settings to the disk, so the extension can load them. */
72
68
  function writeVariables(_a) {
73
69
  var apiKey = _a.apiKey, serverURL = _a.serverURL, sessionId = _a.sessionId, autoAnalyze = _a.autoAnalyze;
74
70
  if (!serverURL) {
@@ -84,84 +80,46 @@ function writeVariables(_a) {
84
80
  if (typeof autoAnalyze === 'undefined') {
85
81
  autoAnalyze = true;
86
82
  }
87
- var filePath = path.join(exports.PATH_TO_EXTENSION, 'variables.json');
88
- fs.writeFileSync(filePath, JSON.stringify({
83
+ // When a custom session ID is not provided, attempt to read it from the filesystem.
84
+ // This enables multi-process/multi-browser test suites to all use the same session ID.
85
+ if (!sessionId && fs_1.default.existsSync(exports.PATH_TO_SESSION_FILE)) {
86
+ try {
87
+ var data = JSON.parse(fs_1.default.readFileSync(exports.PATH_TO_SESSION_FILE, 'utf8'));
88
+ sessionId = data.id;
89
+ }
90
+ catch (error) {
91
+ throw new Error("Unable to read session configuration: ".concat(error));
92
+ }
93
+ }
94
+ var variables = {
89
95
  api_key: apiKey,
90
96
  server_url: urlString,
91
97
  session_id: sessionId,
92
98
  auto_analyze: !!autoAnalyze
93
- }));
99
+ };
100
+ // If the repository is a git repository, add git info to the variables.
101
+ if (git.isRepository()) {
102
+ variables.git_branch = git.getBranchName();
103
+ variables.git_default_branch = git.getDefaultBranchName();
104
+ var info = git.getCommitInfo();
105
+ variables.git_commit_sha = info === null || info === void 0 ? void 0 : info.hash;
106
+ variables.git_commit_author = info === null || info === void 0 ? void 0 : info.author;
107
+ variables.git_commit_email = info === null || info === void 0 ? void 0 : info.email;
108
+ variables.git_commit_message = info === null || info === void 0 ? void 0 : info.message;
109
+ variables.git_url = git.getRemoteURL();
110
+ variables.git_is_dirty = git.isDirty();
111
+ }
112
+ fs_1.default.writeFileSync(exports.PATH_TO_EXTENSION_VARIABLES, JSON.stringify(variables));
94
113
  }
95
114
  exports.writeVariables = writeVariables;
96
- function updateAutoAnalyze(newVal) {
97
- var filePath = path.join(exports.PATH_TO_EXTENSION, 'variables.json');
98
- var fileContents = fs.readFileSync(filePath, 'utf-8');
99
- var jsonValue = JSON.parse(fileContents);
100
- jsonValue['auto_analyze'] = newVal;
101
- fs.writeFileSync(filePath, JSON.stringify(jsonValue));
115
+ /** Update the extension manifest file. */
116
+ function writeManifest(_a) {
117
+ var all_frames = _a.all_frames, exclude_globs = _a.exclude_globs;
118
+ var manifestPath = path_1.default.join(exports.PATH_TO_EXTENSION, 'manifest.json');
119
+ var manifest = JSON.parse(fs_1.default.readFileSync(manifestPath, 'utf-8'));
120
+ manifest.content_scripts[0].all_frames = all_frames;
121
+ manifest.content_scripts[0].exclude_globs = exclude_globs;
122
+ fs_1.default.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
102
123
  }
103
- var ManualController = /** @class */ (function () {
104
- function ManualController() {
105
- }
106
- ManualController.prototype.start = function () {
107
- return __awaiter(this, void 0, void 0, function () {
108
- return __generator(this, function (_a) {
109
- switch (_a.label) {
110
- case 0:
111
- updateAutoAnalyze(true);
112
- return [4 /*yield*/, this.executeScript(function () {
113
- var event = new CustomEvent('axe:start-auto-mode');
114
- window.dispatchEvent(event);
115
- return Promise.resolve();
116
- })];
117
- case 1:
118
- _a.sent();
119
- return [2 /*return*/];
120
- }
121
- });
122
- });
123
- };
124
- ManualController.prototype.stop = function () {
125
- return __awaiter(this, void 0, void 0, function () {
126
- return __generator(this, function (_a) {
127
- switch (_a.label) {
128
- case 0:
129
- updateAutoAnalyze(false);
130
- return [4 /*yield*/, this.executeScript(function () {
131
- var event = new CustomEvent('axe:stop-auto-mode');
132
- window.dispatchEvent(event);
133
- return Promise.resolve();
134
- })];
135
- case 1:
136
- _a.sent();
137
- return [2 /*return*/];
138
- }
139
- });
140
- });
141
- };
142
- ManualController.prototype.analyze = function () {
143
- return __awaiter(this, void 0, void 0, function () {
144
- return __generator(this, function (_a) {
145
- switch (_a.label) {
146
- case 0: return [4 /*yield*/, this.executeScript(function () {
147
- return new Promise(function (resolve) {
148
- var event = new CustomEvent('axe:manual-mode-analyze');
149
- window.dispatchEvent(event);
150
- var p = function () {
151
- window.removeEventListener('axe:manual-mode-analyze-done', p);
152
- resolve();
153
- };
154
- window.addEventListener('axe:manual-mode-analyze-done', p);
155
- });
156
- })];
157
- case 1:
158
- _a.sent();
159
- return [2 /*return*/];
160
- }
161
- });
162
- });
163
- };
164
- return ManualController;
165
- }());
166
- exports.ManualController = ManualController;
124
+ exports.writeManifest = writeManifest;
167
125
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/dist/wdio.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { Configuration, ManualController } from './util';
2
1
  import type { Options } from '@wdio/types';
2
+ import { Configuration } from './util';
3
+ import Controller from './Controller';
3
4
  interface Browser {
4
5
  executeAsyncScript(script: string, args: object[]): void;
5
6
  }
@@ -13,7 +14,7 @@ interface WdioArg extends Configuration {
13
14
  */
14
15
  export declare function wdioConfig(arg: WdioArg): Options.WebDriver;
15
16
  export declare function wdioTestRunner(axe: Configuration['axe'], config: Options.Testrunner): Options.Testrunner;
16
- export declare class WdioManualController extends ManualController {
17
+ export declare class WdioController extends Controller {
17
18
  private driver;
18
19
  constructor(driver: Browser);
19
20
  protected executeScript(fn: string | (() => Promise<void>)): Promise<void>;
package/dist/wdio.js CHANGED
@@ -61,9 +61,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
61
61
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
62
  }
63
63
  };
64
+ var __importDefault = (this && this.__importDefault) || function (mod) {
65
+ return (mod && mod.__esModule) ? mod : { "default": mod };
66
+ };
64
67
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.WdioManualController = exports.wdioTestRunner = exports.wdioConfig = void 0;
68
+ exports.WdioController = exports.wdioTestRunner = exports.wdioConfig = void 0;
69
+ var uuid_1 = require("uuid");
70
+ var fs_1 = __importDefault(require("fs"));
66
71
  var util_1 = require("./util");
72
+ var Controller_1 = __importDefault(require("./Controller"));
73
+ var noop = function () {
74
+ // Nothing.
75
+ };
67
76
  /**
68
77
  * Creates a WebDriverIO config that uses axe extension
69
78
  *
@@ -77,7 +86,7 @@ function wdioConfig(arg) {
77
86
  var chromeOpts = ((_b = (_a = arg.options) === null || _a === void 0 ? void 0 : _a.capabilities) === null || _b === void 0 ? void 0 : _b['goog:chromeOptions']) || {};
78
87
  var args = chromeOpts.args || [];
79
88
  if (args.includes('--headless')) {
80
- throw new Error('Cannot use extension while headless.');
89
+ throw new util_1.HeadlessNotSupportedError();
81
90
  }
82
91
  return __assign(__assign({}, arg.options), { capabilities: __assign(__assign({}, (_c = arg.options) === null || _c === void 0 ? void 0 : _c.capabilities), { browserName: 'chrome', 'goog:chromeOptions': {
83
92
  args: util_1.extensionArgs.concat(args)
@@ -102,20 +111,47 @@ function wdioTestRunner(axe, config) {
102
111
  chromeOpts.args = chromeOpts.args || [];
103
112
  var args = chromeOpts.args;
104
113
  if (args.includes('--headless')) {
105
- throw new Error('Cannot use extension while headless.');
114
+ throw new util_1.HeadlessNotSupportedError();
106
115
  }
107
116
  chromeOpts.args = util_1.extensionArgs.concat(args);
108
- return __assign(__assign({}, config), { capabilities: capabilities });
117
+ var _a = config.onPrepare, onPrepare = _a === void 0 ? noop : _a, _b = config.onComplete, onComplete = _b === void 0 ? noop : _b;
118
+ return __assign(__assign({}, config), { capabilities: capabilities,
119
+ // Write a static/persistent session to disk so that each worker uses the same session ID.
120
+ onPrepare: function () {
121
+ var params = [];
122
+ for (var _i = 0; _i < arguments.length; _i++) {
123
+ params[_i] = arguments[_i];
124
+ }
125
+ var sessionId = axe.sessionId || (0, uuid_1.v4)();
126
+ fs_1.default.writeFileSync(util_1.PATH_TO_SESSION_FILE, JSON.stringify({ id: sessionId }));
127
+ // @ts-expect-error TS is angry about calling this ¯\_(ツ)_/¯
128
+ return onPrepare.apply(void 0, params);
129
+ },
130
+ // Remove the file, preventing other sessions from reusing its ID.
131
+ onComplete: function () {
132
+ var params = [];
133
+ for (var _i = 0; _i < arguments.length; _i++) {
134
+ params[_i] = arguments[_i];
135
+ }
136
+ try {
137
+ fs_1.default.unlinkSync(util_1.PATH_TO_SESSION_FILE);
138
+ }
139
+ catch (_a) {
140
+ // Oh well.
141
+ }
142
+ // @ts-expect-error TS is angry about calling this ¯\_(ツ)_/¯
143
+ return onComplete.apply(void 0, params);
144
+ } });
109
145
  }
110
146
  exports.wdioTestRunner = wdioTestRunner;
111
- var WdioManualController = /** @class */ (function (_super) {
112
- __extends(WdioManualController, _super);
113
- function WdioManualController(driver) {
147
+ var WdioController = /** @class */ (function (_super) {
148
+ __extends(WdioController, _super);
149
+ function WdioController(driver) {
114
150
  var _this = _super.call(this) || this;
115
151
  _this.driver = driver;
116
152
  return _this;
117
153
  }
118
- WdioManualController.prototype.executeScript = function (fn) {
154
+ WdioController.prototype.executeScript = function (fn) {
119
155
  return __awaiter(this, void 0, void 0, function () {
120
156
  var script;
121
157
  return __generator(this, function (_a) {
@@ -130,7 +166,7 @@ var WdioManualController = /** @class */ (function (_super) {
130
166
  });
131
167
  });
132
168
  };
133
- return WdioManualController;
134
- }(util_1.ManualController));
135
- exports.WdioManualController = WdioManualController;
169
+ return WdioController;
170
+ }(Controller_1.default));
171
+ exports.WdioController = WdioController;
136
172
  //# sourceMappingURL=wdio.js.map
package/dist/wdio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wdio.js","sourceRoot":"","sources":["../src/wdio.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAKe;AAWf;;;;GAIG;AAEH,SAAgB,UAAU,CAAC,GAAY;;IACrC,IAAA,qBAAc,EAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEvB,iFAAiF;IACjF,uDAAuD;IACvD,IAAM,UAAU,GACd,CAAA,MAAC,MAAA,GAAG,CAAC,OAAO,0CAAE,YAAoB,0CAAG,oBAAoB,CAAC,KAAI,EAAE,CAAA;IAClE,IAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IAElC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;KACxD;IAED,6BACK,GAAG,CAAC,OAAO,KACd,YAAY,wBACP,MAAA,GAAG,CAAC,OAAO,0CAAE,YAAY,KAC5B,WAAW,EAAE,QAAQ,EACrB,oBAAoB,EAAE;gBACpB,IAAI,EAAE,oBAAa,CAAC,MAAM,CAAC,IAAI,CAAC;aACjC,OAEJ;AACH,CAAC;AAvBD,gCAuBC;AAED,sFAAsF;AACtF,SAAgB,cAAc,CAC5B,GAAyB,EACzB,MAA0B;IAE1B,IAAA,qBAAc,EAAC,GAAG,CAAC,CAAA;IACnB,IAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI;QAC1C;YACE,oBAAoB,EAAE;gBACpB,IAAI,EAAE,EAAE;aACT;SACF;KACF,CAAA;IACD,6CAA6C;IAC7C,IAAM,eAAe,GAAI,YAAoB,CAAC,CAAC,CAAC,CAAA;IAChD,eAAe,CAAC,oBAAoB,CAAC;QACnC,eAAe,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAM,UAAU,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAA;IACxD,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IACvC,IAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAE5B,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;KACxD;IAED,UAAU,CAAC,IAAI,GAAG,oBAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAE5C,6BACK,MAAM,KACT,YAAY,cAAA,IACb;AACH,CAAC;AA9BD,wCA8BC;AAED;IAA0C,wCAAgB;IAGxD,8BAAY,MAAe;QAA3B,YACE,iBAAO,SAER;QADC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;;IACtB,CAAC;IAEe,4CAAa,GAA7B,UACE,EAAkC;;;;;;wBAE5B,MAAM,GAAG,4GAGH,EAAE,sCAEb,CAAA;wBACD,qBAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAA;;wBAAhD,SAAgD,CAAA;;;;;KACjD;IACH,2BAAC;AAAD,CAAC,AAnBD,CAA0C,uBAAgB,GAmBzD;AAnBY,oDAAoB"}
1
+ {"version":3,"file":"wdio.js","sourceRoot":"","sources":["../src/wdio.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { Configuration, ManualController } from './util';
2
1
  import type { WebDriver } from 'selenium-webdriver';
3
2
  import type { Options } from 'selenium-webdriver/chrome';
3
+ import { Configuration } from './util';
4
+ import Controller from './Controller';
4
5
  interface WebDriverArgs extends Configuration {
5
6
  options?: Options;
6
7
  }
@@ -10,7 +11,7 @@ interface WebDriverArgs extends Configuration {
10
11
  * @param arg Config to extend
11
12
  */
12
13
  export declare function webdriverConfig(arg: WebDriverArgs): Options;
13
- export declare class WebdriverManualController extends ManualController {
14
+ export declare class WebdriverController extends Controller {
14
15
  private driver;
15
16
  constructor(driver: WebDriver);
16
17
  protected executeScript(fn: string | (() => Promise<void>)): Promise<void>;
package/dist/webdriver.js CHANGED
@@ -50,9 +50,13 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
50
50
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
51
  }
52
52
  };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
53
56
  Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.WebdriverManualController = exports.webdriverConfig = void 0;
57
+ exports.WebdriverController = exports.webdriverConfig = void 0;
55
58
  var util_1 = require("./util");
59
+ var Controller_1 = __importDefault(require("./Controller"));
56
60
  /**
57
61
  * Creates a Selenium config that uses axe extension
58
62
  *
@@ -70,19 +74,19 @@ function webdriverConfig(arg) {
70
74
  // Note: fragile, but selenium does not give us a real way to check this
71
75
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
76
  if ((_b = (_a = opts === null || opts === void 0 ? void 0 : opts.options_) === null || _a === void 0 ? void 0 : _a.args) === null || _b === void 0 ? void 0 : _b.includes('headless')) {
73
- throw new Error('Cannot use extension while headless.');
77
+ throw new util_1.HeadlessNotSupportedError();
74
78
  }
75
79
  return opts;
76
80
  }
77
81
  exports.webdriverConfig = webdriverConfig;
78
- var WebdriverManualController = /** @class */ (function (_super) {
79
- __extends(WebdriverManualController, _super);
80
- function WebdriverManualController(driver) {
82
+ var WebdriverController = /** @class */ (function (_super) {
83
+ __extends(WebdriverController, _super);
84
+ function WebdriverController(driver) {
81
85
  var _this = _super.call(this) || this;
82
86
  _this.driver = driver;
83
87
  return _this;
84
88
  }
85
- WebdriverManualController.prototype.executeScript = function (fn) {
89
+ WebdriverController.prototype.executeScript = function (fn) {
86
90
  return __awaiter(this, void 0, void 0, function () {
87
91
  var script;
88
92
  return __generator(this, function (_a) {
@@ -97,7 +101,7 @@ var WebdriverManualController = /** @class */ (function (_super) {
97
101
  });
98
102
  });
99
103
  };
100
- return WebdriverManualController;
101
- }(util_1.ManualController));
102
- exports.WebdriverManualController = WebdriverManualController;
104
+ return WebdriverController;
105
+ }(Controller_1.default));
106
+ exports.WebdriverController = WebdriverController;
103
107
  //# sourceMappingURL=webdriver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webdriver.js","sourceRoot":"","sources":["../src/webdriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAKe;AAQf;;;;GAIG;AAEH,SAAgB,eAAe,CAAC,GAAkB;;IAChD,gHAAgH;IAChH,8DAA8D;IAC9D,IAAM,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAE3C,IAAA,GAAG,GAAc,GAAG,IAAjB,EAAE,OAAO,GAAK,GAAG,QAAR,CAAQ;IAC5B,IAAA,qBAAc,EAAC,GAAG,CAAC,CAAA;IAEnB,IAAM,IAAI,GAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAA;IAC9D,IAAI,CAAC,YAAY,OAAjB,IAAI,EAAiB,oBAAa,EAAC;IAEnC,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,MAAA,MAAC,IAAY,aAAZ,IAAI,uBAAJ,IAAI,CAAU,QAAQ,0CAAE,IAAI,0CAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;QACvD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;KACxD;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAlBD,0CAkBC;AAED;IAA+C,6CAAgB;IAG7D,mCAAY,MAAiB;QAA7B,YACE,iBAAO,SAER;QADC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;;IACtB,CAAC;IAEe,iDAAa,GAA7B,UACE,EAAkC;;;;;;wBAE5B,MAAM,GAAG,4GAGH,EAAE,sCAEb,CAAA;wBACD,qBAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAA;;wBAA5C,SAA4C,CAAA;;;;;KAC7C;IACH,gCAAC;AAAD,CAAC,AAnBD,CAA+C,uBAAgB,GAmB9D;AAnBY,8DAAyB"}
1
+ {"version":3,"file":"webdriver.js","sourceRoot":"","sources":["../src/webdriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,+BAKe;AACf,4DAAqC;AAMrC;;;;GAIG;AAEH,SAAgB,eAAe,CAAC,GAAkB;;IAChD,gHAAgH;IAChH,8DAA8D;IAC9D,IAAM,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAE3C,IAAA,GAAG,GAAc,GAAG,IAAjB,EAAE,OAAO,GAAK,GAAG,QAAR,CAAQ;IAC5B,IAAA,qBAAc,EAAC,GAAG,CAAC,CAAA;IAEnB,IAAM,IAAI,GAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAA;IAC9D,IAAI,CAAC,YAAY,OAAjB,IAAI,EAAiB,oBAAa,EAAC;IAEnC,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,MAAA,MAAC,IAAY,aAAZ,IAAI,uBAAJ,IAAI,CAAU,QAAQ,0CAAE,IAAI,0CAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;QACvD,MAAM,IAAI,gCAAyB,EAAE,CAAA;KACtC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAlBD,0CAkBC;AAED;IAAyC,uCAAU;IAGjD,6BAAY,MAAiB;QAA7B,YACE,iBAAO,SAER;QADC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;;IACtB,CAAC;IAEe,2CAAa,GAA7B,UACE,EAAkC;;;;;;wBAE5B,MAAM,GAAG,4GAGH,EAAE,sCAEb,CAAA;wBACD,qBAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAA;;wBAA5C,SAA4C,CAAA;;;;;KAC7C;IACH,0BAAC;AAAD,CAAC,AAnBD,CAAyC,oBAAU,GAmBlD;AAnBY,kDAAmB"}