@appium/support 2.61.1 → 3.0.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/build/lib/console.d.ts +1 -1
- package/build/lib/console.js +169 -105
- package/build/lib/console.js.map +1 -1
- package/build/lib/env.js +142 -117
- package/build/lib/env.js.map +1 -1
- package/build/lib/fs.d.ts +9 -2
- package/build/lib/fs.d.ts.map +1 -1
- package/build/lib/fs.js +358 -246
- package/build/lib/fs.js.map +1 -1
- package/build/lib/image-util.js +139 -124
- package/build/lib/image-util.js.map +1 -1
- package/build/lib/index.js +64 -103
- package/build/lib/index.js.map +1 -1
- package/build/lib/log-internal.d.ts +4 -27
- package/build/lib/log-internal.d.ts.map +1 -1
- package/build/lib/log-internal.js +141 -123
- package/build/lib/log-internal.js.map +1 -1
- package/build/lib/logger.d.ts +1 -1
- package/build/lib/logger.d.ts.map +1 -1
- package/build/lib/logger.js +5 -14
- package/build/lib/logger.js.map +1 -1
- package/build/lib/logging.d.ts +3 -4
- package/build/lib/logging.d.ts.map +1 -1
- package/build/lib/logging.js +139 -110
- package/build/lib/logging.js.map +1 -1
- package/build/lib/mjpeg.js +169 -141
- package/build/lib/mjpeg.js.map +1 -1
- package/build/lib/mkdirp.js +7 -13
- package/build/lib/mkdirp.js.map +1 -1
- package/build/lib/net.d.ts.map +1 -1
- package/build/lib/net.js +278 -254
- package/build/lib/net.js.map +1 -1
- package/build/lib/node.js +203 -192
- package/build/lib/node.js.map +1 -1
- package/build/lib/npm.d.ts +19 -4
- package/build/lib/npm.d.ts.map +1 -1
- package/build/lib/npm.js +277 -228
- package/build/lib/npm.js.map +1 -1
- package/build/lib/plist.js +145 -136
- package/build/lib/plist.js.map +1 -1
- package/build/lib/process.js +41 -42
- package/build/lib/process.js.map +1 -1
- package/build/lib/system.js +39 -56
- package/build/lib/system.js.map +1 -1
- package/build/lib/tempdir.js +112 -73
- package/build/lib/tempdir.js.map +1 -1
- package/build/lib/timing.js +99 -84
- package/build/lib/timing.js.map +1 -1
- package/build/lib/util.js +454 -356
- package/build/lib/util.js.map +1 -1
- package/build/lib/zip.js +469 -423
- package/build/lib/zip.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/fs.js +15 -1
- package/lib/log-internal.js +12 -16
- package/lib/logging.js +2 -3
- package/lib/net.js +15 -6
- package/lib/npm.js +28 -18
- package/package.json +19 -18
package/build/lib/npm.js
CHANGED
|
@@ -1,242 +1,291 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
// @ts-check
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
5
18
|
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
30
|
exports.npm = exports.NPM = exports.INSTALL_LOCKFILE_RELATIVE_PATH = exports.CACHE_DIR_RELATIVE_PATH = void 0;
|
|
7
|
-
|
|
8
|
-
require("
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
const CACHE_DIR_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium');
|
|
33
|
-
|
|
34
|
-
exports.CACHE_DIR_RELATIVE_PATH = CACHE_DIR_RELATIVE_PATH;
|
|
35
|
-
|
|
36
|
-
const INSTALL_LOCKFILE_RELATIVE_PATH = _path.default.join(CACHE_DIR_RELATIVE_PATH, '.install.lock');
|
|
37
|
-
|
|
38
|
-
exports.INSTALL_LOCKFILE_RELATIVE_PATH = INSTALL_LOCKFILE_RELATIVE_PATH;
|
|
39
|
-
|
|
31
|
+
const path_1 = __importDefault(require("path"));
|
|
32
|
+
const semver_1 = __importDefault(require("semver"));
|
|
33
|
+
const env_1 = require("./env");
|
|
34
|
+
const teen_process_1 = require("teen_process");
|
|
35
|
+
const fs_1 = require("./fs");
|
|
36
|
+
const util = __importStar(require("./util"));
|
|
37
|
+
const system = __importStar(require("./system"));
|
|
38
|
+
const resolve_from_1 = __importDefault(require("resolve-from"));
|
|
39
|
+
/**
|
|
40
|
+
* Relative path to directory containing any Appium internal files
|
|
41
|
+
* XXX: this is duplicated in `appium/lib/constants.js`.
|
|
42
|
+
*/
|
|
43
|
+
exports.CACHE_DIR_RELATIVE_PATH = path_1.default.join('node_modules', '.cache', 'appium');
|
|
44
|
+
/**
|
|
45
|
+
* Relative path to lockfile used when installing an extension via `appium`
|
|
46
|
+
*/
|
|
47
|
+
exports.INSTALL_LOCKFILE_RELATIVE_PATH = path_1.default.join(exports.CACHE_DIR_RELATIVE_PATH, '.install.lock');
|
|
48
|
+
/**
|
|
49
|
+
* XXX: This should probably be a singleton, but it isn't. Maybe this module should just export functions?
|
|
50
|
+
*/
|
|
40
51
|
class NPM {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
json,
|
|
49
|
-
lockFile
|
|
50
|
-
} = opts;
|
|
51
|
-
const teenProcessExecOpts = { ...execOpts,
|
|
52
|
-
cwd
|
|
53
|
-
};
|
|
54
|
-
args.unshift(cmd);
|
|
55
|
-
|
|
56
|
-
if (json) {
|
|
57
|
-
args.push('--json');
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';
|
|
61
|
-
|
|
62
|
-
let runner = async () => await (0, _teen_process.exec)(npmCmd, args, teenProcessExecOpts);
|
|
63
|
-
|
|
64
|
-
if (lockFile) {
|
|
65
|
-
const acquireLock = util.getLockFileGuard(lockFile);
|
|
66
|
-
const _runner = runner;
|
|
67
|
-
|
|
68
|
-
runner = async () => await acquireLock(_runner);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
let ret;
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const {
|
|
75
|
-
stdout,
|
|
76
|
-
stderr,
|
|
77
|
-
code
|
|
78
|
-
} = await runner();
|
|
79
|
-
ret = {
|
|
80
|
-
stdout,
|
|
81
|
-
stderr,
|
|
82
|
-
code
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
ret.json = JSON.parse(stdout);
|
|
87
|
-
} catch (ign) {}
|
|
88
|
-
} catch (e) {
|
|
89
|
-
const {
|
|
90
|
-
stdout = '',
|
|
91
|
-
stderr = '',
|
|
92
|
-
code = null
|
|
93
|
-
} = e;
|
|
94
|
-
const err = new Error(`npm command '${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
|
|
95
|
-
throw err;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return ret;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async getLatestVersion(cwd, pkg) {
|
|
102
|
-
try {
|
|
103
|
-
var _await$this$exec$json;
|
|
104
|
-
|
|
105
|
-
return ((_await$this$exec$json = (await this.exec('view', [pkg, 'dist-tags'], {
|
|
106
|
-
json: true,
|
|
107
|
-
cwd
|
|
108
|
-
})).json) === null || _await$this$exec$json === void 0 ? void 0 : _await$this$exec$json.latest) ?? null;
|
|
109
|
-
} catch (err) {
|
|
110
|
-
if (!(err !== null && err !== void 0 && err.message.includes('E404'))) {
|
|
111
|
-
throw err;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async getLatestSafeUpgradeVersion(cwd, pkg, curVersion) {
|
|
119
|
-
try {
|
|
120
|
-
const allVersions = (await this.exec('view', [pkg, 'versions'], {
|
|
121
|
-
json: true,
|
|
122
|
-
cwd
|
|
123
|
-
})).json;
|
|
124
|
-
return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);
|
|
125
|
-
} catch (err) {
|
|
126
|
-
if (!(err !== null && err !== void 0 && err.message.includes('E404'))) {
|
|
127
|
-
throw err;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return null;
|
|
52
|
+
/**
|
|
53
|
+
* Returns path to "install" lockfile
|
|
54
|
+
* @private
|
|
55
|
+
* @param {string} cwd
|
|
56
|
+
*/
|
|
57
|
+
_getInstallLockfilePath(cwd) {
|
|
58
|
+
return path_1.default.join(cwd, exports.INSTALL_LOCKFILE_RELATIVE_PATH);
|
|
131
59
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Execute `npm` with given args.
|
|
62
|
+
*
|
|
63
|
+
* If the process exits with a nonzero code, the contents of `STDOUT` and `STDERR` will be in the
|
|
64
|
+
* `message` of any rejected error.
|
|
65
|
+
* @param {string} cmd
|
|
66
|
+
* @param {string[]} args
|
|
67
|
+
* @param {ExecOpts} opts
|
|
68
|
+
* @param {Omit<TeenProcessExecOptions, 'cwd'>} [execOpts]
|
|
69
|
+
*/
|
|
70
|
+
async exec(cmd, args, opts, execOpts = {}) {
|
|
71
|
+
let { cwd, json, lockFile } = opts;
|
|
72
|
+
// make sure we perform the current operation in cwd
|
|
73
|
+
/** @type {TeenProcessExecOptions} */
|
|
74
|
+
const teenProcessExecOpts = { ...execOpts, cwd };
|
|
75
|
+
args.unshift(cmd);
|
|
76
|
+
if (json) {
|
|
77
|
+
args.push('--json');
|
|
78
|
+
}
|
|
79
|
+
const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';
|
|
80
|
+
let runner = async () => await (0, teen_process_1.exec)(npmCmd, args, teenProcessExecOpts);
|
|
81
|
+
if (lockFile) {
|
|
82
|
+
const acquireLock = util.getLockFileGuard(lockFile);
|
|
83
|
+
const _runner = runner;
|
|
84
|
+
runner = async () => await acquireLock(_runner);
|
|
85
|
+
}
|
|
86
|
+
/** @type {import('teen_process').TeenProcessExecResult<string> & {json?: any}} */
|
|
87
|
+
let ret;
|
|
88
|
+
try {
|
|
89
|
+
const { stdout, stderr, code } = await runner();
|
|
90
|
+
ret = { stdout, stderr, code };
|
|
91
|
+
// if possible, parse NPM's json output. During NPM install 3rd-party
|
|
92
|
+
// packages can write to stdout, so sometimes the json output can't be
|
|
93
|
+
// guaranteed to be parseable
|
|
94
|
+
try {
|
|
95
|
+
ret.json = JSON.parse(stdout);
|
|
96
|
+
}
|
|
97
|
+
catch (ign) { }
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
const { stdout = '', stderr = '', code = null, } = /** @type {import('teen_process').ExecError} */ (e);
|
|
101
|
+
const err = new Error(`npm command '${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
return ret;
|
|
148
105
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {
|
|
170
|
-
safeUpgradeVer = testSemver;
|
|
171
|
-
}
|
|
106
|
+
/**
|
|
107
|
+
* @param {string} cwd
|
|
108
|
+
* @param {string} pkg
|
|
109
|
+
* @returns {Promise<string?>}
|
|
110
|
+
*/
|
|
111
|
+
async getLatestVersion(cwd, pkg) {
|
|
112
|
+
try {
|
|
113
|
+
return ((await this.exec('view', [pkg, 'dist-tags'], {
|
|
114
|
+
json: true,
|
|
115
|
+
cwd,
|
|
116
|
+
})).json?.latest ?? null);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
if (!err?.message.includes('E404')) {
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
172
124
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
125
|
+
/**
|
|
126
|
+
* @param {string} cwd
|
|
127
|
+
* @param {string} pkg
|
|
128
|
+
* @param {string} curVersion
|
|
129
|
+
* @returns {Promise<string?>}
|
|
130
|
+
*/
|
|
131
|
+
async getLatestSafeUpgradeVersion(cwd, pkg, curVersion) {
|
|
132
|
+
try {
|
|
133
|
+
const allVersions = (await this.exec('view', [pkg, 'versions'], {
|
|
134
|
+
json: true,
|
|
135
|
+
cwd,
|
|
136
|
+
})).json;
|
|
137
|
+
return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
if (!err?.message.includes('E404')) {
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
176
145
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
let dummyPkgJson;
|
|
185
|
-
|
|
186
|
-
const dummyPkgPath = _path.default.join(cwd, 'package.json');
|
|
187
|
-
|
|
188
|
-
try {
|
|
189
|
-
dummyPkgJson = JSON.parse(await _fs.fs.readFile(dummyPkgPath, 'utf8'));
|
|
190
|
-
} catch (err) {
|
|
191
|
-
if (err.code === 'ENOENT') {
|
|
192
|
-
dummyPkgJson = {};
|
|
193
|
-
await _fs.fs.writeFile(dummyPkgPath, JSON.stringify(dummyPkgJson, null, 2), 'utf8');
|
|
194
|
-
} else {
|
|
195
|
-
throw err;
|
|
196
|
-
}
|
|
146
|
+
/**
|
|
147
|
+
* Runs `npm ls`, optionally for a particular package.
|
|
148
|
+
* @param {string} cwd
|
|
149
|
+
* @param {string} [pkg]
|
|
150
|
+
*/
|
|
151
|
+
async list(cwd, pkg) {
|
|
152
|
+
return (await this.exec('list', pkg ? [pkg] : [], { cwd, json: true })).json;
|
|
197
153
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Given a current version and a list of all versions for a package, return the version which is
|
|
156
|
+
* the highest safely-upgradable version (meaning not crossing any major revision boundaries, and
|
|
157
|
+
* not including any alpha/beta/rc versions)
|
|
158
|
+
*
|
|
159
|
+
* @param {string} curVersion - the current version of a package
|
|
160
|
+
* @param {Array<string>} allVersions - a list of version strings
|
|
161
|
+
*
|
|
162
|
+
* @return {string|null} - the highest safely-upgradable version, or null if there isn't one
|
|
163
|
+
*/
|
|
164
|
+
getLatestSafeUpgradeFromVersions(curVersion, allVersions) {
|
|
165
|
+
let safeUpgradeVer = null;
|
|
166
|
+
const curSemver = semver_1.default.parse(curVersion) ?? semver_1.default.parse(semver_1.default.coerce(curVersion));
|
|
167
|
+
if (curSemver === null) {
|
|
168
|
+
throw new Error(`Could not parse current version '${curVersion}'`);
|
|
169
|
+
}
|
|
170
|
+
for (const testVer of allVersions) {
|
|
171
|
+
const testSemver = semver_1.default.parse(testVer) ?? semver_1.default.parse(semver_1.default.coerce(testVer));
|
|
172
|
+
if (testSemver === null) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// if the test version is a prerelease, ignore it
|
|
176
|
+
if (testSemver.prerelease.length > 0) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
// if the current version is later than the test version, skip this test version
|
|
180
|
+
if (curSemver.compare(testSemver) === 1) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
// if the test version is newer, but crosses a major revision boundary, also skip it
|
|
184
|
+
if (testSemver.major > curSemver.major) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
// otherwise this version is safe to upgrade to. But there might be multiple ones of this
|
|
188
|
+
// kind, so keep iterating and keeping the highest
|
|
189
|
+
if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {
|
|
190
|
+
safeUpgradeVer = testSemver;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (safeUpgradeVer) {
|
|
194
|
+
safeUpgradeVer = safeUpgradeVer.format();
|
|
195
|
+
}
|
|
196
|
+
return safeUpgradeVer;
|
|
207
197
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Installs a package w/ `npm`
|
|
200
|
+
* @param {string} cwd
|
|
201
|
+
* @param {string} pkgName
|
|
202
|
+
* @param {InstallPackageOpts} [opts]
|
|
203
|
+
* @returns {Promise<NpmInstallReceipt>}
|
|
204
|
+
*/
|
|
205
|
+
async installPackage(cwd, pkgName, { pkgVer, installType }) {
|
|
206
|
+
/** @type {any} */
|
|
207
|
+
let dummyPkgJson;
|
|
208
|
+
const dummyPkgPath = path_1.default.join(cwd, 'package.json');
|
|
209
|
+
try {
|
|
210
|
+
dummyPkgJson = JSON.parse(await fs_1.fs.readFile(dummyPkgPath, 'utf8'));
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
if (err.code === 'ENOENT') {
|
|
214
|
+
dummyPkgJson = {};
|
|
215
|
+
await fs_1.fs.writeFile(dummyPkgPath, JSON.stringify(dummyPkgJson, null, 2), 'utf8');
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
throw err;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const installOpts = ['--save-dev'];
|
|
222
|
+
if (!(await (0, env_1.hasAppiumDependency)(cwd))) {
|
|
223
|
+
if (process.env.APPIUM_OMIT_PEER_DEPS) {
|
|
224
|
+
installOpts.push('--omit=peer');
|
|
225
|
+
}
|
|
226
|
+
installOpts.push('--save-exact', '--global-style', '--no-package-lock');
|
|
227
|
+
}
|
|
228
|
+
const cmd = installType === 'local' ? 'link' : 'install';
|
|
229
|
+
const res = await this.exec(cmd, [...installOpts, pkgVer ? `${pkgName}@${pkgVer}` : pkgName], {
|
|
230
|
+
cwd,
|
|
231
|
+
json: true,
|
|
232
|
+
lockFile: this._getInstallLockfilePath(cwd),
|
|
233
|
+
});
|
|
234
|
+
if (res.json) {
|
|
235
|
+
// we parsed a valid json response, so if we got an error here, return that
|
|
236
|
+
// message straightaway
|
|
237
|
+
if (res.json.error) {
|
|
238
|
+
throw new Error(res.json.error);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Now read package data from the installed package to return, and make sure
|
|
242
|
+
// everything got installed ok. Remember, pkgName might end up with a / in it due to an npm
|
|
243
|
+
// org, so if so, that will get correctly exploded into multiple directories, by path.resolve here
|
|
244
|
+
// (even on Windows!)
|
|
245
|
+
const pkgJsonPath = (0, resolve_from_1.default)(cwd, `${pkgName}/package.json`);
|
|
246
|
+
try {
|
|
247
|
+
const pkgJson = await fs_1.fs.readFile(pkgJsonPath, 'utf8');
|
|
248
|
+
const pkg = JSON.parse(pkgJson);
|
|
249
|
+
return { installPath: path_1.default.dirname(pkgJsonPath), pkg };
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
throw new Error('The package was not downloaded correctly; its package.json ' +
|
|
253
|
+
'did not exist or was unreadable. We looked for it at ' +
|
|
254
|
+
pkgJsonPath);
|
|
255
|
+
}
|
|
219
256
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
257
|
+
/**
|
|
258
|
+
* @param {string} cwd
|
|
259
|
+
* @param {string} pkg
|
|
260
|
+
*/
|
|
261
|
+
async uninstallPackage(cwd, pkg) {
|
|
262
|
+
await this.exec('uninstall', [pkg], {
|
|
263
|
+
cwd,
|
|
264
|
+
lockFile: this._getInstallLockfilePath(cwd),
|
|
265
|
+
});
|
|
227
266
|
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
async uninstallPackage(cwd, pkg) {
|
|
231
|
-
await this.exec('uninstall', [pkg], {
|
|
232
|
-
cwd,
|
|
233
|
-
lockFile: this._getInstallLockfilePath(cwd)
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
|
|
237
267
|
}
|
|
238
|
-
|
|
239
268
|
exports.NPM = NPM;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIIiwiTlBNIiwiX2dldEluc3RhbGxMb2NrZmlsZVBhdGgiLCJjd2QiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJleGVjT3B0cyIsImpzb24iLCJsb2NrRmlsZSIsInRlZW5Qcm9jZXNzRXhlY09wdHMiLCJ1bnNoaWZ0IiwicHVzaCIsIm5wbUNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsInJ1bm5lciIsImFjcXVpcmVMb2NrIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJfcnVubmVyIiwicmV0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsIkpTT04iLCJwYXJzZSIsImlnbiIsImUiLCJlcnIiLCJFcnJvciIsInRyaW0iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwibWVzc2FnZSIsImluY2x1ZGVzIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJsaXN0Iiwic2FmZVVwZ3JhZGVWZXIiLCJjdXJTZW12ZXIiLCJzZW12ZXIiLCJ0ZXN0VmVyIiwidGVzdFNlbXZlciIsInByZXJlbGVhc2UiLCJsZW5ndGgiLCJjb21wYXJlIiwibWFqb3IiLCJmb3JtYXQiLCJpbnN0YWxsUGFja2FnZSIsInBrZ05hbWUiLCJwa2dWZXIiLCJkdW1teVBrZ0pzb24iLCJkdW1teVBrZ1BhdGgiLCJmcyIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiaW5zdGFsbE9wdHMiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9PTUlUX1BFRVJfREVQUyIsInJlcyIsImVycm9yIiwicGtnSnNvblBhdGgiLCJyZXNvbHZlRnJvbSIsInJlcXVpcmUiLCJ1bmluc3RhbGxQYWNrYWdlIiwibnBtIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL25wbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge2hhc0FwcGl1bURlcGVuZGVuY3l9IGZyb20gJy4vZW52JztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7ZnN9IGZyb20gJy4vZnMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0ICogYXMgc3lzdGVtIGZyb20gJy4vc3lzdGVtJztcbmltcG9ydCByZXNvbHZlRnJvbSBmcm9tICdyZXNvbHZlLWZyb20nO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW55IEFwcGl1bSBpbnRlcm5hbCBmaWxlc1xuICogWFhYOiB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gYGFwcGl1bS9saWIvY29uc3RhbnRzLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnLmNhY2hlJywgJ2FwcGl1bScpO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gbG9ja2ZpbGUgdXNlZCB3aGVuIGluc3RhbGxpbmcgYW4gZXh0ZW5zaW9uIHZpYSBgYXBwaXVtYFxuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9MT0NLRklMRV9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKENBQ0hFX0RJUl9SRUxBVElWRV9QQVRILCAnLmluc3RhbGwubG9jaycpO1xuXG4vKipcbiAqIFhYWDogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBzaW5nbGV0b24sIGJ1dCBpdCBpc24ndC4gIE1heWJlIHRoaXMgbW9kdWxlIHNob3VsZCBqdXN0IGV4cG9ydCBmdW5jdGlvbnM/XG4gKi9cbmV4cG9ydCBjbGFzcyBOUE0ge1xuICAvKipcbiAgICogUmV0dXJucyBwYXRoIHRvIFwiaW5zdGFsbFwiIGxvY2tmaWxlXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICovXG4gIF9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4oY3dkLCBJTlNUQUxMX0xPQ0tGSUxFX1JFTEFUSVZFX1BBVEgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYG5wbWAgd2l0aCBnaXZlbiBhcmdzLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgY29udGVudHMgb2YgYFNURE9VVGAgYW5kIGBTVERFUlJgIHdpbGwgYmUgaW4gdGhlXG4gICAqIGBtZXNzYWdlYCBvZiBhbnkgcmVqZWN0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge0V4ZWNPcHRzfSBvcHRzXG4gICAqIEBwYXJhbSB7T21pdDxpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zLCAnY3dkJz59IFtleGVjT3B0c11cbiAgICovXG4gIGFzeW5jIGV4ZWMoY21kLCBhcmdzLCBvcHRzLCBleGVjT3B0cyA9IHt9KSB7XG4gICAgbGV0IHtjd2QsIGpzb24sIGxvY2tGaWxlfSA9IG9wdHM7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgcGVyZm9ybSB0aGUgY3VycmVudCBvcGVyYXRpb24gaW4gY3dkXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNPcHRpb25zfSAqL1xuICAgIGNvbnN0IHRlZW5Qcm9jZXNzRXhlY09wdHMgPSB7Li4uZXhlY09wdHMsIGN3ZH07XG5cbiAgICBhcmdzLnVuc2hpZnQoY21kKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgbnBtQ21kID0gc3lzdGVtLmlzV2luZG93cygpID8gJ25wbS5jbWQnIDogJ25wbSc7XG4gICAgbGV0IHJ1bm5lciA9IGFzeW5jICgpID0+IGF3YWl0IGV4ZWMobnBtQ21kLCBhcmdzLCB0ZWVuUHJvY2Vzc0V4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgndGVlbl9wcm9jZXNzJykuRXhlY1Jlc3VsdDxzdHJpbmc+ICYge2pzb24/OiBhbnl9fSAqL1xuICAgIGxldCByZXQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBydW5uZXIoKTtcbiAgICAgIHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZX07XG4gICAgICAvLyBpZiBwb3NzaWJsZSwgcGFyc2UgTlBNJ3MganNvbiBvdXRwdXQuIER1cmluZyBOUE0gaW5zdGFsbCAzcmQtcGFydHlcbiAgICAgIC8vIHBhY2thZ2VzIGNhbiB3cml0ZSB0byBzdGRvdXQsIHNvIHNvbWV0aW1lcyB0aGUganNvbiBvdXRwdXQgY2FuJ3QgYmVcbiAgICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgcGFyc2VhYmxlXG4gICAgICB0cnkge1xuICAgICAgICByZXQuanNvbiA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZG91dCA9ICcnLFxuICAgICAgICBzdGRlcnIgPSAnJyxcbiAgICAgICAgY29kZSA9IG51bGwsXG4gICAgICB9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJ3RlZW5fcHJvY2VzcycpLkV4ZWNFcnJvcn0gKi8gKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICBgbnBtIGNvbW1hbmQgJyR7YXJncy5qb2luKFxuICAgICAgICAgICcgJ1xuICAgICAgICApfScgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9LlxcblxcblNURE9VVDpcXG4ke3N0ZG91dC50cmltKCl9XFxuXFxuU1RERVJSOlxcbiR7c3RkZXJyLnRyaW0oKX1gXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn1cbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24oY3dkLCBwa2cpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICB9KVxuICAgICAgICApLmpzb24/LmxhdGVzdCA/PyBudWxsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fVxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uKGN3ZCwgcGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgY3dkLFxuICAgICAgICB9KVxuICAgICAgKS5qc29uO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnI/Lm1lc3NhZ2UuaW5jbHVkZXMoJ0U0MDQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgbnBtIGxzYCwgb3B0aW9uYWxseSBmb3IgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjd2RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwa2ddXG4gICAqL1xuICBhc3luYyBsaXN0KGN3ZCwgcGtnKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCBwa2cgPyBbcGtnXSA6IFtdLCB7Y3dkLCBqc29uOiB0cnVlfSkpLmpzb247XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIGEgcGFja2FnZSB3LyBgbnBtYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3dkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dOYW1lXG4gICAqIEBwYXJhbSB7SW5zdGFsbFBhY2thZ2VPcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCd0eXBlLWZlc3QnKS5QYWNrYWdlSnNvbj59XG4gICAqL1xuICBhc3luYyBpbnN0YWxsUGFja2FnZShjd2QsIHBrZ05hbWUsIHtwa2dWZXJ9ID0ge30pIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgZHVtbXlQa2dKc29uO1xuICAgIGNvbnN0IGR1bW15UGtnUGF0aCA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgZHVtbXlQa2dKc29uID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShkdW1teVBrZ1BhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBkdW1teVBrZ0pzb24gPSB7fTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bW15UGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZHVtbXlQa2dKc29uLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YWxsT3B0cyA9IFsnLS1zYXZlLWRldiddO1xuICAgIGlmICghKGF3YWl0IGhhc0FwcGl1bURlcGVuZGVuY3koY3dkKSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMpIHtcbiAgICAgICAgaW5zdGFsbE9wdHMucHVzaCgnLS1vbWl0PXBlZXInKTtcbiAgICAgIH1cbiAgICAgIGluc3RhbGxPcHRzLnB1c2goJy0tc2F2ZS1leGFjdCcsICctLWdsb2JhbC1zdHlsZScsICctLW5vLXBhY2thZ2UtbG9jaycpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYyhcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgIFsuLi5pbnN0YWxsT3B0cywgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVdLFxuICAgICAge1xuICAgICAgICBjd2QsXG4gICAgICAgIGpzb246IHRydWUsXG4gICAgICAgIGxvY2tGaWxlOiB0aGlzLl9nZXRJbnN0YWxsTG9ja2ZpbGVQYXRoKGN3ZCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChyZXMuanNvbikge1xuICAgICAgLy8gd2UgcGFyc2VkIGEgdmFsaWQganNvbiByZXNwb25zZSwgc28gaWYgd2UgZ290IGFuIGVycm9yIGhlcmUsIHJldHVybiB0aGF0XG4gICAgICAvLyBtZXNzYWdlIHN0cmFpZ2h0YXdheVxuICAgICAgaWYgKHJlcy5qc29uLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcmVzb2x2ZUZyb20oY3dkLCBgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvblBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICBwa2dKc29uUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlKGN3ZCwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkLFxuICAgICAgbG9ja0ZpbGU6IHRoaXMuX2dldEluc3RhbGxMb2NrZmlsZVBhdGgoY3dkKSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbnBtID0gbmV3IE5QTSgpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uaW5zdGFsbFBhY2thZ2V9XG4gKiBAdHlwZWRlZiBJbnN0YWxsUGFja2FnZU9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGtnVmVyXSAtIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIHRvIGluc3RhbGxcbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBOUE0uZXhlY31cbiAqIEB0eXBlZGVmIEV4ZWNPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICogQHByb3BlcnR5IHtib29sZWFufSBbanNvbl0gLSBJZiBgdHJ1ZWAsIHN1cHBseSBgLS1qc29uYCBmbGFnIHRvIG5wbSBhbmQgcmVzb2x2ZSB3LyBwYXJzZWQgSlNPTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NrRmlsZV0gLSBQYXRoIHRvIGxvY2tmaWxlIHRvIHVzZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQU1PLE1BQU1BLHVCQUF1QixHQUFHQyxhQUFBLENBQUtDLElBQUwsQ0FBVSxjQUFW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
|
|
269
|
+
exports.npm = new NPM();
|
|
270
|
+
/**
|
|
271
|
+
* Options for {@link NPM.installPackage}
|
|
272
|
+
* @typedef InstallPackageOpts
|
|
273
|
+
* @property {import('type-fest').LiteralUnion<'local', string>} [installType] - whether to install from a local path or from npm
|
|
274
|
+
* @property {string} [pkgVer] - the version of the package to install
|
|
275
|
+
*/
|
|
276
|
+
/**
|
|
277
|
+
* Options for {@link NPM.exec}
|
|
278
|
+
* @typedef ExecOpts
|
|
279
|
+
* @property {string} cwd - Current working directory
|
|
280
|
+
* @property {boolean} [json] - If `true`, supply `--json` flag to npm and resolve w/ parsed JSON
|
|
281
|
+
* @property {string} [lockFile] - Path to lockfile to use
|
|
282
|
+
*/
|
|
283
|
+
/**
|
|
284
|
+
* @typedef {import('teen_process').TeenProcessExecOptions} TeenProcessExecOptions
|
|
285
|
+
*/
|
|
286
|
+
/**
|
|
287
|
+
* @typedef NpmInstallReceipt
|
|
288
|
+
* @property {string} installPath - Path to installed package
|
|
289
|
+
* @property {import('type-fest').PackageJson} pkg - Package data
|
|
290
|
+
*/
|
|
291
|
+
//# sourceMappingURL=npm.js.map
|
package/build/lib/npm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","names":["CACHE_DIR_RELATIVE_PATH","path","join","INSTALL_LOCKFILE_RELATIVE_PATH","NPM","_getInstallLockfilePath","cwd","exec","cmd","args","opts","execOpts","json","lockFile","teenProcessExecOpts","unshift","push","npmCmd","system","isWindows","runner","acquireLock","util","getLockFileGuard","_runner","ret","stdout","stderr","code","JSON","parse","ign","e","err","Error","trim","getLatestVersion","pkg","latest","message","includes","getLatestSafeUpgradeVersion","curVersion","allVersions","getLatestSafeUpgradeFromVersions","list","safeUpgradeVer","curSemver","semver","testVer","testSemver","prerelease","length","compare","major","format","installPackage","pkgName","pkgVer","dummyPkgJson","dummyPkgPath","fs","readFile","writeFile","stringify","installOpts","hasAppiumDependency","process","env","APPIUM_OMIT_PEER_DEPS","res","error","pkgJsonPath","resolveFrom","require","uninstallPackage","npm"],"sources":["../../lib/npm.js"],"sourcesContent":["// @ts-check\n\nimport path from 'path';\nimport semver from 'semver';\nimport {hasAppiumDependency} from './env';\nimport {exec} from 'teen_process';\nimport {fs} from './fs';\nimport * as util from './util';\nimport * as system from './system';\nimport resolveFrom from 'resolve-from';\n\n/**\n * Relative path to directory containing any Appium internal files\n * XXX: this is duplicated in `appium/lib/constants.js`.\n */\nexport const CACHE_DIR_RELATIVE_PATH = path.join('node_modules', '.cache', 'appium');\n\n/**\n * Relative path to lockfile used when installing an extension via `appium`\n */\nexport const INSTALL_LOCKFILE_RELATIVE_PATH = path.join(CACHE_DIR_RELATIVE_PATH, '.install.lock');\n\n/**\n * XXX: This should probably be a singleton, but it isn't. Maybe this module should just export functions?\n */\nexport class NPM {\n /**\n * Returns path to \"install\" lockfile\n * @private\n * @param {string} cwd\n */\n _getInstallLockfilePath(cwd) {\n return path.join(cwd, INSTALL_LOCKFILE_RELATIVE_PATH);\n }\n\n /**\n * Execute `npm` with given args.\n *\n * If the process exits with a nonzero code, the contents of `STDOUT` and `STDERR` will be in the\n * `message` of any rejected error.\n * @param {string} cmd\n * @param {string[]} args\n * @param {ExecOpts} opts\n * @param {Omit<import('teen_process').ExecOptions, 'cwd'>} [execOpts]\n */\n async exec(cmd, args, opts, execOpts = {}) {\n let {cwd, json, lockFile} = opts;\n\n // make sure we perform the current operation in cwd\n /** @type {import('teen_process').ExecOptions} */\n const teenProcessExecOpts = {...execOpts, cwd};\n\n args.unshift(cmd);\n if (json) {\n args.push('--json');\n }\n const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';\n let runner = async () => await exec(npmCmd, args, teenProcessExecOpts);\n if (lockFile) {\n const acquireLock = util.getLockFileGuard(lockFile);\n const _runner = runner;\n runner = async () => await acquireLock(_runner);\n }\n\n /** @type {import('teen_process').ExecResult<string> & {json?: any}} */\n let ret;\n try {\n const {stdout, stderr, code} = await runner();\n ret = {stdout, stderr, code};\n // if possible, parse NPM's json output. During NPM install 3rd-party\n // packages can write to stdout, so sometimes the json output can't be\n // guaranteed to be parseable\n try {\n ret.json = JSON.parse(stdout);\n } catch (ign) {}\n } catch (e) {\n const {\n stdout = '',\n stderr = '',\n code = null,\n } = /** @type {import('teen_process').ExecError} */ (e);\n const err = new Error(\n `npm command '${args.join(\n ' '\n )}' failed with code ${code}.\\n\\nSTDOUT:\\n${stdout.trim()}\\n\\nSTDERR:\\n${stderr.trim()}`\n );\n throw err;\n }\n return ret;\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n * @returns {Promise<string?>}\n */\n async getLatestVersion(cwd, pkg) {\n try {\n return (\n (\n await this.exec('view', [pkg, 'dist-tags'], {\n json: true,\n cwd,\n })\n ).json?.latest ?? null\n );\n } catch (err) {\n if (!err?.message.includes('E404')) {\n throw err;\n }\n return null;\n }\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n * @param {string} curVersion\n * @returns {Promise<string?>}\n */\n async getLatestSafeUpgradeVersion(cwd, pkg, curVersion) {\n try {\n const allVersions = (\n await this.exec('view', [pkg, 'versions'], {\n json: true,\n cwd,\n })\n ).json;\n return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);\n } catch (err) {\n if (!err?.message.includes('E404')) {\n throw err;\n }\n return null;\n }\n }\n\n /**\n * Runs `npm ls`, optionally for a particular package.\n * @param {string} cwd\n * @param {string} [pkg]\n */\n async list(cwd, pkg) {\n return (await this.exec('list', pkg ? [pkg] : [], {cwd, json: true})).json;\n }\n\n /**\n * Given a current version and a list of all versions for a package, return the version which is\n * the highest safely-upgradable version (meaning not crossing any major revision boundaries, and\n * not including any alpha/beta/rc versions)\n *\n * @param {string} curVersion - the current version of a package\n * @param {Array<string>} allVersions - a list of version strings\n *\n * @return {string|null} - the highest safely-upgradable version, or null if there isn't one\n */\n getLatestSafeUpgradeFromVersions(curVersion, allVersions) {\n let safeUpgradeVer = null;\n const curSemver = semver.parse(curVersion);\n if (curSemver === null) {\n throw new Error(`Could not parse current version '${curVersion}'`);\n }\n for (const testVer of allVersions) {\n const testSemver = semver.parse(testVer);\n if (testSemver === null) {\n throw new Error(`Could not parse version to test against: '${testVer}'`);\n }\n // if the test version is a prerelease, ignore it\n if (testSemver.prerelease.length > 0) {\n continue;\n }\n // if the current version is later than the test version, skip this test version\n if (curSemver.compare(testSemver) === 1) {\n continue;\n }\n // if the test version is newer, but crosses a major revision boundary, also skip it\n if (testSemver.major > curSemver.major) {\n continue;\n }\n // otherwise this version is safe to upgrade to. But there might be multiple ones of this\n // kind, so keep iterating and keeping the highest\n if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {\n safeUpgradeVer = testSemver;\n }\n }\n if (safeUpgradeVer) {\n safeUpgradeVer = safeUpgradeVer.format();\n }\n return safeUpgradeVer;\n }\n\n /**\n * Installs a package w/ `npm`\n * @param {string} cwd\n * @param {string} pkgName\n * @param {InstallPackageOpts} [opts]\n * @returns {Promise<import('type-fest').PackageJson>}\n */\n async installPackage(cwd, pkgName, {pkgVer} = {}) {\n /** @type {any} */\n let dummyPkgJson;\n const dummyPkgPath = path.join(cwd, 'package.json');\n try {\n dummyPkgJson = JSON.parse(await fs.readFile(dummyPkgPath, 'utf8'));\n } catch (err) {\n if (err.code === 'ENOENT') {\n dummyPkgJson = {};\n await fs.writeFile(dummyPkgPath, JSON.stringify(dummyPkgJson, null, 2), 'utf8');\n } else {\n throw err;\n }\n }\n\n const installOpts = ['--save-dev'];\n if (!(await hasAppiumDependency(cwd))) {\n if (process.env.APPIUM_OMIT_PEER_DEPS) {\n installOpts.push('--omit=peer');\n }\n installOpts.push('--save-exact', '--global-style', '--no-package-lock');\n }\n\n const res = await this.exec(\n 'install',\n [...installOpts, pkgVer ? `${pkgName}@${pkgVer}` : pkgName],\n {\n cwd,\n json: true,\n lockFile: this._getInstallLockfilePath(cwd),\n }\n );\n\n if (res.json) {\n // we parsed a valid json response, so if we got an error here, return that\n // message straightaway\n if (res.json.error) {\n throw new Error(res.json.error);\n }\n }\n\n // Now read package data from the installed package to return, and make sure\n // everything got installed ok. Remember, pkgName might end up with a / in it due to an npm\n // org, so if so, that will get correctly exploded into multiple directories, by path.resolve here\n // (even on Windows!)\n const pkgJsonPath = resolveFrom(cwd, `${pkgName}/package.json`);\n try {\n return require(pkgJsonPath);\n } catch {\n throw new Error(\n 'The package was not downloaded correctly; its package.json ' +\n 'did not exist or was unreadable. We looked for it at ' +\n pkgJsonPath\n );\n }\n }\n\n /**\n * @param {string} cwd\n * @param {string} pkg\n */\n async uninstallPackage(cwd, pkg) {\n await this.exec('uninstall', [pkg], {\n cwd,\n lockFile: this._getInstallLockfilePath(cwd),\n });\n }\n}\n\nexport const npm = new NPM();\n\n/**\n * Options for {@link NPM.installPackage}\n * @typedef InstallPackageOpts\n * @property {string} [pkgVer] - the version of the package to install\n */\n\n/**\n * Options for {@link NPM.exec}\n * @typedef ExecOpts\n * @property {string} cwd - Current working directory\n * @property {boolean} [json] - If `true`, supply `--json` flag to npm and resolve w/ parsed JSON\n * @property {string} [lockFile] - Path to lockfile to use\n */\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../lib/npm.js"],"names":[],"mappings":"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"}
|