appium-safari-driver 3.2.2 → 3.2.4
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/.eslintignore +1 -1
- package/.eslintrc.json +10 -0
- package/.github/workflows/functional-test.yml +55 -0
- package/.github/workflows/pr-title.yml +15 -0
- package/.github/workflows/publish.js.yml +4 -6
- package/.github/workflows/unit-test.yml +43 -0
- package/.mocharc.js +4 -0
- package/.releaserc +6 -4
- package/CHANGELOG.md +1 -0
- package/README.md +8 -3
- package/babel.config.json +25 -0
- package/build/index.js +2 -8
- package/build/index.js.map +1 -0
- package/build/lib/commands/cookies.js +2 -8
- package/build/lib/commands/cookies.js.map +1 -0
- package/build/lib/commands/find.js +3 -9
- package/build/lib/commands/find.js.map +1 -0
- package/build/lib/commands/index.js +4 -11
- package/build/lib/commands/index.js.map +1 -0
- package/build/lib/commands/record-screen.js +2 -64
- package/build/lib/commands/record-screen.js.map +1 -0
- package/build/lib/desired-caps.js +2 -6
- package/build/lib/desired-caps.js.map +1 -0
- package/build/lib/driver.js +4 -27
- package/build/lib/driver.js.map +1 -0
- package/build/lib/logger.js +2 -8
- package/build/lib/logger.js.map +1 -0
- package/build/lib/safari.js +2 -43
- package/build/lib/safari.js.map +1 -0
- package/build/lib/utils.js +2 -11
- package/build/lib/utils.js.map +1 -0
- package/npm-shrinkwrap.json +2091 -1153
- package/package.json +40 -22
- package/test/unit/driver-specs.js +1 -1
- package/.azure-pipelines.yml +0 -53
- package/.eslintrc +0 -3
- package/azure-templates/node_setup_steps.yml +0 -6
- package/build/test/functional/desktop-driver-e2e-specs.js +0 -48
- package/build/test/functional/mobile-driver-e2e-specs.js +0 -76
- package/build/test/unit/driver-specs.js +0 -20
- package/build/test/unit/utils-specs.js +0 -51
- package/build/test/utils.js +0 -18
- package/gulpfile.js +0 -13
package/build/lib/safari.js
CHANGED
|
@@ -1,85 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _os = _interopRequireDefault(require("os"));
|
|
13
|
-
|
|
14
10
|
var _path = _interopRequireDefault(require("path"));
|
|
15
|
-
|
|
16
11
|
var _driver = require("appium/driver");
|
|
17
|
-
|
|
18
12
|
var _support = require("appium/support");
|
|
19
|
-
|
|
20
13
|
var _teen_process = require("teen_process");
|
|
21
|
-
|
|
22
14
|
var _asyncbox = require("asyncbox");
|
|
23
|
-
|
|
24
15
|
var _portscanner = require("portscanner");
|
|
25
|
-
|
|
26
16
|
var _child_process = require("child_process");
|
|
27
|
-
|
|
28
17
|
const SD_BINARY = 'safaridriver';
|
|
29
18
|
const STARTUP_TIMEOUT = 10000;
|
|
30
19
|
const SAFARI_PORT_RANGE = [5100, 5200];
|
|
31
|
-
|
|
32
20
|
const SAFARI_SERVER_GUARD = _support.util.getLockFileGuard(_path.default.resolve(_os.default.tmpdir(), 'safari_server_guard.lock'), {
|
|
33
21
|
timeout: 5,
|
|
34
22
|
tryRecovery: true
|
|
35
23
|
});
|
|
36
|
-
|
|
37
24
|
class SafariProxy extends _driver.JWProxy {
|
|
38
25
|
async proxyCommand(url, method, body = null) {
|
|
39
26
|
if (this.didProcessExit) {
|
|
40
27
|
throw new _driver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Safari Driver server because ` + 'the process is not running (probably crashed). Check the server log for more details');
|
|
41
28
|
}
|
|
42
|
-
|
|
43
29
|
return await super.proxyCommand(url, method, body);
|
|
44
30
|
}
|
|
45
|
-
|
|
46
31
|
}
|
|
47
|
-
|
|
48
32
|
class SafariDriverProcess {
|
|
49
33
|
constructor() {
|
|
50
34
|
this.log = _support.logger.getLogger('SafariDriverProcess');
|
|
51
35
|
this.port = null;
|
|
52
36
|
this.proc = null;
|
|
53
37
|
}
|
|
54
|
-
|
|
55
38
|
get isRunning() {
|
|
56
39
|
var _this$proc;
|
|
57
|
-
|
|
58
40
|
return !!((_this$proc = this.proc) !== null && _this$proc !== void 0 && _this$proc.isRunning);
|
|
59
41
|
}
|
|
60
|
-
|
|
61
42
|
async init() {
|
|
62
43
|
await SAFARI_SERVER_GUARD(async () => {
|
|
63
44
|
if (this.isRunning) {
|
|
64
45
|
return;
|
|
65
46
|
}
|
|
66
|
-
|
|
67
47
|
const [startPort, endPort] = SAFARI_PORT_RANGE;
|
|
68
|
-
|
|
69
48
|
try {
|
|
70
49
|
this.port = await (0, _portscanner.findAPortNotInUse)(startPort, endPort);
|
|
71
50
|
} catch (e) {
|
|
72
51
|
throw new Error(`Cannot find any free port in range ${startPort}..${endPort}. ` + `Double check the processes that are locking ports within this range and terminate ` + `these which are not needed anymore`);
|
|
73
52
|
}
|
|
74
|
-
|
|
75
53
|
let safariBin;
|
|
76
|
-
|
|
77
54
|
try {
|
|
78
55
|
safariBin = await _support.fs.which(SD_BINARY);
|
|
79
56
|
} catch (e) {
|
|
80
57
|
throw new Error(`${SD_BINARY} binary cannot be found in PATH. ` + `Please make sure it is present on your system`);
|
|
81
58
|
}
|
|
82
|
-
|
|
83
59
|
this.proc = new _teen_process.SubProcess(safariBin, ['-p', this.port, '--diagnose']);
|
|
84
60
|
this.proc.on('output', (stdout, stderr) => {
|
|
85
61
|
const line = stdout || stderr;
|
|
@@ -92,7 +68,6 @@ class SafariDriverProcess {
|
|
|
92
68
|
await this.proc.start(0);
|
|
93
69
|
});
|
|
94
70
|
}
|
|
95
|
-
|
|
96
71
|
async kill() {
|
|
97
72
|
if (this.isRunning) {
|
|
98
73
|
try {
|
|
@@ -100,7 +75,6 @@ class SafariDriverProcess {
|
|
|
100
75
|
} catch (ign) {}
|
|
101
76
|
}
|
|
102
77
|
}
|
|
103
|
-
|
|
104
78
|
}
|
|
105
79
|
|
|
106
80
|
const SAFARI_DRIVER_PROCESS = new SafariDriverProcess();
|
|
@@ -111,17 +85,14 @@ process.once('exit', () => {
|
|
|
111
85
|
} catch (ign) {}
|
|
112
86
|
}
|
|
113
87
|
});
|
|
114
|
-
|
|
115
88
|
class SafariDriverServer {
|
|
116
89
|
constructor(log) {
|
|
117
90
|
this.log = log;
|
|
118
91
|
this.proxy = null;
|
|
119
92
|
}
|
|
120
|
-
|
|
121
93
|
get isRunning() {
|
|
122
94
|
return !!SAFARI_DRIVER_PROCESS.isRunning;
|
|
123
95
|
}
|
|
124
|
-
|
|
125
96
|
async start(caps) {
|
|
126
97
|
await SAFARI_DRIVER_PROCESS.init();
|
|
127
98
|
this.proxy = new SafariProxy({
|
|
@@ -135,7 +106,6 @@ class SafariDriverServer {
|
|
|
135
106
|
SAFARI_DRIVER_PROCESS.proc.on('exit', () => {
|
|
136
107
|
this.proxy.didProcessExit = true;
|
|
137
108
|
});
|
|
138
|
-
|
|
139
109
|
try {
|
|
140
110
|
await (0, _asyncbox.waitForCondition)(async () => {
|
|
141
111
|
try {
|
|
@@ -145,7 +115,6 @@ class SafariDriverServer {
|
|
|
145
115
|
if (this.proxy.didProcessExit) {
|
|
146
116
|
throw new Error(err.message);
|
|
147
117
|
}
|
|
148
|
-
|
|
149
118
|
return false;
|
|
150
119
|
}
|
|
151
120
|
}, {
|
|
@@ -157,13 +126,10 @@ class SafariDriverServer {
|
|
|
157
126
|
if (SAFARI_DRIVER_PROCESS.isRunning) {
|
|
158
127
|
await SAFARI_DRIVER_PROCESS.kill();
|
|
159
128
|
}
|
|
160
|
-
|
|
161
129
|
throw new Error(`Safari Driver server is not listening within ${STARTUP_TIMEOUT}ms timeout. ` + `Make sure it has been executed manually at least once with '--enable' command line argument. ` + `Check the server log for more details`);
|
|
162
130
|
}
|
|
163
|
-
|
|
164
131
|
throw e;
|
|
165
132
|
}
|
|
166
|
-
|
|
167
133
|
await this.proxy.command('/session', 'POST', {
|
|
168
134
|
capabilities: {
|
|
169
135
|
firstMatch: [{}],
|
|
@@ -171,15 +137,12 @@ class SafariDriverServer {
|
|
|
171
137
|
}
|
|
172
138
|
});
|
|
173
139
|
}
|
|
174
|
-
|
|
175
140
|
async stop() {
|
|
176
141
|
var _this$proxy;
|
|
177
|
-
|
|
178
142
|
if (!this.isRunning) {
|
|
179
143
|
this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
|
|
180
144
|
return;
|
|
181
145
|
}
|
|
182
|
-
|
|
183
146
|
if ((_this$proxy = this.proxy) !== null && _this$proxy !== void 0 && _this$proxy.sessionId) {
|
|
184
147
|
try {
|
|
185
148
|
await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
|
|
@@ -188,11 +151,7 @@ class SafariDriverServer {
|
|
|
188
151
|
}
|
|
189
152
|
}
|
|
190
153
|
}
|
|
191
|
-
|
|
192
154
|
}
|
|
193
|
-
|
|
194
155
|
var _default = SafariDriverServer;
|
|
195
|
-
exports.default = _default;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NhZmFyaS5qcyIsIm5hbWVzIjpbIlNEX0JJTkFSWSIsIlNUQVJUVVBfVElNRU9VVCIsIlNBRkFSSV9QT1JUX1JBTkdFIiwiU0FGQVJJX1NFUlZFUl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIlNhZmFyaVByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRQcm9jZXNzRXhpdCIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJTYWZhcmlEcml2ZXJQcm9jZXNzIiwiY29uc3RydWN0b3IiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJwb3J0IiwicHJvYyIsImlzUnVubmluZyIsImluaXQiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJleGVjU3luYyIsInBpZCIsIlNhZmFyaURyaXZlclNlcnZlciIsInByb3h5IiwiY2FwcyIsInNlcnZlciIsImJhc2UiLCJrZWVwQWxpdmUiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInNlc3Npb25JZCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9zYWZhcmkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBTRF9CSU5BUlkgPSAnc2FmYXJpZHJpdmVyJztcbmNvbnN0IFNUQVJUVVBfVElNRU9VVCA9IDEwMDAwOyAvLyBzZWNvbmRzXG5jb25zdCBTQUZBUklfUE9SVF9SQU5HRSA9IFs1MTAwLCA1MjAwXTtcbi8vIFRoaXMgZ3VhcmQgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZVxuLy8gd2UgbmV2ZXIgcnVuIG11bHRpcGxlIFNhZmFyaSBkcml2ZXIgcHJvY2Vzc2VzIGZvciB0aGUgc2FtZSBBcHBpdW0gcHJvY2Vzc1xuY29uc3QgU0FGQVJJX1NFUlZFUl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAnc2FmYXJpX3NlcnZlcl9ndWFyZC5sb2NrJyksXG4gIHt0aW1lb3V0OiA1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cblxuY2xhc3MgU2FmYXJpUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIFNhZmFyaSBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICd0aGUgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgU2FmYXJpRHJpdmVyUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1NhZmFyaURyaXZlclByb2Nlc3MnKTtcbiAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAoKSB7XG4gICAgYXdhaXQgU0FGQVJJX1NFUlZFUl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IFNBRkFSSV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fS4gYCArXG4gICAgICAgICAgYERvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2FmYXJpQmluO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2FmYXJpQmluID0gYXdhaXQgZnMud2hpY2goU0RfQklOQVJZKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NEX0JJTkFSWX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2VzcyhzYWZhcmlCaW4sIFsnLXAnLCB0aGlzLnBvcnQsICctLWRpYWdub3NlJ10pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBbJHtTRF9CSU5BUll9XSAke2xpbmV9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7c2FmYXJpQmlufScgb24gcG9ydCAke3RoaXMucG9ydH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gIH1cbn1cblxuLy8gU2luZ2xlIHNlcnZlciBwcm9jZXNzIHBlciBBcHBpdW0gaW5zdGFuY2VcbmNvbnN0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUyA9IG5ldyBTYWZhcmlEcml2ZXJQcm9jZXNzKCk7XG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGBraWxsICR7U0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2MucGlkfWApO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNhZmFyaURyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yIChsb2cpIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzKSB7XG4gICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmluaXQoKTtcblxuICAgIHRoaXMucHJveHkgPSBuZXcgU2FmYXJpUHJveHkoe1xuICAgICAgc2VydmVyOiAnMTI3LjAuMC4xJyxcbiAgICAgIHBvcnQ6IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wb3J0LFxuICAgICAgYmFzZTogJycsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICBTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmYXJpIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVR9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBleGVjdXRlZCBtYW51YWxseSBhdCBsZWFzdCBvbmNlIHdpdGggJy0tZW5hYmxlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm94eT8uc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5wcm94eS5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXJTZXJ2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsU0FBUyxHQUFHLGNBQWxCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjs7QUFHQSxNQUFNQyxtQkFBbUIsR0FBR0MsYUFBQSxDQUFLQyxnQkFBTCxDQUMxQkMsYUFBQSxDQUFLQyxPQUFMLENBQWFDLFdBQUEsQ0FBR0MsTUFBSCxFQUFiLEVBQTBCLDBCQUExQixDQUQwQixFQUUxQjtFQUFDQyxPQUFPLEVBQUUsQ0FBVjtFQUFhQyxXQUFXLEVBQUU7QUFBMUIsQ0FGMEIsQ0FBNUI7O0FBTUEsTUFBTUMsV0FBTixTQUEwQkMsZUFBMUIsQ0FBa0M7RUFDZCxNQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFBT0MsTUFBUCxFQUFlQyxJQUFJLEdBQUcsSUFBdEIsRUFBNEI7SUFDNUMsSUFBSSxLQUFLQyxjQUFULEVBQXlCO01BQ3ZCLE1BQU0sSUFBSUMsY0FBQSxDQUFPQyxtQkFBWCxDQUNILElBQUdKLE1BQU8sSUFBR0QsR0FBSSxzREFBbEIsR0FDQSxzRkFGSSxDQUFOO0lBR0Q7O0lBQ0QsT0FBTyxNQUFNLE1BQU1ELFlBQU4sQ0FBbUJDLEdBQW5CLEVBQXdCQyxNQUF4QixFQUFnQ0MsSUFBaEMsQ0FBYjtFQUNEOztBQVIrQjs7QUFXbEMsTUFBTUksbUJBQU4sQ0FBMEI7RUFDeEJDLFdBQVcsR0FBSTtJQUNiLEtBQUtDLEdBQUwsR0FBV0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLHFCQUFqQixDQUFYO0lBQ0EsS0FBS0MsSUFBTCxHQUFZLElBQVo7SUFDQSxLQUFLQyxJQUFMLEdBQVksSUFBWjtFQUNEOztFQUVZLElBQVRDLFNBQVMsR0FBSTtJQUFBOztJQUNmLE9BQU8sQ0FBQyxnQkFBRSxLQUFLRCxJQUFQLHVDQUFFLFdBQVdDLFNBQWIsQ0FBUjtFQUNEOztFQUVTLE1BQUpDLElBQUksR0FBSTtJQUNaLE1BQU0xQixtQkFBbUIsQ0FBQyxZQUFZO01BQ3BDLElBQUksS0FBS3lCLFNBQVQsRUFBb0I7UUFDbEI7TUFDRDs7TUFFRCxNQUFNLENBQUNFLFNBQUQsRUFBWUMsT0FBWixJQUF1QjdCLGlCQUE3Qjs7TUFDQSxJQUFJO1FBQ0YsS0FBS3dCLElBQUwsR0FBWSxNQUFNLElBQUFNLDhCQUFBLEVBQWtCRixTQUFsQixFQUE2QkMsT0FBN0IsQ0FBbEI7TUFDRCxDQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO1FBQ1YsTUFBTSxJQUFJQyxLQUFKLENBQ0gsc0NBQXFDSixTQUFVLEtBQUlDLE9BQVEsSUFBNUQsR0FDQyxvRkFERCxHQUVDLG9DQUhHLENBQU47TUFJRDs7TUFFRCxJQUFJSSxTQUFKOztNQUNBLElBQUk7UUFDRkEsU0FBUyxHQUFHLE1BQU1DLFdBQUEsQ0FBR0MsS0FBSCxDQUFTckMsU0FBVCxDQUFsQjtNQUNELENBRkQsQ0FFRSxPQUFPaUMsQ0FBUCxFQUFVO1FBQ1YsTUFBTSxJQUFJQyxLQUFKLENBQVcsR0FBRWxDLFNBQVUsbUNBQWIsR0FDYiwrQ0FERyxDQUFOO01BRUQ7O01BQ0QsS0FBSzJCLElBQUwsR0FBWSxJQUFJVyx3QkFBSixDQUFlSCxTQUFmLEVBQTBCLENBQUMsSUFBRCxFQUFPLEtBQUtULElBQVosRUFBa0IsWUFBbEIsQ0FBMUIsQ0FBWjtNQUNBLEtBQUtDLElBQUwsQ0FBVVksRUFBVixDQUFhLFFBQWIsRUFBdUIsQ0FBQ0MsTUFBRCxFQUFTQyxNQUFULEtBQW9CO1FBQ3pDLE1BQU1DLElBQUksR0FBR0YsTUFBTSxJQUFJQyxNQUF2QjtRQUNBLEtBQUtsQixHQUFMLENBQVNvQixLQUFULENBQWdCLElBQUczQyxTQUFVLEtBQUkwQyxJQUFLLEVBQXRDO01BQ0QsQ0FIRDtNQUlBLEtBQUtmLElBQUwsQ0FBVVksRUFBVixDQUFhLE1BQWIsRUFBcUIsQ0FBQ0ssSUFBRCxFQUFPQyxNQUFQLEtBQWtCO1FBQ3JDLEtBQUt0QixHQUFMLENBQVN1QixJQUFULENBQWUsR0FBRTlDLFNBQVUseUJBQXdCNEMsSUFBSyxZQUFXQyxNQUFPLEVBQTFFO01BQ0QsQ0FGRDtNQUdBLEtBQUt0QixHQUFMLENBQVN1QixJQUFULENBQWUsYUFBWVgsU0FBVSxhQUFZLEtBQUtULElBQUssRUFBM0Q7TUFDQSxNQUFNLEtBQUtDLElBQUwsQ0FBVW9CLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBTjtJQUNELENBaEN3QixDQUF6QjtFQWlDRDs7RUFFUyxNQUFKQyxJQUFJLEdBQUk7SUFDWixJQUFJLEtBQUtwQixTQUFULEVBQW9CO01BQ2xCLElBQUk7UUFDRixNQUFNLEtBQUtELElBQUwsQ0FBVXNCLElBQVYsQ0FBZSxTQUFmLENBQU47TUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZLENBQUU7SUFDakI7RUFDRjs7QUFyRHVCOztBQXlEMUIsTUFBTUMscUJBQXFCLEdBQUcsSUFBSTlCLG1CQUFKLEVBQTlCO0FBQ0ErQixPQUFPLENBQUNDLElBQVIsQ0FBYSxNQUFiLEVBQXFCLE1BQU07RUFDekIsSUFBSUYscUJBQXFCLENBQUN2QixTQUExQixFQUFxQztJQUNuQyxJQUFJO01BQ0YsSUFBQTBCLHVCQUFBLEVBQVUsUUFBT0gscUJBQXFCLENBQUN4QixJQUF0QixDQUEyQjRCLEdBQUksRUFBaEQ7SUFDRCxDQUZELENBRUUsT0FBT0wsR0FBUCxFQUFZLENBQUU7RUFDakI7QUFDRixDQU5EOztBQVFBLE1BQU1NLGtCQUFOLENBQXlCO0VBQ3ZCbEMsV0FBVyxDQUFFQyxHQUFGLEVBQU87SUFDaEIsS0FBS0EsR0FBTCxHQUFXQSxHQUFYO0lBQ0EsS0FBS2tDLEtBQUwsR0FBYSxJQUFiO0VBQ0Q7O0VBRVksSUFBVDdCLFNBQVMsR0FBSTtJQUNmLE9BQU8sQ0FBQyxDQUFFdUIscUJBQXFCLENBQUN2QixTQUFoQztFQUNEOztFQUVVLE1BQUxtQixLQUFLLENBQUVXLElBQUYsRUFBUTtJQUNqQixNQUFNUCxxQkFBcUIsQ0FBQ3RCLElBQXRCLEVBQU47SUFFQSxLQUFLNEIsS0FBTCxHQUFhLElBQUk3QyxXQUFKLENBQWdCO01BQzNCK0MsTUFBTSxFQUFFLFdBRG1CO01BRTNCakMsSUFBSSxFQUFFeUIscUJBQXFCLENBQUN6QixJQUZEO01BRzNCa0MsSUFBSSxFQUFFLEVBSHFCO01BSTNCckMsR0FBRyxFQUFFLEtBQUtBLEdBSmlCO01BSzNCc0MsU0FBUyxFQUFFO0lBTGdCLENBQWhCLENBQWI7SUFPQSxLQUFLSixLQUFMLENBQVd2QyxjQUFYLEdBQTRCLEtBQTVCO0lBQ0FpQyxxQkFBcUIsQ0FBQ3hCLElBQXRCLENBQTJCWSxFQUEzQixDQUE4QixNQUE5QixFQUFzQyxNQUFNO01BQzFDLEtBQUtrQixLQUFMLENBQVd2QyxjQUFYLEdBQTRCLElBQTVCO0lBQ0QsQ0FGRDs7SUFJQSxJQUFJO01BQ0YsTUFBTSxJQUFBNEMsMEJBQUEsRUFBaUIsWUFBWTtRQUNqQyxJQUFJO1VBQ0YsTUFBTSxLQUFLTCxLQUFMLENBQVdNLE9BQVgsQ0FBbUIsU0FBbkIsRUFBOEIsS0FBOUIsQ0FBTjtVQUNBLE9BQU8sSUFBUDtRQUNELENBSEQsQ0FHRSxPQUFPQyxHQUFQLEVBQVk7VUFDWixJQUFJLEtBQUtQLEtBQUwsQ0FBV3ZDLGNBQWYsRUFBK0I7WUFDN0IsTUFBTSxJQUFJZ0IsS0FBSixDQUFVOEIsR0FBRyxDQUFDQyxPQUFkLENBQU47VUFDRDs7VUFDRCxPQUFPLEtBQVA7UUFDRDtNQUNGLENBVkssRUFVSDtRQUNEQyxNQUFNLEVBQUVqRSxlQURQO1FBRURrRSxVQUFVLEVBQUU7TUFGWCxDQVZHLENBQU47SUFjRCxDQWZELENBZUUsT0FBT2xDLENBQVAsRUFBVTtNQUNWLElBQUksa0JBQWtCbUMsSUFBbEIsQ0FBdUJuQyxDQUFDLENBQUNnQyxPQUF6QixDQUFKLEVBQXVDO1FBQ3JDLElBQUlkLHFCQUFxQixDQUFDdkIsU0FBMUIsRUFBcUM7VUFFbkMsTUFBTXVCLHFCQUFxQixDQUFDSCxJQUF0QixFQUFOO1FBQ0Q7O1FBQ0QsTUFBTSxJQUFJZCxLQUFKLENBQVcsZ0RBQStDakMsZUFBZ0IsY0FBaEUsR0FDYiwrRkFEYSxHQUViLHVDQUZHLENBQU47TUFHRDs7TUFDRCxNQUFNZ0MsQ0FBTjtJQUNEOztJQUVELE1BQU0sS0FBS3dCLEtBQUwsQ0FBV00sT0FBWCxDQUFtQixVQUFuQixFQUErQixNQUEvQixFQUF1QztNQUMzQ00sWUFBWSxFQUFFO1FBQ1pDLFVBQVUsRUFBRSxDQUFDLEVBQUQsQ0FEQTtRQUVaQyxXQUFXLEVBQUViO01BRkQ7SUFENkIsQ0FBdkMsQ0FBTjtFQU1EOztFQUVTLE1BQUpULElBQUksR0FBSTtJQUFBOztJQUNaLElBQUksQ0FBQyxLQUFLckIsU0FBVixFQUFxQjtNQUNuQixLQUFLTCxHQUFMLENBQVN1QixJQUFULENBQWUsR0FBRTlDLFNBQVUsK0RBQTNCO01BQ0E7SUFDRDs7SUFFRCxtQkFBSSxLQUFLeUQsS0FBVCx3Q0FBSSxZQUFZZSxTQUFoQixFQUEyQjtNQUN6QixJQUFJO1FBQ0YsTUFBTSxLQUFLZixLQUFMLENBQVdNLE9BQVgsQ0FBb0IsWUFBVyxLQUFLTixLQUFMLENBQVdlLFNBQVUsRUFBcEQsRUFBdUQsUUFBdkQsQ0FBTjtNQUNELENBRkQsQ0FFRSxPQUFPdkMsQ0FBUCxFQUFVO1FBQ1YsS0FBS1YsR0FBTCxDQUFTdUIsSUFBVCxDQUFlLEdBQUU5QyxTQUFVLCtDQUE4Q2lDLENBQUMsQ0FBQ2dDLE9BQVEsRUFBbkY7TUFDRDtJQUNGO0VBQ0Y7O0FBMUVzQjs7ZUE2RVZULGtCIn0=
|
|
156
|
+
exports.default = _default;
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRF9CSU5BUlkiLCJTVEFSVFVQX1RJTUVPVVQiLCJTQUZBUklfUE9SVF9SQU5HRSIsIlNBRkFSSV9TRVJWRVJfR1VBUkQiLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsInBhdGgiLCJyZXNvbHZlIiwib3MiLCJ0bXBkaXIiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJTYWZhcmlQcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiU2FmYXJpRHJpdmVyUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwicG9ydCIsInByb2MiLCJpc1J1bm5pbmciLCJpbml0Iiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwiZSIsIkVycm9yIiwic2FmYXJpQmluIiwiZnMiLCJ3aGljaCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJkZWJ1ZyIsImNvZGUiLCJzaWduYWwiLCJpbmZvIiwic3RhcnQiLCJraWxsIiwic3RvcCIsImlnbiIsIlNBRkFSSV9EUklWRVJfUFJPQ0VTUyIsInByb2Nlc3MiLCJvbmNlIiwiZXhlY1N5bmMiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwid2FpdEZvckNvbmRpdGlvbiIsImNvbW1hbmQiLCJlcnIiLCJtZXNzYWdlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzZXNzaW9uSWQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvc2FmYXJpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgU0RfQklOQVJZID0gJ3NhZmFyaWRyaXZlcic7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVQgPSAxMDAwMDsgLy8gc2Vjb25kc1xuY29uc3QgU0FGQVJJX1BPUlRfUkFOR0UgPSBbNTEwMCwgNTIwMF07XG4vLyBUaGlzIGd1YXJkIGlzIG5lZWRlZCB0byBtYWtlIHN1cmVcbi8vIHdlIG5ldmVyIHJ1biBtdWx0aXBsZSBTYWZhcmkgZHJpdmVyIHByb2Nlc3NlcyBmb3IgdGhlIHNhbWUgQXBwaXVtIHByb2Nlc3NcbmNvbnN0IFNBRkFSSV9TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3NhZmFyaV9zZXJ2ZXJfZ3VhcmQubG9jaycpLFxuICB7dGltZW91dDogNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG5cbmNsYXNzIFNhZmFyaVByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihcbiAgICAgICAgYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBTYWZhcmkgRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIFNhZmFyaURyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdTYWZhcmlEcml2ZXJQcm9jZXNzJyk7XG4gICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKCkge1xuICAgIGF3YWl0IFNBRkFSSV9TRVJWRVJfR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBTQUZBUklfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhZmFyaUJpbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmFyaUJpbiA9IGF3YWl0IGZzLndoaWNoKFNEX0JJTkFSWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTRF9CSU5BUll9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3Moc2FmYXJpQmluLCBbJy1wJywgdGhpcy5wb3J0LCAnLS1kaWFnbm9zZSddKTtcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgWyR7U0RfQklOQVJZfV0gJHtsaW5lfWApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBoYXMgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3NhZmFyaUJpbn0nIG9uIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIFNpbmdsZSBzZXJ2ZXIgcHJvY2VzcyBwZXIgQXBwaXVtIGluc3RhbmNlXG5jb25zdCBTQUZBUklfRFJJVkVSX1BST0NFU1MgPSBuZXcgU2FmYXJpRHJpdmVyUHJvY2VzcygpO1xucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhga2lsbCAke1NBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLnBpZH1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAobG9nKSB7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2Fwcykge1xuICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IFNhZmFyaVByb3h5KHtcbiAgICAgIHNlcnZlcjogJzEyNy4wLjAuMScsXG4gICAgICBwb3J0OiBTQUZBUklfRFJJVkVSX1BST0NFU1MucG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG4gICAgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgLy8gYXZvaWQgXCJmcm96ZW5cIiBwcm9jZXNzZXMsXG4gICAgICAgICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmFyaSBEcml2ZXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgd2l0aGluICR7U1RBUlRVUF9USU1FT1VUfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgaGFzIGJlZW4gZXhlY3V0ZWQgbWFudWFsbHkgYXQgbGVhc3Qgb25jZSB3aXRoICctLWVuYWJsZScgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBgICtcbiAgICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGNhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IHNlc3Npb24gY2Fubm90IGJlIGRlbGV0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2FmYXJpRHJpdmVyU2VydmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUcsY0FBYztBQUNoQyxNQUFNQyxlQUFlLEdBQUcsS0FBSztBQUM3QixNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFHdEMsTUFBTUMsbUJBQW1CLEdBQUdDLGFBQUksQ0FBQ0MsZ0JBQWdCLENBQy9DQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0MsV0FBRSxDQUFDQyxN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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safari.js","names":["SD_BINARY","STARTUP_TIMEOUT","SAFARI_PORT_RANGE","SAFARI_SERVER_GUARD","util","getLockFileGuard","path","resolve","os","tmpdir","timeout","tryRecovery","SafariProxy","JWProxy","proxyCommand","url","method","body","didProcessExit","errors","InvalidContextError","SafariDriverProcess","constructor","log","logger","getLogger","port","proc","isRunning","init","startPort","endPort","findAPortNotInUse","e","Error","safariBin","fs","which","SubProcess","on","stdout","stderr","line","debug","code","signal","info","start","kill","stop","ign","SAFARI_DRIVER_PROCESS","process","once","execSync","pid","SafariDriverServer","proxy","caps","server","base","keepAlive","waitForCondition","command","err","message","waitMs","intervalMs","test","capabilities","firstMatch","alwaysMatch","sessionId"],"sources":["../../lib/safari.js"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport { JWProxy, errors } from 'appium/driver';\nimport { fs, logger, util } from 'appium/support';\nimport { SubProcess } from 'teen_process';\nimport { waitForCondition } from 'asyncbox';\nimport { findAPortNotInUse } from 'portscanner';\nimport { execSync } from 'child_process';\n\nconst SD_BINARY = 'safaridriver';\nconst STARTUP_TIMEOUT = 10000; // seconds\nconst SAFARI_PORT_RANGE = [5100, 5200];\n// This guard is needed to make sure\n// we never run multiple Safari driver processes for the same Appium process\nconst SAFARI_SERVER_GUARD = util.getLockFileGuard(\n path.resolve(os.tmpdir(), 'safari_server_guard.lock'),\n {timeout: 5, tryRecovery: true}\n);\n\n\nclass SafariProxy extends JWProxy {\n async proxyCommand (url, method, body = null) {\n if (this.didProcessExit) {\n throw new errors.InvalidContextError(\n `'${method} ${url}' cannot be proxied to Safari Driver server because ` +\n 'the process is not running (probably crashed). Check the server log for more details');\n }\n return await super.proxyCommand(url, method, body);\n }\n}\n\nclass SafariDriverProcess {\n constructor () {\n this.log = logger.getLogger('SafariDriverProcess');\n this.port = null;\n this.proc = null;\n }\n\n get isRunning () {\n return !!(this.proc?.isRunning);\n }\n\n async init () {\n await SAFARI_SERVER_GUARD(async () => {\n if (this.isRunning) {\n return;\n }\n\n const [startPort, endPort] = SAFARI_PORT_RANGE;\n try {\n this.port = await findAPortNotInUse(startPort, endPort);\n } catch (e) {\n throw new Error(\n `Cannot find any free port in range ${startPort}..${endPort}. ` +\n `Double check the processes that are locking ports within this range and terminate ` +\n `these which are not needed anymore`);\n }\n\n let safariBin;\n try {\n safariBin = await fs.which(SD_BINARY);\n } catch (e) {\n throw new Error(`${SD_BINARY} binary cannot be found in PATH. ` +\n `Please make sure it is present on your system`);\n }\n this.proc = new SubProcess(safariBin, ['-p', this.port, '--diagnose']);\n this.proc.on('output', (stdout, stderr) => {\n const line = stdout || stderr;\n this.log.debug(`[${SD_BINARY}] ${line}`);\n });\n this.proc.on('exit', (code, signal) => {\n this.log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);\n });\n this.log.info(`Starting '${safariBin}' on port ${this.port}`);\n await this.proc.start(0);\n });\n }\n\n async kill () {\n if (this.isRunning) {\n try {\n await this.proc.stop('SIGKILL');\n } catch (ign) {}\n }\n }\n}\n\n// Single server process per Appium instance\nconst SAFARI_DRIVER_PROCESS = new SafariDriverProcess();\nprocess.once('exit', () => {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n try {\n execSync(`kill ${SAFARI_DRIVER_PROCESS.proc.pid}`);\n } catch (ign) {}\n }\n});\n\nclass SafariDriverServer {\n constructor (log) {\n this.log = log;\n this.proxy = null;\n }\n\n get isRunning () {\n return !!(SAFARI_DRIVER_PROCESS.isRunning);\n }\n\n async start (caps) {\n await SAFARI_DRIVER_PROCESS.init();\n\n this.proxy = new SafariProxy({\n server: '127.0.0.1',\n port: SAFARI_DRIVER_PROCESS.port,\n base: '',\n log: this.log,\n keepAlive: true,\n });\n this.proxy.didProcessExit = false;\n SAFARI_DRIVER_PROCESS.proc.on('exit', () => {\n this.proxy.didProcessExit = true;\n });\n\n try {\n await waitForCondition(async () => {\n try {\n await this.proxy.command('/status', 'GET');\n return true;\n } catch (err) {\n if (this.proxy.didProcessExit) {\n throw new Error(err.message);\n }\n return false;\n }\n }, {\n waitMs: STARTUP_TIMEOUT,\n intervalMs: 1000,\n });\n } catch (e) {\n if (/Condition unmet/.test(e.message)) {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n // avoid \"frozen\" processes,\n await SAFARI_DRIVER_PROCESS.kill();\n }\n throw new Error(`Safari Driver server is not listening within ${STARTUP_TIMEOUT}ms timeout. ` +\n `Make sure it has been executed manually at least once with '--enable' command line argument. ` +\n `Check the server log for more details`);\n }\n throw e;\n }\n\n await this.proxy.command('/session', 'POST', {\n capabilities: {\n firstMatch: [{}],\n alwaysMatch: caps,\n }\n });\n }\n\n async stop () {\n if (!this.isRunning) {\n this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);\n return;\n }\n\n if (this.proxy?.sessionId) {\n try {\n await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');\n } catch (e) {\n this.log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);\n }\n }\n }\n}\n\nexport default SafariDriverServer;\n"],"mappings":"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"}
|
package/build/lib/utils.js
CHANGED
|
@@ -1,33 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.formatCapsForServer = formatCapsForServer;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
const SAFARI_CAP_PREFIXES = ['safari:', 'webkit:'];
|
|
15
|
-
|
|
16
11
|
function formatCapsForServer(caps) {
|
|
17
12
|
const result = {
|
|
18
13
|
browserName: 'Safari',
|
|
19
14
|
browserVersion: caps.browserVersion,
|
|
20
15
|
platformName: caps.platformName || 'iOS'
|
|
21
16
|
};
|
|
22
|
-
|
|
23
17
|
for (const [name, value] of _lodash.default.toPairs(caps)) {
|
|
24
18
|
if (SAFARI_CAP_PREFIXES.some(prefix => name.startsWith(prefix))) {
|
|
25
19
|
result[name] = value;
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
return result;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiU0FGQVJJX0NBUF9QUkVGSVhFUyIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJjYXBzIiwicmVzdWx0IiwiYnJvd3Nlck5hbWUiLCJicm93c2VyVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsIm5hbWUiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwic29tZSIsInByZWZpeCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgU0FGQVJJX0NBUF9QUkVGSVhFUyA9IFsnc2FmYXJpOicsICd3ZWJraXQ6J107XG5cbmZ1bmN0aW9uIGZvcm1hdENhcHNGb3JTZXJ2ZXIgKGNhcHMpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGJyb3dzZXJOYW1lOiAnU2FmYXJpJyxcbiAgICBicm93c2VyVmVyc2lvbjogY2Fwcy5icm93c2VyVmVyc2lvbixcbiAgICBwbGF0Zm9ybU5hbWU6IGNhcHMucGxhdGZvcm1OYW1lIHx8ICdpT1MnLFxuICB9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNBRkFSSV9DQVBfUFJFRklYRVMuc29tZSgocHJlZml4KSA9PiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkpIHtcbiAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUEsTUFBTUEsbUJBQW1CLEdBQUcsQ0FBQyxTQUFELEVBQVksU0FBWixDQUE1Qjs7QUFFQSxTQUFTQyxtQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7RUFDbEMsTUFBTUMsTUFBTSxHQUFHO0lBQ2JDLFdBQVcsRUFBRSxRQURBO0lBRWJDLGNBQWMsRUFBRUgsSUFBSSxDQUFDRyxjQUZSO0lBR2JDLFlBQVksRUFBRUosSUFBSSxDQUFDSSxZQUFMLElBQXFCO0VBSHRCLENBQWY7O0VBS0EsS0FBSyxNQUFNLENBQUNDLElBQUQsRUFBT0MsS0FBUCxDQUFYLElBQTRCQyxlQUFBLENBQUVDLE9BQUYsQ0FBVVIsSUFBVixDQUE1QixFQUE2QztJQUMzQyxJQUFJRixtQkFBbUIsQ0FBQ1csSUFBcEIsQ0FBMEJDLE1BQUQsSUFBWUwsSUFBSSxDQUFDTSxVQUFMLENBQWdCRCxNQUFoQixDQUFyQyxDQUFKLEVBQW1FO01BQ2pFVCxNQUFNLENBQUNJLElBQUQsQ0FBTixHQUFlQyxLQUFmO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPTCxNQUFQO0FBQ0QifQ==
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTQUZBUklfQ0FQX1BSRUZJWEVTIiwiZm9ybWF0Q2Fwc0ZvclNlcnZlciIsImNhcHMiLCJyZXN1bHQiLCJicm93c2VyTmFtZSIsImJyb3dzZXJWZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwibmFtZSIsInZhbHVlIiwiXyIsInRvUGFpcnMiLCJzb21lIiwicHJlZml4Iiwic3RhcnRzV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBTQUZBUklfQ0FQX1BSRUZJWEVTID0gWydzYWZhcmk6JywgJ3dlYmtpdDonXTtcblxuZnVuY3Rpb24gZm9ybWF0Q2Fwc0ZvclNlcnZlciAoY2Fwcykge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgYnJvd3Nlck5hbWU6ICdTYWZhcmknLFxuICAgIGJyb3dzZXJWZXJzaW9uOiBjYXBzLmJyb3dzZXJWZXJzaW9uLFxuICAgIHBsYXRmb3JtTmFtZTogY2Fwcy5wbGF0Zm9ybU5hbWUgfHwgJ2lPUycsXG4gIH07XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU0FGQVJJX0NBUF9QUkVGSVhFUy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSkge1xuICAgICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7IGZvcm1hdENhcHNGb3JTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUVBLE1BQU1BLG1CQUFtQixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztBQUVsRCxTQUFTQyxtQkFBbUIsQ0FBRUMsSUFBSSxFQUFFO0VBQ2xDLE1BQU1DLE1BQU0sR0FBRztJQUNiQyxXQUFXLEVBQUUsUUFBUTtJQUNyQkMsY0FBYyxFQUFFSCxJQUFJLENBQUNHLGNBQWM7SUFDbkNDLFlBQVksRUFBRUosSUFBSSxDQUFDSSxZQUFZLElBQUk7RUFDckMsQ0FBQztFQUNELEtBQUssTUFBTSxDQUFDQyxJQUFJLEVBQUVDLEtBQUssQ0FBQyxJQUFJQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ1IsSUFBSSxDQUFDLEVBQUU7SUFDM0MsSUFBSUYsbUJBQW1CLENBQUNXLElBQUksQ0FBRUMsTUFBTSxJQUFLTCxJQUFJLENBQUNNLFVBQVUsQ0FBQ0QsTUFBTSxDQUFDLENBQUMsRUFBRTtNQUNqRVQsTUFBTSxDQUFDSSxJQUFJLENBQUMsR0FBR0MsS0FBSztJQUN0QjtFQUNGO0VBQ0EsT0FBT0wsTUFBTTtBQUNmIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["SAFARI_CAP_PREFIXES","formatCapsForServer","caps","result","browserName","browserVersion","platformName","name","value","_","toPairs","some","prefix","startsWith"],"sources":["../../lib/utils.js"],"sourcesContent":["import _ from 'lodash';\n\nconst SAFARI_CAP_PREFIXES = ['safari:', 'webkit:'];\n\nfunction formatCapsForServer (caps) {\n const result = {\n browserName: 'Safari',\n browserVersion: caps.browserVersion,\n platformName: caps.platformName || 'iOS',\n };\n for (const [name, value] of _.toPairs(caps)) {\n if (SAFARI_CAP_PREFIXES.some((prefix) => name.startsWith(prefix))) {\n result[name] = value;\n }\n }\n return result;\n}\n\nexport { formatCapsForServer };\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;AAElD,SAASC,mBAAmB,CAAEC,IAAI,EAAE;EAClC,MAAMC,MAAM,GAAG;IACbC,WAAW,EAAE,QAAQ;IACrBC,cAAc,EAAEH,IAAI,CAACG,cAAc;IACnCC,YAAY,EAAEJ,IAAI,CAACI,YAAY,IAAI;EACrC,CAAC;EACD,KAAK,MAAM,CAACC,IAAI,EAAEC,KAAK,CAAC,IAAIC,eAAC,CAACC,OAAO,CAACR,IAAI,CAAC,EAAE;IAC3C,IAAIF,mBAAmB,CAACW,IAAI,CAAEC,MAAM,IAAKL,IAAI,CAACM,UAAU,CAACD,MAAM,CAAC,CAAC,EAAE;MACjET,MAAM,CAACI,IAAI,CAAC,GAAGC,KAAK;IACtB;EACF;EACA,OAAOL,MAAM;AACf"}
|