appium 2.0.0-beta.35 → 2.0.0-beta.37

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.
Files changed (122) hide show
  1. package/build/lib/appium.d.ts +41 -52
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +32 -15
  4. package/build/lib/cli/args.d.ts +1 -1
  5. package/build/lib/cli/args.d.ts.map +1 -1
  6. package/build/lib/cli/args.js +1 -1
  7. package/build/lib/cli/driver-command.d.ts +3 -3
  8. package/build/lib/cli/driver-command.d.ts.map +1 -1
  9. package/build/lib/cli/driver-command.js +1 -1
  10. package/build/lib/cli/extension-command.d.ts +60 -38
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +115 -59
  13. package/build/lib/cli/extension.d.ts +9 -5
  14. package/build/lib/cli/extension.d.ts.map +1 -1
  15. package/build/lib/cli/extension.js +5 -7
  16. package/build/lib/cli/parser.d.ts +3 -3
  17. package/build/lib/cli/parser.d.ts.map +1 -1
  18. package/build/lib/cli/parser.js +1 -1
  19. package/build/lib/cli/plugin-command.d.ts +1 -1
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -1
  21. package/build/lib/cli/plugin-command.js +1 -1
  22. package/build/lib/cli/utils.js +1 -1
  23. package/build/lib/config-file.d.ts.map +1 -1
  24. package/build/lib/config-file.js +1 -1
  25. package/build/lib/config.d.ts +4 -4
  26. package/build/lib/config.d.ts.map +1 -1
  27. package/build/lib/config.js +1 -1
  28. package/build/lib/constants.d.ts.map +1 -1
  29. package/build/lib/constants.js +1 -1
  30. package/build/lib/extension/driver-config.d.ts +29 -32
  31. package/build/lib/extension/driver-config.d.ts.map +1 -1
  32. package/build/lib/extension/driver-config.js +7 -20
  33. package/build/lib/extension/extension-config.d.ts +108 -36
  34. package/build/lib/extension/extension-config.d.ts.map +1 -1
  35. package/build/lib/extension/extension-config.js +199 -60
  36. package/build/lib/extension/index.d.ts +16 -7
  37. package/build/lib/extension/index.d.ts.map +1 -1
  38. package/build/lib/extension/index.js +15 -18
  39. package/build/lib/extension/manifest.d.ts +12 -12
  40. package/build/lib/extension/manifest.d.ts.map +1 -1
  41. package/build/lib/extension/manifest.js +13 -3
  42. package/build/lib/extension/package-changed.d.ts.map +1 -1
  43. package/build/lib/extension/package-changed.js +1 -1
  44. package/build/lib/extension/plugin-config.d.ts +19 -24
  45. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  46. package/build/lib/extension/plugin-config.js +9 -18
  47. package/build/lib/grid-register.d.ts.map +1 -1
  48. package/build/lib/grid-register.js +1 -1
  49. package/build/lib/logger.d.ts +1 -1
  50. package/build/lib/logger.d.ts.map +1 -1
  51. package/build/lib/logger.js +1 -1
  52. package/build/lib/logsink.d.ts.map +1 -1
  53. package/build/lib/logsink.js +3 -2
  54. package/build/lib/main.d.ts +13 -12
  55. package/build/lib/main.d.ts.map +1 -1
  56. package/build/lib/main.js +4 -4
  57. package/build/lib/schema/arg-spec.d.ts +4 -4
  58. package/build/lib/schema/arg-spec.d.ts.map +1 -1
  59. package/build/lib/schema/arg-spec.js +1 -1
  60. package/build/lib/schema/cli-args.d.ts.map +1 -1
  61. package/build/lib/schema/cli-args.js +1 -1
  62. package/build/lib/schema/cli-transformers.d.ts.map +1 -1
  63. package/build/lib/schema/cli-transformers.js +1 -1
  64. package/build/lib/schema/keywords.d.ts.map +1 -1
  65. package/build/lib/schema/keywords.js +1 -1
  66. package/build/lib/schema/schema.d.ts +2 -2
  67. package/build/lib/schema/schema.d.ts.map +1 -1
  68. package/build/lib/schema/schema.js +1 -1
  69. package/build/lib/utils.d.ts.map +1 -1
  70. package/build/lib/utils.js +1 -1
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/build/types/appium-manifest.d.ts +23 -4
  73. package/build/types/appium-manifest.d.ts.map +1 -1
  74. package/build/types/cli.d.ts.map +1 -1
  75. package/build/types/{external-manifest.d.ts → extension-manifest.d.ts} +15 -7
  76. package/build/types/extension-manifest.d.ts.map +1 -0
  77. package/build/types/index.d.ts +6 -5
  78. package/build/types/index.d.ts.map +1 -1
  79. package/driver.d.ts +1 -0
  80. package/driver.js +14 -0
  81. package/lib/appium.js +208 -124
  82. package/lib/cli/args.js +143 -93
  83. package/lib/cli/driver-command.js +10 -15
  84. package/lib/cli/extension-command.js +226 -175
  85. package/lib/cli/extension.js +15 -19
  86. package/lib/cli/parser.js +19 -31
  87. package/lib/cli/plugin-command.js +8 -8
  88. package/lib/cli/utils.js +8 -14
  89. package/lib/config-file.js +21 -25
  90. package/lib/config.js +82 -64
  91. package/lib/constants.js +4 -13
  92. package/lib/extension/driver-config.js +171 -171
  93. package/lib/extension/extension-config.js +347 -126
  94. package/lib/extension/index.js +72 -58
  95. package/lib/extension/manifest.js +48 -57
  96. package/lib/extension/package-changed.js +9 -8
  97. package/lib/extension/plugin-config.js +62 -62
  98. package/lib/grid-register.js +29 -18
  99. package/lib/logger.js +1 -2
  100. package/lib/logsink.js +29 -31
  101. package/lib/main.js +111 -73
  102. package/lib/schema/arg-spec.js +10 -13
  103. package/lib/schema/cli-args.js +14 -37
  104. package/lib/schema/cli-transformers.js +7 -14
  105. package/lib/schema/keywords.js +15 -13
  106. package/lib/schema/schema.js +58 -75
  107. package/lib/utils.js +50 -25
  108. package/package.json +25 -18
  109. package/plugin.d.ts +1 -0
  110. package/plugin.js +13 -0
  111. package/scripts/autoinstall-extensions.js +177 -0
  112. package/support.d.ts +1 -0
  113. package/support.js +13 -0
  114. package/types/appium-manifest.ts +27 -15
  115. package/types/cli.ts +2 -9
  116. package/types/{external-manifest.ts → extension-manifest.ts} +21 -15
  117. package/types/index.ts +12 -5
  118. package/build/types/extension.d.ts +0 -43
  119. package/build/types/extension.d.ts.map +0 -1
  120. package/build/types/external-manifest.d.ts.map +0 -1
  121. package/scripts/postinstall.js +0 -71
  122. 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, { extData, logFn }?: DriverConfigOptions | undefined): DriverConfig;
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
- * Call {@link DriverConfig.create} instead.
33
- * @private
34
- * @param {import('./manifest').Manifest} manifest - Manifest instance
35
- * @param {DriverConfigOptions} [opts]
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
- * Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
45
- * @param {Capabilities} caps
46
- * @returns {MatchedDriver}
47
- */
48
- findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
42
+ * Checks extensions for problems
43
+ */
44
+ validate(): Promise<import("./extension-config").ExtRecord<"driver">>;
49
45
  /**
50
- * Given an automation name and platform name, find a suitable driver and return its extension data.
51
- * @param {string} matchAutomationName
52
- * @param {string} matchPlatformName
53
- * @returns {ExtMetadata<DriverType> & import('../../types/appium-manifest').InternalMetadata & import('../../types/external-manifest').CommonMetadata}
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
- * - Optional logging function
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
- logFn?: import("./extension-config").ExtensionLogFn | undefined;
55
+ findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
62
56
  /**
63
- * - Extension data
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
- extData?: import("../../types").DriverRecord | undefined;
66
- };
67
- export type ExtMetadata<T> = import('../../types').ExtMetadata<T>;
68
- export type ExtManifest<T> = import('../../types').ExtManifest<T>;
69
- export type ManifestData = import('../../types').ManifestData;
70
- export type DriverType = import('../../types').DriverType;
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('../../types').ExtRecord<T>;
73
- export type ExtName<T> = import('../../types').ExtName<T>;
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: BaseDriverBase<import("@appium/types").ExternalDriver, import("../../types").ExternalDriverStatic>;
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":"AAMA;;GAEG;AACH;IAQE;;;;;;;;;OASG;IACF,0BAAkC;IAkBlC;;;;;;;OAOG;IACH,wBALW,QAAQ,yDAGN,YAAY,CASxB;IAED;;;;OAIG;IACH,6BAHW,QAAQ,GACN,YAAY,GAAC,SAAS,CAIlC;IAxCD;;;;;MAKE;IACF,sBAQC;IAhCF;;;OAGG;IACH,sBAFU,IAAI,MAAM,CAAC,CAEA;IAuHpB;;;;MAIE;IACF,qDAHU,YAAY,GACV,aAAa,CAmCxB;IAED;;;;;MAKE;IACF,yCAJU,MAAM,qBACN,MAAM,GACJ,YAAY,UAAU,CAAC,GAAG,OAAO,6BAA6B,EAAE,gBAAgB,GAAG,OAAO,+BAA+B,EAAE,cAAc,CAwBpJ;CACH;;;;;;;;;;;6BAUY,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;6BAKpC,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;2BAIpC,OAAO,aAAa,EAAE,YAAY;yBAClC,OAAO,aAAa,EAAE,UAAU;uBAChC,OAAO,YAAY,EAAE,QAAQ;2BAK7B,OAAO,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;yBAKlC,OAAO,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;;aAQ/B,MAAM;gBACN,MAAM;;2BAIP,OAAO,eAAe,EAAE,YAAY"}
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
- logFn,
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
- extData,
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(exts) {
45
+ async validate() {
59
46
  this.knownAutomationNames.clear();
60
- return super.validate(exts);
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("../../types").ExtensionType> {
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>} extData - Extension config
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>} extData
24
- * @returns {extData is ExtManifestWithSchema<ExtType>}
23
+ * @param {ExtManifest<ExtType>} extManifest
24
+ * @returns {extManifest is ExtManifestWithSchema<ExtType>}
25
25
  */
