appium 2.0.0-beta.35 → 2.0.0-beta.39
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/appium.d.ts +41 -52
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +32 -15
- package/build/lib/cli/args.d.ts +1 -1
- package/build/lib/cli/args.d.ts.map +1 -1
- package/build/lib/cli/args.js +1 -1
- package/build/lib/cli/driver-command.d.ts +3 -3
- package/build/lib/cli/driver-command.d.ts.map +1 -1
- package/build/lib/cli/driver-command.js +1 -1
- package/build/lib/cli/extension-command.d.ts +60 -38
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +115 -59
- package/build/lib/cli/extension.d.ts +9 -5
- package/build/lib/cli/extension.d.ts.map +1 -1
- package/build/lib/cli/extension.js +5 -7
- package/build/lib/cli/parser.d.ts +3 -3
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +1 -1
- package/build/lib/cli/plugin-command.d.ts +1 -1
- package/build/lib/cli/plugin-command.d.ts.map +1 -1
- package/build/lib/cli/plugin-command.js +1 -1
- package/build/lib/cli/utils.js +1 -1
- package/build/lib/config-file.d.ts.map +1 -1
- package/build/lib/config-file.js +1 -1
- package/build/lib/config.d.ts +4 -4
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +1 -1
- package/build/lib/constants.d.ts.map +1 -1
- package/build/lib/constants.js +1 -1
- package/build/lib/extension/driver-config.d.ts +29 -32
- package/build/lib/extension/driver-config.d.ts.map +1 -1
- package/build/lib/extension/driver-config.js +7 -20
- package/build/lib/extension/extension-config.d.ts +108 -36
- package/build/lib/extension/extension-config.d.ts.map +1 -1
- package/build/lib/extension/extension-config.js +199 -60
- package/build/lib/extension/index.d.ts +16 -7
- package/build/lib/extension/index.d.ts.map +1 -1
- package/build/lib/extension/index.js +15 -18
- package/build/lib/extension/manifest.d.ts +12 -12
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +13 -3
- package/build/lib/extension/package-changed.d.ts.map +1 -1
- package/build/lib/extension/package-changed.js +1 -1
- package/build/lib/extension/plugin-config.d.ts +19 -24
- package/build/lib/extension/plugin-config.d.ts.map +1 -1
- package/build/lib/extension/plugin-config.js +9 -18
- package/build/lib/grid-register.d.ts.map +1 -1
- package/build/lib/grid-register.js +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/logsink.d.ts.map +1 -1
- package/build/lib/logsink.js +3 -2
- package/build/lib/main.d.ts +13 -12
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +4 -4
- package/build/lib/schema/arg-spec.d.ts +4 -4
- package/build/lib/schema/arg-spec.d.ts.map +1 -1
- package/build/lib/schema/arg-spec.js +1 -1
- package/build/lib/schema/cli-args.d.ts.map +1 -1
- package/build/lib/schema/cli-args.js +1 -1
- package/build/lib/schema/cli-transformers.d.ts.map +1 -1
- package/build/lib/schema/cli-transformers.js +1 -1
- package/build/lib/schema/keywords.d.ts.map +1 -1
- package/build/lib/schema/keywords.js +1 -1
- package/build/lib/schema/schema.d.ts +2 -2
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +1 -1
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/appium-manifest.d.ts +23 -4
- package/build/types/appium-manifest.d.ts.map +1 -1
- package/build/types/cli.d.ts.map +1 -1
- package/build/types/{external-manifest.d.ts → extension-manifest.d.ts} +15 -7
- package/build/types/extension-manifest.d.ts.map +1 -0
- package/build/types/index.d.ts +6 -5
- package/build/types/index.d.ts.map +1 -1
- package/driver.d.ts +1 -0
- package/driver.js +14 -0
- package/lib/appium.js +208 -124
- package/lib/cli/args.js +143 -93
- package/lib/cli/driver-command.js +10 -15
- package/lib/cli/extension-command.js +226 -175
- package/lib/cli/extension.js +15 -19
- package/lib/cli/parser.js +19 -31
- package/lib/cli/plugin-command.js +8 -8
- package/lib/cli/utils.js +8 -14
- package/lib/config-file.js +21 -25
- package/lib/config.js +82 -64
- package/lib/constants.js +4 -13
- package/lib/extension/driver-config.js +171 -171
- package/lib/extension/extension-config.js +347 -126
- package/lib/extension/index.js +72 -58
- package/lib/extension/manifest.js +48 -57
- package/lib/extension/package-changed.js +9 -8
- package/lib/extension/plugin-config.js +62 -62
- package/lib/grid-register.js +29 -18
- package/lib/logger.js +1 -2
- package/lib/logsink.js +29 -31
- package/lib/main.js +111 -73
- package/lib/schema/arg-spec.js +10 -13
- package/lib/schema/cli-args.js +14 -37
- package/lib/schema/cli-transformers.js +7 -14
- package/lib/schema/keywords.js +15 -13
- package/lib/schema/schema.js +58 -75
- package/lib/utils.js +50 -25
- package/package.json +25 -18
- package/plugin.d.ts +1 -0
- package/plugin.js +13 -0
- package/scripts/autoinstall-extensions.js +177 -0
- package/support.d.ts +1 -0
- package/support.js +13 -0
- package/types/appium-manifest.ts +27 -15
- package/types/cli.ts +2 -9
- package/types/{external-manifest.ts → extension-manifest.ts} +21 -15
- package/types/index.ts +12 -5
- package/build/types/extension.d.ts +0 -43
- package/build/types/extension.d.ts.map +0 -1
- package/build/types/external-manifest.d.ts.map +0 -1
- package/scripts/postinstall.js +0 -71
- package/types/extension.ts +0 -56
|
@@ -17,11 +17,10 @@ export class DriverConfig extends ExtensionConfig<"driver"> {
|
|
|
17
17
|
* Creates a new {@link DriverConfig} instance for a {@link Manifest} instance.
|
|
18
18
|
*
|
|
19
19
|
* @param {Manifest} manifest
|
|
20
|
-
* @param {DriverConfigOptions} [opts]
|
|
21
20
|
* @throws If `manifest` already associated with a `DriverConfig`
|
|
22
21
|
* @returns {DriverConfig}
|
|
23
22
|
*/
|
|
24
|
-
static create(manifest: Manifest
|
|
23
|
+
static create(manifest: Manifest): DriverConfig;
|
|
25
24
|
/**
|
|
26
25
|
* Returns a DriverConfig associated with a Manifest
|
|
27
26
|
* @param {Manifest} manifest
|
|
@@ -29,11 +28,10 @@ export class DriverConfig extends ExtensionConfig<"driver"> {
|
|
|
29
28
|
*/
|
|
30
29
|
static getInstance(manifest: Manifest): DriverConfig | undefined;
|
|
31
30
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
*/
|
|
31
|
+
* Call {@link DriverConfig.create} instead.
|
|
32
|
+
* @private
|
|
33
|
+
* @param {import('./manifest').Manifest} manifest - Manifest instance
|
|
34
|
+
*/
|
|
37
35
|
private constructor();
|
|
38
36
|
/**
|
|
39
37
|
* A set of unique automation names used by drivers.
|
|
@@ -41,41 +39,40 @@ export class DriverConfig extends ExtensionConfig<"driver"> {
|
|
|
41
39
|
*/
|
|
42
40
|
knownAutomationNames: Set<string>;
|
|
43
41
|
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
|
|
42
|
+
* Checks extensions for problems
|
|
43
|
+
*/
|
|
44
|
+
validate(): Promise<import("./extension-config").ExtRecord<"driver">>;
|
|
49
45
|
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*/
|
|
55
|
-
_getDriverBySupport(matchAutomationName: string, matchPlatformName: string): ExtMetadata<DriverType> & import('../../types/appium-manifest').InternalMetadata & import('../../types/external-manifest').CommonMetadata;
|
|
56
|
-
}
|
|
57
|
-
export type DriverConfigOptions = {
|
|
46
|
+
* @param {ExtManifest<DriverType>} extData
|
|
47
|
+
* @returns {import('./extension-config').ExtManifestProblem[]}
|
|
48
|
+
*/
|
|
49
|
+
getConfigProblems(extData: ExtManifest<DriverType>): import('./extension-config').ExtManifestProblem[];
|
|
58
50
|
/**
|
|
59
|
-
*
|
|
51
|
+
* Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
|
|
52
|
+
* @param {Capabilities} caps
|
|
53
|
+
* @returns {MatchedDriver}
|
|
60
54
|
*/
|
|
61
|
-
|
|
55
|
+
findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
|
|
62
56
|
/**
|
|
63
|
-
*
|
|
57
|
+
* Given an automation name and platform name, find a suitable driver and return its extension data.
|
|
58
|
+
* @param {string} matchAutomationName
|
|
59
|
+
* @param {string} matchPlatformName
|
|
60
|
+
* @returns {ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata}
|
|
64
61
|
*/
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
export type ExtMetadata<T> = import('
|
|
68
|
-
export type ExtManifest<T> = import('
|
|
69
|
-
export type ManifestData = import('
|
|
70
|
-
export type DriverType = import('
|
|
62
|
+
_getDriverBySupport(matchAutomationName: string, matchPlatformName: string): ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata;
|
|
63
|
+
}
|
|
64
|
+
export type ExtMetadata<T> = import('appium/types').ExtMetadata<T>;
|
|
65
|
+
export type ExtManifest<T> = import('appium/types').ExtManifest<T>;
|
|
66
|
+
export type ManifestData = import('appium/types').ManifestData;
|
|
67
|
+
export type DriverType = import('@appium/types').DriverType;
|
|
71
68
|
export type Manifest = import('./manifest').Manifest;
|
|
72
|
-
export type ExtRecord<T> = import('
|
|
73
|
-
export type ExtName<T> = import('
|
|
69
|
+
export type ExtRecord<T> = import('appium/types').ExtRecord<T>;
|
|
70
|
+
export type ExtName<T> = import('appium/types').ExtName<T>;
|
|
74
71
|
/**
|
|
75
72
|
* Return value of {@linkcode DriverConfig.findMatchingDriver }
|
|
76
73
|
*/
|
|
77
74
|
export type MatchedDriver = {
|
|
78
|
-
driver:
|
|
75
|
+
driver: import('@appium/types').DriverClass;
|
|
79
76
|
version: string;
|
|
80
77
|
driverName: string;
|
|
81
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/driver-config.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"driver-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/driver-config.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IAOE;;;;;;;;;OASG;IACH,0BAAkC;IAalC;;;;;;OAMG;IACH,wBAJW,QAAQ,GAEN,YAAY,CAWxB;IAED;;;;OAIG;IACH,6BAHW,QAAQ,GACN,YAAY,GAAC,SAAS,CAIlC;IApCD;;;;OAIG;IACH,sBAIC;IA3BD;;;OAGG;IACH,sBAFU,IAAI,MAAM,CAAC,CAEA;IAoDrB;;OAEG;IACH,sEAGC;IAED;;;OAGG;IACH,2BAHW,YAAY,UAAU,CAAC,GACrB,OAAO,oBAAoB,EAAE,kBAAkB,EAAE,CA+C7D;IAWD;;;;OAIG;IACH,qDAHW,YAAY,GACV,aAAa,CAuCzB;IAED;;;;;OAKG;IACH,yCAJW,MAAM,qBACN,MAAM,GACJ,YAAY,UAAU,CAAC,GAAG,OAAO,cAAc,EAAE,gBAAgB,GAAG,OAAO,cAAc,EAAE,iBAAiB,CA4BxH;CACF;6BAIY,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;6BAKrC,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;2BAIrC,OAAO,cAAc,EAAE,YAAY;yBACnC,OAAO,eAAe,EAAE,UAAU;uBAClC,OAAO,YAAY,EAAE,QAAQ;2BAK7B,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;yBAKnC,OAAO,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;YAMhC,OAAO,eAAe,EAAE,WAAW;aACnC,MAAM;gBACN,MAAM;;2BAIP,OAAO,eAAe,EAAE,YAAY"}
|
|
@@ -21,26 +21,13 @@ class DriverConfig extends _extensionConfig.ExtensionConfig {
|
|
|
21
21
|
knownAutomationNames;
|
|
22
22
|
static _instances = new WeakMap();
|
|
23
23
|
|
|
24
|
-
constructor(manifest
|
|
25
|
-
|
|
26
|
-
extData
|
|
27
|
-
} = {}) {
|
|
28
|
-
super(_constants.DRIVER_TYPE, manifest, logFn);
|
|
24
|
+
constructor(manifest) {
|
|
25
|
+
super(_constants.DRIVER_TYPE, manifest);
|
|
29
26
|
this.knownAutomationNames = new Set();
|
|
30
|
-
|
|
31
|
-
if (extData) {
|
|
32
|
-
this.validate(extData);
|
|
33
|
-
}
|
|
34
27
|
}
|
|
35
28
|
|
|
36
|
-
static create(manifest
|
|
37
|
-
|
|
38
|
-
logFn
|
|
39
|
-
} = {}) {
|
|
40
|
-
const instance = new DriverConfig(manifest, {
|
|
41
|
-
logFn,
|
|
42
|
-
extData
|
|
43
|
-
});
|
|
29
|
+
static create(manifest) {
|
|
30
|
+
const instance = new DriverConfig(manifest);
|
|
44
31
|
|
|
45
32
|
if (DriverConfig.getInstance(manifest)) {
|
|
46
33
|
throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
|
|
@@ -55,9 +42,9 @@ class DriverConfig extends _extensionConfig.ExtensionConfig {
|
|
|
55
42
|
return DriverConfig._instances.get(manifest);
|
|
56
43
|
}
|
|
57
44
|
|
|
58
|
-
validate(
|
|
45
|
+
async validate() {
|
|
59
46
|
this.knownAutomationNames.clear();
|
|
60
|
-
return super.
|
|
47
|
+
return await super._validate(this.manifest.getExtensionData(_constants.DRIVER_TYPE));
|
|
61
48
|
}
|
|
62
49
|
|
|
63
50
|
getConfigProblems(extData) {
|
|
@@ -187,4 +174,4 @@ class DriverConfig extends _extensionConfig.ExtensionConfig {
|
|
|
187
174
|
}
|
|
188
175
|
|
|
189
176
|
exports.DriverConfig = DriverConfig;
|
|
190
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcml2ZXJDb25maWciLCJFeHRlbnNpb25Db25maWciLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIl9pbnN0YW5jZXMiLCJXZWFrTWFwIiwiY29uc3RydWN0b3IiLCJtYW5pZmVzdCIsImxvZ0ZuIiwiZXh0RGF0YSIsIkRSSVZFUl9UWVBFIiwiU2V0IiwidmFsaWRhdGUiLCJjcmVhdGUiLCJpbnN0YW5jZSIsImdldEluc3RhbmNlIiwiRXJyb3IiLCJhcHBpdW1Ib21lIiwic2V0IiwiZ2V0IiwiZXh0cyIsImNsZWFyIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJwcm9ibGVtcyIsInBsYXRmb3JtTmFtZXMiLCJhdXRvbWF0aW9uTmFtZSIsIl8iLCJpc0FycmF5IiwicHVzaCIsImVyciIsInZhbCIsImlzRW1wdHkiLCJwTmFtZSIsImlzU3RyaW5nIiwiaGFzIiwiYWRkIiwiZXh0ZW5zaW9uRGVzYyIsImRyaXZlck5hbWUiLCJ2ZXJzaW9uIiwiZmluZE1hdGNoaW5nRHJpdmVyIiwicGxhdGZvcm1OYW1lIiwibG9nIiwiaW5mbyIsIm1haW5DbGFzcyIsIl9nZXREcml2ZXJCeVN1cHBvcnQiLCJnZXRJbnN0YWxsUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJtc2ciLCJtZXNzYWdlIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVycyIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJkcml2ZXJEYXRhIiwidG9QYWlycyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vZHJpdmVyLWNvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBFeHRlbnNpb25Db25maWcgfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuXG4vKipcbiAqIEBleHRlbmRzIHtFeHRlbnNpb25Db25maWc8RHJpdmVyVHlwZT59XG4gKi9cbmV4cG9ydCBjbGFzcyBEcml2ZXJDb25maWcgZXh0ZW5kcyBFeHRlbnNpb25Db25maWcge1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiB1bmlxdWUgYXV0b21hdGlvbiBuYW1lcyB1c2VkIGJ5IGRyaXZlcnMuXG4gICAqIEB0eXBlIHtTZXQ8c3RyaW5nPn1cbiAgICovXG4gIGtub3duQXV0b21hdGlvbk5hbWVzO1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2Yge0BsaW5rIE1hbmlmZXN0fSBpbnN0YW5jZXMgdG8ge0BsaW5rIERyaXZlckNvbmZpZ30gaW5zdGFuY2VzLlxuICAgKlxuICAgKiBgTWFuaWZlc3RgIGFuZCBgRXh0ZW5zaW9uQ29uZmlnYCBoYXZlIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwOyBlYWNoIGBNYW5pZmVzdGAgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGBEcml2ZXJDb25maWdgIGFuZCBhIGBQbHVnaW5Db25maWdgOyBubyBtb3JlLCBubyBsZXNzLlxuICAgKlxuICAgKiBUaGlzIHZhcmlhYmxlIHRyYWNrcyB0aGUgYE1hbmlmZXN0YC10by1gRHJpdmVyQ29uZmlnYCBwb3J0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7V2Vha01hcDxNYW5pZmVzdCxEcml2ZXJDb25maWc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgIHN0YXRpYyBfaW5zdGFuY2VzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgLyoqXG4gICAqIENhbGwge0BsaW5rIERyaXZlckNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IG1hbmlmZXN0IC0gTWFuaWZlc3QgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtEcml2ZXJDb25maWdPcHRpb25zfSBbb3B0c11cbiAgICovXG4gICBjb25zdHJ1Y3RvciAobWFuaWZlc3QsIHtsb2dGbiwgZXh0RGF0YX0gPSB7fSkge1xuICAgICBzdXBlcihEUklWRVJfVFlQRSwgbWFuaWZlc3QsIGxvZ0ZuKTtcblxuICAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgIGlmIChleHREYXRhKSB7XG4gICAgICAgdGhpcy52YWxpZGF0ZShleHREYXRhKTtcbiAgICAgfVxuICAgfVxuXG4gICAvKipcbiAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIERyaXZlckNvbmZpZ30gaW5zdGFuY2UgZm9yIGEge0BsaW5rIE1hbmlmZXN0fSBpbnN0YW5jZS5cbiAgICAqXG4gICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgICogQHBhcmFtIHtEcml2ZXJDb25maWdPcHRpb25zfSBbb3B0c11cbiAgICAqIEB0aHJvd3MgSWYgYG1hbmlmZXN0YCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGBEcml2ZXJDb25maWdgXG4gICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgICovXG4gICBzdGF0aWMgY3JlYXRlIChtYW5pZmVzdCwge2V4dERhdGEsIGxvZ0ZufSA9IHt9KSB7XG4gICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyaXZlckNvbmZpZyhtYW5pZmVzdCwge2xvZ0ZuLCBleHREYXRhfSk7XG4gICAgIGlmIChEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpKSB7XG4gICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYW5pZmVzdCB3aXRoIEFQUElVTV9IT01FICR7bWFuaWZlc3QuYXBwaXVtSG9tZX0gYWxyZWFkeSBoYXMgYSBEcml2ZXJDb25maWc7IHVzZSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UoKSB0byByZXRyaWV2ZSBpdC5gKTtcbiAgICAgfVxuICAgICBEcml2ZXJDb25maWcuX2luc3RhbmNlcy5zZXQobWFuaWZlc3QsIGluc3RhbmNlKTtcbiAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgfVxuXG4gICAvKipcbiAgICAqIFJldHVybnMgYSBEcml2ZXJDb25maWcgYXNzb2NpYXRlZCB3aXRoIGEgTWFuaWZlc3RcbiAgICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfHVuZGVmaW5lZH1cbiAgICAqL1xuICAgc3RhdGljIGdldEluc3RhbmNlIChtYW5pZmVzdCkge1xuICAgICByZXR1cm4gRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXMuZ2V0KG1hbmlmZXN0KTtcbiAgIH1cblxuICAgLyoqXG4gICAqIENoZWNrcyBleHRlbnNpb25zIGZvciBwcm9ibGVtc1xuICAgKiBAcGFyYW0ge0V4dFJlY29yZDxEcml2ZXJUeXBlPn0gZXh0c1xuICAgKi9cbiAgIHZhbGlkYXRlIChleHRzKSB7XG4gICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMuY2xlYXIoKTtcbiAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGV4dHMpO1xuICAgfVxuXG4gICAvKipcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxEcml2ZXJUeXBlPn0gZXh0RGF0YVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuL2V4dGVuc2lvbi1jb25maWcnKS5Qcm9ibGVtW119XG4gICAqL1xuICAgZ2V0Q29uZmlnUHJvYmxlbXMgKGV4dERhdGEpIHtcbiAgICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICAgY29uc3Qge3BsYXRmb3JtTmFtZXMsIGF1dG9tYXRpb25OYW1lfSA9IGV4dERhdGE7XG5cbiAgICAgaWYgKCFfLmlzQXJyYXkocGxhdGZvcm1OYW1lcykpIHtcbiAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWVzIGxpc3QuJyxcbiAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgIH0pO1xuICAgICB9IGVsc2Uge1xuICAgICAgIGlmIChfLmlzRW1wdHkocGxhdGZvcm1OYW1lcykpIHtcbiAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICBlcnI6ICdFbXB0eSBwbGF0Zm9ybU5hbWVzIGxpc3QuJyxcbiAgICAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzXG4gICAgICAgICB9KTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgZm9yIChjb25zdCBwTmFtZSBvZiBwbGF0Zm9ybU5hbWVzKSB7XG4gICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdJbmNvcnJlY3RseSBmb3JtYXR0ZWQgcGxhdGZvcm1OYW1lLicsIHZhbDogcE5hbWV9KTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBhdXRvbWF0aW9uTmFtZScsIHZhbDogYXV0b21hdGlvbk5hbWV9KTtcbiAgICAgfVxuXG4gICAgIGlmICh0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmhhcyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgIGVycjogJ011bHRpcGxlIGRyaXZlcnMgY2xhaW0gc3VwcG9ydCBmb3IgdGhlIHNhbWUgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgIH0pO1xuICAgICB9XG5cbiAgICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMuYWRkKGF1dG9tYXRpb25OYW1lKTtcblxuICAgICByZXR1cm4gcHJvYmxlbXM7XG4gICB9XG5cbiAgIC8qKlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RHJpdmVyVHlwZT59IGRyaXZlck5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxEcml2ZXJUeXBlPn0gZXh0RGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgIGV4dGVuc2lvbkRlc2MgKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICAgcmV0dXJuIGAke2RyaXZlck5hbWV9QCR7dmVyc2lvbn0gKGF1dG9tYXRpb25OYW1lICcke2F1dG9tYXRpb25OYW1lfScpYDtcbiAgIH1cblxuICAgLyoqXG4gICAqIEdpdmVuIGNhcGFiaWxpdGllcywgZmluZCBhIG1hdGNoaW5nIGRyaXZlciB3aXRoaW4gdGhlIGNvbmZpZy4gTG9hZCBpdHMgY2xhc3MgYW5kIHJldHVybiBpdCBhbG9uZyB3aXRoIHZlcnNpb24gYW5kIGRyaXZlciBuYW1lLlxuICAgKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2Fwc1xuICAgKiBAcmV0dXJucyB7TWF0Y2hlZERyaXZlcn1cbiAgICovXG4gICBmaW5kTWF0Y2hpbmdEcml2ZXIgKHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lfSkge1xuICAgICBpZiAoIV8uaXNTdHJpbmcocGxhdGZvcm1OYW1lKSkge1xuICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhIHBsYXRmb3JtTmFtZSBjYXBhYmlsaXR5Jyk7XG4gICAgIH1cblxuICAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGFuIGF1dG9tYXRpb25OYW1lIGNhcGFiaWxpdHknKTtcbiAgICAgfVxuXG4gICAgIGxvZy5pbmZvKGBBdHRlbXB0aW5nIHRvIGZpbmQgbWF0Y2hpbmcgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICcke3BsYXRmb3JtTmFtZX0nYCk7XG5cbiAgICAgdHJ5IHtcbiAgICAgICBjb25zdCB7XG4gICAgICAgICBkcml2ZXJOYW1lLFxuICAgICAgICAgbWFpbkNsYXNzLFxuICAgICAgICAgdmVyc2lvbixcbiAgICAgICB9ID0gdGhpcy5fZ2V0RHJpdmVyQnlTdXBwb3J0KGF1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWUpO1xuICAgICAgIGxvZy5pbmZvKGBUaGUgJyR7ZHJpdmVyTmFtZX0nIGRyaXZlciB3YXMgaW5zdGFsbGVkIGFuZCBtYXRjaGVkIGNhcHMuYCk7XG4gICAgICAgbG9nLmluZm8oYFdpbGwgcmVxdWlyZSBpdCBhdCAke3RoaXMuZ2V0SW5zdGFsbFBhdGgoZHJpdmVyTmFtZSl9YCk7XG4gICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgIGlmICghZHJpdmVyKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaXZlciAnJHtkcml2ZXJOYW1lfScgZGlkIG5vdCBleHBvcnQgYSBjbGFzcyB3aXRoIG5hbWUgJyR7bWFpbkNsYXNzfScuIENvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGUgZHJpdmVyIWApO1xuICAgICAgIH1cbiAgICAgICByZXR1cm4ge2RyaXZlciwgdmVyc2lvbiwgZHJpdmVyTmFtZX07XG4gICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgIGNvbnN0IG1zZyA9IGBDb3VsZCBub3QgZmluZCBhIGRyaXZlciBmb3IgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICR7cGxhdGZvcm1OYW1lfScuIGAgK1xuICAgICAgICAgICAgICAgICAgYEhhdmUgeW91IGluc3RhbGxlZCBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRob3NlIGAgK1xuICAgICAgICAgICAgICAgICAgYGNhcGFiaWxpdGllcz8gUnVuICdhcHBpdW0gZHJpdmVyIGxpc3QgLS1pbnN0YWxsZWQnIHRvIHNlZS4gYCArXG4gICAgICAgICAgICAgICAgICBgKExvd2VyLWxldmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfSlgO1xuICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICB9XG4gICB9XG5cbiAgIC8qKlxuICAgKiBHaXZlbiBhbiBhdXRvbWF0aW9uIG5hbWUgYW5kIHBsYXRmb3JtIG5hbWUsIGZpbmQgYSBzdWl0YWJsZSBkcml2ZXIgYW5kIHJldHVybiBpdHMgZXh0ZW5zaW9uIGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaEF1dG9tYXRpb25OYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaFBsYXRmb3JtTmFtZVxuICAgKiBAcmV0dXJucyB7RXh0TWV0YWRhdGE8RHJpdmVyVHlwZT4gJiBpbXBvcnQoJy4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdCcpLkludGVybmFsTWV0YWRhdGEgJiBpbXBvcnQoJy4uLy4uL3R5cGVzL2V4dGVybmFsLW1hbmlmZXN0JykuQ29tbW9uTWV0YWRhdGF9XG4gICAqL1xuICAgX2dldERyaXZlckJ5U3VwcG9ydCAobWF0Y2hBdXRvbWF0aW9uTmFtZSwgbWF0Y2hQbGF0Zm9ybU5hbWUpIHtcbiAgICAgY29uc3QgZHJpdmVycyA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgICAgZm9yIChjb25zdCBbZHJpdmVyTmFtZSwgZHJpdmVyRGF0YV0gb2YgXy50b1BhaXJzKGRyaXZlcnMpKSB7XG4gICAgICAgY29uc3Qge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWVzfSA9IGRyaXZlckRhdGE7XG4gICAgICAgY29uc3QgYU5hbWVNYXRjaGVzID0gYXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hBdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgIGNvbnN0IHBOYW1lTWF0Y2hlcyA9IF8uaW5jbHVkZXMocGxhdGZvcm1OYW1lcy5tYXAoXy50b0xvd2VyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICBpZiAoYU5hbWVNYXRjaGVzICYmIHBOYW1lTWF0Y2hlcykge1xuICAgICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICAgICB9XG5cbiAgICAgICBpZiAoYU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JywgYnV0IEFwcGl1bSBjb3VsZCBub3QgZmluZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBzdXBwb3J0IGZvciBwbGF0Zm9ybU5hbWUgJyR7bWF0Y2hQbGF0Zm9ybU5hbWV9Jy4gU3VwcG9ydGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBsYXRmb3JtTmFtZXMpKTtcbiAgICAgICB9XG4gICAgIH1cblxuICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGluc3RhbGxlZCBkcml2ZXIgdG8gc3VwcG9ydCBnaXZlbiBjYXBzYCk7XG4gICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgRHJpdmVyQ29uZmlnT3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkxvZ0ZufSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICogQHByb3BlcnR5IHtNYW5pZmVzdERhdGFbJ2RyaXZlcnMnXX0gW2V4dERhdGFdIC0gRXh0ZW5zaW9uIGRhdGFcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkV4dE1ldGFkYXRhPFQ+fSBFeHRNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuRXh0TWFuaWZlc3Q8VD59IEV4dE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLk1hbmlmZXN0RGF0YX0gTWFuaWZlc3REYXRhXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbWFuaWZlc3QnKS5NYW5pZmVzdH0gTWFuaWZlc3RcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkV4dFJlY29yZDxUPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5FeHROYW1lPFQ+fSBFeHROYW1lXG4gKi9cblxuXG4vKipcbiAqIFJldHVybiB2YWx1ZSBvZiB7QGxpbmtjb2RlIERyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXJ9XG4gKiBAdHlwZWRlZiBNYXRjaGVkRHJpdmVyXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvZXh0ZW5zaW9uJykuRHJpdmVyQ2xhc3N9IGRyaXZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkcml2ZXJOYW1lXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2Fw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
|
|
177
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcml2ZXJDb25maWciLCJFeHRlbnNpb25Db25maWciLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIl9pbnN0YW5jZXMiLCJXZWFrTWFwIiwiY29uc3RydWN0b3IiLCJtYW5pZmVzdCIsIkRSSVZFUl9UWVBFIiwiU2V0IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIkVycm9yIiwiYXBwaXVtSG9tZSIsInNldCIsImdldCIsInZhbGlkYXRlIiwiY2xlYXIiLCJfdmFsaWRhdGUiLCJnZXRFeHRlbnNpb25EYXRhIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwicHJvYmxlbXMiLCJwbGF0Zm9ybU5hbWVzIiwiYXV0b21hdGlvbk5hbWUiLCJfIiwiaXNBcnJheSIsInB1c2giLCJlcnIiLCJ2YWwiLCJpc0VtcHR5IiwicE5hbWUiLCJpc1N0cmluZyIsImhhcyIsImFkZCIsImV4dGVuc2lvbkRlc2MiLCJkcml2ZXJOYW1lIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInBsYXRmb3JtTmFtZSIsImxvZyIsImluZm8iLCJtYWluQ2xhc3MiLCJfZ2V0RHJpdmVyQnlTdXBwb3J0IiwiZ2V0SW5zdGFsbFBhdGgiLCJkcml2ZXIiLCJyZXF1aXJlIiwibXNnIiwibWVzc2FnZSIsIm1hdGNoQXV0b21hdGlvbk5hbWUiLCJtYXRjaFBsYXRmb3JtTmFtZSIsImRyaXZlcnMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZHJpdmVyRGF0YSIsInRvUGFpcnMiLCJhTmFtZU1hdGNoZXMiLCJ0b0xvd2VyQ2FzZSIsInBOYW1lTWF0Y2hlcyIsImluY2x1ZGVzIiwibWFwIiwidG9Mb3dlciIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL2RyaXZlci1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RFJJVkVSX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge0V4dGVuc2lvbkNvbmZpZ30gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPERyaXZlclR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgc2V0IG9mIHVuaXF1ZSBhdXRvbWF0aW9uIG5hbWVzIHVzZWQgYnkgZHJpdmVycy5cbiAgICogQHR5cGUge1NldDxzdHJpbmc+fVxuICAgKi9cbiAga25vd25BdXRvbWF0aW9uTmFtZXM7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIGBFeHRlbnNpb25Db25maWdgIGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBEcml2ZXJDb25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LERyaXZlckNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIERyaXZlckNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IG1hbmlmZXN0IC0gTWFuaWZlc3QgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoRFJJVkVSX1RZUEUsIG1hbmlmZXN0KTtcblxuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgRHJpdmVyQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyaXZlckNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIERyaXZlckNvbmZpZzsgdXNlIERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgRHJpdmVyQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtEcml2ZXJDb25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zXG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl92YWxpZGF0ZSh0aGlzLm1hbmlmZXN0LmdldEV4dGVuc2lvbkRhdGEoRFJJVkVSX1RZUEUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dE1hbmlmZXN0UHJvYmxlbVtdfVxuICAgKi9cbiAgZ2V0Q29uZmlnUHJvYmxlbXMoZXh0RGF0YSkge1xuICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgY29uc3Qge3BsYXRmb3JtTmFtZXMsIGF1dG9tYXRpb25OYW1lfSA9IGV4dERhdGE7XG5cbiAgICBpZiAoIV8uaXNBcnJheShwbGF0Zm9ybU5hbWVzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWVzIGxpc3QuJyxcbiAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzRW1wdHkocGxhdGZvcm1OYW1lcykpIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnRW1wdHkgcGxhdGZvcm1OYW1lcyBsaXN0LicsXG4gICAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgICBlcnI6ICdJbmNvcnJlY3RseSBmb3JtYXR0ZWQgcGxhdGZvcm1OYW1lLicsXG4gICAgICAgICAgICAgIHZhbDogcE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMuaGFzKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ011bHRpcGxlIGRyaXZlcnMgY2xhaW0gc3VwcG9ydCBmb3IgdGhlIHNhbWUgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxEcml2ZXJUeXBlPn0gZHJpdmVyTmFtZVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICByZXR1cm4gYCR7ZHJpdmVyTmFtZX1AJHt2ZXJzaW9ufSAoYXV0b21hdGlvbk5hbWUgJyR7YXV0b21hdGlvbk5hbWV9JylgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGNhcGFiaWxpdGllcywgZmluZCBhIG1hdGNoaW5nIGRyaXZlciB3aXRoaW4gdGhlIGNvbmZpZy4gTG9hZCBpdHMgY2xhc3MgYW5kIHJldHVybiBpdCBhbG9uZyB3aXRoIHZlcnNpb24gYW5kIGRyaXZlciBuYW1lLlxuICAgKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2Fwc1xuICAgKiBAcmV0dXJucyB7TWF0Y2hlZERyaXZlcn1cbiAgICovXG4gIGZpbmRNYXRjaGluZ0RyaXZlcih7YXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZX0pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcocGxhdGZvcm1OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGEgcGxhdGZvcm1OYW1lIGNhcGFiaWxpdHknKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYW4gYXV0b21hdGlvbk5hbWUgY2FwYWJpbGl0eScpO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKFxuICAgICAgYEF0dGVtcHRpbmcgdG8gZmluZCBtYXRjaGluZyBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICcke3BsYXRmb3JtTmFtZX0nYFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2RyaXZlck5hbWUsIG1haW5DbGFzcywgdmVyc2lvbn0gPSB0aGlzLl9nZXREcml2ZXJCeVN1cHBvcnQoXG4gICAgICAgIGF1dG9tYXRpb25OYW1lLFxuICAgICAgICBwbGF0Zm9ybU5hbWVcbiAgICAgICk7XG4gICAgICBsb2cuaW5mbyhgVGhlICcke2RyaXZlck5hbWV9JyBkcml2ZXIgd2FzIGluc3RhbGxlZCBhbmQgbWF0Y2hlZCBjYXBzLmApO1xuICAgICAgbG9nLmluZm8oYFdpbGwgcmVxdWlyZSBpdCBhdCAke3RoaXMuZ2V0SW5zdGFsbFBhdGgoZHJpdmVyTmFtZSl9YCk7XG4gICAgICBjb25zdCBkcml2ZXIgPSB0aGlzLnJlcXVpcmUoZHJpdmVyTmFtZSk7XG4gICAgICBpZiAoIWRyaXZlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERyaXZlciAnJHtkcml2ZXJOYW1lfScgZGlkIG5vdCBleHBvcnQgYSBjbGFzcyB3aXRoIG5hbWUgJyR7bWFpbkNsYXNzfScuIENvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGUgZHJpdmVyIWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7ZHJpdmVyLCB2ZXJzaW9uLCBkcml2ZXJOYW1lfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBhIGRyaXZlciBmb3IgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nIGFuZCBwbGF0Zm9ybU5hbWUgJHtwbGF0Zm9ybU5hbWV9Jy4gYCArXG4gICAgICAgIGBIYXZlIHlvdSBpbnN0YWxsZWQgYSBkcml2ZXIgdGhhdCBzdXBwb3J0cyB0aG9zZSBgICtcbiAgICAgICAgYGNhcGFiaWxpdGllcz8gUnVuICdhcHBpdW0gZHJpdmVyIGxpc3QgLS1pbnN0YWxsZWQnIHRvIHNlZS4gYCArXG4gICAgICAgIGAoTG93ZXItbGV2ZWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9KWA7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gYXV0b21hdGlvbiBuYW1lIGFuZCBwbGF0Zm9ybSBuYW1lLCBmaW5kIGEgc3VpdGFibGUgZHJpdmVyIGFuZCByZXR1cm4gaXRzIGV4dGVuc2lvbiBkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hBdXRvbWF0aW9uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hQbGF0Zm9ybU5hbWVcbiAgICogQHJldHVybnMge0V4dE1ldGFkYXRhPERyaXZlclR5cGU+ICYgaW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5JbnRlcm5hbE1ldGFkYXRhICYgaW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5Db21tb25FeHRNZXRhZGF0YX1cbiAgICovXG4gIF9nZXREcml2ZXJCeVN1cHBvcnQobWF0Y2hBdXRvbWF0aW9uTmFtZSwgbWF0Y2hQbGF0Zm9ybU5hbWUpIHtcbiAgICBjb25zdCBkcml2ZXJzID0gdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zO1xuICAgIGZvciAoY29uc3QgW2RyaXZlck5hbWUsIGRyaXZlckRhdGFdIG9mIF8udG9QYWlycyhkcml2ZXJzKSkge1xuICAgICAgY29uc3Qge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWVzfSA9IGRyaXZlckRhdGE7XG4gICAgICBjb25zdCBhTmFtZU1hdGNoZXMgPSBhdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaEF1dG9tYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwTmFtZU1hdGNoZXMgPSBfLmluY2x1ZGVzKFxuICAgICAgICBwbGF0Zm9ybU5hbWVzLm1hcChfLnRvTG93ZXIpLFxuICAgICAgICBtYXRjaFBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoYU5hbWVNYXRjaGVzICYmIHBOYW1lTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4ge2RyaXZlck5hbWUsIC4uLmRyaXZlckRhdGF9O1xuICAgICAgfVxuXG4gICAgICBpZiAoYU5hbWVNYXRjaGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRHJpdmVyICcke2RyaXZlck5hbWV9JyBzdXBwb3J0cyBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nLCBidXQgQXBwaXVtIGNvdWxkIG5vdCBmaW5kIGAgK1xuICAgICAgICAgICAgYHN1cHBvcnQgZm9yIHBsYXRmb3JtTmFtZSAnJHttYXRjaFBsYXRmb3JtTmFtZX0nLiBTdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICBgcGxhdGZvcm1OYW1lcyBhcmU6IGAgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGxhdGZvcm1OYW1lcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGluc3RhbGxlZCBkcml2ZXIgdG8gc3VwcG9ydCBnaXZlbiBjYXBzYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWV0YWRhdGE8VD59IEV4dE1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWFuaWZlc3Q8VD59IEV4dE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbWFuaWZlc3QnKS5NYW5pZmVzdH0gTWFuaWZlc3RcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRSZWNvcmQ8VD59IEV4dFJlY29yZFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE5hbWU8VD59IEV4dE5hbWVcbiAqL1xuXG4vKipcbiAqIFJldHVybiB2YWx1ZSBvZiB7QGxpbmtjb2RlIERyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXJ9XG4gKiBAdHlwZWRlZiBNYXRjaGVkRHJpdmVyXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBkcml2ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZHJpdmVyTmFtZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLTyxNQUFNQSxZQUFOLFNBQTJCQyxnQ0FBM0IsQ0FBMkM7RUFLaERDLG9CQUFvQjtFQVlILE9BQVZDLFVBQVUsR0FBRyxJQUFJQyxPQUFKLEVBQUg7O0VBT2pCQyxXQUFXLENBQUNDLFFBQUQsRUFBVztJQUNwQixNQUFNQyxzQkFBTixFQUFtQkQsUUFBbkI7SUFFQSxLQUFLSixvQkFBTCxHQUE0QixJQUFJTSxHQUFKLEVBQTVCO0VBQ0Q7O0VBU1ksT0FBTkMsTUFBTSxDQUFDSCxRQUFELEVBQVc7SUFDdEIsTUFBTUksUUFBUSxHQUFHLElBQUlWLFlBQUosQ0FBaUJNLFFBQWpCLENBQWpCOztJQUNBLElBQUlOLFlBQVksQ0FBQ1csV0FBYixDQUF5QkwsUUFBekIsQ0FBSixFQUF3QztNQUN0QyxNQUFNLElBQUlNLEtBQUosQ0FDSCw2QkFBNEJOLFFBQVEsQ0FBQ08sVUFBVyw2RUFEN0MsQ0FBTjtJQUdEOztJQUNEYixZQUFZLENBQUNHLFVBQWIsQ0FBd0JXLEdBQXhCLENBQTRCUixRQUE1QixFQUFzQ0ksUUFBdEM7O0lBQ0EsT0FBT0EsUUFBUDtFQUNEOztFQU9pQixPQUFYQyxXQUFXLENBQUNMLFFBQUQsRUFBVztJQUMzQixPQUFPTixZQUFZLENBQUNHLFVBQWIsQ0FBd0JZLEdBQXhCLENBQTRCVCxRQUE1QixDQUFQO0VBQ0Q7O0VBS2EsTUFBUlUsUUFBUSxHQUFHO0lBQ2YsS0FBS2Qsb0JBQUwsQ0FBMEJlLEtBQTFCO0lBQ0EsT0FBTyxNQUFNLE1BQU1DLFNBQU4sQ0FBZ0IsS0FBS1osUUFBTCxDQUFjYSxnQkFBZCxDQUErQlosc0JBQS9CLENBQWhCLENBQWI7RUFDRDs7RUFNRGEsaUJBQWlCLENBQUNDLE9BQUQsRUFBVTtJQUN6QixNQUFNQyxRQUFRLEdBQUcsRUFBakI7SUFDQSxNQUFNO01BQUNDLGFBQUQ7TUFBZ0JDO0lBQWhCLElBQWtDSCxPQUF4Qzs7SUFFQSxJQUFJLENBQUNJLGVBQUEsQ0FBRUMsT0FBRixDQUFVSCxhQUFWLENBQUwsRUFBK0I7TUFDN0JELFFBQVEsQ0FBQ0ssSUFBVCxDQUFjO1FBQ1pDLEdBQUcsRUFBRSxvREFETztRQUVaQyxHQUFHLEVBQUVOO01BRk8sQ0FBZDtJQUlELENBTEQsTUFLTztNQUNMLElBQUlFLGVBQUEsQ0FBRUssT0FBRixDQUFVUCxhQUFWLENBQUosRUFBOEI7UUFDNUJELFFBQVEsQ0FBQ0ssSUFBVCxDQUFjO1VBQ1pDLEdBQUcsRUFBRSwyQkFETztVQUVaQyxHQUFHLEVBQUVOO1FBRk8sQ0FBZDtNQUlELENBTEQsTUFLTztRQUNMLEtBQUssTUFBTVEsS0FBWCxJQUFvQlIsYUFBcEIsRUFBbUM7VUFDakMsSUFBSSxDQUFDRSxlQUFBLENBQUVPLFFBQUYsQ0FBV0QsS0FBWCxDQUFMLEVBQXdCO1lBQ3RCVCxRQUFRLENBQUNLLElBQVQsQ0FBYztjQUNaQyxHQUFHLEVBQUUscUNBRE87Y0FFWkMsR0FBRyxFQUFFRTtZQUZPLENBQWQ7VUFJRDtRQUNGO01BQ0Y7SUFDRjs7SUFFRCxJQUFJLENBQUNOLGVBQUEsQ0FBRU8sUUFBRixDQUFXUixjQUFYLENBQUwsRUFBaUM7TUFDL0JGLFFBQVEsQ0FBQ0ssSUFBVCxDQUFjO1FBQ1pDLEdBQUcsRUFBRSxxQ0FETztRQUVaQyxHQUFHLEVBQUVMO01BRk8sQ0FBZDtJQUlEOztJQUVELElBQUksS0FBS3RCLG9CQUFMLENBQTBCK0IsR0FBMUIsQ0FBOEJULGNBQTlCLENBQUosRUFBbUQ7TUFDakRGLFFBQVEsQ0FBQ0ssSUFBVCxDQUFjO1FBQ1pDLEdBQUcsRUFBRSw0REFETztRQUVaQyxHQUFHLEVBQUVMO01BRk8sQ0FBZDtJQUlEOztJQUdELEtBQUt0QixvQkFBTCxDQUEwQmdDLEdBQTFCLENBQThCVixjQUE5QjtJQUVBLE9BQU9GLFFBQVA7RUFDRDs7RUFPRGEsYUFBYSxDQUFDQyxVQUFELEVBQWE7SUFBQ0MsT0FBRDtJQUFVYjtFQUFWLENBQWIsRUFBd0M7SUFDbkQsT0FBUSxHQUFFWSxVQUFXLElBQUdDLE9BQVEscUJBQW9CYixjQUFlLElBQW5FO0VBQ0Q7O0VBT0RjLGtCQUFrQixDQUFDO0lBQUNkLGNBQUQ7SUFBaUJlO0VBQWpCLENBQUQsRUFBaUM7SUFDakQsSUFBSSxDQUFDZCxlQUFBLENBQUVPLFFBQUYsQ0FBV08sWUFBWCxDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSTNCLEtBQUosQ0FBVSw0Q0FBVixDQUFOO0lBQ0Q7O0lBRUQsSUFBSSxDQUFDYSxlQUFBLENBQUVPLFFBQUYsQ0FBV1IsY0FBWCxDQUFMLEVBQWlDO01BQy9CLE1BQU0sSUFBSVosS0FBSixDQUFVLCtDQUFWLENBQU47SUFDRDs7SUFFRDRCLGVBQUEsQ0FBSUMsSUFBSixDQUNHLHdEQUFELEdBQ0csSUFBR2pCLGNBQWUsdUJBQXNCZSxZQUFhLEdBRjFEOztJQUtBLElBQUk7TUFDRixNQUFNO1FBQUNILFVBQUQ7UUFBYU0sU0FBYjtRQUF3Qkw7TUFBeEIsSUFBbUMsS0FBS00sbUJBQUwsQ0FDdkNuQixjQUR1QyxFQUV2Q2UsWUFGdUMsQ0FBekM7O01BSUFDLGVBQUEsQ0FBSUMsSUFBSixDQUFVLFFBQU9MLFVBQVcsMENBQTVCOztNQUNBSSxlQUFBLENBQUlDLElBQUosQ0FBVSxzQkFBcUIsS0FBS0csY0FBTCxDQUFvQlIsVUFBcEIsQ0FBZ0MsRUFBL0Q7O01BQ0EsTUFBTVMsTUFBTSxHQUFHLEtBQUtDLE9BQUwsQ0FBYVYsVUFBYixDQUFmOztNQUNBLElBQUksQ0FBQ1MsTUFBTCxFQUFhO1FBQ1gsTUFBTSxJQUFJakMsS0FBSixDQUNILFdBQVV3QixVQUFXLHVDQUFzQ00sU0FBVSxzQ0FEbEUsQ0FBTjtNQUdEOztNQUNELE9BQU87UUFBQ0csTUFBRDtRQUFTUixPQUFUO1FBQWtCRDtNQUFsQixDQUFQO0lBQ0QsQ0FkRCxDQWNFLE9BQU9SLEdBQVAsRUFBWTtNQUNaLE1BQU1tQixHQUFHLEdBQ04sNkNBQUQsR0FDQyxJQUFHdkIsY0FBZSxzQkFBcUJlLFlBQWEsS0FEckQsR0FFQyxrREFGRCxHQUdDLDZEQUhELEdBSUMsdUJBQXNCWCxHQUFHLENBQUNvQixPQUFRLEdBTHJDO01BTUEsTUFBTSxJQUFJcEMsS0FBSixDQUFVbUMsR0FBVixDQUFOO0lBQ0Q7RUFDRjs7RUFRREosbUJBQW1CLENBQUNNLG1CQUFELEVBQXNCQyxpQkFBdEIsRUFBeUM7SUFDMUQsTUFBTUMsT0FBTyxHQUFHLEtBQUtDLG1CQUFyQjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ2hCLFVBQUQsRUFBYWlCLFVBQWIsQ0FBWCxJQUF1QzVCLGVBQUEsQ0FBRTZCLE9BQUYsQ0FBVUgsT0FBVixDQUF2QyxFQUEyRDtNQUN6RCxNQUFNO1FBQUMzQixjQUFEO1FBQWlCRDtNQUFqQixJQUFrQzhCLFVBQXhDO01BQ0EsTUFBTUUsWUFBWSxHQUFHL0IsY0FBYyxDQUFDZ0MsV0FBZixPQUFpQ1AsbUJBQW1CLENBQUNPLFdBQXBCLEVBQXREOztNQUNBLE1BQU1DLFlBQVksR0FBR2hDLGVBQUEsQ0FBRWlDLFFBQUYsQ0FDbkJuQyxhQUFhLENBQUNvQyxHQUFkLENBQWtCbEMsZUFBQSxDQUFFbUMsT0FBcEIsQ0FEbUIsRUFFbkJWLGlCQUFpQixDQUFDTSxXQUFsQixFQUZtQixDQUFyQjs7TUFLQSxJQUFJRCxZQUFZLElBQUlFLFlBQXBCLEVBQWtDO1FBQ2hDLE9BQU87VUFBQ3JCLFVBQUQ7VUFBYSxHQUFHaUI7UUFBaEIsQ0FBUDtNQUNEOztNQUVELElBQUlFLFlBQUosRUFBa0I7UUFDaEIsTUFBTSxJQUFJM0MsS0FBSixDQUNILFdBQVV3QixVQUFXLDRCQUF0QixHQUNHLElBQUdaLGNBQWUsK0JBRHJCLEdBRUcsNkJBQTRCMEIsaUJBQWtCLGVBRmpELEdBR0cscUJBSEgsR0FJRVcsSUFBSSxDQUFDQyxTQUFMLENBQWV2QyxhQUFmLENBTEUsQ0FBTjtNQU9EO0lBQ0Y7O0lBRUQsTUFBTSxJQUFJWCxLQUFKLENBQVcsdURBQVgsQ0FBTjtFQUNEOztBQXpNK0MifQ==
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Subclasses should provide the generic parameter to implement.
|
|
5
5
|
* @template {ExtensionType} ExtType
|
|
6
6
|
*/
|
|
7
|
-
export class ExtensionConfig<ExtType extends import("
|
|
7
|
+
export class ExtensionConfig<ExtType extends import("@appium/types").ExtensionType> {
|
|
8
8
|
/**
|
|
9
9
|
* Intended to be called by corresponding instance methods of subclass.
|
|
10
10
|
* @private
|
|
@@ -12,7 +12,7 @@ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType
|
|
|
12
12
|
* @param {string} appiumHome
|
|
13
13
|
* @param {ExtType} extType
|
|
14
14
|
* @param {ExtName<ExtType>} extName - Extension name (unique to its type)
|
|
15
|
-
* @param {ExtManifestWithSchema<ExtType>}
|
|
15
|
+
* @param {ExtManifestWithSchema<ExtType>} extManifest - Extension config
|
|
16
16
|
* @returns {import('ajv').SchemaObject|undefined}
|
|
17
17
|
*/
|
|
18
18
|
private static _readExtensionSchema;
|
|
@@ -20,15 +20,14 @@ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType
|
|
|
20
20
|
* Returns `true` if a specific {@link ExtManifest} object has a `schema` prop.
|
|
21
21
|
* The {@link ExtManifest} object becomes a {@link ExtManifestWithSchema} object.
|
|
22
22
|
* @template {ExtensionType} ExtType
|
|
23
|
-
* @param {ExtManifest<ExtType>}
|
|
24
|
-
* @returns {
|
|
23
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
24
|
+
* @returns {extManifest is ExtManifestWithSchema<ExtType>}
|
|
25
25
|
*/
|
|
26
|
-
static extDataHasSchema<ExtType_1 extends import("
|
|
26
|
+
static extDataHasSchema<ExtType_1 extends import("@appium/types").ExtensionType>(extManifest: ExtManifest<ExtType_1>): extManifest is ExtManifestWithSchema<ExtType_1>;
|
|
27
27
|
/**
|
|
28
28
|
* @protected
|
|
29
29
|
* @param {ExtType} extensionType - Type of extension
|
|
30
30
|
* @param {Manifest} manifest - `Manifest` instance
|
|
31
|
-
* @param {ExtensionLogFn} [logFn]
|
|
32
31
|
*/
|
|
33
32
|
protected constructor();
|
|
34
33
|
/** @type {ExtType} */
|
|
@@ -37,50 +36,118 @@ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType
|
|
|
37
36
|
configKey: `${ExtType}s`;
|
|
38
37
|
/** @type {ExtRecord<ExtType>} */
|
|
39
38
|
installedExtensions: ExtRecord<ExtType>;
|
|
40
|
-
/** @type {
|
|
41
|
-
log:
|
|
39
|
+
/** @type {import('@appium/types').AppiumLogger} */
|
|
40
|
+
log: import('@appium/types').AppiumLogger;
|
|
42
41
|
/** @type {Manifest} */
|
|
43
42
|
manifest: Manifest;
|
|
43
|
+
/**
|
|
44
|
+
* @type {ExtensionListData}
|
|
45
|
+
*/
|
|
46
|
+
_listDataCache: ExtensionListData;
|
|
44
47
|
get manifestPath(): string;
|
|
45
48
|
get appiumHome(): string;
|
|
46
49
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
50
|
+
* Returns a list of errors for a given extension.
|
|
51
|
+
*
|
|
52
|
+
* @param {ExtName<ExtType>} extName
|
|
53
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
54
|
+
* @returns {ExtManifestProblem[]}
|
|
49
55
|
*/
|
|
50
|
-
|
|
56
|
+
getProblems(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType>): ExtManifestProblem[];
|
|
51
57
|
/**
|
|
52
|
-
*
|
|
58
|
+
* Returns a list of warnings for a given extension.
|
|
59
|
+
*
|
|
53
60
|
* @param {ExtName<ExtType>} extName
|
|
54
|
-
* @
|
|
61
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
62
|
+
* @returns {Promise<string[]>}
|
|
55
63
|
*/
|
|
56
|
-
|
|
64
|
+
getWarnings(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType>): Promise<string[]>;
|
|
57
65
|
/**
|
|
58
|
-
*
|
|
66
|
+
* Returns a list of extension-type-specific issues. To be implemented by subclasses.
|
|
67
|
+
* @abstract
|
|
68
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
59
69
|
* @param {ExtName<ExtType>} extName
|
|
60
|
-
* @returns {
|
|
70
|
+
* @returns {Promise<string[]>}
|
|
71
|
+
*/
|
|
72
|
+
getConfigWarnings(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): Promise<string[]>;
|
|
73
|
+
/**
|
|
74
|
+
*
|
|
75
|
+
* @param {Map<ExtName<ExtType>,ExtManifestProblem[]>} [errorMap]
|
|
76
|
+
* @param {Map<ExtName<ExtType>,string[]>} [warningMap]
|
|
61
77
|
*/
|
|
62
|
-
|
|
78
|
+
getValidationResultSummaries(errorMap?: Map<string, ExtManifestProblem[]> | undefined, warningMap?: Map<string, string[]> | undefined): {
|
|
79
|
+
errorSummaries: string[];
|
|
80
|
+
warningSummaries: string[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Checks extensions for problems. To be called by subclasses' `validate` method.
|
|
84
|
+
*
|
|
85
|
+
* Errors and warnings will be displayed to the user.
|
|
86
|
+
*
|
|
87
|
+
* This method mutates `exts`.
|
|
88
|
+
*
|
|
89
|
+
* @protected
|
|
90
|
+
* @param {ExtRecord<ExtType>} exts - Lookup of extension names to {@linkcode ExtManifest} objects
|
|
91
|
+
* @returns {Promise<ExtRecord<ExtType>>} The same lookup, but picking only error-free extensions
|
|
92
|
+
*/
|
|
93
|
+
protected _validate(exts: ExtRecord<ExtType>): Promise<ExtRecord<ExtType>>;
|
|
94
|
+
/**
|
|
95
|
+
* Retrieves listing data for extensions via command class.
|
|
96
|
+
* Caches the result in {@linkcode ExtensionConfig._listDataCache}
|
|
97
|
+
* @protected
|
|
98
|
+
* @returns {Promise<ExtensionListData>}
|
|
99
|
+
*/
|
|
100
|
+
protected getListData(): Promise<ExtensionListData>;
|
|
101
|
+
/**
|
|
102
|
+
* Returns a list of warnings for a particular extension.
|
|
103
|
+
*
|
|
104
|
+
* By definition, a non-empty list of warnings does _not_ imply the extension cannot be loaded,
|
|
105
|
+
* but it may not work as expected or otherwise throw an exception at runtime.
|
|
106
|
+
*
|
|
107
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
108
|
+
* @param {ExtName<ExtType>} extName
|
|
109
|
+
* @returns {Promise<string[]>}
|
|
110
|
+
*/
|
|
111
|
+
getGenericConfigWarnings(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): Promise<string[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Returns list of unrecoverable errors (if any) for the given extension _if_ it has a `schema` property.
|
|
114
|
+
*
|
|
115
|
+
* @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)
|
|
116
|
+
* @param {ExtName<ExtType>} extName - Extension name (from manifest)
|
|
117
|
+
* @returns {ExtManifestProblem[]}
|
|
118
|
+
*/
|
|
119
|
+
getSchemaProblems(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): ExtManifestProblem[];
|
|
120
|
+
/**
|
|
121
|
+
* Return a list of generic unrecoverable errors for the given extension
|
|
122
|
+
* @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)
|
|
123
|
+
* @param {ExtName<ExtType>} extName - Extension name (from manifest)
|
|
124
|
+
* @returns {ExtManifestProblem[]}
|
|
125
|
+
*/
|
|
126
|
+
getGenericConfigProblems(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): ExtManifestProblem[];
|
|
63
127
|
/**
|
|
64
128
|
* @abstract
|
|
65
|
-
* @param {ExtManifest<ExtType>}
|
|
66
|
-
* @
|
|
129
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
130
|
+
* @param {ExtName<ExtType>} extName
|
|
131
|
+
* @returns {ExtManifestProblem[]}
|
|
67
132
|
*/
|
|
68
|
-
getConfigProblems(
|
|
133
|
+
getConfigProblems(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): ExtManifestProblem[];
|
|
69
134
|
/**
|
|
70
135
|
* @param {string} extName
|
|
71
|
-
* @param {ExtManifest<ExtType>}
|
|
136
|
+
* @param {ExtManifest<ExtType>} extManifest
|
|
72
137
|
* @param {ExtensionConfigMutationOpts} [opts]
|
|
73
138
|
* @returns {Promise<void>}
|
|
74
139
|
*/
|
|
75
|
-
addExtension(extName: string,
|
|
140
|
+
addExtension(extName: string, extManifest: ExtManifest<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
|
|
76
141
|
/**
|
|
77
142
|
* @param {ExtName<ExtType>} extName
|
|
78
|
-
* @param {ExtManifest<ExtType>|import('../cli/extension-command').ExtensionFields<ExtType>}
|
|
143
|
+
* @param {ExtManifest<ExtType>|import('../cli/extension-command').ExtensionFields<ExtType>} extManifest
|
|
79
144
|
* @param {ExtensionConfigMutationOpts} [opts]
|
|
80
145
|
* @returns {Promise<void>}
|
|
81
146
|
*/
|
|
82
|
-
updateExtension(extName: ExtName<ExtType>,
|
|
147
|
+
updateExtension(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType> | import('../cli/extension-command').ExtensionFields<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
|
|
83
148
|
/**
|
|
149
|
+
* Remove an extension from the list of installed extensions, and optionally avoid a write to the manifest file.
|
|
150
|
+
*
|
|
84
151
|
* @param {ExtName<ExtType>} extName
|
|
85
152
|
* @param {ExtensionConfigMutationOpts} [opts]
|
|
86
153
|
* @returns {Promise<void>}
|
|
@@ -94,11 +161,11 @@ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType
|
|
|
94
161
|
/**
|
|
95
162
|
* Returns a string describing the extension. Subclasses must implement.
|
|
96
163
|
* @param {ExtName<ExtType>} extName - Extension name
|
|
97
|
-
* @param {ExtManifest<ExtType>}
|
|
164
|
+
* @param {ExtManifest<ExtType>} extManifest - Extension data
|
|
98
165
|
* @returns {string}
|
|
99
166
|
* @abstract
|
|
100
167
|
*/
|
|
101
|
-
extensionDesc(extName: ExtName<ExtType>,
|
|
168
|
+
extensionDesc(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType>): string;
|
|
102
169
|
/**
|
|
103
170
|
* @param {string} extName
|
|
104
171
|
* @returns {string}
|
|
@@ -119,15 +186,17 @@ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType
|
|
|
119
186
|
* If an extension provides a schema, this will load the schema and attempt to
|
|
120
187
|
* register it with the schema registrar.
|
|
121
188
|
* @param {ExtName<ExtType>} extName - Name of extension
|
|
122
|
-
* @param {ExtManifestWithSchema<ExtType>}
|
|
189
|
+
* @param {ExtManifestWithSchema<ExtType>} extManifest - Extension data
|
|
123
190
|
* @returns {import('ajv').SchemaObject|undefined}
|
|
124
191
|
*/
|
|
125
|
-
readExtensionSchema(extName: ExtName<ExtType>,
|
|
192
|
+
readExtensionSchema(extName: ExtName<ExtType>, extManifest: ExtManifestWithSchema<ExtType>): import('ajv').SchemaObject | undefined;
|
|
126
193
|
}
|
|
127
194
|
/**
|
|
128
|
-
*
|
|
195
|
+
* An issue with the {@linkcode ExtManifest } for a particular extension.
|
|
196
|
+
*
|
|
197
|
+
* The existance of such an object implies that the extension cannot be loaded.
|
|
129
198
|
*/
|
|
130
|
-
export type
|
|
199
|
+
export type ExtManifestProblem = {
|
|
131
200
|
/**
|
|
132
201
|
* - Error message
|
|
133
202
|
*/
|
|
@@ -141,13 +210,14 @@ export type Problem = {
|
|
|
141
210
|
* An optional logging function provided to an {@link ExtensionConfig } subclass.
|
|
142
211
|
*/
|
|
143
212
|
export type ExtensionLogFn = (...args: any[]) => void;
|
|
144
|
-
export type ExtensionType = import('
|
|
213
|
+
export type ExtensionType = import('@appium/types').ExtensionType;
|
|
145
214
|
export type Manifest = import('./manifest').Manifest;
|
|
146
|
-
export type ExtManifest<T> = import('
|
|
147
|
-
export type ExtManifestWithSchema<T> = import('
|
|
148
|
-
export type ExtName<T> = import('
|
|
149
|
-
export type ExtClass<T> = import('
|
|
150
|
-
export type ExtRecord<T> = import('
|
|
215
|
+
export type ExtManifest<T> = import('appium/types').ExtManifest<T>;
|
|
216
|
+
export type ExtManifestWithSchema<T> = import('appium/types').ExtManifestWithSchema<T>;
|
|
217
|
+
export type ExtName<T> = import('appium/types').ExtName<T>;
|
|
218
|
+
export type ExtClass<T> = import('appium/types').ExtClass<T>;
|
|
219
|
+
export type ExtRecord<T> = import('appium/types').ExtRecord<T>;
|
|
220
|
+
export type ExtCommand<T> = import('../cli/extension').ExtCommand<T>;
|
|
151
221
|
/**
|
|
152
222
|
* Options for various methods in {@link ExtensionConfig }
|
|
153
223
|
*/
|
|
@@ -161,6 +231,8 @@ export type ExtensionConfigMutationOpts = {
|
|
|
161
231
|
* A valid install type
|
|
162
232
|
*/
|
|
163
233
|
export type InstallType = typeof INSTALL_TYPE_NPM | typeof INSTALL_TYPE_GIT | typeof INSTALL_TYPE_LOCAL | typeof INSTALL_TYPE_GITHUB;
|
|
234
|
+
export type ExtensionListData = import('../cli/extension-command').ExtensionListData;
|
|
235
|
+
export type InstalledExtensionListData = import('../cli/extension-command').InstalledExtensionListData;
|
|
164
236
|
export const INSTALL_TYPE_NPM: "npm";
|
|
165
237
|
export const INSTALL_TYPE_GIT: "git";
|
|
166
238
|
export const INSTALL_TYPE_LOCAL: "local";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"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"}
|