appium-xcuitest-driver 10.1.5 → 10.1.7
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 +12 -0
- package/build/lib/doctor/required-checks.d.ts.map +1 -1
- package/build/lib/doctor/required-checks.js +7 -6
- package/build/lib/doctor/required-checks.js.map +1 -1
- package/lib/doctor/required-checks.js +7 -6
- package/npm-shrinkwrap.json +148 -255
- package/package.json +6 -4
- package/scripts/image-mounter.mjs +239 -0
- package/scripts/{open-wda.js → open-wda.mjs} +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [10.1.7](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.6...v10.1.7) (2025-10-10)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* Improve some doctor messaging ([#2638](https://github.com/appium/appium-xcuitest-driver/issues/2638)) ([701b083](https://github.com/appium/appium-xcuitest-driver/commit/701b0839fe0cd9fa899a6fa7a1bc06a0e9dc5689))
|
|
6
|
+
|
|
7
|
+
## [10.1.6](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.5...v10.1.6) (2025-10-06)
|
|
8
|
+
|
|
9
|
+
### Miscellaneous Chores
|
|
10
|
+
|
|
11
|
+
* Migrate open-wda script to ESM ([#2637](https://github.com/appium/appium-xcuitest-driver/issues/2637)) ([f441b88](https://github.com/appium/appium-xcuitest-driver/commit/f441b88cfac77829eed4b59214ff8475bd876738))
|
|
12
|
+
|
|
1
13
|
## [10.1.5](https://github.com/appium/appium-xcuitest-driver/compare/v10.1.4...v10.1.5) (2025-10-05)
|
|
2
14
|
|
|
3
15
|
### Miscellaneous Chores
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"AAMA,wDAAwD;AACxD;IACE,+DAOC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,oCAA2C;AAG3C,wDAAwD;AACxD;IACE,+
|
|
1
|
+
{"version":3,"file":"required-checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"AAMA,wDAAwD;AACxD;IACE,+DAOC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,oCAA2C;AAG3C,wDAAwD;AACxD;IACE,+DAcC;IAED,uBAEC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,8CAAqD;AA6DrD,iDAAiF;;;;;;;;;;;;;AA1DjF;;;;;;GAMG;AAEH,wDAAwD;AACxD;IAGE;;;OAGG;IACH,qBAHW,MAAM,SACN,kBAAkB,EAK5B;IATD,sCAAwG;IAOtG,gBAAsB;IACtB,yBAAgB;IAGlB,+DAoBC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF"}
|
|
@@ -10,14 +10,14 @@ class XcodeCheck {
|
|
|
10
10
|
async diagnose() {
|
|
11
11
|
try {
|
|
12
12
|
const xcodePath = await (0, appium_xcode_1.getPath)();
|
|
13
|
-
return support_1.doctor.ok(`
|
|
13
|
+
return support_1.doctor.ok(`Xcode is installed at '${xcodePath}'`);
|
|
14
14
|
}
|
|
15
15
|
catch (err) {
|
|
16
16
|
return support_1.doctor.nok(err.message);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
async fix() {
|
|
20
|
-
return `
|
|
20
|
+
return `Install Xcode and make sure it is properly configured`;
|
|
21
21
|
}
|
|
22
22
|
hasAutofix() {
|
|
23
23
|
return false;
|
|
@@ -31,23 +31,24 @@ exports.xcodeCheck = new XcodeCheck();
|
|
|
31
31
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
32
32
|
class XcodeToolsCheck {
|
|
33
33
|
async diagnose() {
|
|
34
|
+
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
34
35
|
try {
|
|
35
36
|
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
36
37
|
await (0, teen_process_1.exec)('xcrun', ['simctl', 'help']);
|
|
37
38
|
}
|
|
38
39
|
catch (err) {
|
|
39
|
-
return support_1.doctor.nok(
|
|
40
|
+
return support_1.doctor.nok(`${errPrefix}. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
40
41
|
}
|
|
41
42
|
try {
|
|
42
43
|
await (0, teen_process_1.exec)('xcodebuild', ['-version']);
|
|
43
44
|
}
|
|
44
45
|
catch (err) {
|
|
45
|
-
return support_1.doctor.nok(
|
|
46
|
+
return support_1.doctor.nok(`${errPrefix}. Cannot run 'xcodebuild': ${err.stderr || err.message}`);
|
|
46
47
|
}
|
|
47
|
-
return support_1.doctor.ok(`
|
|
48
|
+
return support_1.doctor.ok(`Xcode Command Line Tools are installed and work properly`);
|
|
48
49
|
}
|
|
49
50
|
async fix() {
|
|
50
|
-
return `
|
|
51
|
+
return `Make sure to install Xcode Command Line Tools by running 'xcode-select --install'`;
|
|
51
52
|
}
|
|
52
53
|
hasAutofix() {
|
|
53
54
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":";;;AAAA,4CAA0C;AAC1C,+CAAkC;AAClC,+CAAuD;AACvD,0BAAwB;AAGxB,wDAAwD;AACxD,MAAa,UAAU;IACrB,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAY,GAAE,CAAC;YACvC,OAAO,gBAAM,CAAC,EAAE,CAAC,0BAA0B,SAAS,GAAG,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,gBAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,
|
|
1
|
+
{"version":3,"file":"required-checks.js","sourceRoot":"","sources":["../../../lib/doctor/required-checks.js"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,14 @@ export class XcodeCheck {
|
|
|
9
9
|
async diagnose() {
|
|
10
10
|
try {
|
|
11
11
|
const xcodePath = await getXcodePath();
|
|
12
|
-
return doctor.ok(`
|
|
12
|
+
return doctor.ok(`Xcode is installed at '${xcodePath}'`);
|
|
13
13
|
} catch (err) {
|
|
14
14
|
return doctor.nok(err.message);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
async fix() {
|
|
19
|
-
return `
|
|
19
|
+
return `Install Xcode and make sure it is properly configured`;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
hasAutofix() {
|
|
@@ -33,22 +33,23 @@ export const xcodeCheck = new XcodeCheck();
|
|
|
33
33
|
/** @satisfies {import('@appium/types').IDoctorCheck} */
|
|
34
34
|
export class XcodeToolsCheck {
|
|
35
35
|
async diagnose() {
|
|
36
|
+
const errPrefix = 'Xcode Command Line Tools are not installed or are improperly configured';
|
|
36
37
|
try {
|
|
37
38
|
// https://github.com/appium/appium/issues/12093#issuecomment-459358120
|
|
38
39
|
await exec('xcrun', ['simctl', 'help']);
|
|
39
40
|
} catch (err) {
|
|
40
|
-
return doctor.nok(
|
|
41
|
+
return doctor.nok(`${errPrefix}. Cannot run 'xcrun simctl': ${err.stderr || err.message}`);
|
|
41
42
|
}
|
|
42
43
|
try {
|
|
43
44
|
await exec('xcodebuild', ['-version']);
|
|
44
45
|
} catch (err) {
|
|
45
|
-
return doctor.nok(
|
|
46
|
+
return doctor.nok(`${errPrefix}. Cannot run 'xcodebuild': ${err.stderr || err.message}`);
|
|
46
47
|
}
|
|
47
|
-
return doctor.ok(`
|
|
48
|
+
return doctor.ok(`Xcode Command Line Tools are installed and work properly`);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
async fix() {
|
|
51
|
-
return `
|
|
52
|
+
return `Make sure to install Xcode Command Line Tools by running 'xcode-select --install'`;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
hasAutofix() {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-xcuitest-driver",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.7",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-xcuitest-driver",
|
|
9
|
-
"version": "10.1.
|
|
9
|
+
"version": "10.1.7",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^1.0.0-rc.1",
|
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
"appium-ios-simulator": "^7.0.0",
|
|
17
17
|
"appium-remote-debugger": "^15.0.3",
|
|
18
18
|
"appium-webdriveragent": "^10.1.0",
|
|
19
|
-
"appium-xcode": "^6.0.
|
|
19
|
+
"appium-xcode": "^6.0.2",
|
|
20
20
|
"async-lock": "^1.4.0",
|
|
21
21
|
"asyncbox": "^3.0.0",
|
|
22
22
|
"bluebird": "^3.7.2",
|
|
23
|
+
"commander": "^14.0.1",
|
|
23
24
|
"css-selector-parser": "^3.0.0",
|
|
24
25
|
"js2xmlparser2": "^0.x",
|
|
25
26
|
"lodash": "^4.17.21",
|
|
@@ -75,30 +76,30 @@
|
|
|
75
76
|
}
|
|
76
77
|
},
|
|
77
78
|
"node_modules/@appium/base-driver": {
|
|
78
|
-
"version": "10.0
|
|
79
|
-
"resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-10.0.
|
|
80
|
-
"integrity": "sha512-
|
|
79
|
+
"version": "10.1.0",
|
|
80
|
+
"resolved": "https://registry.npmjs.org/@appium/base-driver/-/base-driver-10.1.0.tgz",
|
|
81
|
+
"integrity": "sha512-5xBeoBUZSN/YjONGqj4u1jy0pxymset3gXiRkfYWnricdvcQ5t5tY9jzzgzuo78dzlFvFhE3YoHMDAyDJ++ibw==",
|
|
81
82
|
"license": "Apache-2.0",
|
|
82
83
|
"dependencies": {
|
|
83
|
-
"@appium/support": "^7.0.
|
|
84
|
-
"@appium/types": "^1.0
|
|
84
|
+
"@appium/support": "^7.0.2",
|
|
85
|
+
"@appium/types": "^1.1.0",
|
|
85
86
|
"@colors/colors": "1.6.0",
|
|
86
87
|
"async-lock": "1.4.1",
|
|
87
88
|
"asyncbox": "3.0.0",
|
|
88
|
-
"axios": "1.
|
|
89
|
+
"axios": "1.12.2",
|
|
89
90
|
"bluebird": "3.7.2",
|
|
90
91
|
"body-parser": "2.2.0",
|
|
91
92
|
"express": "5.1.0",
|
|
92
93
|
"fastest-levenshtein": "1.0.16",
|
|
93
94
|
"http-status-codes": "2.3.0",
|
|
94
95
|
"lodash": "4.17.21",
|
|
95
|
-
"lru-cache": "11.2.
|
|
96
|
+
"lru-cache": "11.2.2",
|
|
96
97
|
"method-override": "3.0.0",
|
|
97
98
|
"morgan": "1.10.1",
|
|
98
99
|
"path-to-regexp": "8.3.0",
|
|
99
100
|
"serve-favicon": "2.5.1",
|
|
100
101
|
"source-map-support": "0.5.21",
|
|
101
|
-
"type-fest": "
|
|
102
|
+
"type-fest": "5.0.1"
|
|
102
103
|
},
|
|
103
104
|
"engines": {
|
|
104
105
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
@@ -108,33 +109,13 @@
|
|
|
108
109
|
"spdy": "4.0.2"
|
|
109
110
|
}
|
|
110
111
|
},
|
|
111
|
-
"node_modules/@appium/base-driver/node_modules/axios": {
|
|
112
|
-
"version": "1.11.0",
|
|
113
|
-
"resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
|
|
114
|
-
"integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
|
|
115
|
-
"license": "MIT",
|
|
116
|
-
"dependencies": {
|
|
117
|
-
"follow-redirects": "^1.15.6",
|
|
118
|
-
"form-data": "^4.0.4",
|
|
119
|
-
"proxy-from-env": "^1.1.0"
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
"node_modules/@appium/base-driver/node_modules/lru-cache": {
|
|
123
|
-
"version": "11.2.1",
|
|
124
|
-
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz",
|
|
125
|
-
"integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==",
|
|
126
|
-
"license": "ISC",
|
|
127
|
-
"engines": {
|
|
128
|
-
"node": "20 || >=22"
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
112
|
"node_modules/@appium/docutils": {
|
|
132
|
-
"version": "2.1.
|
|
133
|
-
"resolved": "https://registry.npmjs.org/@appium/docutils/-/docutils-2.1.
|
|
134
|
-
"integrity": "sha512-
|
|
113
|
+
"version": "2.1.1",
|
|
114
|
+
"resolved": "https://registry.npmjs.org/@appium/docutils/-/docutils-2.1.1.tgz",
|
|
115
|
+
"integrity": "sha512-8/w4rV3ztOr5lF3zmbKfoLsiNJu1JatbTcL5M2+9ki5kiCLh8Uecm6ulLtGjYwSYpYixKMpePa73HrbyKzQDxg==",
|
|
135
116
|
"license": "Apache-2.0",
|
|
136
117
|
"dependencies": {
|
|
137
|
-
"@appium/support": "^7.0.
|
|
118
|
+
"@appium/support": "^7.0.2",
|
|
138
119
|
"chalk": "4.1.2",
|
|
139
120
|
"consola": "3.4.2",
|
|
140
121
|
"diff": "8.0.2",
|
|
@@ -144,7 +125,7 @@
|
|
|
144
125
|
"read-pkg": "5.2.0",
|
|
145
126
|
"source-map-support": "0.5.21",
|
|
146
127
|
"teen_process": "3.0.1",
|
|
147
|
-
"type-fest": "
|
|
128
|
+
"type-fest": "5.0.1",
|
|
148
129
|
"yaml": "2.8.1",
|
|
149
130
|
"yargs": "18.0.0",
|
|
150
131
|
"yargs-parser": "22.0.0"
|
|
@@ -158,14 +139,14 @@
|
|
|
158
139
|
}
|
|
159
140
|
},
|
|
160
141
|
"node_modules/@appium/logger": {
|
|
161
|
-
"version": "2.0.
|
|
162
|
-
"resolved": "https://registry.npmjs.org/@appium/logger/-/logger-2.0.
|
|
163
|
-
"integrity": "sha512-
|
|
142
|
+
"version": "2.0.2",
|
|
143
|
+
"resolved": "https://registry.npmjs.org/@appium/logger/-/logger-2.0.2.tgz",
|
|
144
|
+
"integrity": "sha512-288dCO+w9xKZltR3tOb7NOajqwS9wqy6f9a+rhDOpNZ4AemKM8C8+Mlsx6gGEAajlFMF0FaGH/f5TUjUBT/L2Q==",
|
|
164
145
|
"license": "ISC",
|
|
165
146
|
"dependencies": {
|
|
166
147
|
"console-control-strings": "1.1.0",
|
|
167
148
|
"lodash": "4.17.21",
|
|
168
|
-
"lru-cache": "11.2.
|
|
149
|
+
"lru-cache": "11.2.2",
|
|
169
150
|
"set-blocking": "2.0.0"
|
|
170
151
|
},
|
|
171
152
|
"engines": {
|
|
@@ -173,15 +154,6 @@
|
|
|
173
154
|
"npm": ">=10"
|
|
174
155
|
}
|
|
175
156
|
},
|
|
176
|
-
"node_modules/@appium/logger/node_modules/lru-cache": {
|
|
177
|
-
"version": "11.2.1",
|
|
178
|
-
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz",
|
|
179
|
-
"integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==",
|
|
180
|
-
"license": "ISC",
|
|
181
|
-
"engines": {
|
|
182
|
-
"node": "20 || >=22"
|
|
183
|
-
}
|
|
184
|
-
},
|
|
185
157
|
"node_modules/@appium/schema": {
|
|
186
158
|
"version": "1.0.0",
|
|
187
159
|
"resolved": "https://registry.npmjs.org/@appium/schema/-/schema-1.0.0.tgz",
|
|
@@ -211,17 +183,17 @@
|
|
|
211
183
|
}
|
|
212
184
|
},
|
|
213
185
|
"node_modules/@appium/support": {
|
|
214
|
-
"version": "7.0.
|
|
215
|
-
"resolved": "https://registry.npmjs.org/@appium/support/-/support-7.0.
|
|
216
|
-
"integrity": "sha512-
|
|
186
|
+
"version": "7.0.2",
|
|
187
|
+
"resolved": "https://registry.npmjs.org/@appium/support/-/support-7.0.2.tgz",
|
|
188
|
+
"integrity": "sha512-lfrcqUVZ/Q1UrYztiMKob4+YmfFSOVedQM0zvNOwvHm7O6vyP8bDRU4ikr1hFS1A0BE6CAGIGn1Hqg0RbDVRsA==",
|
|
217
189
|
"license": "Apache-2.0",
|
|
218
190
|
"dependencies": {
|
|
219
|
-
"@appium/logger": "^2.0.
|
|
191
|
+
"@appium/logger": "^2.0.2",
|
|
220
192
|
"@appium/tsconfig": "^1.1.0",
|
|
221
|
-
"@appium/types": "^1.0
|
|
193
|
+
"@appium/types": "^1.1.0",
|
|
222
194
|
"@colors/colors": "1.6.0",
|
|
223
195
|
"archiver": "7.0.1",
|
|
224
|
-
"axios": "1.
|
|
196
|
+
"axios": "1.12.2",
|
|
225
197
|
"base64-stream": "1.0.0",
|
|
226
198
|
"bluebird": "3.7.2",
|
|
227
199
|
"bplist-creator": "0.1.1",
|
|
@@ -242,12 +214,12 @@
|
|
|
242
214
|
"read-pkg": "5.2.0",
|
|
243
215
|
"resolve-from": "5.0.0",
|
|
244
216
|
"sanitize-filename": "1.6.3",
|
|
245
|
-
"semver": "7.7.
|
|
217
|
+
"semver": "7.7.3",
|
|
246
218
|
"shell-quote": "1.8.3",
|
|
247
219
|
"source-map-support": "0.5.21",
|
|
248
220
|
"supports-color": "8.1.1",
|
|
249
221
|
"teen_process": "3.0.1",
|
|
250
|
-
"type-fest": "
|
|
222
|
+
"type-fest": "5.0.1",
|
|
251
223
|
"uuid": "13.0.0",
|
|
252
224
|
"which": "5.0.0",
|
|
253
225
|
"yauzl": "3.2.0"
|
|
@@ -257,124 +229,7 @@
|
|
|
257
229
|
"npm": ">=10"
|
|
258
230
|
},
|
|
259
231
|
"optionalDependencies": {
|
|
260
|
-
"sharp": "0.34.
|
|
261
|
-
}
|
|
262
|
-
},
|
|
263
|
-
"node_modules/@appium/support/node_modules/@img/sharp-libvips-linux-x64": {
|
|
264
|
-
"version": "1.2.0",
|
|
265
|
-
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
|
|
266
|
-
"integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
|
|
267
|
-
"cpu": [
|
|
268
|
-
"x64"
|
|
269
|
-
],
|
|
270
|
-
"license": "LGPL-3.0-or-later",
|
|
271
|
-
"optional": true,
|
|
272
|
-
"os": [
|
|
273
|
-
"linux"
|
|
274
|
-
],
|
|
275
|
-
"funding": {
|
|
276
|
-
"url": "https://opencollective.com/libvips"
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
"node_modules/@appium/support/node_modules/@img/sharp-linux-x64": {
|
|
280
|
-
"version": "0.34.3",
|
|
281
|
-
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
|
|
282
|
-
"integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
|
|
283
|
-
"cpu": [
|
|
284
|
-
"x64"
|
|
285
|
-
],
|
|
286
|
-
"license": "Apache-2.0",
|
|
287
|
-
"optional": true,
|
|
288
|
-
"os": [
|
|
289
|
-
"linux"
|
|
290
|
-
],
|
|
291
|
-
"engines": {
|
|
292
|
-
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
|
293
|
-
},
|
|
294
|
-
"funding": {
|
|
295
|
-
"url": "https://opencollective.com/libvips"
|
|
296
|
-
},
|
|
297
|
-
"optionalDependencies": {
|
|
298
|
-
"@img/sharp-libvips-linux-x64": "1.2.0"
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
"node_modules/@appium/support/node_modules/axios": {
|
|
302
|
-
"version": "1.11.0",
|
|
303
|
-
"resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
|
|
304
|
-
"integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
|
|
305
|
-
"license": "MIT",
|
|
306
|
-
"dependencies": {
|
|
307
|
-
"follow-redirects": "^1.15.6",
|
|
308
|
-
"form-data": "^4.0.4",
|
|
309
|
-
"proxy-from-env": "^1.1.0"
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
|
-
"node_modules/@appium/support/node_modules/color": {
|
|
313
|
-
"version": "4.2.3",
|
|
314
|
-
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
|
315
|
-
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
|
316
|
-
"license": "MIT",
|
|
317
|
-
"optional": true,
|
|
318
|
-
"dependencies": {
|
|
319
|
-
"color-convert": "^2.0.1",
|
|
320
|
-
"color-string": "^1.9.0"
|
|
321
|
-
},
|
|
322
|
-
"engines": {
|
|
323
|
-
"node": ">=12.5.0"
|
|
324
|
-
}
|
|
325
|
-
},
|
|
326
|
-
"node_modules/@appium/support/node_modules/color-string": {
|
|
327
|
-
"version": "1.9.1",
|
|
328
|
-
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
|
329
|
-
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
|
330
|
-
"license": "MIT",
|
|
331
|
-
"optional": true,
|
|
332
|
-
"dependencies": {
|
|
333
|
-
"color-name": "^1.0.0",
|
|
334
|
-
"simple-swizzle": "^0.2.2"
|
|
335
|
-
}
|
|
336
|
-
},
|
|
337
|
-
"node_modules/@appium/support/node_modules/sharp": {
|
|
338
|
-
"version": "0.34.3",
|
|
339
|
-
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz",
|
|
340
|
-
"integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==",
|
|
341
|
-
"hasInstallScript": true,
|
|
342
|
-
"license": "Apache-2.0",
|
|
343
|
-
"optional": true,
|
|
344
|
-
"dependencies": {
|
|
345
|
-
"color": "^4.2.3",
|
|
346
|
-
"detect-libc": "^2.0.4",
|
|
347
|
-
"semver": "^7.7.2"
|
|
348
|
-
},
|
|
349
|
-
"engines": {
|
|
350
|
-
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
|
351
|
-
},
|
|
352
|
-
"funding": {
|
|
353
|
-
"url": "https://opencollective.com/libvips"
|
|
354
|
-
},
|
|
355
|
-
"optionalDependencies": {
|
|
356
|
-
"@img/sharp-darwin-arm64": "0.34.3",
|
|
357
|
-
"@img/sharp-darwin-x64": "0.34.3",
|
|
358
|
-
"@img/sharp-libvips-darwin-arm64": "1.2.0",
|
|
359
|
-
"@img/sharp-libvips-darwin-x64": "1.2.0",
|
|
360
|
-
"@img/sharp-libvips-linux-arm": "1.2.0",
|
|
361
|
-
"@img/sharp-libvips-linux-arm64": "1.2.0",
|
|
362
|
-
"@img/sharp-libvips-linux-ppc64": "1.2.0",
|
|
363
|
-
"@img/sharp-libvips-linux-s390x": "1.2.0",
|
|
364
|
-
"@img/sharp-libvips-linux-x64": "1.2.0",
|
|
365
|
-
"@img/sharp-libvips-linuxmusl-arm64": "1.2.0",
|
|
366
|
-
"@img/sharp-libvips-linuxmusl-x64": "1.2.0",
|
|
367
|
-
"@img/sharp-linux-arm": "0.34.3",
|
|
368
|
-
"@img/sharp-linux-arm64": "0.34.3",
|
|
369
|
-
"@img/sharp-linux-ppc64": "0.34.3",
|
|
370
|
-
"@img/sharp-linux-s390x": "0.34.3",
|
|
371
|
-
"@img/sharp-linux-x64": "0.34.3",
|
|
372
|
-
"@img/sharp-linuxmusl-arm64": "0.34.3",
|
|
373
|
-
"@img/sharp-linuxmusl-x64": "0.34.3",
|
|
374
|
-
"@img/sharp-wasm32": "0.34.3",
|
|
375
|
-
"@img/sharp-win32-arm64": "0.34.3",
|
|
376
|
-
"@img/sharp-win32-ia32": "0.34.3",
|
|
377
|
-
"@img/sharp-win32-x64": "0.34.3"
|
|
232
|
+
"sharp": "0.34.4"
|
|
378
233
|
}
|
|
379
234
|
},
|
|
380
235
|
"node_modules/@appium/tsconfig": {
|
|
@@ -391,15 +246,15 @@
|
|
|
391
246
|
}
|
|
392
247
|
},
|
|
393
248
|
"node_modules/@appium/types": {
|
|
394
|
-
"version": "1.0
|
|
395
|
-
"resolved": "https://registry.npmjs.org/@appium/types/-/types-1.0.
|
|
396
|
-
"integrity": "sha512-
|
|
249
|
+
"version": "1.1.0",
|
|
250
|
+
"resolved": "https://registry.npmjs.org/@appium/types/-/types-1.1.0.tgz",
|
|
251
|
+
"integrity": "sha512-yGmIw4P1RCX91cmAkdTDaZwpFXqPz9T2QrsbdMiGnz8DDYWkUpwn3rLZfy+VCefVO6Z8gRWOy49+lrXXGRl+iA==",
|
|
397
252
|
"license": "Apache-2.0",
|
|
398
253
|
"dependencies": {
|
|
399
|
-
"@appium/logger": "^2.0.
|
|
254
|
+
"@appium/logger": "^2.0.2",
|
|
400
255
|
"@appium/schema": "^1.0.0",
|
|
401
256
|
"@appium/tsconfig": "^1.1.0",
|
|
402
|
-
"type-fest": "
|
|
257
|
+
"type-fest": "5.0.1"
|
|
403
258
|
},
|
|
404
259
|
"engines": {
|
|
405
260
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
@@ -449,14 +304,14 @@
|
|
|
449
304
|
"kuler": "^2.0.0"
|
|
450
305
|
}
|
|
451
306
|
},
|
|
452
|
-
"node_modules/@
|
|
453
|
-
"version": "1.
|
|
454
|
-
"resolved": "https://registry.npmjs.org/@
|
|
455
|
-
"integrity": "sha512-
|
|
456
|
-
"
|
|
307
|
+
"node_modules/@img/colour": {
|
|
308
|
+
"version": "1.0.0",
|
|
309
|
+
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",
|
|
310
|
+
"integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==",
|
|
311
|
+
"devOptional": true,
|
|
457
312
|
"license": "MIT",
|
|
458
|
-
"
|
|
459
|
-
"
|
|
313
|
+
"engines": {
|
|
314
|
+
"node": ">=18"
|
|
460
315
|
}
|
|
461
316
|
},
|
|
462
317
|
"node_modules/@isaacs/balanced-match": {
|
|
@@ -553,13 +408,13 @@
|
|
|
553
408
|
"license": "MIT"
|
|
554
409
|
},
|
|
555
410
|
"node_modules/@types/node": {
|
|
556
|
-
"version": "24.
|
|
557
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.
|
|
558
|
-
"integrity": "sha512-
|
|
411
|
+
"version": "24.7.1",
|
|
412
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.1.tgz",
|
|
413
|
+
"integrity": "sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==",
|
|
559
414
|
"devOptional": true,
|
|
560
415
|
"license": "MIT",
|
|
561
416
|
"dependencies": {
|
|
562
|
-
"undici-types": "~7.
|
|
417
|
+
"undici-types": "~7.14.0"
|
|
563
418
|
}
|
|
564
419
|
},
|
|
565
420
|
"node_modules/@types/normalize-package-data": {
|
|
@@ -675,9 +530,9 @@
|
|
|
675
530
|
}
|
|
676
531
|
},
|
|
677
532
|
"node_modules/appium-ios-remotexpc": {
|
|
678
|
-
"version": "0.
|
|
679
|
-
"resolved": "https://registry.npmjs.org/appium-ios-remotexpc/-/appium-ios-remotexpc-0.
|
|
680
|
-
"integrity": "sha512-
|
|
533
|
+
"version": "0.7.0",
|
|
534
|
+
"resolved": "https://registry.npmjs.org/appium-ios-remotexpc/-/appium-ios-remotexpc-0.7.0.tgz",
|
|
535
|
+
"integrity": "sha512-g86W309N7U8vPXWjeXBw8VFM+ysvQKwVv7mrv3RPfFOHnQDLD9C10OTMZbvNXGoATUBR3lRGyTpnSzzDGXbdIQ==",
|
|
681
536
|
"license": "Apache-2.0",
|
|
682
537
|
"optional": true,
|
|
683
538
|
"dependencies": {
|
|
@@ -757,9 +612,9 @@
|
|
|
757
612
|
}
|
|
758
613
|
},
|
|
759
614
|
"node_modules/appium-webdriveragent": {
|
|
760
|
-
"version": "10.1.
|
|
761
|
-
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-10.1.
|
|
762
|
-
"integrity": "sha512-
|
|
615
|
+
"version": "10.1.2",
|
|
616
|
+
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-10.1.2.tgz",
|
|
617
|
+
"integrity": "sha512-a3mj7ZsV0F5HZ3bZuocNT49ztKtNJs2+kFv2qFuIR2/hgRmHcC/OwJnbNvcMtvr9bmQqBLbDT+VvdQ2hI/7Ohg==",
|
|
763
618
|
"license": "Apache-2.0",
|
|
764
619
|
"dependencies": {
|
|
765
620
|
"@appium/base-driver": "^10.0.0-rc.1",
|
|
@@ -781,9 +636,9 @@
|
|
|
781
636
|
}
|
|
782
637
|
},
|
|
783
638
|
"node_modules/appium-xcode": {
|
|
784
|
-
"version": "6.0.
|
|
785
|
-
"resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.0.
|
|
786
|
-
"integrity": "sha512-
|
|
639
|
+
"version": "6.0.2",
|
|
640
|
+
"resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-6.0.2.tgz",
|
|
641
|
+
"integrity": "sha512-66aKbigGn/+/ZKOfBsEU/hILoixL38UgIjlnP8bIUtfWEzRtERP6qo0q5YAeZusfVKaYqiQFQQhgNX9zsVzcGg==",
|
|
787
642
|
"license": "Apache-2.0",
|
|
788
643
|
"dependencies": {
|
|
789
644
|
"@appium/support": "^7.0.0-rc.1",
|
|
@@ -988,10 +843,18 @@
|
|
|
988
843
|
"license": "MIT"
|
|
989
844
|
},
|
|
990
845
|
"node_modules/bare-events": {
|
|
991
|
-
"version": "2.
|
|
992
|
-
"resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.
|
|
993
|
-
"integrity": "sha512-
|
|
994
|
-
"license": "Apache-2.0"
|
|
846
|
+
"version": "2.8.0",
|
|
847
|
+
"resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.0.tgz",
|
|
848
|
+
"integrity": "sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==",
|
|
849
|
+
"license": "Apache-2.0",
|
|
850
|
+
"peerDependencies": {
|
|
851
|
+
"bare-abort-controller": "*"
|
|
852
|
+
},
|
|
853
|
+
"peerDependenciesMeta": {
|
|
854
|
+
"bare-abort-controller": {
|
|
855
|
+
"optional": true
|
|
856
|
+
}
|
|
857
|
+
}
|
|
995
858
|
},
|
|
996
859
|
"node_modules/base64-js": {
|
|
997
860
|
"version": "1.5.1",
|
|
@@ -1325,6 +1188,15 @@
|
|
|
1325
1188
|
"node": ">= 0.8"
|
|
1326
1189
|
}
|
|
1327
1190
|
},
|
|
1191
|
+
"node_modules/commander": {
|
|
1192
|
+
"version": "14.0.1",
|
|
1193
|
+
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz",
|
|
1194
|
+
"integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==",
|
|
1195
|
+
"license": "MIT",
|
|
1196
|
+
"engines": {
|
|
1197
|
+
"node": ">=20"
|
|
1198
|
+
}
|
|
1199
|
+
},
|
|
1328
1200
|
"node_modules/compress-commons": {
|
|
1329
1201
|
"version": "6.0.2",
|
|
1330
1202
|
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
|
|
@@ -2809,9 +2681,9 @@
|
|
|
2809
2681
|
}
|
|
2810
2682
|
},
|
|
2811
2683
|
"node_modules/node-simctl": {
|
|
2812
|
-
"version": "8.0.
|
|
2813
|
-
"resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.0.
|
|
2814
|
-
"integrity": "sha512-
|
|
2684
|
+
"version": "8.0.4",
|
|
2685
|
+
"resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-8.0.4.tgz",
|
|
2686
|
+
"integrity": "sha512-ikjrQLaeZdi5mRDVphLjmUkkO+Rac4uTEwL9z+IyQ6w2hJ1rYZFh07kcD7WpoE1BTYitCARr05qs4++60yES7w==",
|
|
2815
2687
|
"license": "Apache-2.0",
|
|
2816
2688
|
"dependencies": {
|
|
2817
2689
|
"@appium/logger": "^2.0.0-rc.1",
|
|
@@ -2822,7 +2694,7 @@
|
|
|
2822
2694
|
"semver": "^7.0.0",
|
|
2823
2695
|
"source-map-support": "^0.x",
|
|
2824
2696
|
"teen_process": "^3.0.0",
|
|
2825
|
-
"uuid": "^
|
|
2697
|
+
"uuid": "^13.0.0",
|
|
2826
2698
|
"which": "^5.0.0"
|
|
2827
2699
|
},
|
|
2828
2700
|
"engines": {
|
|
@@ -2830,19 +2702,6 @@
|
|
|
2830
2702
|
"npm": ">=10"
|
|
2831
2703
|
}
|
|
2832
2704
|
},
|
|
2833
|
-
"node_modules/node-simctl/node_modules/uuid": {
|
|
2834
|
-
"version": "11.1.0",
|
|
2835
|
-
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
|
2836
|
-
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
|
|
2837
|
-
"funding": [
|
|
2838
|
-
"https://github.com/sponsors/broofa",
|
|
2839
|
-
"https://github.com/sponsors/ctavan"
|
|
2840
|
-
],
|
|
2841
|
-
"license": "MIT",
|
|
2842
|
-
"bin": {
|
|
2843
|
-
"uuid": "dist/esm/bin/uuid"
|
|
2844
|
-
}
|
|
2845
|
-
},
|
|
2846
2705
|
"node_modules/normalize-package-data": {
|
|
2847
2706
|
"version": "2.5.0",
|
|
2848
2707
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
|
@@ -3542,9 +3401,9 @@
|
|
|
3542
3401
|
"optional": true
|
|
3543
3402
|
},
|
|
3544
3403
|
"node_modules/semver": {
|
|
3545
|
-
"version": "7.7.
|
|
3546
|
-
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.
|
|
3547
|
-
"integrity": "sha512-
|
|
3404
|
+
"version": "7.7.3",
|
|
3405
|
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
|
3406
|
+
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
|
3548
3407
|
"license": "ISC",
|
|
3549
3408
|
"bin": {
|
|
3550
3409
|
"semver": "bin/semver.js"
|
|
@@ -3627,6 +3486,49 @@
|
|
|
3627
3486
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
|
|
3628
3487
|
"license": "ISC"
|
|
3629
3488
|
},
|
|
3489
|
+
"node_modules/sharp": {
|
|
3490
|
+
"version": "0.34.4",
|
|
3491
|
+
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz",
|
|
3492
|
+
"integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==",
|
|
3493
|
+
"devOptional": true,
|
|
3494
|
+
"hasInstallScript": true,
|
|
3495
|
+
"license": "Apache-2.0",
|
|
3496
|
+
"dependencies": {
|
|
3497
|
+
"@img/colour": "^1.0.0",
|
|
3498
|
+
"detect-libc": "^2.1.0",
|
|
3499
|
+
"semver": "^7.7.2"
|
|
3500
|
+
},
|
|
3501
|
+
"engines": {
|
|
3502
|
+
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
|
3503
|
+
},
|
|
3504
|
+
"funding": {
|
|
3505
|
+
"url": "https://opencollective.com/libvips"
|
|
3506
|
+
},
|
|
3507
|
+
"optionalDependencies": {
|
|
3508
|
+
"@img/sharp-darwin-arm64": "0.34.4",
|
|
3509
|
+
"@img/sharp-darwin-x64": "0.34.4",
|
|
3510
|
+
"@img/sharp-libvips-darwin-arm64": "1.2.3",
|
|
3511
|
+
"@img/sharp-libvips-darwin-x64": "1.2.3",
|
|
3512
|
+
"@img/sharp-libvips-linux-arm": "1.2.3",
|
|
3513
|
+
"@img/sharp-libvips-linux-arm64": "1.2.3",
|
|
3514
|
+
"@img/sharp-libvips-linux-ppc64": "1.2.3",
|
|
3515
|
+
"@img/sharp-libvips-linux-s390x": "1.2.3",
|
|
3516
|
+
"@img/sharp-libvips-linux-x64": "1.2.3",
|
|
3517
|
+
"@img/sharp-libvips-linuxmusl-arm64": "1.2.3",
|
|
3518
|
+
"@img/sharp-libvips-linuxmusl-x64": "1.2.3",
|
|
3519
|
+
"@img/sharp-linux-arm": "0.34.4",
|
|
3520
|
+
"@img/sharp-linux-arm64": "0.34.4",
|
|
3521
|
+
"@img/sharp-linux-ppc64": "0.34.4",
|
|
3522
|
+
"@img/sharp-linux-s390x": "0.34.4",
|
|
3523
|
+
"@img/sharp-linux-x64": "0.34.4",
|
|
3524
|
+
"@img/sharp-linuxmusl-arm64": "0.34.4",
|
|
3525
|
+
"@img/sharp-linuxmusl-x64": "0.34.4",
|
|
3526
|
+
"@img/sharp-wasm32": "0.34.4",
|
|
3527
|
+
"@img/sharp-win32-arm64": "0.34.4",
|
|
3528
|
+
"@img/sharp-win32-ia32": "0.34.4",
|
|
3529
|
+
"@img/sharp-win32-x64": "0.34.4"
|
|
3530
|
+
}
|
|
3531
|
+
},
|
|
3630
3532
|
"node_modules/shebang-command": {
|
|
3631
3533
|
"version": "2.0.0",
|
|
3632
3534
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
@@ -3738,23 +3640,6 @@
|
|
|
3738
3640
|
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
|
|
3739
3641
|
"license": "ISC"
|
|
3740
3642
|
},
|
|
3741
|
-
"node_modules/simple-swizzle": {
|
|
3742
|
-
"version": "0.2.4",
|
|
3743
|
-
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
|
|
3744
|
-
"integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
|
|
3745
|
-
"license": "MIT",
|
|
3746
|
-
"optional": true,
|
|
3747
|
-
"dependencies": {
|
|
3748
|
-
"is-arrayish": "^0.3.1"
|
|
3749
|
-
}
|
|
3750
|
-
},
|
|
3751
|
-
"node_modules/simple-swizzle/node_modules/is-arrayish": {
|
|
3752
|
-
"version": "0.3.4",
|
|
3753
|
-
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
|
|
3754
|
-
"integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
|
|
3755
|
-
"license": "MIT",
|
|
3756
|
-
"optional": true
|
|
3757
|
-
},
|
|
3758
3643
|
"node_modules/slugify": {
|
|
3759
3644
|
"version": "1.6.6",
|
|
3760
3645
|
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
|
|
@@ -4042,6 +3927,18 @@
|
|
|
4042
3927
|
"url": "https://github.com/sponsors/ljharb"
|
|
4043
3928
|
}
|
|
4044
3929
|
},
|
|
3930
|
+
"node_modules/tagged-tag": {
|
|
3931
|
+
"version": "1.0.0",
|
|
3932
|
+
"resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz",
|
|
3933
|
+
"integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==",
|
|
3934
|
+
"license": "MIT",
|
|
3935
|
+
"engines": {
|
|
3936
|
+
"node": ">=20"
|
|
3937
|
+
},
|
|
3938
|
+
"funding": {
|
|
3939
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
3940
|
+
}
|
|
3941
|
+
},
|
|
4045
3942
|
"node_modules/tar-stream": {
|
|
4046
3943
|
"version": "3.1.7",
|
|
4047
3944
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
|
|
@@ -4117,20 +4014,16 @@
|
|
|
4117
4014
|
"utf8-byte-length": "^1.0.1"
|
|
4118
4015
|
}
|
|
4119
4016
|
},
|
|
4120
|
-
"node_modules/tslib": {
|
|
4121
|
-
"version": "2.8.1",
|
|
4122
|
-
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
|
4123
|
-
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
|
4124
|
-
"extraneous": true,
|
|
4125
|
-
"license": "0BSD"
|
|
4126
|
-
},
|
|
4127
4017
|
"node_modules/type-fest": {
|
|
4128
|
-
"version": "
|
|
4129
|
-
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-
|
|
4130
|
-
"integrity": "sha512-
|
|
4018
|
+
"version": "5.0.1",
|
|
4019
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.0.1.tgz",
|
|
4020
|
+
"integrity": "sha512-9MpwAI52m8H6ssA542UxSLnSiSD2dsC3/L85g6hVubLSXd82wdI80eZwTWhdOfN67NlA+D+oipAs1MlcTcu3KA==",
|
|
4131
4021
|
"license": "(MIT OR CC0-1.0)",
|
|
4022
|
+
"dependencies": {
|
|
4023
|
+
"tagged-tag": "^1.0.0"
|
|
4024
|
+
},
|
|
4132
4025
|
"engines": {
|
|
4133
|
-
"node": ">=
|
|
4026
|
+
"node": ">=20"
|
|
4134
4027
|
},
|
|
4135
4028
|
"funding": {
|
|
4136
4029
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
@@ -4165,9 +4058,9 @@
|
|
|
4165
4058
|
}
|
|
4166
4059
|
},
|
|
4167
4060
|
"node_modules/undici-types": {
|
|
4168
|
-
"version": "7.
|
|
4169
|
-
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.
|
|
4170
|
-
"integrity": "sha512-
|
|
4061
|
+
"version": "7.14.0",
|
|
4062
|
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
|
|
4063
|
+
"integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
|
|
4171
4064
|
"devOptional": true,
|
|
4172
4065
|
"license": "MIT"
|
|
4173
4066
|
},
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"xcuitest",
|
|
9
9
|
"xctest"
|
|
10
10
|
],
|
|
11
|
-
"version": "10.1.
|
|
11
|
+
"version": "10.1.7",
|
|
12
12
|
"author": "Appium Contributors",
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"repository": {
|
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
"mainClass": "XCUITestDriver",
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build-wda": "./scripts/build-wda.js",
|
|
35
|
-
"open-wda": "./scripts/open-wda.
|
|
35
|
+
"open-wda": "./scripts/open-wda.mjs",
|
|
36
36
|
"tunnel-creation": "./scripts/tunnel-creation.mjs",
|
|
37
|
-
"download-wda-sim": "./scripts/download-wda-sim.mjs"
|
|
37
|
+
"download-wda-sim": "./scripts/download-wda-sim.mjs",
|
|
38
|
+
"image-mounter": "./scripts/image-mounter.mjs"
|
|
38
39
|
},
|
|
39
40
|
"schema": {
|
|
40
41
|
"$schema": "http://json-schema.org/draft-07/schema",
|
|
@@ -86,10 +87,11 @@
|
|
|
86
87
|
"appium-ios-simulator": "^7.0.0",
|
|
87
88
|
"appium-remote-debugger": "^15.0.3",
|
|
88
89
|
"appium-webdriveragent": "^10.1.0",
|
|
89
|
-
"appium-xcode": "^6.0.
|
|
90
|
+
"appium-xcode": "^6.0.2",
|
|
90
91
|
"async-lock": "^1.4.0",
|
|
91
92
|
"asyncbox": "^3.0.0",
|
|
92
93
|
"bluebird": "^3.7.2",
|
|
94
|
+
"commander": "^14.0.1",
|
|
93
95
|
"css-selector-parser": "^3.0.0",
|
|
94
96
|
"js2xmlparser2": "^0.x",
|
|
95
97
|
"lodash": "^4.17.21",
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Image mounter script for mounting and unmounting Personalized Developer Disk Image on iOS devices
|
|
4
|
+
* This script provides a CLI interface to mount/unmount DDI via remote XPC services
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {logger} from 'appium/support.js';
|
|
8
|
+
import {promises as fs} from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import {Command} from 'commander';
|
|
11
|
+
|
|
12
|
+
const log = logger.getLogger('ImageMounter');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* ImageMounter class for managing image mounting and unmounting operations
|
|
16
|
+
*/
|
|
17
|
+
class ImageMounter {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.remoteXPCModule = null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async initializeRemoteXPC() {
|
|
23
|
+
if (this.remoteXPCModule) {
|
|
24
|
+
return this.remoteXPCModule;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
this.remoteXPCModule = await import('appium-ios-remotexpc');
|
|
29
|
+
return this.remoteXPCModule;
|
|
30
|
+
} catch {
|
|
31
|
+
throw new Error(
|
|
32
|
+
'appium-ios-remotexpc is not installed. Please install it using:\n' +
|
|
33
|
+
'npm install appium-ios-remotexpc\n\n' +
|
|
34
|
+
'Note: This is an optional dependency required for image mounting functionality.'
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async validateFile(filePath, fileType) {
|
|
40
|
+
const absolutePath = path.resolve(filePath);
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const stat = await fs.stat(absolutePath);
|
|
44
|
+
|
|
45
|
+
if (!stat.isFile()) {
|
|
46
|
+
throw new Error(`${fileType} path is not a file: ${absolutePath}`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return absolutePath;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (error.code === 'ENOENT') {
|
|
52
|
+
throw new Error(`${fileType} file not found: ${absolutePath}`);
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async getTargetDevice(udid) {
|
|
59
|
+
const {createUsbmux} = await this.initializeRemoteXPC();
|
|
60
|
+
|
|
61
|
+
log.info('Connecting to usbmuxd...');
|
|
62
|
+
const usbmux = await createUsbmux();
|
|
63
|
+
|
|
64
|
+
const devices = await usbmux.listDevices();
|
|
65
|
+
if (devices.length === 0) {
|
|
66
|
+
await usbmux.close();
|
|
67
|
+
throw new Error(
|
|
68
|
+
'No iOS devices found. Ensure a device is connected, unlocked, and trusted. ' +
|
|
69
|
+
'See https://appium.github.io/appium-xcuitest-driver/latest/preparation/real-device-config/ for details.'
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let targetDevice;
|
|
74
|
+
if (udid) {
|
|
75
|
+
targetDevice = devices.find((device) => device.Properties.SerialNumber === udid);
|
|
76
|
+
if (!targetDevice) {
|
|
77
|
+
await usbmux.close();
|
|
78
|
+
throw new Error(
|
|
79
|
+
`Device with UDID ${udid} not found. Available devices:\n` +
|
|
80
|
+
devices.map((d) => ` - ${d.Properties.SerialNumber}`).join('\n')
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
if (devices.length > 1) {
|
|
85
|
+
log.warn(`Multiple devices found. Using first device: ${devices[0].Properties.SerialNumber}`);
|
|
86
|
+
log.warn('Available devices:');
|
|
87
|
+
devices.forEach((device) =>
|
|
88
|
+
log.warn(` - ${device.Properties.SerialNumber}`
|
|
89
|
+
));
|
|
90
|
+
log.warn('Use --udid flag to specify a particular device.');
|
|
91
|
+
}
|
|
92
|
+
targetDevice = devices[0];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return {usbmux, targetDevice};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async withImageMounterService(udid, fn) {
|
|
99
|
+
const {usbmux, targetDevice} = await this.getTargetDevice(udid);
|
|
100
|
+
const deviceUdid = targetDevice.Properties.SerialNumber;
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const remoteXPCModule = await this.initializeRemoteXPC();
|
|
104
|
+
const {
|
|
105
|
+
Services
|
|
106
|
+
} = remoteXPCModule;
|
|
107
|
+
|
|
108
|
+
log.info('Starting mobile image mounter service...');
|
|
109
|
+
const {
|
|
110
|
+
mobileImageMounterService: imageMounterService,
|
|
111
|
+
remoteXPC
|
|
112
|
+
} = await Services.startMobileImageMounterService(deviceUdid);
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
return await fn(imageMounterService, deviceUdid);
|
|
116
|
+
} finally {
|
|
117
|
+
await imageMounterService.cleanup();
|
|
118
|
+
if (remoteXPC) {
|
|
119
|
+
log.info(`Closing remoteXPC connection for device ${deviceUdid}`);
|
|
120
|
+
await remoteXPC.close();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
} finally {
|
|
124
|
+
await usbmux.close();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Mount Personalized Developer Disk Image on device
|
|
130
|
+
* @param {string} imagePath - Path to the .dmg file
|
|
131
|
+
* @param {string} manifestPath - Path to the BuildManifest.plist file
|
|
132
|
+
* @param {string} trustCachePath - Path to the .trustcache file
|
|
133
|
+
* @param {string} [udid] - Device UDID
|
|
134
|
+
*/
|
|
135
|
+
async mount(imagePath, manifestPath, trustCachePath, udid) {
|
|
136
|
+
const [validatedImagePath, validatedManifestPath, validatedTrustCachePath] = await Promise.all([
|
|
137
|
+
this.validateFile(imagePath, 'Image (.dmg)'),
|
|
138
|
+
this.validateFile(manifestPath, 'Build Manifest (.plist)'),
|
|
139
|
+
this.validateFile(trustCachePath, 'Trust Cache (.trustcache)')
|
|
140
|
+
]);
|
|
141
|
+
|
|
142
|
+
await this.withImageMounterService(udid, async (imageMounterService, deviceUdid) => {
|
|
143
|
+
log.info(`Mounting image on device: ${deviceUdid}`);
|
|
144
|
+
|
|
145
|
+
if (await imageMounterService.isPersonalizedImageMounted()) {
|
|
146
|
+
log.info('✅ Personalized image is already mounted on the device');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
await imageMounterService.mount(
|
|
151
|
+
validatedImagePath,
|
|
152
|
+
validatedManifestPath,
|
|
153
|
+
validatedTrustCachePath
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
log.info('✅ Image mounted successfully!');
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Unmount image from device
|
|
162
|
+
* @param {string} [udid] - Device UDID
|
|
163
|
+
* @param {string} [mountPath='/System/Developer'] - Mount path to unmount
|
|
164
|
+
*/
|
|
165
|
+
async unmount(udid, mountPath = '/System/Developer') {
|
|
166
|
+
await this.withImageMounterService(udid, async (imageMounterService, deviceUdid) => {
|
|
167
|
+
log.info(`Unmounting image from device: ${deviceUdid}`);
|
|
168
|
+
log.info(`Mount path: ${mountPath}`);
|
|
169
|
+
|
|
170
|
+
await imageMounterService.unmountImage(mountPath);
|
|
171
|
+
log.info('✅ Image unmounted successfully!');
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* CLI with Commander.js
|
|
178
|
+
*/
|
|
179
|
+
async function main() {
|
|
180
|
+
const program = new Command();
|
|
181
|
+
const imageMounter = new ImageMounter();
|
|
182
|
+
|
|
183
|
+
program
|
|
184
|
+
.name('appium driver run xcuitest image-mounter')
|
|
185
|
+
.description('Mount and unmount Developer Disk Images on iOS devices')
|
|
186
|
+
.version('1.0.0')
|
|
187
|
+
.addHelpText('after', `
|
|
188
|
+
NOTE:
|
|
189
|
+
This script requires the 'appium-ios-remotexpc' package to be installed.
|
|
190
|
+
Install it using: npm install appium-ios-remotexpc`);
|
|
191
|
+
|
|
192
|
+
// Mount command
|
|
193
|
+
program
|
|
194
|
+
.command('mount')
|
|
195
|
+
.description('Mount a Developer Disk Image on iOS device')
|
|
196
|
+
.requiredOption('-i, --image <path>', 'Path to the .dmg image file')
|
|
197
|
+
.requiredOption('-m, --manifest <path>', 'Path to the BuildManifest.plist file')
|
|
198
|
+
.requiredOption('-t, --trustcache <path>', 'Path to the .trustcache file')
|
|
199
|
+
.option('-u, --udid <udid>', 'Target device UDID (optional, uses first device if not specified)')
|
|
200
|
+
.addHelpText('after', `
|
|
201
|
+
EXAMPLES:
|
|
202
|
+
# Mount Developer Disk Image
|
|
203
|
+
appium driver run xcuitest image-mounter mount --image DeveloperDiskImage.dmg --manifest BuildManifest.plist --trustcache DeveloperDiskImage.trustcache
|
|
204
|
+
|
|
205
|
+
# Mount on specific device
|
|
206
|
+
appium driver run xcuitest image-mounter mount --image DeveloperDiskImage.dmg --manifest BuildManifest.plist --trustcache DeveloperDiskImage.trustcache --udid <udid>`)
|
|
207
|
+
.action(async (options) => {
|
|
208
|
+
await imageMounter.mount(
|
|
209
|
+
options.image,
|
|
210
|
+
options.manifest,
|
|
211
|
+
options.trustcache,
|
|
212
|
+
options.udid
|
|
213
|
+
);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
// Unmount command
|
|
217
|
+
program
|
|
218
|
+
.command('unmount')
|
|
219
|
+
.description('Unmount a Developer Disk Image from iOS device')
|
|
220
|
+
.option('-u, --udid <udid>', 'Target device UDID (optional, uses first device if not specified)')
|
|
221
|
+
.option('-p, --mount-path <path>', 'Mount path to unmount', '/System/Developer')
|
|
222
|
+
.addHelpText('after', `
|
|
223
|
+
EXAMPLES:
|
|
224
|
+
# Unmount from default path
|
|
225
|
+
appium driver run xcuitest image-mounter unmount
|
|
226
|
+
|
|
227
|
+
# Unmount from specific device
|
|
228
|
+
appium driver run xcuitest image-mounter unmount --udid <udid>`)
|
|
229
|
+
.action(async (options) => {
|
|
230
|
+
await imageMounter.unmount(
|
|
231
|
+
options.udid,
|
|
232
|
+
options.mountPath
|
|
233
|
+
);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
await program.parseAsync(process.argv);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
(async () => await main())();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { exec } from 'teen_process';
|
|
3
|
+
import { logger } from 'appium/support.js';
|
|
4
|
+
import { BOOTSTRAP_PATH } from 'appium-webdriveragent';
|
|
4
5
|
|
|
5
6
|
const log = logger.getLogger('WDA');
|
|
6
|
-
const {BOOTSTRAP_PATH} = require('appium-webdriveragent');
|
|
7
7
|
const XCODEPROJ_NAME = 'WebDriverAgent.xcodeproj';
|
|
8
8
|
|
|
9
9
|
async function openWda() {
|