26
- static extDataHasSchema<ExtType_1 extends import("../../types").ExtensionType>(extData: ExtManifest<ExtType_1>): extData is ExtManifestWithSchema<ExtType_1>;
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 {ExtensionLogFn} */
41
- log: ExtensionLogFn;
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
- * Checks extensions for problems
48
- * @param {ExtRecord<ExtType>} exts - Extension data
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
- validate(exts: ExtRecord<ExtType>): ExtRecord<ExtType>;
56
+ getProblems(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType>): ExtManifestProblem[];
51
57
  /**
52
- * @param {ExtManifest<ExtType>} extData
58
+ * Returns a list of warnings for a given extension.
59
+ *
53
60
  * @param {ExtName<ExtType>} extName
54
- * @returns {Problem[]}
61
+ * @param {ExtManifest<ExtType>} extManifest
62
+ * @returns {Promise<string[]>}
55
63
  */
56
- getSchemaProblems(extData: ExtManifest<ExtType>, extName: ExtName<ExtType>): Problem[];
64
+ getWarnings(extName: ExtName<ExtType>, extManifest: ExtManifest<ExtType>): Promise<string[]>;
57
65
  /**
58
- * @param {ExtManifest<ExtType>} extData
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 {Problem[]}
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
- getGenericConfigProblems(extData: ExtManifest<ExtType>, extName: ExtName<ExtType>): Problem[];
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>} extData
66
- * @returns {Problem[]}
129
+ * @param {ExtManifest<ExtType>} extManifest
130
+ * @param {ExtName<ExtType>} extName
131
+ * @returns {ExtManifestProblem[]}
67
132
  */
