appium-chromedriver 8.0.31 → 8.1.0
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/CHANGELOG.md +6 -0
- package/build/lib/storage-client/chromelabs.d.ts +15 -15
- package/build/lib/storage-client/chromelabs.d.ts.map +1 -1
- package/build/lib/storage-client/chromelabs.js +15 -19
- package/build/lib/storage-client/chromelabs.js.map +1 -1
- package/build/lib/storage-client/googleapis.d.ts +14 -16
- package/build/lib/storage-client/googleapis.d.ts.map +1 -1
- package/build/lib/storage-client/googleapis.js +25 -41
- package/build/lib/storage-client/googleapis.js.map +1 -1
- package/build/lib/storage-client/storage-client.d.ts +41 -56
- package/build/lib/storage-client/storage-client.d.ts.map +1 -1
- package/build/lib/storage-client/storage-client.js +118 -137
- package/build/lib/storage-client/storage-client.js.map +1 -1
- package/lib/storage-client/{chromelabs.js → chromelabs.ts} +54 -26
- package/lib/storage-client/{googleapis.js → googleapis.ts} +55 -54
- package/lib/storage-client/{storage-client.js → storage-client.ts} +188 -182
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [8.1.0](https://github.com/appium/appium-chromedriver/compare/v8.0.31...v8.1.0) (2025-12-22)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* Migrate storage client modules to typescript ([#532](https://github.com/appium/appium-chromedriver/issues/532)) ([55ef283](https://github.com/appium/appium-chromedriver/commit/55ef2833bc71dda67608eb106783645c4f89922e))
|
|
6
|
+
|
|
1
7
|
## [8.0.31](https://github.com/appium/appium-chromedriver/compare/v8.0.30...v8.0.31) (2025-12-21)
|
|
2
8
|
|
|
3
9
|
### Miscellaneous Chores
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
+
import type { ChromedriverDetailsMapping } from '../types';
|
|
1
2
|
/**
|
|
2
|
-
* Parses
|
|
3
|
-
* that retrieves Chromedriver versions. See
|
|
4
|
-
* https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
|
|
5
|
-
* for more details.
|
|
3
|
+
* Parses the output of the JSON API that retrieves Chromedriver versions
|
|
6
4
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* See https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints for more details.
|
|
6
|
+
*
|
|
7
|
+
* @param jsonStr - The JSON string from the known-good-versions-with-downloads API
|
|
8
|
+
* @returns A mapping of chromedriver entry keys to their details
|
|
9
|
+
* @throws {Error} if the JSON cannot be parsed or has an unsupported format
|
|
9
10
|
*/
|
|
10
|
-
export function parseKnownGoodVersionsWithDownloadsJson(jsonStr: string): ChromedriverDetailsMapping;
|
|
11
|
+
export declare function parseKnownGoodVersionsWithDownloadsJson(jsonStr: string): ChromedriverDetailsMapping;
|
|
11
12
|
/**
|
|
12
|
-
* Parses
|
|
13
|
-
*
|
|
14
|
-
* https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
|
|
15
|
-
* for more details.
|
|
13
|
+
* Parses the output of the JSON API that retrieves the most recent stable Chromedriver version
|
|
14
|
+
*
|
|
15
|
+
* See https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints for more details.
|
|
16
16
|
*
|
|
17
|
-
* @param
|
|
18
|
-
* @returns
|
|
17
|
+
* @param jsonStr - The JSON string from the last-known-good-versions API
|
|
18
|
+
* @returns The most recent available chromedriver version string
|
|
19
|
+
* @throws {Error} if the JSON cannot be parsed or has an unsupported format
|
|
19
20
|
*/
|
|
20
|
-
export function parseLatestKnownGoodVersionsJson(jsonStr: string): string;
|
|
21
|
-
export type ChromedriverDetailsMapping = import("../types").ChromedriverDetailsMapping;
|
|
21
|
+
export declare function parseLatestKnownGoodVersionsJson(jsonStr: string): string;
|
|
22
22
|
//# sourceMappingURL=chromelabs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromelabs.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/chromelabs.
|
|
1
|
+
{"version":3,"file":"chromelabs.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/chromelabs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,UAAU,CAAC;AAIzD;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,MAAM,GACd,0BAA0B,CAuF5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBxE"}
|
|
@@ -45,13 +45,13 @@ const semver = __importStar(require("semver"));
|
|
|
45
45
|
const constants_1 = require("../constants");
|
|
46
46
|
const log = support_1.logger.getLogger('ChromedriverChromelabsStorageClient');
|
|
47
47
|
/**
|
|
48
|
-
* Parses
|
|
49
|
-
* that retrieves Chromedriver versions. See
|
|
50
|
-
* https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
|
|
51
|
-
* for more details.
|
|
48
|
+
* Parses the output of the JSON API that retrieves Chromedriver versions
|
|
52
49
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
50
|
+
* See https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints for more details.
|
|
51
|
+
*
|
|
52
|
+
* @param jsonStr - The JSON string from the known-good-versions-with-downloads API
|
|
53
|
+
* @returns A mapping of chromedriver entry keys to their details
|
|
54
|
+
* @throws {Error} if the JSON cannot be parsed or has an unsupported format
|
|
55
55
|
*/
|
|
56
56
|
function parseKnownGoodVersionsWithDownloadsJson(jsonStr) {
|
|
57
57
|
let json;
|
|
@@ -59,7 +59,7 @@ function parseKnownGoodVersionsWithDownloadsJson(jsonStr) {
|
|
|
59
59
|
json = JSON.parse(jsonStr);
|
|
60
60
|
}
|
|
61
61
|
catch (e) {
|
|
62
|
-
const err =
|
|
62
|
+
const err = e;
|
|
63
63
|
throw new Error(`Storage JSON cannot be parsed. Original error: ${err.message}`);
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
@@ -99,7 +99,6 @@ function parseKnownGoodVersionsWithDownloadsJson(jsonStr) {
|
|
|
99
99
|
* "version":"113.0.5672.35",
|
|
100
100
|
* ...
|
|
101
101
|
*/
|
|
102
|
-
/** @type {ChromedriverDetailsMapping} */
|
|
103
102
|
const mapping = {};
|
|
104
103
|
if (!lodash_1.default.isArray(json?.versions)) {
|
|
105
104
|
log.debug(jsonStr);
|
|
@@ -133,7 +132,7 @@ function parseKnownGoodVersionsWithDownloadsJson(jsonStr) {
|
|
|
133
132
|
name: osNameMatch[0],
|
|
134
133
|
arch: downloadEntry.platform.includes(constants_1.ARCH.X64) ? constants_1.ARCH.X64 : constants_1.ARCH.X86,
|
|
135
134
|
cpu: downloadEntry.platform.includes(constants_1.CPU.ARM) ? constants_1.CPU.ARM : constants_1.CPU.INTEL,
|
|
136
|
-
}
|
|
135
|
+
},
|
|
137
136
|
};
|
|
138
137
|
}
|
|
139
138
|
}
|
|
@@ -141,13 +140,13 @@ function parseKnownGoodVersionsWithDownloadsJson(jsonStr) {
|
|
|
141
140
|
return mapping;
|
|
142
141
|
}
|
|
143
142
|
/**
|
|
144
|
-
* Parses
|
|
145
|
-
*
|
|
146
|
-
* https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints
|
|
147
|
-
* for more details.
|
|
143
|
+
* Parses the output of the JSON API that retrieves the most recent stable Chromedriver version
|
|
144
|
+
*
|
|
145
|
+
* See https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints for more details.
|
|
148
146
|
*
|
|
149
|
-
* @param
|
|
150
|
-
* @returns
|
|
147
|
+
* @param jsonStr - The JSON string from the last-known-good-versions API
|
|
148
|
+
* @returns The most recent available chromedriver version string
|
|
149
|
+
* @throws {Error} if the JSON cannot be parsed or has an unsupported format
|
|
151
150
|
*/
|
|
152
151
|
function parseLatestKnownGoodVersionsJson(jsonStr) {
|
|
153
152
|
let json;
|
|
@@ -155,7 +154,7 @@ function parseLatestKnownGoodVersionsJson(jsonStr) {
|
|
|
155
154
|
json = JSON.parse(jsonStr);
|
|
156
155
|
}
|
|
157
156
|
catch (e) {
|
|
158
|
-
const err =
|
|
157
|
+
const err = e;
|
|
159
158
|
throw new Error(`Storage JSON cannot be parsed. Original error: ${err.message}`);
|
|
160
159
|
}
|
|
161
160
|
/**
|
|
@@ -174,7 +173,4 @@ function parseLatestKnownGoodVersionsJson(jsonStr) {
|
|
|
174
173
|
}
|
|
175
174
|
return json.channels.Stable.version;
|
|
176
175
|
}
|
|
177
|
-
/**
|
|
178
|
-
* @typedef {import('../types').ChromedriverDetailsMapping} ChromedriverDetailsMapping
|
|
179
|
-
*/
|
|
180
176
|
//# sourceMappingURL=chromelabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromelabs.js","sourceRoot":"","sources":["../../../lib/storage-client/chromelabs.
|
|
1
|
+
{"version":3,"file":"chromelabs.js","sourceRoot":"","sources":["../../../lib/storage-client/chromelabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,30 @@
|
|
|
1
|
+
import type { AdditionalDriverDetails, ChromedriverDetailsMapping } from '../types';
|
|
1
2
|
/**
|
|
3
|
+
* Finds a child node in an XML node by name and/or text content
|
|
2
4
|
*
|
|
3
|
-
* @param
|
|
4
|
-
* @param
|
|
5
|
-
* @param
|
|
6
|
-
* @returns
|
|
5
|
+
* @param parent - The parent XML node to search in
|
|
6
|
+
* @param childName - Optional child node name to match
|
|
7
|
+
* @param text - Optional text content to match
|
|
8
|
+
* @returns The matching child node or null if not found
|
|
7
9
|
*/
|
|
8
|
-
export function findChildNode(parent: Node | Attr, childName?: string | null, text?: string | null):
|
|
10
|
+
export declare function findChildNode(parent: Node | Attr, childName?: string | null, text?: string | null): Node | Attr | null;
|
|
9
11
|
/**
|
|
10
12
|
* Gets additional chromedriver details from chromedriver
|
|
11
13
|
* release notes
|
|
12
14
|
*
|
|
13
|
-
* @param
|
|
14
|
-
* @returns
|
|
15
|
+
* @param content - Release notes of the corresponding chromedriver
|
|
16
|
+
* @returns AdditionalDriverDetails
|
|
15
17
|
*/
|
|
16
|
-
export function parseNotes(content: string):
|
|
18
|
+
export declare function parseNotes(content: string): AdditionalDriverDetails;
|
|
17
19
|
/**
|
|
18
20
|
* Parses chromedriver storage XML and returns
|
|
19
21
|
* the parsed results
|
|
20
22
|
*
|
|
21
|
-
* @param
|
|
22
|
-
* @param
|
|
23
|
+
* @param xml - The chromedriver storage XML
|
|
24
|
+
* @param shouldParseNotes [true] - If set to `true`
|
|
23
25
|
* then additional drivers information is going to be parsed
|
|
24
26
|
* and assigned to `this.mapping`
|
|
25
|
-
* @returns
|
|
27
|
+
* @returns Promise<ChromedriverDetailsMapping>
|
|
26
28
|
*/
|
|
27
|
-
export function parseGoogleapiStorageXml(xml: string, shouldParseNotes?: boolean): Promise<ChromedriverDetailsMapping>;
|
|
28
|
-
export type SyncOptions = import("../types").SyncOptions;
|
|
29
|
-
export type OSInfo = import("../types").OSInfo;
|
|
30
|
-
export type ChromedriverDetails = import("../types").ChromedriverDetails;
|
|
31
|
-
export type ChromedriverDetailsMapping = import("../types").ChromedriverDetailsMapping;
|
|
29
|
+
export declare function parseGoogleapiStorageXml(xml: string, shouldParseNotes?: boolean): Promise<ChromedriverDetailsMapping>;
|
|
32
30
|
//# sourceMappingURL=googleapis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleapis.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/googleapis.
|
|
1
|
+
{"version":3,"file":"googleapis.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/googleapis.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAC3B,MAAM,UAAU,CAAC;AAKlB;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,IAAI,GAAG,IAAI,EACnB,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,IAAI,GAAE,MAAM,GAAG,IAAW,GACzB,IAAI,GAAG,IAAI,GAAG,IAAI,CA2BpB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAWnE;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,gBAAgB,UAAO,GACtB,OAAO,CAAC,0BAA0B,CAAC,CAwErC"}
|
|
@@ -17,11 +17,12 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
17
17
|
const log = support_1.logger.getLogger('ChromedriverGoogleapisStorageClient');
|
|
18
18
|
const MAX_PARALLEL_DOWNLOADS = 5;
|
|
19
19
|
/**
|
|
20
|
+
* Finds a child node in an XML node by name and/or text content
|
|
20
21
|
*
|
|
21
|
-
* @param
|
|
22
|
-
* @param
|
|
23
|
-
* @param
|
|
24
|
-
* @returns
|
|
22
|
+
* @param parent - The parent XML node to search in
|
|
23
|
+
* @param childName - Optional child node name to match
|
|
24
|
+
* @param text - Optional text content to match
|
|
25
|
+
* @returns The matching child node or null if not found
|
|
25
26
|
*/
|
|
26
27
|
function findChildNode(parent, childName = null, text = null) {
|
|
27
28
|
if (!childName && !text) {
|
|
@@ -31,7 +32,7 @@ function findChildNode(parent, childName = null, text = null) {
|
|
|
31
32
|
return null;
|
|
32
33
|
}
|
|
33
34
|
for (let childNodeIdx = 0; childNodeIdx < parent.childNodes.length; childNodeIdx++) {
|
|
34
|
-
const childNode =
|
|
35
|
+
const childNode = parent.childNodes[childNodeIdx];
|
|
35
36
|
if (childName && !text && childName === childNode.localName) {
|
|
36
37
|
return childNode;
|
|
37
38
|
}
|
|
@@ -50,22 +51,12 @@ function findChildNode(parent, childName = null, text = null) {
|
|
|
50
51
|
}
|
|
51
52
|
return null;
|
|
52
53
|
}
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
* @param {Node?} node
|
|
56
|
-
* @returns
|
|
57
|
-
*/
|
|
58
|
-
function extractNodeText(node) {
|
|
59
|
-
return !node?.firstChild || !support_1.util.hasValue(node.firstChild.nodeValue)
|
|
60
|
-
? null
|
|
61
|
-
: node.firstChild.nodeValue;
|
|
62
|
-
}
|
|
63
54
|
/**
|
|
64
55
|
* Gets additional chromedriver details from chromedriver
|
|
65
56
|
* release notes
|
|
66
57
|
*
|
|
67
|
-
* @param
|
|
68
|
-
* @returns
|
|
58
|
+
* @param content - Release notes of the corresponding chromedriver
|
|
59
|
+
* @returns AdditionalDriverDetails
|
|
69
60
|
*/
|
|
70
61
|
function parseNotes(content) {
|
|
71
62
|
const result = {};
|
|
@@ -83,24 +74,21 @@ function parseNotes(content) {
|
|
|
83
74
|
* Parses chromedriver storage XML and returns
|
|
84
75
|
* the parsed results
|
|
85
76
|
*
|
|
86
|
-
* @param
|
|
87
|
-
* @param
|
|
77
|
+
* @param xml - The chromedriver storage XML
|
|
78
|
+
* @param shouldParseNotes [true] - If set to `true`
|
|
88
79
|
* then additional drivers information is going to be parsed
|
|
89
80
|
* and assigned to `this.mapping`
|
|
90
|
-
* @returns
|
|
81
|
+
* @returns Promise<ChromedriverDetailsMapping>
|
|
91
82
|
*/
|
|
92
83
|
async function parseGoogleapiStorageXml(xml, shouldParseNotes = true) {
|
|
93
84
|
const doc = new xmldom_1.DOMParser().parseFromString(xml, 'text/xml');
|
|
94
|
-
const driverNodes =
|
|
95
|
-
// https://github.com/xmldom/xmldom/issues/724
|
|
96
|
-
(0, xpath_1.select)(`//*[local-name(.)='Contents']`, doc));
|
|
85
|
+
const driverNodes = (0, xpath_1.select)(`//*[local-name(.)='Contents']`, doc);
|
|
97
86
|
log.debug(`Parsed ${driverNodes.length} entries from storage XML`);
|
|
98
87
|
if (lodash_1.default.isEmpty(driverNodes)) {
|
|
99
88
|
throw new Error('Cannot retrieve any valid Chromedriver entries from the storage config');
|
|
100
89
|
}
|
|
101
90
|
const promises = [];
|
|
102
91
|
const chunk = [];
|
|
103
|
-
/** @type {ChromedriverDetailsMapping} */
|
|
104
92
|
const mapping = {};
|
|
105
93
|
for (const driverNode of driverNodes) {
|
|
106
94
|
const k = extractNodeText(findChildNode(driverNode, 'Key'));
|
|
@@ -119,17 +107,16 @@ async function parseGoogleapiStorageXml(xml, shouldParseNotes = true) {
|
|
|
119
107
|
log.debug(`The entry '${key}' does not contain valid OS name. Skipping it`);
|
|
120
108
|
continue;
|
|
121
109
|
}
|
|
122
|
-
/** @type {ChromedriverDetails} */
|
|
123
110
|
const cdInfo = {
|
|
124
111
|
url: `${constants_1.GOOGLEAPIS_CDN}/${key}`,
|
|
125
112
|
etag: lodash_1.default.trim(etag, '"'),
|
|
126
|
-
version:
|
|
113
|
+
version: lodash_1.default.first(key.split('/')),
|
|
127
114
|
minBrowserVersion: null,
|
|
128
115
|
os: {
|
|
129
116
|
name: osNameMatch[1],
|
|
130
117
|
arch: filename.includes(constants_1.ARCH.X64) ? constants_1.ARCH.X64 : constants_1.ARCH.X86,
|
|
131
118
|
cpu: constants_1.APPLE_ARM_SUFFIXES.some((suffix) => filename.includes(suffix)) ? constants_1.CPU.ARM : constants_1.CPU.INTEL,
|
|
132
|
-
}
|
|
119
|
+
},
|
|
133
120
|
};
|
|
134
121
|
mapping[key] = cdInfo;
|
|
135
122
|
const notesPath = `${cdInfo.version}/notes.txt`;
|
|
@@ -157,15 +144,13 @@ async function parseGoogleapiStorageXml(xml, shouldParseNotes = true) {
|
|
|
157
144
|
return mapping;
|
|
158
145
|
}
|
|
159
146
|
/**
|
|
160
|
-
* Downloads chromedriver release notes and
|
|
161
|
-
* into the dictionary argument
|
|
147
|
+
* Downloads chromedriver release notes and updates the driver info dictionary
|
|
162
148
|
*
|
|
163
|
-
*
|
|
164
|
-
* @param
|
|
165
|
-
* @param
|
|
166
|
-
* @param
|
|
167
|
-
* @param
|
|
168
|
-
* @throws {Error} if the release notes cannot be downloaded
|
|
149
|
+
* Mutates `infoDict` by setting `minBrowserVersion` if found in notes
|
|
150
|
+
* @param driverKey - Driver version plus archive name
|
|
151
|
+
* @param notesUrl - The URL of chromedriver notes
|
|
152
|
+
* @param infoDict - The dictionary containing driver info (will be mutated)
|
|
153
|
+
* @param timeout - Request timeout in milliseconds
|
|
169
154
|
*/
|
|
170
155
|
async function retrieveAdditionalDriverInfo(driverKey, notesUrl, infoDict, timeout = constants_1.STORAGE_REQ_TIMEOUT_MS) {
|
|
171
156
|
const notes = await (0, utils_1.retrieveData)(notesUrl, {
|
|
@@ -180,10 +165,9 @@ async function retrieveAdditionalDriverInfo(driverKey, notesUrl, infoDict, timeo
|
|
|
180
165
|
}
|
|
181
166
|
infoDict.minBrowserVersion = minBrowserVersion;
|
|
182
167
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*/
|
|
168
|
+
function extractNodeText(node) {
|
|
169
|
+
return !node?.firstChild || !support_1.util.hasValue(node.firstChild.nodeValue)
|
|
170
|
+
? null
|
|
171
|
+
: node.firstChild.nodeValue;
|
|
172
|
+
}
|
|
189
173
|
//# sourceMappingURL=googleapis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleapis.js","sourceRoot":"","sources":["../../../lib/storage-client/googleapis.
|
|
1
|
+
{"version":3,"file":"googleapis.js","sourceRoot":"","sources":["../../../lib/storage-client/googleapis.ts"],"names":[],"mappings":";;;;;AA+BA,sCA+BC;AASD,gCAWC;AAYD,4DA2EC;AAzKD,oDAAuB;AACvB,iCAA4C;AAC5C,6CAA6C;AAC7C,oCAAsC;AACtC,wDAAyB;AACzB,4CAMsB;AACtB,2CAAyC;AACzC,0DAA6B;AAO7B,MAAM,GAAG,GAAG,gBAAM,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;AACpE,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,SAAgB,aAAa,CAC3B,MAAmB,EACnB,YAA2B,IAAI,EAC/B,OAAsB,IAAI;IAE1B,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAmB,CAAC;QACpE,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,CAAC,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,sBAAsB,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/E,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,CAAC,iBAAiB,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,wBAAwB,CAC5C,GAAW,EACX,gBAAgB,GAAG,IAAI;IAEvB,MAAM,GAAG,GAAG,IAAI,kBAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAA,cAAW,EAAC,+BAA+B,EAAE,GAAG,CAAuB,CAAC;IAC5F,GAAG,CAAC,KAAK,CAAC,UAAU,WAAW,CAAC,MAAM,2BAA2B,CAAC,CAAC;IACnE,IAAI,gBAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,gBAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtB,MAAM,IAAI,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,8CAA8C,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,+CAA+C,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAwB;YAClC,GAAG,EAAE,GAAG,0BAAc,IAAI,GAAG,EAAE;YAC/B,IAAI,EAAE,gBAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;YACvB,OAAO,EAAE,gBAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAW;YAC1C,iBAAiB,EAAE,IAAI;YACvB,EAAE,EAAE;gBACF,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;gBACpB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,gBAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAI,CAAC,GAAG;gBACvD,GAAG,EAAE,8BAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eAAG,CAAC,GAAG,CAAC,CAAC,CAAC,eAAG,CAAC,KAAK;aAC1F;SACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAEtB,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC;QAChD,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,EACpE,KAAK,CACN,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,2CAA2C,CAAC,CAAC;YACzE,CAAC;YACD,SAAS;QACX,CAAC;aAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,kBAAC,CAAC,OAAO,CACvB,4BAA4B,CAAC,GAAG,EAAE,GAAG,0BAAc,IAAI,SAAS,EAAE,EAAE,MAAM,CAAC,CAC5E,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC3C,MAAM,kBAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,gBAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAE,CAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,kBAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,CAAC,8CAA8C,gBAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,4BAA4B,CACzC,SAAiB,EACjB,QAAgB,EAChB,QAA6B,EAC7B,OAAO,GAAG,kCAAsB;IAEhC,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAY,EAC9B,QAAQ,EACR;QACE,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,KAAK;KACd,EACD,EAAC,OAAO,EAAC,CACV,CAAC;IACF,MAAM,EAAC,iBAAiB,EAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,CACP,eAAe,SAAS,6CAA6C,QAAQ,IAAI;YAC/E,aAAa,CAChB,CAAC;QACF,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,IAA6B;IACpD,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACnE,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AAChC,CAAC"}
|
|
@@ -1,88 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(args?:
|
|
7
|
-
chromedriverDir: string;
|
|
8
|
-
timeout: number;
|
|
9
|
-
/** @type {ChromedriverDetailsMapping} */
|
|
10
|
-
mapping: ChromedriverDetailsMapping;
|
|
1
|
+
import type { ChromedriverStorageClientOpts, SyncOptions, ChromedriverDetailsMapping } from '../types';
|
|
2
|
+
export declare class ChromedriverStorageClient {
|
|
3
|
+
readonly chromedriverDir: string;
|
|
4
|
+
readonly timeout: number;
|
|
5
|
+
private mapping;
|
|
6
|
+
constructor(args?: ChromedriverStorageClientOpts);
|
|
11
7
|
/**
|
|
12
8
|
* Retrieves chromedriver mapping from the storage
|
|
13
9
|
*
|
|
14
|
-
* @param
|
|
10
|
+
* @param shouldParseNotes [true] - if set to `true`
|
|
15
11
|
* then additional chromedrivers info is going to be retrieved and
|
|
16
12
|
* parsed from release notes
|
|
17
|
-
* @returns
|
|
13
|
+
* @returns Promise<ChromedriverDetailsMapping>
|
|
18
14
|
*/
|
|
19
15
|
retrieveMapping(shouldParseNotes?: boolean): Promise<ChromedriverDetailsMapping>;
|
|
20
16
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* Retrieves chromedrivers from the remote storage to the local file system
|
|
18
|
+
*
|
|
19
|
+
* @param opts - Synchronization options (versions, minBrowserVersion, osInfo)
|
|
20
|
+
* @throws {Error} if there was a problem while retrieving the drivers
|
|
21
|
+
* @returns The list of successfully synchronized driver keys
|
|
22
|
+
*/
|
|
23
|
+
syncDrivers(opts?: SyncOptions): Promise<string[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the latest chromedriver version for Chrome for Testing
|
|
23
26
|
*
|
|
24
|
-
* @
|
|
25
|
-
* @
|
|
27
|
+
* @returns The latest stable chromedriver version string
|
|
28
|
+
* @throws {Error} if the version cannot be fetched from the remote API
|
|
26
29
|
*/
|
|
27
|
-
|
|
30
|
+
getLatestKnownGoodVersion(): Promise<string>;
|
|
28
31
|
/**
|
|
29
|
-
* Filters `this.mapping` to only select matching
|
|
30
|
-
*
|
|
31
|
-
* and/or additional synchronization options (if provided)
|
|
32
|
+
* Filters `this.mapping` to only select matching chromedriver entries
|
|
33
|
+
* by operating system information and/or additional synchronization options
|
|
32
34
|
*
|
|
33
|
-
* @param
|
|
34
|
-
* @param
|
|
35
|
-
* @returns
|
|
36
|
-
* entry names (version/archive name)
|
|
35
|
+
* @param osInfo - Operating system information to match against
|
|
36
|
+
* @param opts - Synchronization options (versions, minBrowserVersion)
|
|
37
|
+
* @returns The list of filtered chromedriver entry names (version/archive name)
|
|
37
38
|
*/
|
|
38
|
-
selectMatchingDrivers
|
|
39
|
+
private selectMatchingDrivers;
|
|
39
40
|
/**
|
|
40
41
|
* Checks whether the given chromedriver matches the operating system to run on
|
|
41
42
|
*
|
|
42
|
-
* @param
|
|
43
|
-
* @param
|
|
44
|
-
* @returns
|
|
43
|
+
* @param cdName - The chromedriver entry key in the mapping
|
|
44
|
+
* @param osInfo - Operating system information to match against
|
|
45
|
+
* @returns True if the chromedriver matches the OS info
|
|
45
46
|
*/
|
|
46
|
-
doesMatchForOsInfo
|
|
47
|
+
private doesMatchForOsInfo;
|
|
47
48
|
/**
|
|
48
49
|
* Retrieves the given chromedriver from the storage
|
|
49
50
|
* and unpacks it into `this.chromedriverDir` folder
|
|
50
51
|
*
|
|
51
|
-
* @param
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
52
|
+
* @param index - The unique driver index
|
|
53
|
+
* @param driverKey - The driver key in `this.mapping`
|
|
54
|
+
* @param archivesRoot - The temporary folder path to extract
|
|
54
55
|
* downloaded archives to
|
|
55
|
-
* @param
|
|
56
|
+
* @param isStrict [true] - Whether to throw an error (`true`)
|
|
56
57
|
* or return a boolean result if the driver retrieval process fails
|
|
57
58
|
* @throws {Error} if there was a failure while retrieving the driver
|
|
58
59
|
* and `isStrict` is set to `true`
|
|
59
|
-
* @returns
|
|
60
|
+
* @returns if `true` then the chromedriver is successfully
|
|
60
61
|
* downloaded and extracted.
|
|
61
62
|
*/
|
|
62
|
-
retrieveDriver
|
|
63
|
+
private retrieveDriver;
|
|
63
64
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
65
|
+
* Extracts downloaded chromedriver archive
|
|
66
|
+
* into the given destination
|
|
66
67
|
*
|
|
67
|
-
* @param
|
|
68
|
-
* @
|
|
69
|
-
* the drivers
|
|
70
|
-
* @returns {Promise<string[]>} The list of successfully synchronized driver keys
|
|
68
|
+
* @param src - The source archive path
|
|
69
|
+
* @param dst - The destination chromedriver path
|
|
71
70
|
*/
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Return latest chromedriver version for Chrome for Testing.
|
|
75
|
-
* @returns {Promise<string>}
|
|
76
|
-
*/
|
|
77
|
-
getLatestKnownGoodVersion(): Promise<string>;
|
|
71
|
+
private unzipDriver;
|
|
78
72
|
}
|
|
79
|
-
export default ChromedriverStorageClient;
|
|
80
|
-
export type SyncOptions = import("../types").SyncOptions;
|
|
81
|
-
export type OSInfo = import("../types").OSInfo;
|
|
82
|
-
export type ChromedriverDetails = import("../types").ChromedriverDetails;
|
|
83
|
-
export type ChromedriverDetailsMapping = import("../types").ChromedriverDetailsMapping;
|
|
84
|
-
export type StorageInfo = {
|
|
85
|
-
url: string;
|
|
86
|
-
accept: string;
|
|
87
|
-
};
|
|
88
73
|
//# sourceMappingURL=storage-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-client.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/storage-client.
|
|
1
|
+
{"version":3,"file":"storage-client.d.ts","sourceRoot":"","sources":["../../../lib/storage-client/storage-client.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,6BAA6B,EAC7B,WAAW,EAEX,0BAA0B,EAC3B,MAAM,UAAU,CAAC;AA6BlB,qBAAa,yBAAyB;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,IAAI,GAAE,6BAAkC;IAOpD;;;;;;;OAOG;IACG,eAAe,CAAC,gBAAgB,UAAO,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAuCnF;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqD5D;;;;;OAKG;IACG,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBlD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IA6H7B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;;;;;;;;;;;OAcG;YACW,cAAc;IAgD5B;;;;;;OAMG;YACW,WAAW;CAuB1B"}
|