appium-adb 14.1.2 → 14.1.3
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/tools/aab-utils.d.ts +5 -4
- package/build/lib/tools/aab-utils.d.ts.map +1 -1
- package/build/lib/tools/aab-utils.js +13 -11
- package/build/lib/tools/aab-utils.js.map +1 -1
- package/build/lib/tools/android-manifest.d.ts +26 -30
- package/build/lib/tools/android-manifest.d.ts.map +1 -1
- package/build/lib/tools/android-manifest.js +33 -47
- package/build/lib/tools/android-manifest.js.map +1 -1
- package/build/lib/tools/apks-utils.d.ts +25 -29
- package/build/lib/tools/apks-utils.d.ts.map +1 -1
- package/build/lib/tools/apks-utils.js +41 -52
- package/build/lib/tools/apks-utils.js.map +1 -1
- package/build/lib/tools/fs-commands.d.ts +25 -30
- package/build/lib/tools/fs-commands.d.ts.map +1 -1
- package/build/lib/tools/fs-commands.js +19 -26
- package/build/lib/tools/fs-commands.js.map +1 -1
- package/build/lib/tools/general-commands.d.ts +36 -58
- package/build/lib/tools/general-commands.d.ts.map +1 -1
- package/build/lib/tools/general-commands.js +41 -47
- package/build/lib/tools/general-commands.js.map +1 -1
- package/build/lib/tools/keyboard-commands.d.ts +27 -36
- package/build/lib/tools/keyboard-commands.d.ts.map +1 -1
- package/build/lib/tools/keyboard-commands.js +24 -34
- package/build/lib/tools/keyboard-commands.js.map +1 -1
- package/build/lib/tools/lockmgmt.d.ts +25 -36
- package/build/lib/tools/lockmgmt.d.ts.map +1 -1
- package/build/lib/tools/lockmgmt.js +34 -38
- package/build/lib/tools/lockmgmt.js.map +1 -1
- package/build/lib/tools/logcat-commands.d.ts +11 -30
- package/build/lib/tools/logcat-commands.d.ts.map +1 -1
- package/build/lib/tools/logcat-commands.js +16 -17
- package/build/lib/tools/logcat-commands.js.map +1 -1
- package/build/lib/tools/network-commands.d.ts +24 -31
- package/build/lib/tools/network-commands.d.ts.map +1 -1
- package/build/lib/tools/network-commands.js +14 -24
- package/build/lib/tools/network-commands.js.map +1 -1
- package/lib/tools/{aab-utils.js → aab-utils.ts} +24 -15
- package/lib/tools/{android-manifest.js → android-manifest.ts} +66 -59
- package/lib/tools/{apks-utils.js → apks-utils.ts} +76 -68
- package/lib/tools/{fs-commands.js → fs-commands.ts} +41 -35
- package/lib/tools/{general-commands.js → general-commands.ts} +71 -68
- package/lib/tools/{keyboard-commands.js → keyboard-commands.ts} +42 -49
- package/lib/tools/{lockmgmt.js → lockmgmt.ts} +71 -56
- package/lib/tools/{logcat-commands.js → logcat-commands.ts} +24 -22
- package/lib/tools/{network-commands.js → network-commands.ts} +42 -34
- package/package.json +1 -1
|
@@ -21,10 +21,9 @@ const async_lock_1 = __importDefault(require("async-lock"));
|
|
|
21
21
|
const bluebird_1 = __importDefault(require("bluebird"));
|
|
22
22
|
const BASE_APK = 'base-master.apk';
|
|
23
23
|
const LANGUAGE_APK = (lang) => `base-${lang}.apk`;
|
|
24
|
-
/** @type {LRUCache<string, string>} */
|
|
25
24
|
const APKS_CACHE = new lru_cache_1.LRUCache({
|
|
26
25
|
max: 10,
|
|
27
|
-
dispose: (extractedFilesRoot) => support_1.fs.rimraf(
|
|
26
|
+
dispose: (extractedFilesRoot) => support_1.fs.rimraf(extractedFilesRoot),
|
|
28
27
|
});
|
|
29
28
|
const APKS_CACHE_GUARD = new async_lock_1.default();
|
|
30
29
|
const BUNDLETOOL_TIMEOUT_MS = 4 * 60 * 1000;
|
|
@@ -33,7 +32,7 @@ process.on('exit', () => {
|
|
|
33
32
|
if (!APKS_CACHE.size) {
|
|
34
33
|
return;
|
|
35
34
|
}
|
|
36
|
-
const paths =
|
|
35
|
+
const paths = [...APKS_CACHE.values()];
|
|
37
36
|
logger_js_1.log.debug(`Performing cleanup of ${paths.length} cached .apks ` + support_1.util.pluralize('package', paths.length));
|
|
38
37
|
for (const appPath of paths) {
|
|
39
38
|
try {
|
|
@@ -51,17 +50,15 @@ process.on('exit', () => {
|
|
|
51
50
|
* The resulting temporary path, where the .apks file has been extracted,
|
|
52
51
|
* will be stored into the internal LRU cache for better performance.
|
|
53
52
|
*
|
|
54
|
-
* @param
|
|
55
|
-
* @param
|
|
53
|
+
* @param apks - The full path to the .apks file
|
|
54
|
+
* @param dstPath - The relative path to the destination file,
|
|
56
55
|
* which is going to be extracted, where each path component is an array item
|
|
57
|
-
* @returns
|
|
56
|
+
* @returns Full path to the extracted file
|
|
58
57
|
* @throws {Error} If the requested item does not exist in the extracted archive or the provides
|
|
59
58
|
* apks file is not a valid bundle
|
|
60
59
|
*/
|
|
61
60
|
async function extractFromApks(apks, dstPath) {
|
|
62
|
-
|
|
63
|
-
dstPath = [dstPath];
|
|
64
|
-
}
|
|
61
|
+
const normalizedDstPath = lodash_1.default.isArray(dstPath) ? dstPath : [dstPath];
|
|
65
62
|
return await APKS_CACHE_GUARD.acquire(apks, async () => {
|
|
66
63
|
// It might be that the original file has been replaced,
|
|
67
64
|
// so we need to keep the hash sums instead of the actual file paths
|
|
@@ -69,18 +66,21 @@ async function extractFromApks(apks, dstPath) {
|
|
|
69
66
|
const apksHash = await support_1.fs.hash(apks);
|
|
70
67
|
logger_js_1.log.debug(`Calculated '${apks}' hash: ${apksHash}`);
|
|
71
68
|
if (APKS_CACHE.has(apksHash)) {
|
|
72
|
-
const
|
|
73
|
-
if (
|
|
74
|
-
|
|
69
|
+
const cachedRoot = APKS_CACHE.get(apksHash);
|
|
70
|
+
if (cachedRoot) {
|
|
71
|
+
const resultPath = path_1.default.resolve(cachedRoot, ...normalizedDstPath);
|
|
72
|
+
if (await support_1.fs.exists(resultPath)) {
|
|
73
|
+
return resultPath;
|
|
74
|
+
}
|
|
75
75
|
}
|
|
76
76
|
APKS_CACHE.delete(apksHash);
|
|
77
77
|
}
|
|
78
78
|
const tmpRoot = await support_1.tempDir.openDir();
|
|
79
79
|
logger_js_1.log.debug(`Unpacking application bundle at '${apks}' to '${tmpRoot}'`);
|
|
80
80
|
await (0, helpers_js_1.unzipFile)(apks, tmpRoot);
|
|
81
|
-
const resultPath = path_1.default.resolve(tmpRoot, ...
|
|
81
|
+
const resultPath = path_1.default.resolve(tmpRoot, ...normalizedDstPath);
|
|
82
82
|
if (!(await support_1.fs.exists(resultPath))) {
|
|
83
|
-
throw new Error(`${
|
|
83
|
+
throw new Error(`${normalizedDstPath.join(path_1.default.sep)} cannot be found in '${apks}' bundle. ` +
|
|
84
84
|
`Does the archive contain a valid application bundle?`);
|
|
85
85
|
}
|
|
86
86
|
APKS_CACHE.set(apksHash, tmpRoot);
|
|
@@ -90,20 +90,16 @@ async function extractFromApks(apks, dstPath) {
|
|
|
90
90
|
/**
|
|
91
91
|
* Executes bundletool utility with given arguments and returns the actual stdout
|
|
92
92
|
*
|
|
93
|
-
* @
|
|
94
|
-
* @param
|
|
95
|
-
* @
|
|
96
|
-
* @returns {Promise<string>} the actual command stdout
|
|
93
|
+
* @param args - the list of bundletool arguments
|
|
94
|
+
* @param errorMsg - The customized error message string
|
|
95
|
+
* @returns the actual command stdout
|
|
97
96
|
* @throws {Error} If bundletool jar does not exist in PATH or there was an error while
|
|
98
97
|
* executing it
|
|
99
98
|
*/
|
|
100
99
|
async function execBundletool(args, errorMsg) {
|
|
101
100
|
await this.initBundletool();
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
/** @type {import('./types').StringRecord} */ (this.binaries).bundletool,
|
|
105
|
-
...args,
|
|
106
|
-
];
|
|
101
|
+
const binaries = this.binaries;
|
|
102
|
+
args = ['-jar', binaries.bundletool, ...args];
|
|
107
103
|
const env = process.env;
|
|
108
104
|
if (this.adbPort) {
|
|
109
105
|
env.ANDROID_ADB_SERVER_PORT = `${this.adbPort}`;
|
|
@@ -122,30 +118,29 @@ async function execBundletool(args, errorMsg) {
|
|
|
122
118
|
return stdout;
|
|
123
119
|
}
|
|
124
120
|
catch (e) {
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
const err = e;
|
|
122
|
+
if (err.stdout) {
|
|
123
|
+
logger_js_1.log.debug(`Command stdout: ${err.stdout}`);
|
|
127
124
|
}
|
|
128
|
-
if (
|
|
129
|
-
logger_js_1.log.debug(`Command stderr: ${
|
|
125
|
+
if (err.stderr) {
|
|
126
|
+
logger_js_1.log.debug(`Command stderr: ${err.stderr}`);
|
|
130
127
|
}
|
|
131
|
-
throw new Error(`${errorMsg}. Original error: ${
|
|
128
|
+
throw new Error(`${errorMsg}. Original error: ${err.message}`);
|
|
132
129
|
}
|
|
133
130
|
}
|
|
134
131
|
/**
|
|
135
132
|
*
|
|
136
|
-
* @
|
|
137
|
-
* @
|
|
138
|
-
* @returns {Promise<string>} The same `specLocation` value
|
|
133
|
+
* @param specLocation - The full path to the generated device spec location
|
|
134
|
+
* @returns The same `specLocation` value
|
|
139
135
|
* @throws {Error} If it is not possible to retrieve the spec for the current device
|
|
140
136
|
*/
|
|
141
137
|
async function getDeviceSpec(specLocation) {
|
|
142
|
-
/** @type {string[]} */
|
|
143
138
|
const args = [
|
|
144
139
|
'get-device-spec',
|
|
145
140
|
'--adb',
|
|
146
141
|
this.executable.path,
|
|
147
142
|
'--device-id',
|
|
148
|
-
|
|
143
|
+
this.curDeviceId,
|
|
149
144
|
'--output',
|
|
150
145
|
specLocation,
|
|
151
146
|
];
|
|
@@ -156,29 +151,26 @@ async function getDeviceSpec(specLocation) {
|
|
|
156
151
|
/**
|
|
157
152
|
* Installs the given apks into the device under test
|
|
158
153
|
*
|
|
159
|
-
* @
|
|
160
|
-
* @param
|
|
161
|
-
* @param {import('./types').InstallMultipleApksOptions} [options={}] - Installation options
|
|
154
|
+
* @param apkPathsToInstall - The full paths to install apks
|
|
155
|
+
* @param options - Installation options
|
|
162
156
|
*/
|
|
163
157
|
async function installMultipleApks(apkPathsToInstall, options = {}) {
|
|
164
158
|
const installArgs = (0, helpers_js_1.buildInstallArgs)(await this.getApiLevel(), options);
|
|
165
159
|
return await this.adbExec(['install-multiple', ...installArgs, ...apkPathsToInstall], {
|
|
166
160
|
// @ts-ignore This validation works
|
|
167
|
-
timeout: isNaN(options.timeout) ? undefined : options.timeout,
|
|
161
|
+
timeout: isNaN(Number(options.timeout)) ? undefined : options.timeout,
|
|
168
162
|
timeoutCapName: options.timeoutCapName,
|
|
169
163
|
});
|
|
170
164
|
}
|
|
171
165
|
/**
|
|
172
166
|
* Installs the given .apks package into the device under test
|
|
173
167
|
*
|
|
174
|
-
* @
|
|
175
|
-
* @param
|
|
176
|
-
* @param {import('./types').InstallApksOptions} [options={}] - Installation options
|
|
168
|
+
* @param apks - The full path to the .apks file
|
|
169
|
+
* @param options - Installation options
|
|
177
170
|
* @throws {Error} If the .apks bundle cannot be installed
|
|
178
171
|
*/
|
|
179
172
|
async function installApks(apks, options = {}) {
|
|
180
173
|
const { grantPermissions, allowTestPackages, timeout } = options;
|
|
181
|
-
/** @type {string[]} */
|
|
182
174
|
const args = [
|
|
183
175
|
'install-apks',
|
|
184
176
|
'--adb',
|
|
@@ -188,12 +180,11 @@ async function installApks(apks, options = {}) {
|
|
|
188
180
|
'--timeout-millis',
|
|
189
181
|
`${timeout || APKS_INSTALL_TIMEOUT}`,
|
|
190
182
|
'--device-id',
|
|
191
|
-
|
|
183
|
+
this.curDeviceId,
|
|
192
184
|
];
|
|
193
185
|
if (allowTestPackages) {
|
|
194
186
|
args.push('--allow-test-only');
|
|
195
187
|
}
|
|
196
|
-
/** @type {Promise[]} */
|
|
197
188
|
const tasks = [
|
|
198
189
|
this.execBundletool(args, `Cannot install '${path_1.default.basename(apks)}' to the device ${this.curDeviceId}`),
|
|
199
190
|
];
|
|
@@ -209,9 +200,8 @@ async function installApks(apks, options = {}) {
|
|
|
209
200
|
/**
|
|
210
201
|
* Extracts and returns the full path to the master .apk file inside the bundle.
|
|
211
202
|
*
|
|
212
|
-
* @
|
|
213
|
-
* @
|
|
214
|
-
* @returns {Promise<string>} The full path to the master bundle .apk
|
|
203
|
+
* @param apks - The full path to the .apks file
|
|
204
|
+
* @returns The full path to the master bundle .apk
|
|
215
205
|
* @throws {Error} If there was an error while extracting/finding the file
|
|
216
206
|
*/
|
|
217
207
|
async function extractBaseApk(apks) {
|
|
@@ -221,11 +211,10 @@ async function extractBaseApk(apks) {
|
|
|
221
211
|
* Extracts and returns the full path to the .apk, which contains the corresponding
|
|
222
212
|
* resources for the given language in the .apks bundle.
|
|
223
213
|
*
|
|
224
|
-
* @
|
|
225
|
-
* @param
|
|
226
|
-
* @param {?string} [language=null] - The language abbreviation. The default language is
|
|
214
|
+
* @param apks - The full path to the .apks file
|
|
215
|
+
* @param language - The language abbreviation. The default language is
|
|
227
216
|
* going to be selected if it is not set.
|
|
228
|
-
* @returns
|
|
217
|
+
* @returns The full path to the corresponding language .apk or the master .apk
|
|
229
218
|
* if language split is not enabled for the bundle.
|
|
230
219
|
* @throws {Error} If there was an error while extracting/finding the file
|
|
231
220
|
*/
|
|
@@ -254,8 +243,8 @@ async function extractLanguageApk(apks, language = null) {
|
|
|
254
243
|
}
|
|
255
244
|
/**
|
|
256
245
|
*
|
|
257
|
-
* @param
|
|
258
|
-
* @returns
|
|
246
|
+
* @param output
|
|
247
|
+
* @returns
|
|
259
248
|
*/
|
|
260
249
|
function isTestPackageOnlyError(output) {
|
|
261
250
|
return /\[INSTALL_FAILED_TEST_ONLY\]/.test(output);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apks-utils.js","sourceRoot":"","sources":["../../../lib/tools/apks-utils.
|
|
1
|
+
{"version":3,"file":"apks-utils.js","sourceRoot":"","sources":["../../../lib/tools/apks-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,69 +1,64 @@
|
|
|
1
|
+
import type { ADB } from '../adb.js';
|
|
2
|
+
import type { TeenProcessExecOptions } from 'teen_process';
|
|
1
3
|
/**
|
|
2
4
|
* Verify whether a remote path exists on the device under test.
|
|
3
5
|
*
|
|
4
|
-
* @
|
|
5
|
-
* @
|
|
6
|
-
* @return {Promise<boolean>} True if the given path exists on the device.
|
|
6
|
+
* @param remotePath - The remote path to verify.
|
|
7
|
+
* @return True if the given path exists on the device.
|
|
7
8
|
*/
|
|
8
|
-
export function fileExists(this:
|
|
9
|
+
export declare function fileExists(this: ADB, remotePath: string): Promise<boolean>;
|
|
9
10
|
/**
|
|
10
11
|
* Get the output of _ls_ command on the device under test.
|
|
11
12
|
*
|
|
12
|
-
* @
|
|
13
|
-
* @param
|
|
14
|
-
* @
|
|
15
|
-
* @return {Promise<string[]>} The _ls_ output as an array of split lines.
|
|
13
|
+
* @param remotePath - The remote path (the first argument to the _ls_ command).
|
|
14
|
+
* @param opts - Additional _ls_ options.
|
|
15
|
+
* @return The _ls_ output as an array of split lines.
|
|
16
16
|
* An empty array is returned of the given _remotePath_
|
|
17
17
|
* does not exist.
|
|
18
18
|
*/
|
|
19
|
-
export function ls(this:
|
|
19
|
+
export declare function ls(this: ADB, remotePath: string, opts?: string[]): Promise<string[]>;
|
|
20
20
|
/**
|
|
21
21
|
* Get the size of the particular file located on the device under test.
|
|
22
22
|
*
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
* @return {Promise<number>} File size in bytes.
|
|
23
|
+
* @param remotePath - The remote path to the file.
|
|
24
|
+
* @return File size in bytes.
|
|
26
25
|
* @throws {Error} If there was an error while getting the size of the given file.
|
|
27
26
|
*/
|
|
28
|
-
export function fileSize(this:
|
|
27
|
+
export declare function fileSize(this: ADB, remotePath: string): Promise<number>;
|
|
29
28
|
/**
|
|
30
29
|
* Forcefully recursively remove a path on the device under test.
|
|
31
30
|
* Be careful while calling this method.
|
|
32
31
|
*
|
|
33
|
-
* @
|
|
34
|
-
* @param {string} path - The path to be removed recursively.
|
|
32
|
+
* @param path - The path to be removed recursively.
|
|
35
33
|
*/
|
|
36
|
-
export function rimraf(this:
|
|
34
|
+
export declare function rimraf(this: ADB, path: string): Promise<void>;
|
|
37
35
|
/**
|
|
38
36
|
* Send a file to the device under test.
|
|
39
37
|
*
|
|
40
|
-
* @
|
|
41
|
-
* @param
|
|
42
|
-
* @param
|
|
43
|
-
* @param {object} [opts] - Additional options mapping. See
|
|
38
|
+
* @param localPath - The path to the file on the local file system.
|
|
39
|
+
* @param remotePath - The destination path on the remote device.
|
|
40
|
+
* @param opts - Additional options mapping. See
|
|
44
41
|
* https://github.com/appium/node-teen_process,
|
|
45
42
|
* _exec_ method options, for more information about available
|
|
46
43
|
* options.
|
|
47
44
|
*/
|
|
48
|
-
export function push(this:
|
|
45
|
+
export declare function push(this: ADB, localPath: string, remotePath: string, opts?: TeenProcessExecOptions): Promise<void>;
|
|
49
46
|
/**
|
|
50
47
|
* Receive a file from the device under test.
|
|
51
48
|
*
|
|
52
|
-
* @
|
|
53
|
-
* @param
|
|
54
|
-
* @param
|
|
55
|
-
* @param {import('teen_process').TeenProcessExecOptions} [opts={}] - Additional options mapping. See
|
|
49
|
+
* @param remotePath - The source path on the remote device.
|
|
50
|
+
* @param localPath - The destination path to the file on the local file system.
|
|
51
|
+
* @param opts - Additional options mapping. See
|
|
56
52
|
* https://github.com/appium/node-teen_process,
|
|
57
53
|
* _exec_ method options, for more information about available
|
|
58
54
|
* options.
|
|
59
55
|
*/
|
|
60
|
-
export function pull(this:
|
|
56
|
+
export declare function pull(this: ADB, remotePath: string, localPath: string, opts?: TeenProcessExecOptions): Promise<void>;
|
|
61
57
|
/**
|
|
62
58
|
* Recursively create a new folder on the device under test.
|
|
63
59
|
*
|
|
64
|
-
* @
|
|
65
|
-
* @
|
|
66
|
-
* @return {Promise<string>} mkdir command output.
|
|
60
|
+
* @param remotePath - The new path to be created.
|
|
61
|
+
* @return mkdir command output.
|
|
67
62
|
*/
|
|
68
|
-
export function mkdir(this:
|
|
63
|
+
export declare function mkdir(this: ADB, remotePath: string): Promise<string>;
|
|
69
64
|
//# sourceMappingURL=fs-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-commands.d.ts","sourceRoot":"","sources":["../../../lib/tools/fs-commands.
|
|
1
|
+
{"version":3,"file":"fs-commands.d.ts","sourceRoot":"","sources":["../../../lib/tools/fs-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhF;AAED;;;;;;;;GAQG;AACH,wBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe9F;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe7E;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CACxB,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CACxB,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1E"}
|
|
@@ -15,9 +15,8 @@ const path_1 = __importDefault(require("path"));
|
|
|
15
15
|
/**
|
|
16
16
|
* Verify whether a remote path exists on the device under test.
|
|
17
17
|
*
|
|
18
|
-
* @
|
|
19
|
-
* @
|
|
20
|
-
* @return {Promise<boolean>} True if the given path exists on the device.
|
|
18
|
+
* @param remotePath - The remote path to verify.
|
|
19
|
+
* @return True if the given path exists on the device.
|
|
21
20
|
*/
|
|
22
21
|
async function fileExists(remotePath) {
|
|
23
22
|
const passFlag = '__PASS__';
|
|
@@ -32,18 +31,17 @@ async function fileExists(remotePath) {
|
|
|
32
31
|
/**
|
|
33
32
|
* Get the output of _ls_ command on the device under test.
|
|
34
33
|
*
|
|
35
|
-
* @
|
|
36
|
-
* @param
|
|
37
|
-
* @
|
|
38
|
-
* @return {Promise<string[]>} The _ls_ output as an array of split lines.
|
|
34
|
+
* @param remotePath - The remote path (the first argument to the _ls_ command).
|
|
35
|
+
* @param opts - Additional _ls_ options.
|
|
36
|
+
* @return The _ls_ output as an array of split lines.
|
|
39
37
|
* An empty array is returned of the given _remotePath_
|
|
40
38
|
* does not exist.
|
|
41
39
|
*/
|
|
42
40
|
async function ls(remotePath, opts = []) {
|
|
43
41
|
try {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
const args = ['ls', ...opts, remotePath];
|
|
43
|
+
const stdout = await this.shell(args);
|
|
44
|
+
const lines = stdout.split('\n');
|
|
47
45
|
return lines
|
|
48
46
|
.map((l) => l.trim())
|
|
49
47
|
.filter(Boolean)
|
|
@@ -59,9 +57,8 @@ async function ls(remotePath, opts = []) {
|
|
|
59
57
|
/**
|
|
60
58
|
* Get the size of the particular file located on the device under test.
|
|
61
59
|
*
|
|
62
|
-
* @
|
|
63
|
-
* @
|
|
64
|
-
* @return {Promise<number>} File size in bytes.
|
|
60
|
+
* @param remotePath - The remote path to the file.
|
|
61
|
+
* @return File size in bytes.
|
|
65
62
|
* @throws {Error} If there was an error while getting the size of the given file.
|
|
66
63
|
*/
|
|
67
64
|
async function fileSize(remotePath) {
|
|
@@ -85,8 +82,7 @@ async function fileSize(remotePath) {
|
|
|
85
82
|
* Forcefully recursively remove a path on the device under test.
|
|
86
83
|
* Be careful while calling this method.
|
|
87
84
|
*
|
|
88
|
-
* @
|
|
89
|
-
* @param {string} path - The path to be removed recursively.
|
|
85
|
+
* @param path - The path to be removed recursively.
|
|
90
86
|
*/
|
|
91
87
|
async function rimraf(path) {
|
|
92
88
|
await this.shell(['rm', '-rf', path]);
|
|
@@ -94,10 +90,9 @@ async function rimraf(path) {
|
|
|
94
90
|
/**
|
|
95
91
|
* Send a file to the device under test.
|
|
96
92
|
*
|
|
97
|
-
* @
|
|
98
|
-
* @param
|
|
99
|
-
* @param
|
|
100
|
-
* @param {object} [opts] - Additional options mapping. See
|
|
93
|
+
* @param localPath - The path to the file on the local file system.
|
|
94
|
+
* @param remotePath - The destination path on the remote device.
|
|
95
|
+
* @param opts - Additional options mapping. See
|
|
101
96
|
* https://github.com/appium/node-teen_process,
|
|
102
97
|
* _exec_ method options, for more information about available
|
|
103
98
|
* options.
|
|
@@ -109,10 +104,9 @@ async function push(localPath, remotePath, opts) {
|
|
|
109
104
|
/**
|
|
110
105
|
* Receive a file from the device under test.
|
|
111
106
|
*
|
|
112
|
-
* @
|
|
113
|
-
* @param
|
|
114
|
-
* @param
|
|
115
|
-
* @param {import('teen_process').TeenProcessExecOptions} [opts={}] - Additional options mapping. See
|
|
107
|
+
* @param remotePath - The source path on the remote device.
|
|
108
|
+
* @param localPath - The destination path to the file on the local file system.
|
|
109
|
+
* @param opts - Additional options mapping. See
|
|
116
110
|
* https://github.com/appium/node-teen_process,
|
|
117
111
|
* _exec_ method options, for more information about available
|
|
118
112
|
* options.
|
|
@@ -124,9 +118,8 @@ async function pull(remotePath, localPath, opts = {}) {
|
|
|
124
118
|
/**
|
|
125
119
|
* Recursively create a new folder on the device under test.
|
|
126
120
|
*
|
|
127
|
-
* @
|
|
128
|
-
* @
|
|
129
|
-
* @return {Promise<string>} mkdir command output.
|
|
121
|
+
* @param remotePath - The new path to be created.
|
|
122
|
+
* @return mkdir command output.
|
|
130
123
|
*/
|
|
131
124
|
async function mkdir(remotePath) {
|
|
132
125
|
return /\s+/.test(remotePath)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-commands.js","sourceRoot":"","sources":["../../../lib/tools/fs-commands.
|
|
1
|
+
{"version":3,"file":"fs-commands.js","sourceRoot":"","sources":["../../../lib/tools/fs-commands.ts"],"names":[],"mappings":"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"}
|