68
- getConfigProblems(extData: ExtManifest<ExtType>): Problem[];
133
+ getConfigProblems(extManifest: ExtManifest<ExtType>, extName: ExtName<ExtType>): ExtManifestProblem[];
69
134
  /**
70
135
  * @param {string} extName
71
- * @param {ExtManifest<ExtType>} extData
136
+ * @param {ExtManifest<ExtType>} extManifest
72
137
  * @param {ExtensionConfigMutationOpts} [opts]
73
138
  * @returns {Promise<void>}
74
139
  */
75
- addExtension(extName: string, extData: ExtManifest<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
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>} extData
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>, extData: ExtManifest<ExtType> | import('../cli/extension-command').ExtensionFields<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
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>} extData - Extension data
164
+ * @param {ExtManifest<ExtType>} extManifest - Extension data
98
165
  * @returns {string}
99
166
  * @abstract
100
167
  */
101
- extensionDesc(extName: ExtName<ExtType>, extData: ExtManifest<ExtType>): string;
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>} extData - Extension data
189
+ * @param {ExtManifestWithSchema<ExtType>} extManifest - Extension data
123
190
  * @returns {import('ajv').SchemaObject|undefined}
124
191
  */
125
- readExtensionSchema(extName: ExtName<ExtType>, extData: ExtManifestWithSchema<ExtType>): import('ajv').SchemaObject | undefined;
192
+ readExtensionSchema(extName: ExtName<ExtType>, extManifest: ExtManifestWithSchema<ExtType>): import('ajv').SchemaObject | undefined;
126
193
  }
