@appium/support 7.0.5 → 7.0.6
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/LICENSE +201 -0
- package/build/lib/console.d.ts +42 -88
- package/build/lib/console.d.ts.map +1 -1
- package/build/lib/console.js +20 -80
- package/build/lib/console.js.map +1 -1
- package/build/lib/doctor.d.ts +6 -18
- package/build/lib/doctor.d.ts.map +1 -1
- package/build/lib/doctor.js +0 -15
- package/build/lib/doctor.js.map +1 -1
- package/build/lib/env.d.ts +14 -20
- package/build/lib/env.d.ts.map +1 -1
- package/build/lib/env.js +13 -50
- package/build/lib/env.js.map +1 -1
- package/build/lib/fs.d.ts +109 -148
- package/build/lib/fs.d.ts.map +1 -1
- package/build/lib/fs.js +88 -188
- package/build/lib/fs.js.map +1 -1
- package/build/lib/image-util.d.ts +7 -6
- package/build/lib/image-util.d.ts.map +1 -1
- package/build/lib/image-util.js +9 -6
- package/build/lib/image-util.js.map +1 -1
- package/build/lib/index.d.ts +19 -17
- package/build/lib/index.d.ts.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 +1 -1
- package/build/lib/logger.js.map +1 -1
- package/build/lib/logging.d.ts +7 -15
- package/build/lib/logging.d.ts.map +1 -1
- package/build/lib/logging.js +36 -62
- package/build/lib/logging.js.map +1 -1
- package/build/lib/mjpeg.d.ts +19 -56
- package/build/lib/mjpeg.d.ts.map +1 -1
- package/build/lib/mjpeg.js +53 -76
- package/build/lib/mjpeg.js.map +1 -1
- package/build/lib/mkdirp.d.ts +4 -1
- package/build/lib/mkdirp.d.ts.map +1 -1
- package/build/lib/mkdirp.js +1 -2
- package/build/lib/mkdirp.js.map +1 -1
- package/build/lib/net.d.ts +52 -90
- package/build/lib/net.d.ts.map +1 -1
- package/build/lib/net.js +104 -193
- package/build/lib/net.js.map +1 -1
- package/build/lib/node.d.ts +16 -17
- package/build/lib/node.d.ts.map +1 -1
- package/build/lib/node.js +106 -111
- package/build/lib/node.js.map +1 -1
- package/build/lib/npm.d.ts +65 -86
- package/build/lib/npm.d.ts.map +1 -1
- package/build/lib/npm.js +59 -117
- package/build/lib/npm.js.map +1 -1
- package/build/lib/plist.d.ts +36 -29
- package/build/lib/plist.d.ts.map +1 -1
- package/build/lib/plist.js +62 -59
- package/build/lib/plist.js.map +1 -1
- package/build/lib/process.d.ts +19 -2
- package/build/lib/process.d.ts.map +1 -1
- package/build/lib/process.js +24 -7
- package/build/lib/process.js.map +1 -1
- package/build/lib/system.d.ts +41 -6
- package/build/lib/system.d.ts.map +1 -1
- package/build/lib/system.js +46 -11
- package/build/lib/system.js.map +1 -1
- package/build/lib/tempdir.d.ts +26 -49
- package/build/lib/tempdir.d.ts.map +1 -1
- package/build/lib/tempdir.js +41 -73
- package/build/lib/tempdir.js.map +1 -1
- package/build/lib/timing.d.ts +28 -22
- package/build/lib/timing.d.ts.map +1 -1
- package/build/lib/timing.js +16 -17
- package/build/lib/timing.js.map +1 -1
- package/build/lib/util.d.ts +164 -181
- package/build/lib/util.d.ts.map +1 -1
- package/build/lib/util.js +193 -247
- package/build/lib/util.js.map +1 -1
- package/build/lib/zip.d.ts +81 -139
- package/build/lib/zip.d.ts.map +1 -1
- package/build/lib/zip.js +210 -258
- package/build/lib/zip.js.map +1 -1
- package/lib/console.ts +139 -0
- package/lib/{doctor.js → doctor.ts} +6 -20
- package/lib/{env.js → env.ts} +31 -59
- package/lib/fs.ts +453 -0
- package/lib/image-util.ts +40 -0
- package/lib/index.ts +1 -0
- package/lib/{logger.js → logger.ts} +1 -1
- package/lib/logging.ts +157 -0
- package/lib/mjpeg.ts +186 -0
- package/lib/{mkdirp.js → mkdirp.ts} +2 -2
- package/lib/net.ts +305 -0
- package/lib/{node.js → node.ts} +134 -133
- package/lib/npm.ts +291 -0
- package/lib/plist.ts +187 -0
- package/lib/process.ts +62 -0
- package/lib/system.ts +95 -0
- package/lib/tempdir.ts +115 -0
- package/lib/{timing.js → timing.ts} +28 -33
- package/lib/util.ts +561 -0
- package/lib/{zip.js → zip.ts} +341 -296
- package/package.json +20 -22
- package/tsconfig.json +3 -5
- package/index.js +0 -1
- package/lib/console.js +0 -173
- package/lib/fs.js +0 -496
- package/lib/image-util.js +0 -32
- package/lib/logging.js +0 -145
- package/lib/mjpeg.js +0 -207
- package/lib/net.js +0 -336
- package/lib/npm.js +0 -310
- package/lib/plist.js +0 -182
- package/lib/process.js +0 -46
- package/lib/system.js +0 -48
- package/lib/tempdir.js +0 -131
- package/lib/util.js +0 -584
package/build/lib/node.js
CHANGED
|
@@ -15,45 +15,17 @@ const teen_process_1 = require("teen_process");
|
|
|
15
15
|
const node_path_1 = __importDefault(require("node:path"));
|
|
16
16
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
17
17
|
const uuid_1 = require("uuid");
|
|
18
|
-
const
|
|
19
|
-
STRING: 2,
|
|
20
|
-
BOOLEAN: 4,
|
|
21
|
-
NUMBER: 8,
|
|
22
|
-
});
|
|
23
|
-
/**
|
|
24
|
-
* Internal utility to link global package to local context
|
|
25
|
-
*
|
|
26
|
-
* @param {string} packageName - name of the package to link
|
|
27
|
-
* @throws {Error} If the command fails
|
|
28
|
-
*/
|
|
29
|
-
async function linkGlobalPackage(packageName) {
|
|
30
|
-
try {
|
|
31
|
-
logger_1.default.debug(`Linking package '${packageName}'`);
|
|
32
|
-
const cmd = (0, system_1.isWindows)() ? 'npm.cmd' : 'npm';
|
|
33
|
-
await (0, teen_process_1.exec)(cmd, ['link', packageName], { timeout: 20000 });
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
const msg = `Unable to load package '${packageName}', linking failed: ${err.message}`;
|
|
37
|
-
logger_1.default.debug(msg);
|
|
38
|
-
if (err.stderr) {
|
|
39
|
-
// log the stderr if there, but do not add to thrown error as it is
|
|
40
|
-
// _very_ verbose
|
|
41
|
-
logger_1.default.debug(err.stderr);
|
|
42
|
-
}
|
|
43
|
-
throw new Error(msg);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
18
|
+
const OBJECTS_MAPPING = new WeakMap();
|
|
46
19
|
/**
|
|
47
20
|
* Utility function to extend node functionality, allowing us to require
|
|
48
21
|
* modules that are installed globally. If the package cannot be required,
|
|
49
22
|
* this will attempt to link the package and then re-require it
|
|
50
23
|
*
|
|
51
|
-
* @param
|
|
52
|
-
* @returns
|
|
24
|
+
* @param packageName - the name of the package to be required
|
|
25
|
+
* @returns The package object
|
|
53
26
|
* @throws {Error} If the package is not found locally or globally
|
|
54
27
|
*/
|
|
55
28
|
async function requirePackage(packageName) {
|
|
56
|
-
// first, get it in the normal way (see https://nodejs.org/api/modules.html#modules_all_together)
|
|
57
29
|
try {
|
|
58
30
|
logger_1.default.debug(`Loading local package '${packageName}'`);
|
|
59
31
|
return require(packageName);
|
|
@@ -61,7 +33,6 @@ async function requirePackage(packageName) {
|
|
|
61
33
|
catch (err) {
|
|
62
34
|
logger_1.default.debug(`Failed to load local package '${packageName}': ${err.message}`);
|
|
63
35
|
}
|
|
64
|
-
// second, get it from where it ought to be in the global node_modules
|
|
65
36
|
try {
|
|
66
37
|
const globalPackageName = node_path_1.default.resolve(process.env.npm_config_prefix ?? '', 'lib', 'node_modules', packageName);
|
|
67
38
|
logger_1.default.debug(`Loading global package '${globalPackageName}'`);
|
|
@@ -70,7 +41,6 @@ async function requirePackage(packageName) {
|
|
|
70
41
|
catch (err) {
|
|
71
42
|
logger_1.default.debug(`Failed to load global package '${packageName}': ${err.message}`);
|
|
72
43
|
}
|
|
73
|
-
// third, link the file and get locally
|
|
74
44
|
try {
|
|
75
45
|
await linkGlobalPackage(packageName);
|
|
76
46
|
logger_1.default.debug(`Retrying load of linked package '${packageName}'`);
|
|
@@ -80,91 +50,30 @@ async function requirePackage(packageName) {
|
|
|
80
50
|
throw logger_1.default.errorWithException(`Unable to load package '${packageName}': ${err.message}`);
|
|
81
51
|
}
|
|
82
52
|
}
|
|
83
|
-
function extractAllProperties(obj) {
|
|
84
|
-
const stringProperties = [];
|
|
85
|
-
for (const prop in obj) {
|
|
86
|
-
stringProperties.push(prop);
|
|
87
|
-
}
|
|
88
|
-
if (lodash_1.default.isFunction(Object.getOwnPropertySymbols)) {
|
|
89
|
-
stringProperties.push(...Object.getOwnPropertySymbols(obj));
|
|
90
|
-
}
|
|
91
|
-
return stringProperties;
|
|
92
|
-
}
|
|
93
|
-
function _getSizeOfObject(seen, object) {
|
|
94
|
-
if (lodash_1.default.isNil(object)) {
|
|
95
|
-
return 0;
|
|
96
|
-
}
|
|
97
|
-
let bytes = 0;
|
|
98
|
-
const properties = extractAllProperties(object);
|
|
99
|
-
for (const key of properties) {
|
|
100
|
-
// Do not recalculate circular references
|
|
101
|
-
if (typeof object[key] === 'object' && !lodash_1.default.isNil(object[key])) {
|
|
102
|
-
if (seen.has(object[key])) {
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
seen.add(object[key]);
|
|
106
|
-
}
|
|
107
|
-
bytes += getCalculator(seen)(key);
|
|
108
|
-
try {
|
|
109
|
-
bytes += getCalculator(seen)(object[key]);
|
|
110
|
-
}
|
|
111
|
-
catch (ex) {
|
|
112
|
-
if (ex instanceof RangeError) {
|
|
113
|
-
// circular reference detected, final result might be incorrect
|
|
114
|
-
// let's be nice and not throw an exception
|
|
115
|
-
bytes = 0;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return bytes;
|
|
120
|
-
}
|
|
121
|
-
function getCalculator(seen) {
|
|
122
|
-
return function calculator(obj) {
|
|
123
|
-
if (lodash_1.default.isBuffer(obj)) {
|
|
124
|
-
return obj.length;
|
|
125
|
-
}
|
|
126
|
-
switch (typeof obj) {
|
|
127
|
-
case 'string':
|
|
128
|
-
return obj.length * ECMA_SIZES.STRING;
|
|
129
|
-
case 'boolean':
|
|
130
|
-
return ECMA_SIZES.BOOLEAN;
|
|
131
|
-
case 'number':
|
|
132
|
-
return ECMA_SIZES.NUMBER;
|
|
133
|
-
case 'symbol':
|
|
134
|
-
return lodash_1.default.isFunction(Symbol.keyFor) && Symbol.keyFor(obj)
|
|
135
|
-
? /** @type {string} */ (Symbol.keyFor(obj)).length * ECMA_SIZES.STRING
|
|
136
|
-
: (obj.toString().length - 8) * ECMA_SIZES.STRING;
|
|
137
|
-
case 'object':
|
|
138
|
-
return lodash_1.default.isArray(obj)
|
|
139
|
-
? obj.map(getCalculator(seen)).reduce((acc, curr) => acc + curr, 0)
|
|
140
|
-
: _getSizeOfObject(seen, obj);
|
|
141
|
-
default:
|
|
142
|
-
return 0;
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
53
|
/**
|
|
147
54
|
* Calculate the in-depth size in memory of the provided object.
|
|
148
55
|
* The original implementation is borrowed from https://github.com/miktam/sizeof.
|
|
149
56
|
*
|
|
150
|
-
* @param
|
|
151
|
-
* @returns
|
|
57
|
+
* @param obj - An object whose size should be calculated
|
|
58
|
+
* @returns Object size in bytes.
|
|
152
59
|
*/
|
|
153
60
|
function getObjectSize(obj) {
|
|
154
61
|
return getCalculator(new WeakSet())(obj);
|
|
155
62
|
}
|
|
156
|
-
const OBJECTS_MAPPING = new WeakMap();
|
|
157
63
|
/**
|
|
158
64
|
* Calculates a unique object identifier
|
|
159
65
|
*
|
|
160
|
-
* @param
|
|
161
|
-
* @returns
|
|
66
|
+
* @param object - Any valid ECMA object
|
|
67
|
+
* @returns A uuidV4 string that uniquely identifies given object
|
|
162
68
|
*/
|
|
163
69
|
function getObjectId(object) {
|
|
164
|
-
|
|
165
|
-
|
|
70
|
+
const existing = OBJECTS_MAPPING.get(object);
|
|
71
|
+
if (existing !== undefined) {
|
|
72
|
+
return existing;
|
|
166
73
|
}
|
|
167
|
-
|
|
74
|
+
const id = (0, uuid_1.v4)();
|
|
75
|
+
OBJECTS_MAPPING.set(object, id);
|
|
76
|
+
return id;
|
|
168
77
|
}
|
|
169
78
|
/**
|
|
170
79
|
* Perform deep freeze of the given object (e. g.
|
|
@@ -175,9 +84,8 @@ function getObjectId(object) {
|
|
|
175
84
|
* ! This function changes the given object,
|
|
176
85
|
* so it becomes immutable.
|
|
177
86
|
*
|
|
178
|
-
* @param
|
|
179
|
-
* @returns
|
|
180
|
-
* function after it was made immutable.
|
|
87
|
+
* @param object - Any valid ECMA object
|
|
88
|
+
* @returns The same object that was passed after it was made immutable.
|
|
181
89
|
*/
|
|
182
90
|
function deepFreeze(object) {
|
|
183
91
|
let propNames;
|
|
@@ -199,10 +107,10 @@ function deepFreeze(object) {
|
|
|
199
107
|
* Tries to synchronously detect the absolute path to the folder
|
|
200
108
|
* where the given `moduleName` is located.
|
|
201
109
|
*
|
|
202
|
-
* @param
|
|
203
|
-
* @param
|
|
110
|
+
* @param moduleName - The name of the module as it is written in package.json
|
|
111
|
+
* @param filePath - Full path to any of files that `moduleName` contains. Use
|
|
204
112
|
* `__filename` to find the root of the module where this helper is called.
|
|
205
|
-
* @returns
|
|
113
|
+
* @returns Full path to the module root, or null if not found
|
|
206
114
|
*/
|
|
207
115
|
function getModuleRootSync(moduleName, filePath) {
|
|
208
116
|
let currentDir = node_path_1.default.dirname(node_path_1.default.resolve(filePath));
|
|
@@ -215,10 +123,97 @@ function getModuleRootSync(moduleName, filePath) {
|
|
|
215
123
|
return currentDir;
|
|
216
124
|
}
|
|
217
125
|
}
|
|
218
|
-
catch {
|
|
126
|
+
catch {
|
|
127
|
+
// ignore
|
|
128
|
+
}
|
|
219
129
|
currentDir = node_path_1.default.dirname(currentDir);
|
|
220
130
|
isAtFsRoot = currentDir.length <= node_path_1.default.dirname(currentDir).length;
|
|
221
131
|
}
|
|
222
132
|
return null;
|
|
223
133
|
}
|
|
134
|
+
// #region Private
|
|
135
|
+
const ECMA_SIZES = Object.freeze({
|
|
136
|
+
STRING: 2,
|
|
137
|
+
BOOLEAN: 4,
|
|
138
|
+
NUMBER: 8,
|
|
139
|
+
});
|
|
140
|
+
async function linkGlobalPackage(packageName) {
|
|
141
|
+
try {
|
|
142
|
+
logger_1.default.debug(`Linking package '${packageName}'`);
|
|
143
|
+
const cmd = (0, system_1.isWindows)() ? 'npm.cmd' : 'npm';
|
|
144
|
+
await (0, teen_process_1.exec)(cmd, ['link', packageName], { timeout: 20000 });
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
const e = err;
|
|
148
|
+
const msg = `Unable to load package '${packageName}', linking failed: ${e.message}`;
|
|
149
|
+
logger_1.default.debug(msg);
|
|
150
|
+
if (e.stderr) {
|
|
151
|
+
logger_1.default.debug(e.stderr);
|
|
152
|
+
}
|
|
153
|
+
throw new Error(msg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function extractAllProperties(obj) {
|
|
157
|
+
const stringProperties = [];
|
|
158
|
+
for (const prop in obj) {
|
|
159
|
+
stringProperties.push(prop);
|
|
160
|
+
}
|
|
161
|
+
if (lodash_1.default.isFunction(Object.getOwnPropertySymbols)) {
|
|
162
|
+
stringProperties.push(...Object.getOwnPropertySymbols(obj));
|
|
163
|
+
}
|
|
164
|
+
return stringProperties;
|
|
165
|
+
}
|
|
166
|
+
function _getSizeOfObject(seen, object) {
|
|
167
|
+
if (lodash_1.default.isNil(object)) {
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
170
|
+
let bytes = 0;
|
|
171
|
+
const properties = extractAllProperties(object);
|
|
172
|
+
const calc = getCalculator(seen);
|
|
173
|
+
for (const key of properties) {
|
|
174
|
+
const val = object[key];
|
|
175
|
+
if (typeof val === 'object' && !lodash_1.default.isNil(val)) {
|
|
176
|
+
if (seen.has(val)) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
seen.add(val);
|
|
180
|
+
}
|
|
181
|
+
bytes += calc(key);
|
|
182
|
+
try {
|
|
183
|
+
bytes += calc(val);
|
|
184
|
+
}
|
|
185
|
+
catch (ex) {
|
|
186
|
+
if (ex instanceof RangeError) {
|
|
187
|
+
bytes = 0;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return bytes;
|
|
192
|
+
}
|
|
193
|
+
function getCalculator(seen) {
|
|
194
|
+
return function calculator(obj) {
|
|
195
|
+
if (lodash_1.default.isBuffer(obj)) {
|
|
196
|
+
return obj.length;
|
|
197
|
+
}
|
|
198
|
+
switch (typeof obj) {
|
|
199
|
+
case 'string':
|
|
200
|
+
return obj.length * ECMA_SIZES.STRING;
|
|
201
|
+
case 'boolean':
|
|
202
|
+
return ECMA_SIZES.BOOLEAN;
|
|
203
|
+
case 'number':
|
|
204
|
+
return ECMA_SIZES.NUMBER;
|
|
205
|
+
case 'symbol':
|
|
206
|
+
return lodash_1.default.isFunction(Symbol.keyFor) && Symbol.keyFor(obj)
|
|
207
|
+
? Symbol.keyFor(obj).length * ECMA_SIZES.STRING
|
|
208
|
+
: (obj.toString().length - 8) * ECMA_SIZES.STRING;
|
|
209
|
+
case 'object':
|
|
210
|
+
return lodash_1.default.isArray(obj)
|
|
211
|
+
? obj.map(getCalculator(seen)).reduce((acc, curr) => acc + curr, 0)
|
|
212
|
+
: _getSizeOfObject(seen, obj);
|
|
213
|
+
default:
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// #endregion
|
|
224
219
|
//# sourceMappingURL=node.js.map
|
package/build/lib/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../lib/node.
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../lib/node.ts"],"names":[],"mappings":";;;;;AAmBA,wCA8BC;AASD,sCAEC;AAQD,kCAQC;AAcD,gCAcC;AAWD,8CAmBC;AAtID,qCAAmC;AACnC,sDAA2B;AAC3B,oDAAuB;AACvB,+CAAkC;AAClC,0DAA6B;AAC7B,sDAA0B;AAC1B,+BAAkC;AAElC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAkB,CAAC;AAEtD;;;;;;;;GAQG;AACI,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,IAAI,CAAC;QACH,gBAAG,CAAC,KAAK,CAAC,0BAA0B,WAAW,GAAG,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAG,CAAC,KAAK,CAAC,iCAAiC,WAAW,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,mBAAI,CAAC,OAAO,CACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,EACnC,KAAK,EACL,cAAc,EACd,WAAW,CACZ,CAAC;QACF,gBAAG,CAAC,KAAK,CAAC,2BAA2B,iBAAiB,GAAG,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAG,CAAC,KAAK,CAAC,kCAAkC,WAAW,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACrC,gBAAG,CAAC,KAAK,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAC;QAC9D,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,gBAAG,CAAC,kBAAkB,CAC1B,2BAA2B,WAAW,MAAO,GAAa,CAAC,OAAO,EAAE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,GAAY;IACxC,OAAO,aAAa,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,MAAc;IACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;IACpB,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,UAAU,CAAI,MAAS;IACrC,IAAI,SAAmB,CAAC;IACxB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAgB,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAI,MAAkC,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAM,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;IACpE,IAAI,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,IACE,iBAAG,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,iBAAG,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAqB,CAAC,IAAI,KAAK,UAAU,EAC3F,CAAC;gBACD,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,UAAU,GAAG,UAAU,CAAC,MAAM,IAAI,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAkB;AAElB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAIH,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,gBAAG,CAAC,KAAK,CAAC,oBAAoB,WAAW,GAAG,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAA,kBAAS,GAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,MAAM,IAAA,mBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAgC,CAAC;QAC3C,MAAM,GAAG,GAAG,2BAA2B,WAAW,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC;QACpF,gBAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,gBAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,gBAAgB,GAAwB,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,gBAAC,CAAC,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC/C,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAqB,EAAE,MAAc;IAC7D,IAAI,gBAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAI,MAA2C,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,gBAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAa,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,IAAI,EAAE,YAAY,UAAU,EAAE,CAAC;gBAC7B,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAqB;IAC1C,OAAO,SAAS,UAAU,CAAC,GAAY;QACrC,IAAI,gBAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAQ,GAAc,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,QAAQ,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YACxC,KAAK,SAAS;gBACZ,OAAO,UAAU,CAAC,OAAO,CAAC;YAC5B,KAAK,QAAQ;gBACX,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,gBAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;oBACtD,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAY,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;oBAC3D,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YACtD,KAAK,QAAQ;gBACX,OAAO,gBAAC,CAAC,OAAO,CAAC,GAAG,CAAC;oBACnB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;oBACnE,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAa,CAAC,CAAC;YAC5C;gBACE,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,aAAa"}
|
package/build/lib/npm.d.ts
CHANGED
|
@@ -1,126 +1,105 @@
|
|
|
1
|
+
import type { PackageJson } from 'type-fest';
|
|
2
|
+
import type { StringRecord } from '@appium/types';
|
|
3
|
+
import type { TeenProcessExecOptions } from 'teen_process';
|
|
1
4
|
/**
|
|
2
5
|
* Relative path to directory containing any Appium internal files
|
|
3
6
|
* XXX: this is duplicated in `appium/lib/constants.js`.
|
|
4
7
|
*/
|
|
5
|
-
export const CACHE_DIR_RELATIVE_PATH: string;
|
|
8
|
+
export declare const CACHE_DIR_RELATIVE_PATH: string;
|
|
6
9
|
/**
|
|
7
10
|
* Relative path to lockfile used when installing an extension via `appium`
|
|
8
11
|
*/
|
|
9
|
-
export const INSTALL_LOCKFILE_RELATIVE_PATH: string;
|
|
12
|
+
export declare const INSTALL_LOCKFILE_RELATIVE_PATH: string;
|
|
13
|
+
/** Options for {@link NPM.exec} */
|
|
14
|
+
export interface ExecOpts {
|
|
15
|
+
/** Current working directory */
|
|
16
|
+
cwd: string;
|
|
17
|
+
/** If true, supply `--json` flag to npm and resolve w/ parsed JSON */
|
|
18
|
+
json?: boolean;
|
|
19
|
+
/** Path to lockfile to use */
|
|
20
|
+
lockFile?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Options for {@link NPM.installPackage} */
|
|
23
|
+
export interface InstallPackageOpts {
|
|
24
|
+
/** Name of the package to install */
|
|
25
|
+
pkgName: string;
|
|
26
|
+
/** Whether to install from a local path or from npm */
|
|
27
|
+
installType?: 'local' | string;
|
|
28
|
+
}
|
|
29
|
+
/** Result of {@link NPM.installPackage} */
|
|
30
|
+
export interface NpmInstallReceipt {
|
|
31
|
+
/** Path to installed package */
|
|
32
|
+
installPath: string;
|
|
33
|
+
/** Package data */
|
|
34
|
+
pkg: PackageJson;
|
|
35
|
+
}
|
|
36
|
+
export interface NpmExecResult {
|
|
37
|
+
stdout: string;
|
|
38
|
+
stderr: string;
|
|
39
|
+
code: number | null;
|
|
40
|
+
json?: unknown;
|
|
41
|
+
}
|
|
10
42
|
/**
|
|
11
43
|
* XXX: This should probably be a singleton, but it isn't. Maybe this module should just export functions?
|
|
12
44
|
*/
|
|
13
|
-
export class NPM {
|
|
14
|
-
/**
|
|
15
|
-
* Returns path to "install" lockfile
|
|
16
|
-
* @private
|
|
17
|
-
* @param {string} cwd
|
|
18
|
-
*/
|
|
19
|
-
private _getInstallLockfilePath;
|
|
45
|
+
export declare class NPM {
|
|
20
46
|
/**
|
|
21
47
|
* Execute `npm` with given args.
|
|
22
48
|
*
|
|
23
49
|
* If the process exits with a nonzero code, the contents of `STDOUT` and `STDERR` will be in the
|
|
24
50
|
* `message` of any rejected error.
|
|
25
|
-
* @param {string} cmd
|
|
26
|
-
* @param {string[]} args
|
|
27
|
-
* @param {ExecOpts} opts
|
|
28
|
-
* @param {Omit<TeenProcessExecOptions, 'cwd'>} [execOpts]
|
|
29
51
|
*/
|
|
30
|
-
exec(cmd: string, args: string[], opts: ExecOpts, execOpts?: Omit<TeenProcessExecOptions,
|
|
31
|
-
json?: any;
|
|
32
|
-
}>;
|
|
52
|
+
exec(cmd: string, args: string[], opts: ExecOpts, execOpts?: Omit<TeenProcessExecOptions, 'cwd'>): Promise<NpmExecResult>;
|
|
33
53
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* @
|
|
54
|
+
* Gets the latest published version of a package from npm registry.
|
|
55
|
+
*
|
|
56
|
+
* @param cwd - Current working directory for npm command
|
|
57
|
+
* @param pkg - Package name to query
|
|
58
|
+
* @returns Latest version string, or `null` if package not found (e.g. 404)
|
|
37
59
|
*/
|
|
38
60
|
getLatestVersion(cwd: string, pkg: string): Promise<string | null>;
|
|
39
61
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* @
|
|
43
|
-
*
|
|
62
|
+
* Gets the latest version of a package that is a safe upgrade from the current version
|
|
63
|
+
* (same major, no prereleases). Fetches versions from npm and delegates to
|
|
64
|
+
* {@link NPM.getLatestSafeUpgradeFromVersions}.
|
|
65
|
+
*
|
|
66
|
+
* @param cwd - Current working directory for npm command
|
|
67
|
+
* @param pkg - Package name to query
|
|
68
|
+
* @param curVersion - Current installed version
|
|
69
|
+
* @returns Latest safe upgrade version string, or `null` if none or package not found
|
|
44
70
|
*/
|
|
45
71
|
getLatestSafeUpgradeVersion(cwd: string, pkg: string, curVersion: string): Promise<string | null>;
|
|
46
72
|
/**
|
|
47
73
|
* Runs `npm ls`, optionally for a particular package.
|
|
48
|
-
* @param {string} cwd
|
|
49
|
-
* @param {string} [pkg]
|
|
50
74
|
*/
|
|
51
|
-
list(cwd: string, pkg?: string): Promise<
|
|
75
|
+
list(cwd: string, pkg?: string): Promise<unknown>;
|
|
52
76
|
/**
|
|
53
77
|
* Given a current version and a list of all versions for a package, return the version which is
|
|
54
78
|
* the highest safely-upgradable version (meaning not crossing any major revision boundaries, and
|
|
55
79
|
* not including any alpha/beta/rc versions)
|
|
56
|
-
*
|
|
57
|
-
* @param {string} curVersion - the current version of a package
|
|
58
|
-
* @param {Array<string>} allVersions - a list of version strings
|
|
59
|
-
*
|
|
60
|
-
* @return {string|null} - the highest safely-upgradable version, or null if there isn't one
|
|
61
80
|
*/
|
|
62
|
-
getLatestSafeUpgradeFromVersions(curVersion: string, allVersions:
|
|
81
|
+
getLatestSafeUpgradeFromVersions(curVersion: string, allVersions: string[]): string | null;
|
|
63
82
|
/**
|
|
64
83
|
* Installs a package w/ `npm`
|
|
65
|
-
* @param {string} cwd
|
|
66
|
-
* @param {string} installStr - as in "npm install <installStr>"
|
|
67
|
-
* @param {InstallPackageOpts} opts
|
|
68
|
-
* @returns {Promise<NpmInstallReceipt>}
|
|
69
84
|
*/
|
|
70
|
-
installPackage(cwd: string, installStr: string,
|
|
85
|
+
installPackage(cwd: string, installStr: string, opts: InstallPackageOpts): Promise<NpmInstallReceipt>;
|
|
71
86
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
87
|
+
* Uninstalls a package with `npm uninstall`.
|
|
88
|
+
*
|
|
89
|
+
* @param cwd - Current working directory (project root)
|
|
90
|
+
* @param pkg - Package name to uninstall
|
|
74
91
|
*/
|
|
75
92
|
uninstallPackage(cwd: string, pkg: string): Promise<void>;
|
|
76
93
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* @
|
|
94
|
+
* Fetches package metadata from the npm registry via `npm info`.
|
|
95
|
+
*
|
|
96
|
+
* @param pkg - Npm package spec to query
|
|
97
|
+
* @param entries - Field names to be included into the resulting output. By default all fields are included.
|
|
98
|
+
* @returns Package metadata as a record of string values
|
|
81
99
|
*/
|
|
82
|
-
getPackageInfo(pkg: string, entries?: string[]): Promise<
|
|
100
|
+
getPackageInfo(pkg: string, entries?: string[]): Promise<StringRecord>;
|
|
101
|
+
/** Returns path to "install" lockfile */
|
|
102
|
+
private _getInstallLockfilePath;
|
|
83
103
|
}
|
|
84
|
-
export const npm: NPM;
|
|
85
|
-
/**
|
|
86
|
-
* Options for {@link NPM.installPackage}
|
|
87
|
-
*/
|
|
88
|
-
export type InstallPackageOpts = {
|
|
89
|
-
/**
|
|
90
|
-
* - the name of the package to install
|
|
91
|
-
*/
|
|
92
|
-
pkgName: string;
|
|
93
|
-
/**
|
|
94
|
-
* - whether to install from a local path or from npm
|
|
95
|
-
*/
|
|
96
|
-
installType?: import("type-fest", { with: { "resolution-mode": "import" } }).LiteralUnion<"local", string> | undefined;
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* Options for {@link NPM.exec}
|
|
100
|
-
*/
|
|
101
|
-
export type ExecOpts = {
|
|
102
|
-
/**
|
|
103
|
-
* - Current working directory
|
|
104
|
-
*/
|
|
105
|
-
cwd: string;
|
|
106
|
-
/**
|
|
107
|
-
* - If `true`, supply `--json` flag to npm and resolve w/ parsed JSON
|
|
108
|
-
*/
|
|
109
|
-
json?: boolean | undefined;
|
|
110
|
-
/**
|
|
111
|
-
* - Path to lockfile to use
|
|
112
|
-
*/
|
|
113
|
-
lockFile?: string | undefined;
|
|
114
|
-
};
|
|
115
|
-
export type TeenProcessExecOptions = import("teen_process").TeenProcessExecOptions;
|
|
116
|
-
export type NpmInstallReceipt = {
|
|
117
|
-
/**
|
|
118
|
-
* - Path to installed package
|
|
119
|
-
*/
|
|
120
|
-
installPath: string;
|
|
121
|
-
/**
|
|
122
|
-
* - Package data
|
|
123
|
-
*/
|
|
124
|
-
pkg: import("type-fest").PackageJson;
|
|
125
|
-
};
|
|
104
|
+
export declare const npm: NPM;
|
|
126
105
|
//# sourceMappingURL=npm.d.ts.map
|
package/build/lib/npm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../lib/npm.
|
|
1
|
+
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../lib/npm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAGhD,OAAO,KAAK,EAAY,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAMpE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAgD,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,8BAA8B,QAAsD,CAAC;AAElG,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAChC;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,GAAG;IACd;;;;;OAKG;IACG,IAAI,CACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,QAAQ,EACd,QAAQ,GAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAM,GACjD,OAAO,CAAC,aAAa,CAAC;IAyCzB;;;;;;OAMG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAaxE;;;;;;;;;OASG;IACG,2BAA2B,CAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBzB;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD;;;;OAIG;IACH,gCAAgC,CAC9B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,GAAG,IAAI;IAuBhB;;OAEG;IACG,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,iBAAiB,CAAC;IAiD7B;;;;;OAKG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D;;;;;;OAMG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhF,yCAAyC;IACzC,OAAO,CAAC,uBAAuB;CAGhC;AAED,eAAO,MAAM,GAAG,KAAY,CAAC"}
|