@appium/base-driver 8.3.1 → 8.4.2
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/build/lib/basedriver/capabilities.d.ts +80 -0
- package/build/lib/basedriver/capabilities.d.ts.map +1 -0
- package/build/lib/basedriver/capabilities.js +11 -10
- package/build/lib/basedriver/commands/event.d.ts +9 -0
- package/build/lib/basedriver/commands/event.d.ts.map +1 -0
- package/build/lib/basedriver/commands/event.js +21 -21
- package/build/lib/basedriver/commands/find.d.ts +11 -0
- package/build/lib/basedriver/commands/find.d.ts.map +1 -0
- package/build/lib/basedriver/commands/find.js +44 -37
- package/build/lib/basedriver/commands/index.d.ts +8 -0
- package/build/lib/basedriver/commands/index.d.ts.map +1 -0
- package/build/lib/basedriver/commands/index.js +17 -14
- package/build/lib/basedriver/commands/log.d.ts +12 -0
- package/build/lib/basedriver/commands/log.d.ts.map +1 -0
- package/build/lib/basedriver/commands/log.js +24 -26
- package/build/lib/basedriver/commands/session.d.ts +11 -0
- package/build/lib/basedriver/commands/session.d.ts.map +1 -0
- package/build/lib/basedriver/commands/session.js +21 -147
- package/build/lib/basedriver/commands/settings.d.ts +10 -0
- package/build/lib/basedriver/commands/settings.d.ts.map +1 -0
- package/build/lib/basedriver/commands/settings.js +19 -17
- package/build/lib/basedriver/commands/timeout.d.ts +8 -0
- package/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
- package/build/lib/basedriver/commands/timeout.js +118 -137
- package/build/lib/basedriver/core.d.ts +235 -0
- package/build/lib/basedriver/core.d.ts.map +1 -0
- package/build/lib/basedriver/core.js +283 -0
- package/build/lib/basedriver/desired-caps.d.ts +5 -0
- package/build/lib/basedriver/desired-caps.d.ts.map +1 -0
- package/build/lib/basedriver/desired-caps.js +1 -1
- package/build/lib/basedriver/device-settings.d.ts +32 -0
- package/build/lib/basedriver/device-settings.d.ts.map +1 -0
- package/build/lib/basedriver/device-settings.js +19 -11
- package/build/lib/basedriver/driver.d.ts +83 -0
- package/build/lib/basedriver/driver.d.ts.map +1 -0
- package/build/lib/basedriver/driver.js +100 -266
- package/build/lib/basedriver/helpers.d.ts +132 -0
- package/build/lib/basedriver/helpers.d.ts.map +1 -0
- package/build/lib/basedriver/helpers.js +17 -1
- package/build/lib/basedriver/logger.d.ts +3 -0
- package/build/lib/basedriver/logger.d.ts.map +1 -0
- package/build/lib/constants.d.ts +9 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/express/crash.d.ts +3 -0
- package/build/lib/express/crash.d.ts.map +1 -0
- package/build/lib/express/express-logging.d.ts +3 -0
- package/build/lib/express/express-logging.d.ts.map +1 -0
- package/build/lib/express/idempotency.d.ts +2 -0
- package/build/lib/express/idempotency.d.ts.map +1 -0
- package/build/lib/express/logger.d.ts +3 -0
- package/build/lib/express/logger.d.ts.map +1 -0
- package/build/lib/express/middleware.d.ts +9 -0
- package/build/lib/express/middleware.d.ts.map +1 -0
- package/build/lib/express/server.d.ts +10 -0
- package/build/lib/express/server.d.ts.map +1 -0
- package/build/lib/express/static.d.ts +6 -0
- package/build/lib/express/static.d.ts.map +1 -0
- package/build/lib/express/websocket.d.ts +64 -0
- package/build/lib/express/websocket.d.ts.map +1 -0
- package/build/lib/express/websocket.js +39 -38
- package/build/lib/helpers/capabilities.d.ts +13 -0
- package/build/lib/helpers/capabilities.d.ts.map +1 -0
- package/build/lib/helpers/capabilities.js +41 -1
- package/build/lib/index.d.ts +183 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +40 -20
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts +48 -0
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts +41 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.js +24 -6
- package/build/lib/jsonwp-status/status.d.ts +159 -0
- package/build/lib/jsonwp-status/status.d.ts.map +1 -0
- package/build/lib/protocol/errors.d.ts +310 -0
- package/build/lib/protocol/errors.d.ts.map +1 -0
- package/build/lib/protocol/errors.js +81 -2
- package/build/lib/protocol/helpers.d.ts +22 -0
- package/build/lib/protocol/helpers.d.ts.map +1 -0
- package/build/lib/protocol/index.d.ts +16 -0
- package/build/lib/protocol/index.d.ts.map +1 -0
- package/build/lib/protocol/index.js +7 -7
- package/build/lib/protocol/protocol.d.ts +11 -0
- package/build/lib/protocol/protocol.d.ts.map +1 -0
- package/build/lib/protocol/protocol.js +2 -6
- package/build/lib/protocol/routes.d.ts +6 -0
- package/build/lib/protocol/routes.d.ts.map +1 -0
- package/build/lib/protocol/routes.js +17 -1
- package/build/lib/protocol/validators.d.ts +8 -0
- package/build/lib/protocol/validators.d.ts.map +1 -0
- package/build/test/basedriver/driver-tests.js +30 -3
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +12 -7
- package/build/test/unit/basedriver/commands/event.spec.js +7 -7
- package/build/test/unit/basedriver/commands/log.spec.js +31 -24
- package/build/test/unit/basedriver/timeout.spec.js +1 -1
- package/build/test/unit/protocol/routes.spec.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -0
- package/lib/basedriver/capabilities.js +49 -10
- package/lib/basedriver/commands/event.js +49 -31
- package/lib/basedriver/commands/find.js +108 -43
- package/lib/basedriver/commands/index.js +25 -19
- package/lib/basedriver/commands/log.js +60 -33
- package/lib/basedriver/commands/session.js +39 -141
- package/lib/basedriver/commands/settings.js +33 -13
- package/lib/basedriver/commands/timeout.js +153 -153
- package/lib/basedriver/core.js +497 -0
- package/lib/basedriver/desired-caps.js +1 -1
- package/lib/basedriver/device-settings.js +47 -12
- package/lib/basedriver/driver.js +273 -395
- package/lib/basedriver/helpers.js +18 -2
- package/lib/express/websocket.js +35 -32
- package/lib/helpers/capabilities.js +60 -1
- package/lib/index.js +16 -12
- package/lib/jsonwp-proxy/proxy.js +26 -6
- package/lib/protocol/errors.js +42 -42
- package/lib/protocol/index.js +4 -4
- package/lib/protocol/protocol.js +1 -3
- package/lib/protocol/routes.js +9 -0
- package/package.json +14 -11
- package/test/basedriver/driver-tests.js +31 -2
- package/index.d.ts +0 -386
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.TimeoutMixin = TimeoutMixin;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -17,173 +17,154 @@ var _support = require("@appium/support");
|
|
|
17
17
|
|
|
18
18
|
var _protocol = require("../../protocol");
|
|
19
19
|
|
|
20
|
-
let commands = {},
|
|
21
|
-
helpers = {},
|
|
22
|
-
extensions = {};
|
|
23
|
-
exports.helpers = helpers;
|
|
24
|
-
exports.commands = commands;
|
|
25
20
|
const MIN_TIMEOUT = 0;
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
type
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
function TimeoutMixin(Base) {
|
|
23
|
+
class TimeoutCommands extends Base {
|
|
24
|
+
async timeouts(type, ms, script, pageLoad, implicit) {
|
|
25
|
+
if (_support.util.hasValue(type) && _support.util.hasValue(ms)) {
|
|
26
|
+
this.log.debug(`MJSONWP timeout arguments: ${JSON.stringify({
|
|
27
|
+
type,
|
|
28
|
+
ms
|
|
29
|
+
})}}`);
|
|
30
|
+
|
|
31
|
+
switch (type) {
|
|
32
|
+
case 'command':
|
|
33
|
+
await this.newCommandTimeout(ms);
|
|
34
|
+
return;
|
|
35
|
+
|
|
36
|
+
case 'implicit':
|
|
37
|
+
await this.implicitWaitMJSONWP(ms);
|
|
38
|
+
return;
|
|
39
|
+
|
|
40
|
+
case 'page load':
|
|
41
|
+
await this.pageLoadTimeoutMJSONWP(ms);
|
|
42
|
+
return;
|
|
43
|
+
|
|
44
|
+
case 'script':
|
|
45
|
+
await this.scriptTimeoutMJSONWP(ms);
|
|
46
|
+
return;
|
|
47
|
+
|
|
48
|
+
default:
|
|
49
|
+
throw new Error(`'${type}' type is not supported for MJSONWP timeout`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
53
|
+
this.log.debug(`W3C timeout argument: ${JSON.stringify({
|
|
54
|
+
script,
|
|
55
|
+
pageLoad,
|
|
56
|
+
implicit
|
|
57
|
+
})}}`);
|
|
38
58
|
|
|
39
|
-
|
|
40
|
-
await this.
|
|
41
|
-
|
|
59
|
+
if (_support.util.hasValue(script)) {
|
|
60
|
+
await this.scriptTimeoutW3C(script);
|
|
61
|
+
}
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
await this.
|
|
45
|
-
|
|
63
|
+
if (_support.util.hasValue(pageLoad)) {
|
|
64
|
+
await this.pageLoadTimeoutW3C(pageLoad);
|
|
65
|
+
}
|
|
46
66
|
|
|
47
|
-
|
|
48
|
-
await this.
|
|
49
|
-
|
|
67
|
+
if (_support.util.hasValue(implicit)) {
|
|
68
|
+
await this.implicitWaitW3C(implicit);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
50
71
|
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
async getTimeouts() {
|
|
73
|
+
return {
|
|
74
|
+
command: this.newCommandTimeoutMs,
|
|
75
|
+
implicit: this.implicitWaitMs
|
|
76
|
+
};
|
|
53
77
|
}
|
|
54
|
-
}
|
|
55
78
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
implicit
|
|
60
|
-
})}}`);
|
|
79
|
+
async implicitWaitW3C(ms) {
|
|
80
|
+
await this.implicitWait(ms);
|
|
81
|
+
}
|
|
61
82
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
83
|
+
async implicitWaitMJSONWP(ms) {
|
|
84
|
+
await this.implicitWait(ms);
|
|
85
|
+
}
|
|
65
86
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
87
|
+
async implicitWait(ms) {
|
|
88
|
+
await this.setImplicitWait(this.parseTimeoutArgument(ms));
|
|
89
|
+
}
|
|
69
90
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
91
|
+
async pageLoadTimeoutW3C(ms) {
|
|
92
|
+
throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
|
|
93
|
+
}
|
|
74
94
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
implicit: this.implicitWaitMs
|
|
79
|
-
};
|
|
80
|
-
};
|
|
95
|
+
async pageLoadTimeoutMJSONWP(ms) {
|
|
96
|
+
throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
|
|
97
|
+
}
|
|
81
98
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
99
|
+
async scriptTimeoutW3C(ms) {
|
|
100
|
+
throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
|
|
101
|
+
}
|
|
85
102
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
103
|
+
async scriptTimeoutMJSONWP(ms) {
|
|
104
|
+
throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
|
|
105
|
+
}
|
|
89
106
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
107
|
+
async newCommandTimeout(ms) {
|
|
108
|
+
this.setNewCommandTimeout(this.parseTimeoutArgument(ms));
|
|
109
|
+
}
|
|
93
110
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
111
|
+
setImplicitWait(ms) {
|
|
112
|
+
this.implicitWaitMs = ms;
|
|
113
|
+
this.log.debug(`Set implicit wait to ${ms}ms`);
|
|
97
114
|
|
|
98
|
-
|
|
99
|
-
|
|
115
|
+
if (this.managedDrivers && this.managedDrivers.length) {
|
|
116
|
+
this.log.debug('Setting implicit wait on managed drivers');
|
|
100
117
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
118
|
+
for (let driver of this.managedDrivers) {
|
|
119
|
+
if (_lodash.default.isFunction(driver.setImplicitWait)) {
|
|
120
|
+
driver.setImplicitWait(ms);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
104
123
|
}
|
|
105
124
|
}
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
125
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
};
|
|
126
|
+
setNewCommandTimeout(ms) {
|
|
127
|
+
this.newCommandTimeoutMs = ms;
|
|
128
|
+
this.log.debug(`Set new command timeout to ${ms}ms`);
|
|
112
129
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
};
|
|
130
|
+
if (this.managedDrivers && this.managedDrivers.length) {
|
|
131
|
+
this.log.debug('Setting new command timeout on managed drivers');
|
|
116
132
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
133
|
+
for (let driver of this.managedDrivers) {
|
|
134
|
+
if (_lodash.default.isFunction(driver.setNewCommandTimeout)) {
|
|
135
|
+
driver.setNewCommandTimeout(ms);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
120
140
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
};
|
|
141
|
+
async implicitWaitForCondition(condFn) {
|
|
142
|
+
this.log.debug(`Waiting up to ${this.implicitWaitMs} ms for condition`);
|
|
124
143
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
144
|
+
let wrappedCondFn = async (...args) => {
|
|
145
|
+
await this.clearNewCommandTimeout();
|
|
146
|
+
return await condFn(...args);
|
|
147
|
+
};
|
|
128
148
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
149
|
+
return await (0, _asyncbox.waitForCondition)(wrappedCondFn, {
|
|
150
|
+
waitMs: this.implicitWaitMs,
|
|
151
|
+
intervalMs: 500,
|
|
152
|
+
logger: this.log
|
|
153
|
+
});
|
|
154
|
+
}
|
|
132
155
|
|
|
133
|
-
|
|
134
|
-
|
|
156
|
+
parseTimeoutArgument(ms) {
|
|
157
|
+
let duration = parseInt(ms, 10);
|
|
135
158
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
driver.setNewCommandTimeout(ms);
|
|
159
|
+
if (_lodash.default.isNaN(duration) || duration < MIN_TIMEOUT) {
|
|
160
|
+
throw new _protocol.errors.UnknownError(`Invalid timeout value '${ms}'`);
|
|
139
161
|
}
|
|
162
|
+
|
|
163
|
+
return duration;
|
|
140
164
|
}
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
165
|
|
|
144
|
-
helpers.clearNewCommandTimeout = function clearNewCommandTimeout() {
|
|
145
|
-
if (this.noCommandTimer) {
|
|
146
|
-
clearTimeout(this.noCommandTimer);
|
|
147
|
-
this.noCommandTimer = null;
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
helpers.startNewCommandTimeout = function startNewCommandTimeout() {
|
|
152
|
-
this.clearNewCommandTimeout();
|
|
153
|
-
if (!this.newCommandTimeoutMs) return;
|
|
154
|
-
this.noCommandTimer = setTimeout(async () => {
|
|
155
|
-
this.log.warn(`Shutting down because we waited ` + `${this.newCommandTimeoutMs / 1000.0} seconds for a command`);
|
|
156
|
-
const errorMessage = `New Command Timeout of ` + `${this.newCommandTimeoutMs / 1000.0} seconds ` + `expired. Try customizing the timeout using the ` + `'newCommandTimeout' desired capability`;
|
|
157
|
-
await this.startUnexpectedShutdown(new Error(errorMessage));
|
|
158
|
-
}, this.newCommandTimeoutMs);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
helpers.implicitWaitForCondition = async function implicitWaitForCondition(condFn) {
|
|
162
|
-
this.log.debug(`Waiting up to ${this.implicitWaitMs} ms for condition`);
|
|
163
|
-
|
|
164
|
-
let wrappedCondFn = async (...args) => {
|
|
165
|
-
this.clearNewCommandTimeout();
|
|
166
|
-
return await condFn(...args);
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
return await (0, _asyncbox.waitForCondition)(wrappedCondFn, {
|
|
170
|
-
waitMs: this.implicitWaitMs,
|
|
171
|
-
intervalMs: 500,
|
|
172
|
-
logger: this.log
|
|
173
|
-
});
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
helpers.parseTimeoutArgument = function parseTimeoutArgument(ms) {
|
|
177
|
-
let duration = parseInt(ms, 10);
|
|
178
|
-
|
|
179
|
-
if (_lodash.default.isNaN(duration) || duration < MIN_TIMEOUT) {
|
|
180
|
-
throw new _protocol.errors.UnknownError(`Invalid timeout value '${ms}'`);
|
|
181
166
|
}
|
|
182
167
|
|
|
183
|
-
return
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
Object.assign(extensions, commands, helpers);
|
|
187
|
-
var _default = extensions;
|
|
188
|
-
exports.default = _default;
|
|
189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIk1JTl9USU1FT1VUIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm5vQ29tbWFuZFRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsInNldFRpbWVvdXQiLCJ3YXJuIiwiZXJyb3JNZXNzYWdlIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJjb25kRm4iLCJ3cmFwcGVkQ29uZEZuIiwiYXJncyIsIndhaXRNcyIsImludGVydmFsTXMiLCJsb2dnZXIiLCJkdXJhdGlvbiIsInBhcnNlSW50IiwiaXNOYU4iLCJVbmtub3duRXJyb3IiLCJPYmpl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QztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uLy4uL3Byb3RvY29sJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE1JTl9USU1FT1VUID0gMDtcblxuY29tbWFuZHMudGltZW91dHMgPSBhc3luYyBmdW5jdGlvbiB0aW1lb3V0cyAodHlwZSwgbXMsIHNjcmlwdCwgcGFnZUxvYWQsIGltcGxpY2l0KSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHR5cGUpICYmIHV0aWwuaGFzVmFsdWUobXMpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYE1KU09OV1AgdGltZW91dCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoe3R5cGUsIG1zfSl9fWApO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21tYW5kJzpcbiAgICAgICAgYXdhaXQgdGhpcy5uZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2ltcGxpY2l0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAncGFnZSBsb2FkJzpcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0TUpTT05XUChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7dHlwZX0nIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgTUpTT05XUCB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIGFzc3VtZSBpdCBpcyBXM0MgcHJvdG9jb2xcbiAgdGhpcy5sb2cuZGVidWcoYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtzY3JpcHQsIHBhZ2VMb2FkLCBpbXBsaWNpdH0pfX1gKTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2NyaXB0KSkge1xuICAgIGF3YWl0IHRoaXMuc2NyaXB0VGltZW91dFczQyhzY3JpcHQpO1xuICB9XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHBhZ2VMb2FkKSkge1xuICAgIGF3YWl0IHRoaXMucGFnZUxvYWRUaW1lb3V0VzNDKHBhZ2VMb2FkKTtcbiAgfVxuICBpZiAodXRpbC5oYXNWYWx1ZShpbXBsaWNpdCkpIHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdFczQyhpbXBsaWNpdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFRpbWVvdXRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGltZW91dHMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgaW1wbGljaXQ6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gIH07XG59O1xuXG4vLyBpbXBsaWNpdFxuY29tbWFuZHMuaW1wbGljaXRXYWl0VzNDID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0VzNDIChtcykge1xuICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdChtcyk7XG59O1xuXG5jb21tYW5kcy5pbXBsaWNpdFdhaXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0TUpTT05XUCAobXMpIHtcbiAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xufTtcblxuY29tbWFuZHMuaW1wbGljaXRXYWl0ID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0IChtcykge1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG59O1xuXG5oZWxwZXJzLnNldEltcGxpY2l0V2FpdCA9IGZ1bmN0aW9uIHNldEltcGxpY2l0V2FpdCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBtcztcbiAgdGhpcy5sb2cuZGVidWcoYFNldCBpbXBsaWNpdCB3YWl0IHRvICR7bXN9bXNgKTtcbiAgaWYgKHRoaXMubWFuYWdlZERyaXZlcnMgJiYgdGhpcy5tYW5hZ2VkRHJpdmVycy5sZW5ndGgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycpO1xuICAgIGZvciAobGV0IGRyaXZlciBvZiB0aGlzLm1hbmFnZWREcml2ZXJzKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5zZXRJbXBsaWNpdFdhaXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXRJbXBsaWNpdFdhaXQobXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gcGFnZUxvYWRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0VzNDID0gYXN5bmMgZnVuY3Rpb24gcGFnZUxvYWRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBwYWdlTG9hZC4nKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0TUpTT05XUCA9IGFzeW5jIGZ1bmN0aW9uIHBhZ2VMb2FkVGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHBhZ2VMb2FkLicpO1xufTtcblxuLy8gc2NyaXB0XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRXM0MgPSBhc3luYyBmdW5jdGlvbiBzY3JpcHRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBzY3JpcHQuJyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gc2NyaXB0VGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHNjcmlwdC4nKTtcbn07XG5cbi8vIGNvbW1hbmRcbmNvbW1hbmRzLm5ld0NvbW1hbmRUaW1lb3V0ID0gYXN5bmMgZnVuY3Rpb24gbmV3Q29tbWFuZFRpbWVvdXQgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLnNldE5ld0NvbW1hbmRUaW1lb3V0KHRoaXMucGFyc2VUaW1lb3V0QXJndW1lbnQobXMpKTtcbn07XG5cbmhlbHBlcnMuc2V0TmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBzZXROZXdDb21tYW5kVGltZW91dCAobXMpIHtcbiAgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zID0gbXM7XG4gIHRoaXMubG9nLmRlYnVnKGBTZXQgbmV3IGNvbW1hbmQgdGltZW91dCB0byAke21zfW1zYCk7XG4gIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NldHRpbmcgbmV3IGNvbW1hbmQgdGltZW91dCBvbiBtYW5hZ2VkIGRyaXZlcnMnKTtcbiAgICBmb3IgKGxldCBkcml2ZXIgb2YgdGhpcy5tYW5hZ2VkRHJpdmVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXROZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhck5ld0NvbW1hbmRUaW1lb3V0ICgpIHtcbiAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5ub0NvbW1hbmRUaW1lcik7XG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnROZXdDb21tYW5kVGltZW91dCA9IGZ1bmN0aW9uIHN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQgKCkge1xuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJvZ3VlIHRpbWVvdXRzXG4gIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gIC8vIGlmIGNvbW1hbmQgdGltZW91dCBpcyAwLCBpdCBpcyBkaXNhYmxlZFxuICBpZiAoIXRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMubG9nLndhcm4oYFNodXR0aW5nIGRvd24gYmVjYXVzZSB3ZSB3YWl0ZWQgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBmb3IgYSBjb21tYW5kYCk7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE5ldyBDb21tYW5kIFRpbWVvdXQgb2YgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBgICtcbiAgICAgICAgICAgICAgYGV4cGlyZWQuIFRyeSBjdXN0b21pemluZyB0aGUgdGltZW91dCB1c2luZyB0aGUgYCArXG4gICAgICAgICAgICAgIGAnbmV3Q29tbWFuZFRpbWVvdXQnIGRlc2lyZWQgY2FwYWJpbGl0eWA7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH0sIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyk7XG59O1xuXG5oZWxwZXJzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiAoY29uZEZuKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5pbXBsaWNpdFdhaXRNc30gbXMgZm9yIGNvbmRpdGlvbmApO1xuICBsZXQgd3JhcHBlZENvbmRGbiA9IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgY29uZEZuKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbih3cmFwcGVkQ29uZEZuLCB7XG4gICAgd2FpdE1zOiB0aGlzLmltcGxpY2l0V2FpdE1zLCBpbnRlcnZhbE1zOiA1MDAsIGxvZ2dlcjogdGhpcy5sb2dcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnBhcnNlVGltZW91dEFyZ3VtZW50ID0gZnVuY3Rpb24gcGFyc2VUaW1lb3V0QXJndW1lbnQgKG1zKSB7XG4gIGxldCBkdXJhdGlvbiA9IHBhcnNlSW50KG1zLCAxMCk7XG4gIGlmIChfLmlzTmFOKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IE1JTl9USU1FT1VUKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEludmFsaWQgdGltZW91dCB2YWx1ZSAnJHttc30nYCk7XG4gIH1cbiAgcmV0dXJuIGR1cmF0aW9uO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdfQ==
|
|
168
|
+
return TimeoutCommands;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiTUlOX1RJTUVPVVQiLCJUaW1lb3V0TWl4aW4iLCJCYXNlIiwiVGltZW91dENvbW1hbmRzIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwic2V0TmV3Q29tbWFuZFRpbWVvdXQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uIiwiY29uZEZuIiwid3JhcHBlZENvbmRGbiIsImFyZ3MiLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImxvZ2dlciIsImR1cmF0aW9uIiwicGFyc2VJbnQiLCJpc05hTiIsIlVua25vd25FcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBcEI7O0FBTU8sU0FBU0MsWUFBVCxDQUF1QkMsSUFBdkIsRUFBNkI7QUFLbEMs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QyxNQUFGLEVBQVU7QUFDdEMsV0FBSzVCLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQixpQkFBZ0IsS0FBS2MsY0FBZSxtQkFBcEQ7O0FBQ0EsVUFBSWMsYUFBYSxHQUFHLE9BQU8sR0FBR0MsSUFBVixLQUFtQjtBQUVyQyxjQUFNLEtBQUtDLHNCQUFMLEVBQU47QUFFQSxlQUFPLE1BQU1ILE1BQU0sQ0FBQyxHQUFHRSxJQUFKLENBQW5CO0FBQ0QsT0FMRDs7QUFNQSxhQUFPLE1BQU0sZ0NBQWlCRCxhQUFqQixFQUFnQztBQUMzQ0csUUFBQUEsTUFBTSxFQUFFLEtBQUtqQixjQUQ4QjtBQUUzQ2tCLFFBQUFBLFVBQVUsRUFBRSxHQUYrQjtBQUczQ0MsUUFBQUEsTUFBTSxFQUFFLEtBQUtsQztBQUg4QixPQUFoQyxDQUFiO0FBS0Q7O0FBRURrQixJQUFBQSxvQkFBb0IsQ0FBRXhCLEVBQUYsRUFBTTtBQUN4QixVQUFJeUMsUUFBUSxHQUFHQyxRQUFRLENBQUMxQyxFQUFELEVBQUssRUFBTCxDQUF2Qjs7QUFDQSxVQUFJK0IsZ0JBQUVZLEtBQUYsQ0FBUUYsUUFBUixLQUFxQkEsUUFBUSxHQUFHL0MsV0FBcEMsRUFBaUQ7QUFDL0MsY0FBTSxJQUFJK0IsaUJBQU9tQixZQUFYLENBQXlCLDBCQUF5QjVDLEVBQUcsR0FBckQsQ0FBTjtBQUNEOztBQUNELGFBQU95QyxRQUFQO0FBQ0Q7O0FBeklnQzs7QUE0SW5DLFNBQU81QyxlQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbmltcG9ydCB7d2FpdEZvckNvbmRpdGlvbn0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi8uLi9wcm90b2NvbCc7XG5cbmNvbnN0IE1JTl9USU1FT1VUID0gMDtcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vZHJpdmVyJykuQmFzZURyaXZlckJhc2V9IEJhc2VcbiAqIEByZXR1cm5zIHtUaW1lb3V0QmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXRNaXhpbiAoQmFzZSkge1xuXG4gIC8qKlxuICAgKiBAaW1wbGVtZW50cyB7SVRpbWVvdXRDb21tYW5kc31cbiAgICovXG4gIGNsYXNzIFRpbWVvdXRDb21tYW5kcyBleHRlbmRzIEJhc2Uge1xuICAgIGFzeW5jIHRpbWVvdXRzICh0eXBlLCBtcywgc2NyaXB0LCBwYWdlTG9hZCwgaW1wbGljaXQpIHtcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHR5cGUpICYmIHV0aWwuaGFzVmFsdWUobXMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgICAgIGBNSlNPTldQIHRpbWVvdXQgYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KHt0eXBlLCBtc30pfX1gLFxuICAgICAgICApO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NvbW1hbmQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5uZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSAnaW1wbGljaXQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRNSlNPTldQKG1zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlICdwYWdlIGxvYWQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0TUpTT05XUChtcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYCcke3R5cGV9JyB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIE1KU09OV1AgdGltZW91dGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSBhc3N1bWUgaXQgaXMgVzNDIHByb3RvY29sXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgICAgYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBzY3JpcHQsXG4gICAgICAgICAgcGFnZUxvYWQsXG4gICAgICAgICAgaW1wbGljaXQsXG4gICAgICAgIH0pfX1gLFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNjcmlwdCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0VzNDKHNjcmlwdCk7XG4gICAgICB9XG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShwYWdlTG9hZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRXM0MocGFnZUxvYWQpO1xuICAgICAgfVxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoaW1wbGljaXQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0VzNDKGltcGxpY2l0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRUaW1lb3V0cyAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0V2FpdE1zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpbXBsaWNpdFxuICAgIGFzeW5jIGltcGxpY2l0V2FpdFczQyAobXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0KG1zKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbXBsaWNpdFdhaXRNSlNPTldQIChtcykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGltcGxpY2l0V2FpdCAobXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KHRoaXMucGFyc2VUaW1lb3V0QXJndW1lbnQobXMpKTtcbiAgICB9XG5cbiAgICAvLyBwYWdlTG9hZFxuICAgIGFzeW5jIHBhZ2VMb2FkVGltZW91dFczQyAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3IgcGFnZUxvYWQuJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFnZUxvYWRUaW1lb3V0TUpTT05XUCAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3IgcGFnZUxvYWQuJyk7XG4gICAgfVxuXG4gICAgLy8gc2NyaXB0XG4gICAgYXN5bmMgc2NyaXB0VGltZW91dFczQyAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3Igc2NyaXB0LicpO1xuICAgIH1cblxuICAgIGFzeW5jIHNjcmlwdFRpbWVvdXRNSlNPTldQIChtcykge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBzY3JpcHQuJyk7XG4gICAgfVxuXG4gICAgLy8gY29tbWFuZFxuICAgIGFzeW5jIG5ld0NvbW1hbmRUaW1lb3V0IChtcykge1xuICAgICAgdGhpcy5zZXROZXdDb21tYW5kVGltZW91dCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG4gICAgfVxuXG4gICAgc2V0SW1wbGljaXRXYWl0IChtcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gbXM7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0IGltcGxpY2l0IHdhaXQgdG8gJHttc31tc2ApO1xuICAgICAgaWYgKHRoaXMubWFuYWdlZERyaXZlcnMgJiYgdGhpcy5tYW5hZ2VkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NldHRpbmcgaW1wbGljaXQgd2FpdCBvbiBtYW5hZ2VkIGRyaXZlcnMnKTtcbiAgICAgICAgZm9yIChsZXQgZHJpdmVyIG9mIHRoaXMubWFuYWdlZERyaXZlcnMpIHtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5zZXRJbXBsaWNpdFdhaXQpKSB7XG4gICAgICAgICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KG1zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXROZXdDb21tYW5kVGltZW91dCAobXMpIHtcbiAgICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IG1zO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldCBuZXcgY29tbWFuZCB0aW1lb3V0IHRvICR7bXN9bXNgKTtcbiAgICAgIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdTZXR0aW5nIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJyk7XG4gICAgICAgIGZvciAobGV0IGRyaXZlciBvZiB0aGlzLm1hbmFnZWREcml2ZXJzKSB7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQobXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiAoY29uZEZuKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RoaXMuaW1wbGljaXRXYWl0TXN9IG1zIGZvciBjb25kaXRpb25gKTtcbiAgICAgIGxldCB3cmFwcGVkQ29uZEZuID0gYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBjb25kRm4oLi4uYXJncyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24od3JhcHBlZENvbmRGbiwge1xuICAgICAgICB3YWl0TXM6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlVGltZW91dEFyZ3VtZW50IChtcykge1xuICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VJbnQobXMsIDEwKTtcbiAgICAgIGlmIChfLmlzTmFOKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IE1JTl9USU1FT1VUKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBJbnZhbGlkIHRpbWVvdXQgdmFsdWUgJyR7bXN9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBUaW1lb3V0Q29tbWFuZHM7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlRpbWVvdXRDb21tYW5kc30gSVRpbWVvdXRDb21tYW5kc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZHJpdmVyJykuQmFzZURyaXZlckJhc2U8SVRpbWVvdXRDb21tYW5kcz59IFRpbWVvdXRCYXNlXG4gKi9cbiJdfQ==
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
export type Capabilities = import('@appium/types').Capabilities;
|
|
2
|
+
export type W3CCapabilities = import('@appium/types').W3CCapabilities;
|
|
3
|
+
export type Driver = import('@appium/types').Driver;
|
|
4
|
+
export type Core = import('@appium/types').Core;
|
|
5
|
+
export type DriverOpts = import('@appium/types').DriverOpts;
|
|
6
|
+
export type EventHistory = import('@appium/types').EventHistory;
|
|
7
|
+
export type AppiumLogger = import('@appium/types').AppiumLogger;
|
|
8
|
+
/**
|
|
9
|
+
* @implements {Core}
|
|
10
|
+
*/
|
|
11
|
+
export class DriverCore implements Core {
|
|
12
|
+
/**
|
|
13
|
+
* Make the basedriver version available so for any driver which inherits from this package, we
|
|
14
|
+
* know which version of basedriver it inherited from
|
|
15
|
+
*/
|
|
16
|
+
static baseVersion: any;
|
|
17
|
+
constructor(opts?: import("@appium/types").DriverOpts, shouldValidateCaps?: boolean);
|
|
18
|
+
/**
|
|
19
|
+
* @type {string?}
|
|
20
|
+
*/
|
|
21
|
+
sessionId: string | null;
|
|
22
|
+
/**
|
|
23
|
+
* @type {DriverOpts & Capabilities}
|
|
24
|
+
*/
|
|
25
|
+
opts: import("@appium/types").DriverOpts & Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
|
|
26
|
+
[x: string]: any;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* @type {DriverOpts}
|
|
30
|
+
*/
|
|
31
|
+
initialOpts: DriverOpts;
|
|
32
|
+
/**
|
|
33
|
+
* @type {Capabilities}
|
|
34
|
+
*/
|
|
35
|
+
caps: Capabilities;
|
|
36
|
+
/**
|
|
37
|
+
* @type {W3CCapabilities}
|
|
38
|
+
*/
|
|
39
|
+
originalCaps: W3CCapabilities;
|
|
40
|
+
helpers: import("@appium/types").DriverHelpers;
|
|
41
|
+
/**
|
|
42
|
+
* basePath is used for several purposes, for example in setting up
|
|
43
|
+
* proxying to other drivers, since we need to know what the base path
|
|
44
|
+
* of any incoming request might look like. We set it to the default
|
|
45
|
+
* initially but it is automatically updated during any actual program
|
|
46
|
+
* execution by the routeConfiguringFunction, which is necessarily run as
|
|
47
|
+
* the entrypoint for any Appium server
|
|
48
|
+
*/
|
|
49
|
+
basePath: string;
|
|
50
|
+
relaxedSecurityEnabled: boolean;
|
|
51
|
+
/** @type {string[]} */
|
|
52
|
+
allowInsecure: string[];
|
|
53
|
+
/** @type {string[]} */
|
|
54
|
+
denyInsecure: string[];
|
|
55
|
+
newCommandTimeoutMs: number;
|
|
56
|
+
implicitWaitMs: number;
|
|
57
|
+
/** @type {string[]} */
|
|
58
|
+
locatorStrategies: string[];
|
|
59
|
+
/** @type {string[]} */
|
|
60
|
+
webLocatorStrategies: string[];
|
|
61
|
+
/** @type {Driver[]} */
|
|
62
|
+
managedDrivers: Driver[];
|
|
63
|
+
/** @type {NodeJS.Timeout?} */
|
|
64
|
+
noCommandTimer: NodeJS.Timeout | null;
|
|
65
|
+
/** @type {EventHistory} */
|
|
66
|
+
_eventHistory: EventHistory;
|
|
67
|
+
_constraints: import("@appium/types").Constraints;
|
|
68
|
+
/** @type {NodeJS.EventEmitter} */
|
|
69
|
+
eventEmitter: NodeJS.EventEmitter;
|
|
70
|
+
/**
|
|
71
|
+
* @type {AppiumLogger}
|
|
72
|
+
*/
|
|
73
|
+
_log: AppiumLogger;
|
|
74
|
+
/**
|
|
75
|
+
* @protected
|
|
76
|
+
*/
|
|
77
|
+
protected shutdownUnexpectedly: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
* @protected
|
|
81
|
+
*/
|
|
82
|
+
protected shouldValidateCaps: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* @protected
|
|
85
|
+
*/
|
|
86
|
+
protected commandsQueueGuard: AsyncLock;
|
|
87
|
+
/**
|
|
88
|
+
* settings should be instantiated by drivers which extend BaseDriver, but
|
|
89
|
+
* we set it to an empty DeviceSettings instance here to make sure that the
|
|
90
|
+
* default settings are applied even if an extending driver doesn't utilize
|
|
91
|
+
* the settings functionality itself
|
|
92
|
+
*/
|
|
93
|
+
settings: DeviceSettings<Record<string, unknown>>;
|
|
94
|
+
get log(): import("@appium/types").AppiumLogger;
|
|
95
|
+
/**
|
|
96
|
+
* Set a callback handler if needed to execute a custom piece of code
|
|
97
|
+
* when the driver is shut down unexpectedly. Multiple calls to this method
|
|
98
|
+
* will cause the handler to be executed mutiple times
|
|
99
|
+
*
|
|
100
|
+
* @param {(...args: any[]) => void} handler The code to be executed on unexpected shutdown.
|
|
101
|
+
* The function may accept one argument, which is the actual error instance, which
|
|
102
|
+
* caused the driver to shut down.
|
|
103
|
+
*/
|
|
104
|
+
onUnexpectedShutdown(handler: (...args: any[]) => void): void;
|
|
105
|
+
/**
|
|
106
|
+
* This property is used by AppiumDriver to store the data of the
|
|
107
|
+
* specific driver sessions. This data can be later used to adjust
|
|
108
|
+
* properties for driver instances running in parallel.
|
|
109
|
+
* Override it in inherited driver classes if necessary.
|
|
110
|
+
*
|
|
111
|
+
* @return {Record<string,unknown>} Driver properties mapping
|
|
112
|
+
*/
|
|
113
|
+
get driverData(): Record<string, unknown>;
|
|
114
|
+
/**
|
|
115
|
+
* This property controls the way {#executeCommand} method
|
|
116
|
+
* handles new driver commands received from the client.
|
|
117
|
+
* Override it for inherited classes only in special cases.
|
|
118
|
+
*
|
|
119
|
+
* @return {boolean} If the returned value is true (default) then all the commands
|
|
120
|
+
* received by the particular driver instance are going to be put into the queue,
|
|
121
|
+
* so each following command will not be executed until the previous command
|
|
122
|
+
* execution is completed. False value disables that queue, so each driver command
|
|
123
|
+
* is executed independently and does not wait for anything.
|
|
124
|
+
*/
|
|
125
|
+
get isCommandsQueueEnabled(): boolean;
|
|
126
|
+
get eventHistory(): import("@appium/types").EventHistory;
|
|
127
|
+
/**
|
|
128
|
+
* API method for driver developers to log timings for important events
|
|
129
|
+
* @param {string} eventName
|
|
130
|
+
*/
|
|
131
|
+
logEvent(eventName: string): void;
|
|
132
|
+
/**
|
|
133
|
+
* Overridden in appium driver, but here so that individual drivers can be
|
|
134
|
+
* tested with clients that poll
|
|
135
|
+
*/
|
|
136
|
+
getStatus(): Promise<{}>;
|
|
137
|
+
set desiredCapConstraints(arg: import("@appium/types").Constraints);
|
|
138
|
+
get desiredCapConstraints(): import("@appium/types").Constraints;
|
|
139
|
+
/**
|
|
140
|
+
* method required by MJSONWP in order to determine whether it should
|
|
141
|
+
* respond with an invalid session response
|
|
142
|
+
* @param {string} [sessionId]
|
|
143
|
+
* @returns {boolean}
|
|
144
|
+
*/
|
|
145
|
+
sessionExists(sessionId?: string | undefined): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* method required by MJSONWP in order to determine if the command should
|
|
148
|
+
* be proxied directly to the driver
|
|
149
|
+
* @param {string} sessionId
|
|
150
|
+
* @returns {this | import('@appium/types').Driver}
|
|
151
|
+
*/
|
|
152
|
+
driverForSession(sessionId: string): import("@appium/types").Driver | DriverCore;
|
|
153
|
+
/**
|
|
154
|
+
*
|
|
155
|
+
* @param {Capabilities} caps
|
|
156
|
+
*/
|
|
157
|
+
logExtraCaps(caps: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
|
|
158
|
+
[x: string]: any;
|
|
159
|
+
}>): void;
|
|
160
|
+
/**
|
|
161
|
+
*
|
|
162
|
+
* @param {Capabilities} caps
|
|
163
|
+
* @returns {boolean}
|
|
164
|
+
*/
|
|
165
|
+
validateDesiredCaps(caps: Capabilities): boolean;
|
|
166
|
+
isMjsonwpProtocol(): boolean;
|
|
167
|
+
isW3CProtocol(): boolean;
|
|
168
|
+
setProtocolMJSONWP(): void;
|
|
169
|
+
protocol: string | undefined;
|
|
170
|
+
setProtocolW3C(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Check whether a given feature is enabled via its name
|
|
173
|
+
*
|
|
174
|
+
* @param {string} name - name of feature/command
|
|
175
|
+
*
|
|
176
|
+
* @returns {Boolean}
|
|
177
|
+
*/
|
|
178
|
+
isFeatureEnabled(name: string): boolean;
|
|
179
|
+
/**
|
|
180
|
+
* Assert that a given feature is enabled and throw a helpful error if it's
|
|
181
|
+
* not
|
|
182
|
+
*
|
|
183
|
+
* @param {string} name - name of feature/command
|
|
184
|
+
*/
|
|
185
|
+
ensureFeatureEnabled(name: string): void;
|
|
186
|
+
/**
|
|
187
|
+
*
|
|
188
|
+
* @param {string} strategy
|
|
189
|
+
* @param {boolean} [webContext]
|
|
190
|
+
*/
|
|
191
|
+
validateLocatorStrategy(strategy: string, webContext?: boolean | undefined): void;
|
|
192
|
+
/**
|
|
193
|
+
*
|
|
194
|
+
* @param {string} [sessionId]
|
|
195
|
+
* @returns {boolean}
|
|
196
|
+
*/
|
|
197
|
+
proxyActive(sessionId?: string | undefined): boolean;
|
|
198
|
+
/**
|
|
199
|
+
*
|
|
200
|
+
* @param {string} sessionId
|
|
201
|
+
* @returns {[string, RegExp][]}
|
|
202
|
+
*/
|
|
203
|
+
getProxyAvoidList(sessionId: string): [string, RegExp][];
|
|
204
|
+
/**
|
|
205
|
+
*
|
|
206
|
+
* @param {string} [sessionId]
|
|
207
|
+
* @returns {boolean}
|
|
208
|
+
*/
|
|
209
|
+
canProxy(sessionId?: string | undefined): boolean;
|
|
210
|
+
/**
|
|
211
|
+
* Whether a given command route (expressed as method and url) should not be
|
|
212
|
+
* proxied according to this driver
|
|
213
|
+
*
|
|
214
|
+
* @param {string} sessionId - the current sessionId (in case the driver runs
|
|
215
|
+
* multiple session ids and requires it). This is not used in this method but
|
|
216
|
+
* should be made available to overridden methods.
|
|
217
|
+
* @param {import('@appium/types').HTTPMethod} method - HTTP method of the route
|
|
218
|
+
* @param {string} url - url of the route
|
|
219
|
+
* @param {any} [body] - webdriver request body
|
|
220
|
+
*
|
|
221
|
+
* @returns {boolean} - whether the route should be avoided
|
|
222
|
+
*/
|
|
223
|
+
proxyRouteIsAvoided(sessionId: string, method: import('@appium/types').HTTPMethod, url: string, body?: any): boolean;
|
|
224
|
+
/**
|
|
225
|
+
*
|
|
226
|
+
* @param {Driver} driver
|
|
227
|
+
*/
|
|
228
|
+
addManagedDriver(driver: Driver): void;
|
|
229
|
+
getManagedDrivers(): import("@appium/types").Driver[];
|
|
230
|
+
clearNewCommandTimeout(): Promise<void>;
|
|
231
|
+
}
|
|
232
|
+
import { EventEmitter } from "events";
|
|
233
|
+
import AsyncLock from "async-lock";
|
|
234
|
+
import DeviceSettings from "./device-settings";
|
|
235
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"2BAyea,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;mBAC9B,OAAO,eAAe,EAAE,IAAI;yBAC5B,OAAO,eAAe,EAAE,UAAU;2BAClC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;AAzdjD;;GAEG;AACH;IAEE;;;OAGG;IACH,wBAAoC;IAqGpC,qFAqBC;IAxHD;;MAEE;IACF,WAFS,MAAM,QAEE;IAEjB;;MAEE;IACF;;OAAK;IAEL;;MAEE;IACF,aAFS,UAAU,CAEP;IAEZ;;MAEE;IACF,MAFS,YAAY,CAEhB;IAEL;;MAEE;IACF,cAFS,eAAe,CAEX;IAEb,+CAAkB;IAElB;;;;;;;MAOE;IACF,iBAA6B;IAE7B,gCAA+B;IAE/B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACA;IAEnB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACD;IAElB,4BAA6C;IAE7C,uBAAmB;IAEnB,uBAAuB;IACvB,mBADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,sBADW,MAAM,EAAE,CACO;IAE1B,uBAAuB;IACvB,gBADW,MAAM,EAAE,CACC;IAEpB,8BAA8B;IAC9B,gBADW,OAAO,OAAO,QACH;IAEtB,2BAA2B;IAC3B,eADW,YAAY,CACQ;IAE/B,kDAAyD;IAGzD,kCAAkC;IAClC,cADW,mBAAmB,CACI;IAElC;;MAEE;IACF,MAFS,YAAY,CAEhB;IAEL;;MAEE;IACF,wCAA6B;IAE7B;;;MAGE;IACF,8BAHS,OAAO,CAGG;IAEnB;;MAEE;IACF,wCAAqC;IAErC;;;;;MAKE;IACF,kDAAgC;IAyBhC,gDAEC;IAED;;;;;;;;MAQE;IACF,wCAJoB,GAAG,EAAE,KAAK,IAAI,QAMjC;IAED;;;;;;;MAOE;IACF,0CAEC;IAED;;;;;;;;;;MAUE;IACF,sCAEC;IAMD,yDAEC;IAED;;;MAGE;IACF,oBAFU,MAAM,QAgBf;IAED;;;MAGE;IACF,yBAEC;IAGD,oEAWC;IAED,iEAEC;IAED;;;;;MAKE;IACF,+CAFY,OAAO,CAKlB;IAED;;;;;MAKE;IACF,4BAHU,MAAM,+CAKf;IAED;;;MAGE;IACF;;cAWC;IAED;;;;MAIE;IACF,0BAHU,YAAY,GACV,OAAO,CAqBlB;IAED,6BAEC;IAED,yBAEC;IAED,2BAEC;IADC,6BAAiC;IAGnC,uBAEC;IAED;;;;;;MAME;IACF,uBAJU,MAAM,WAuBf;IAED;;;;;MAKE;IACF,2BAFU,MAAM,QAYf;IAED;;;;MAIE;IACF,kCAHU,MAAM,0CAoBf;IAED;;;;MAIE;IACF,6CAFY,OAAO,CAIlB;IAED;;;;MAIE;IACF,6BAHU,MAAM,GACJ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAI7B;IAED;;;;MAIE;IACF,0CAFY,OAAO,CAIlB;IAED;;;;;;;;;;;;MAYE;IACF,+BATU,MAAM,UAGN,OAAO,eAAe,EAAE,UAAU,OAClC,MAAM,SACN,GAAG,GAED,OAAO,CAuBlB;IAED;;;MAGE;IACF,yBAFU,MAAM,QAIf;IAED,sDAEC;IAED,wCAKC;CACF"}
|