127
194
  /**
128
- * Config problem
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 Problem = {
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('../../types').ExtensionType;
213
+ export type ExtensionType = import('@appium/types').ExtensionType;
145
214
  export type Manifest = import('./manifest').Manifest;
146
- export type ExtManifest<T> = import('../../types/appium-manifest').ExtManifest<T>;
147
- export type ExtManifestWithSchema<T> = import('../../types/appium-manifest').ExtManifestWithSchema<T>;
148
- export type ExtName<T> = import('../../types/appium-manifest').ExtName<T>;
149
- export type ExtClass<T> = import('../../types/extension').ExtClass<T>;
150
- export type ExtRecord<T> = import('../../types/appium-manifest').ExtRecord<T>;
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":"AAwBA;;;;;GAKG;AACH;IAkTE;;;;;;;;;OASG;IACH,oCAoBC;IAED;;;;;;OAMG;IACH,6JAEC;IA3UD;;;;;OAKG;IACH,wBAOC;IA5BD,sBAAsB;IACtB,eADW,OAAO,CACJ;IAEd,4BAA4B;IAC5B,WADW,GAAG,OAAO,GAAG,CACd;IAEV,iCAAiC;IACjC,qBADW,UAAU,OAAO,CAAC,CACT;IAEpB,6BAA6B;IAC7B,KADW,cAAc,CACrB;IAEJ,uBAAuB;IACvB,UADW,QAAQ,CACV;IAiBT,2BAEC;IAED,yBAEC;IAED;;;OAGG;IACH,eAFW,UAAU,OAAO,CAAC,sBAgD5B;IAED;;;;OAIG;IACH,2BAJW,YAAY,OAAO,CAAC,WACpB,QAAQ,OAAO,CAAC,GACd,OAAO,EAAE,CAyCrB;IAED;;;;OAIG;IAEH,kCALW,YAAY,OAAO,CAAC,WACpB,QAAQ,OAAO,CAAC,GACd,OAAO,EAAE,CAyCrB;IAED;;;;OAIG;IAEH,2BAJW,YAAY,OAAO,CAAC,GAClB,OAAO,EAAE,CAMrB;IAED;;;;;OAKG;IACH,sBALW,MAAM,WACN,YAAY,OAAO,CAAC,wDAElB,QAAQ,IAAI,CAAC,CAOzB;IAED;;;;;OAKG;IACH,yBALW,QAAQ,OAAO,CAAC,WAChB,YAAY,OAAO,CAAC,GAAC,OAAO,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,wDAE9E,QAAQ,IAAI,CAAC,CAUzB;IAED;;;;OAIG;IACH,yBAJW,QAAQ,OAAO,CAAC,wDAEd,QAAQ,IAAI,CAAC,CAOzB;IAED;;;OAGG;IAEH,2CAHa,IAAI,CAqBhB;IAED;;;;;;OAMG;IAEH,uBANW,QAAQ,OAAO,CAAC,WAChB,YAAY,OAAO,CAAC,GAClB,MAAM,CAMlB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAHW,QAAQ,OAAO,CAAC,GACd,SAAS,OAAO,CAAC,CAa7B;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAInB;IA6CD;;;;;;OAMG;IACH,6BAJW,QAAQ,OAAO,CAAC,WAChB,sBAAsB,OAAO,CAAC,GAC5B,OAAO,KAAK,EAAE,YAAY,GAAC,SAAS,CAShD;CACF;;;;;;;;SAaa,MAAM;;;;SACN,GAAG;;;;;uCAMH,GAAG,OACJ,IAAI;4BAIJ,OAAO,aAAa,EAAE,aAAa;uBACnC,OAAO,YAAY,EAAE,QAAQ;6BAK7B,OAAO,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;uCAKpD,OAAO,6BAA6B,EAAE,qBAAqB,CAAC,CAAC,CAAC;yBAK9D,OAAO,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;0BAKhD,OAAO,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;2BAK3C,OAAO,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;;;;;;;;;;;;;0BAWlD,uBAAuB,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,0BAA0B;AA7bvH,qCAA+B;AAG/B,qCAA+B;AAF/B,yCAAmC;AACnC,2CAAqC;AAGrC,+BAA+B;AAC/B,4BADW,IAAI,WAAW,CAAC,CAMxB"}
1
+ {"version":3,"file":"extension-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"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"}