@appium/images-plugin 1.3.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,9 +8,6 @@ This is an official Appium plugin designed to facilitate image comparison, visua
8
8
  2. **Finding Elements by Image** ([docs](./docs/find-by-image.md)) - Using a template image, find a matching screen region of an app and interact with it via standard Appium element semantics.
9
9
 
10
10
  ## Prerequisites
11
-
12
- * [OpenCV](https://opencv.org) 3.x native libraries
13
- * [opencv4nodejs](https://github.com/justadudewhohacks/opencv4nodejs) NPM module: install with `npm i -g opencv4nodejs`. By default the preinstall script of this module also downloads and makes all the required OpenCV libs from source, but this requires developer tools to be available on the host system.
14
11
  * Appium Server 2.0+
15
12
 
16
13
  ## Installation - Server
@@ -1,21 +1,12 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.MATCH_TEMPLATE_MODE = exports.MATCH_FEATURES_MODE = exports.GET_SIMILARITY_MODE = exports.DEFAULT_MATCH_THRESHOLD = void 0;
9
- exports.compareImages = compareImages;
10
-
11
- require("source-map-support/register");
12
-
13
- var _lodash = _interopRequireDefault(require("lodash"));
14
-
15
- var _driver = require("appium/driver");
16
-
17
- var _opencv = require("@appium/opencv");
18
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GET_SIMILARITY_MODE = exports.MATCH_FEATURES_MODE = exports.MATCH_TEMPLATE_MODE = exports.DEFAULT_MATCH_THRESHOLD = exports.compareImages = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const driver_1 = require("appium/driver");
9
+ const opencv_1 = require("@appium/opencv");
19
10
  const MATCH_FEATURES_MODE = 'matchFeatures';
20
11
  exports.MATCH_FEATURES_MODE = MATCH_FEATURES_MODE;
21
12
  const GET_SIMILARITY_MODE = 'getSimilarity';
@@ -24,49 +15,76 @@ const MATCH_TEMPLATE_MODE = 'matchTemplate';
24
15
  exports.MATCH_TEMPLATE_MODE = MATCH_TEMPLATE_MODE;
25
16
  const DEFAULT_MATCH_THRESHOLD = 0.4;
26
17
  exports.DEFAULT_MATCH_THRESHOLD = DEFAULT_MATCH_THRESHOLD;
27
-
18
+ /**
19
+ * Performs images comparison using OpenCV framework features.
20
+ * It is expected that both OpenCV framework and opencv4nodejs
21
+ * module are installed on the machine where Appium server is running.
22
+ *
23
+ * @param {string} mode - One of possible comparison modes:
24
+ * matchFeatures, getSimilarity, matchTemplate
25
+ * @param {string} firstImage - Base64-encoded image file.
26
+ * All image formats, that OpenCV library itself accepts, are supported.
27
+ * @param {string} secondImage - Base64-encoded image file.
28
+ * All image formats, that OpenCV library itself accepts, are supported.
29
+ * @param {object} [options] - The content of this dictionary depends
30
+ * on the actual `mode` value. See the documentation on `@appium/support`
31
+ * module for more details.
32
+ * @returns {Promise<object|object[]>} The content of the resulting dictionary depends
33
+ * on the actual `mode` and `options` values. See the documentation on
34
+ * `@appium/support` module for more details.
35
+ * @throws {Error} If required OpenCV modules are not installed or
36
+ * if `mode` value is incorrect or if there was an unexpected issue while
37
+ * matching the images.
38
+ */
28
39
  async function compareImages(mode, firstImage, secondImage, options = {}) {
29
- const img1 = Buffer.from(firstImage, 'base64');
30
- const img2 = Buffer.from(secondImage, 'base64');
31
- let result = null;
32
-
33
- switch (_lodash.default.toLower(mode)) {
34
- case MATCH_FEATURES_MODE.toLowerCase():
35
- try {
36
- result = await (0, _opencv.getImagesMatches)(img1, img2, options);
37
- } catch (err) {
38
- result = {
39
- count: 0
40
- };
41
- }
42
-
43
- break;
44
-
45
- case GET_SIMILARITY_MODE.toLowerCase():
46
- result = await (0, _opencv.getImagesSimilarity)(img1, img2, options);
47
- break;
48
-
49
- case MATCH_TEMPLATE_MODE.toLowerCase():
50
- result = await (0, _opencv.getImageOccurrence)(img1, img2, options);
51
-
52
- if (options.multiple) {
53
- return result.multiple.map(convertVisualizationToBase64);
54
- }
55
-
56
- break;
57
-
58
- default:
59
- throw new _driver.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` + `Only ${JSON.stringify([MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE])} modes are supported.`);
60
- }
61
-
62
- return convertVisualizationToBase64(result);
40
+ const img1 = Buffer.from(firstImage, 'base64');
41
+ const img2 = Buffer.from(secondImage, 'base64');
42
+ let result = null;
43
+ switch (lodash_1.default.toLower(mode)) {
44
+ case MATCH_FEATURES_MODE.toLowerCase():
45
+ try {
46
+ result = await (0, opencv_1.getImagesMatches)(img1, img2, options);
47
+ }
48
+ catch (err) {
49
+ // might throw if no matches
50
+ result = { count: 0 };
51
+ }
52
+ break;
53
+ case GET_SIMILARITY_MODE.toLowerCase():
54
+ result = await (0, opencv_1.getImagesSimilarity)(img1, img2, options);
55
+ break;
56
+ case MATCH_TEMPLATE_MODE.toLowerCase():
57
+ // firstImage/img1 is the full image and secondImage/img2 is the partial one
58
+ result = await (0, opencv_1.getImageOccurrence)(img1, img2, options);
59
+ if (options.multiple) {
60
+ return result.multiple.map(convertVisualizationToBase64);
61
+ }
62
+ break;
63
+ default:
64
+ throw new driver_1.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` +
65
+ `Only ${JSON.stringify([
66
+ MATCH_FEATURES_MODE,
67
+ GET_SIMILARITY_MODE,
68
+ MATCH_TEMPLATE_MODE,
69
+ ])} modes are supported.`);
70
+ }
71
+ return convertVisualizationToBase64(result);
63
72
  }
64
-
73
+ exports.compareImages = compareImages;
74
+ /**
75
+ * base64 encodes the visualization part of the result
76
+ * (if necessary)
77
+ *
78
+ * @param {OccurrenceResult} element - occurrence result
79
+ *
80
+ **/
65
81
  function convertVisualizationToBase64(element) {
66
- if (!_lodash.default.isEmpty(element.visualization)) {
67
- element.visualization = element.visualization.toString('base64');
68
- }
69
-
70
- return element;
82
+ if (!lodash_1.default.isEmpty(element.visualization)) {
83
+ element.visualization = element.visualization.toString('base64');
84
+ }
85
+ return element;
71
86
  }
72
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVRDSF9GRUFUVVJFU19NT0RFIiwiR0VUX1NJTUlMQVJJVFlfTU9ERSIsIk1BVENIX1RFTVBMQVRFX01PREUiLCJERUZBVUxUX01BVENIX1RIUkVTSE9MRCIsImNvbXBhcmVJbWFnZXMiLCJtb2RlIiwiZmlyc3RJbWFnZSIsInNlY29uZEltYWdlIiwib3B0aW9ucyIsImltZzEiLCJCdWZmZXIiLCJmcm9tIiwiaW1nMiIsInJlc3VsdCIsIl8iLCJ0b0xvd2VyIiwidG9Mb3dlckNhc2UiLCJnZXRJbWFnZXNNYXRjaGVzIiwiZXJyIiwiY291bnQiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwiZ2V0SW1hZ2VPY2N1cnJlbmNlIiwibXVsdGlwbGUiLCJtYXAiLCJjb252ZXJ0VmlzdWFsaXphdGlvblRvQmFzZTY0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZWxlbWVudCIsImlzRW1wdHkiLCJ2aXN1YWxpemF0aW9uIiwidG9TdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi9saWIvY29tcGFyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtlcnJvcnN9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHtnZXRJbWFnZXNNYXRjaGVzLCBnZXRJbWFnZXNTaW1pbGFyaXR5LCBnZXRJbWFnZU9jY3VycmVuY2V9IGZyb20gJ0BhcHBpdW0vb3BlbmN2JztcblxuY29uc3QgTUFUQ0hfRkVBVFVSRVNfTU9ERSA9ICdtYXRjaEZlYXR1cmVzJztcbmNvbnN0IEdFVF9TSU1JTEFSSVRZX01PREUgPSAnZ2V0U2ltaWxhcml0eSc7XG5jb25zdCBNQVRDSF9URU1QTEFURV9NT0RFID0gJ21hdGNoVGVtcGxhdGUnO1xuXG5jb25zdCBERUZBVUxUX01BVENIX1RIUkVTSE9MRCA9IDAuNDtcblxuLyoqXG4gKiBQZXJmb3JtcyBpbWFnZXMgY29tcGFyaXNvbiB1c2luZyBPcGVuQ1YgZnJhbWV3b3JrIGZlYXR1cmVzLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCBib3RoIE9wZW5DViBmcmFtZXdvcmsgYW5kIG9wZW5jdjRub2RlanNcbiAqIG1vZHVsZSBhcmUgaW5zdGFsbGVkIG9uIHRoZSBtYWNoaW5lIHdoZXJlIEFwcGl1bSBzZXJ2ZXIgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIE9uZSBvZiBwb3NzaWJsZSBjb21wYXJpc29uIG1vZGVzOlxuICogbWF0Y2hGZWF0dXJlcywgZ2V0U2ltaWxhcml0eSwgbWF0Y2hUZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpcnN0SW1hZ2UgLSBCYXNlNjQtZW5jb2RlZCBpbWFnZSBmaWxlLlxuICogQWxsIGltYWdlIGZvcm1hdHMsIHRoYXQgT3BlbkNWIGxpYnJhcnkgaXRzZWxmIGFjY2VwdHMsIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vjb25kSW1hZ2UgLSBCYXNlNjQtZW5jb2RlZCBpbWFnZSBmaWxlLlxuICogQWxsIGltYWdlIGZvcm1hdHMsIHRoYXQgT3BlbkNWIGxpYnJhcnkgaXRzZWxmIGFjY2VwdHMsIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIGNvbnRlbnQgb2YgdGhpcyBkaWN0aW9uYXJ5IGRlcGVuZHNcbiAqIG9uIHRoZSBhY3R1YWwgYG1vZGVgIHZhbHVlLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYEBhcHBpdW0vc3VwcG9ydGBcbiAqIG1vZHVsZSBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0fG9iamVjdFtdPn0gVGhlIGNvbnRlbnQgb2YgdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5IGRlcGVuZHNcbiAqIG9uIHRoZSBhY3R1YWwgYG1vZGVgIGFuZCBgb3B0aW9uc2AgdmFsdWVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb25cbiAqIGBAYXBwaXVtL3N1cHBvcnRgIG1vZHVsZSBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHJlcXVpcmVkIE9wZW5DViBtb2R1bGVzIGFyZSBub3QgaW5zdGFsbGVkIG9yXG4gKiBpZiBgbW9kZWAgdmFsdWUgaXMgaW5jb3JyZWN0IG9yIGlmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGlzc3VlIHdoaWxlXG4gKiBtYXRjaGluZyB0aGUgaW1hZ2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiBjb21wYXJlSW1hZ2VzKG1vZGUsIGZpcnN0SW1hZ2UsIHNlY29uZEltYWdlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgaW1nMSA9IEJ1ZmZlci5mcm9tKGZpcnN0SW1hZ2UsICdiYXNlNjQnKTtcbiAgY29uc3QgaW1nMiA9IEJ1ZmZlci5mcm9tKHNlY29uZEltYWdlLCAnYmFzZTY0Jyk7XG4gIGxldCByZXN1bHQgPSBudWxsO1xuICBzd2l0Y2ggKF8udG9Mb3dlcihtb2RlKSkge1xuICAgIGNhc2UgTUFUQ0hfRkVBVFVSRVNfTU9ERS50b0xvd2VyQ2FzZSgpOlxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0SW1hZ2VzTWF0Y2hlcyhpbWcxLCBpbWcyLCBvcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBtaWdodCB0aHJvdyBpZiBubyBtYXRjaGVzXG4gICAgICAgIHJlc3VsdCA9IHtjb3VudDogMH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIEdFVF9TSU1JTEFSSVRZX01PREUudG9Mb3dlckNhc2UoKTpcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGdldEltYWdlc1NpbWlsYXJpdHkoaW1nMSwgaW1nMiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1BVENIX1RFTVBMQVRFX01PREUudG9Mb3dlckNhc2UoKTpcbiAgICAgIC8vIGZpcnN0SW1hZ2UvaW1nMSBpcyB0aGUgZnVsbCBpbWFnZSBhbmQgc2Vjb25kSW1hZ2UvaW1nMiBpcyB0aGUgcGFydGlhbCBvbmVcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGdldEltYWdlT2NjdXJyZW5jZShpbWcxLCBpbWcyLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQubXVsdGlwbGUubWFwKGNvbnZlcnRWaXN1YWxpemF0aW9uVG9CYXNlNjQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHttb2RlfScgaW1hZ2VzIGNvbXBhcmlzb24gbW9kZSBpcyB1bmtub3duLiBgICtcbiAgICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgIE1BVENIX0ZFQVRVUkVTX01PREUsXG4gICAgICAgICAgICBHRVRfU0lNSUxBUklUWV9NT0RFLFxuICAgICAgICAgICAgTUFUQ0hfVEVNUExBVEVfTU9ERSxcbiAgICAgICAgICBdKX0gbW9kZXMgYXJlIHN1cHBvcnRlZC5gXG4gICAgICApO1xuICB9XG4gIHJldHVybiBjb252ZXJ0VmlzdWFsaXphdGlvblRvQmFzZTY0KHJlc3VsdCk7XG59XG5cbi8qKlxuICogYmFzZTY0IGVuY29kZXMgdGhlIHZpc3VhbGl6YXRpb24gcGFydCBvZiB0aGUgcmVzdWx0XG4gKiAoaWYgbmVjZXNzYXJ5KVxuICpcbiAqIEBwYXJhbSB7T2NjdXJyZW5jZVJlc3VsdH0gZWxlbWVudCAtIG9jY3VycmVuY2UgcmVzdWx0XG4gKlxuICoqL1xuZnVuY3Rpb24gY29udmVydFZpc3VhbGl6YXRpb25Ub0Jhc2U2NChlbGVtZW50KSB7XG4gIGlmICghXy5pc0VtcHR5KGVsZW1lbnQudmlzdWFsaXphdGlvbikpIHtcbiAgICBlbGVtZW50LnZpc3VhbGl6YXRpb24gPSBlbGVtZW50LnZpc3VhbGl6YXRpb24udG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmV4cG9ydCB7XG4gIGNvbXBhcmVJbWFnZXMsXG4gIERFRkFVTFRfTUFUQ0hfVEhSRVNIT0xELFxuICBNQVRDSF9URU1QTEFURV9NT0RFLFxuICBNQVRDSF9GRUFUVVJFU19NT0RFLFxuICBHRVRfU0lNSUxBUklUWV9NT0RFLFxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL29wZW5jdicpLk9jY3VycmVuY2VSZXN1bHR9IE9jY3VycmVuY2VSZXN1bHRcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxtQkFBbUIsR0FBRyxlQUE1Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxlQUE1Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxlQUE1Qjs7QUFFQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7O0FBdUJBLGVBQWVDLGFBQWYsQ0FBNkJDLElBQTdCLEVBQW1DQyxVQUFuQyxFQUErQ0MsV0FBL0MsRUFBNERDLE9BQU8sR0FBRyxFQUF0RSxFQUEwRTtFQUN4RSxNQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTCxVQUFaLEVBQXdCLFFBQXhCLENBQWI7RUFDQSxNQUFNTSxJQUFJLEdBQUdGLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixXQUFaLEVBQXlCLFFBQXpCLENBQWI7RUFDQSxJQUFJTSxNQUFNLEdBQUcsSUFBYjs7RUFDQSxRQUFRQyxlQUFBLENBQUVDLE9BQUYsQ0FBVVYsSUFBVixDQUFSO0lBQ0UsS0FBS0wsbUJBQW1CLENBQUNnQixXQUFwQixFQUFMO01BQ0UsSUFBSTtRQUNGSCxNQUFNLEdBQUcsTUFBTSxJQUFBSSx3QkFBQSxFQUFpQlIsSUFBakIsRUFBdUJHLElBQXZCLEVBQTZCSixPQUE3QixDQUFmO01BQ0QsQ0FGRCxDQUVFLE9BQU9VLEdBQVAsRUFBWTtRQUVaTCxNQUFNLEdBQUc7VUFBQ00sS0FBSyxFQUFFO1FBQVIsQ0FBVDtNQUNEOztNQUNEOztJQUNGLEtBQUtsQixtQkFBbUIsQ0FBQ2UsV0FBcEIsRUFBTDtNQUNFSCxNQUFNLEdBQUcsTUFBTSxJQUFBTywyQkFBQSxFQUFvQlgsSUFBcEIsRUFBMEJHLElBQTFCLEVBQWdDSixPQUFoQyxDQUFmO01BQ0E7O0lBQ0YsS0FBS04sbUJBQW1CLENBQUNjLFdBQXBCLEVBQUw7TUFFRUgsTUFBTSxHQUFHLE1BQU0sSUFBQVEsMEJBQUEsRUFBbUJaLElBQW5CLEVBQXlCRyxJQUF6QixFQUErQkosT0FBL0IsQ0FBZjs7TUFDQSxJQUFJQSxPQUFPLENBQUNjLFFBQVosRUFBc0I7UUFDcEIsT0FBT1QsTUFBTSxDQUFDUyxRQUFQLENBQWdCQyxHQUFoQixDQUFvQkMsNEJBQXBCLENBQVA7TUFDRDs7TUFDRDs7SUFDRjtNQUNFLE1BQU0sSUFBSUMsY0FBQSxDQUFPQyxvQkFBWCxDQUNILElBQUdyQixJQUFLLHVDQUFULEdBQ0csUUFBT3NCLElBQUksQ0FBQ0MsU0FBTCxDQUFlLENBQ3JCNUIsbUJBRHFCLEVBRXJCQyxtQkFGcUIsRUFHckJDLG1CQUhxQixDQUFmLENBSUwsdUJBTkQsQ0FBTjtFQXBCSjs7RUE2QkEsT0FBT3NCLDRCQUE0QixDQUFDWCxNQUFELENBQW5DO0FBQ0Q7O0FBU0QsU0FBU1csNEJBQVQsQ0FBc0NLLE9BQXRDLEVBQStDO0VBQzdDLElBQUksQ0FBQ2YsZUFBQSxDQUFFZ0IsT0FBRixDQUFVRCxPQUFPLENBQUNFLGFBQWxCLENBQUwsRUFBdUM7SUFDckNGLE9BQU8sQ0FBQ0UsYUFBUixHQUF3QkYsT0FBTyxDQUFDRSxhQUFSLENBQXNCQyxRQUF0QixDQUErQixRQUEvQixDQUF4QjtFQUNEOztFQUVELE9BQU9ILE9BQVA7QUFDRCJ9
87
+ /**
88
+ * @typedef {import('@appium/opencv').OccurrenceResult} OccurrenceResult
89
+ */
90
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../lib/compare.js"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,0CAAqC;AACrC,2CAAyF;AAEzF,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAkF1C,kDAAmB;AAjFrB,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAkF1C,kDAAmB;AAjFrB,MAAM,mBAAmB,GAAG,eAAe,CAAC;AA+E1C,kDAAmB;AA7ErB,MAAM,uBAAuB,GAAG,GAAG,CAAC;AA4ElC,0DAAuB;AA1EzB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,KAAK,UAAU,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,GAAG,EAAE;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,KAAK,mBAAmB,CAAC,WAAW,EAAE;YACpC,IAAI;gBACF,MAAM,GAAG,MAAM,IAAA,yBAAgB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;aACtD;YAAC,OAAO,GAAG,EAAE;gBACZ,4BAA4B;gBAC5B,MAAM,GAAG,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC;aACrB;YACD,MAAM;QACR,KAAK,mBAAmB,CAAC,WAAW,EAAE;YACpC,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM;QACR,KAAK,mBAAmB,CAAC,WAAW,EAAE;YACpC,4EAA4E;YAC5E,MAAM,GAAG,MAAM,IAAA,2BAAkB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;aAC1D;YACD,MAAM;QACR;YACE,MAAM,IAAI,eAAM,CAAC,oBAAoB,CACnC,IAAI,IAAI,uCAAuC;gBAC7C,QAAQ,IAAI,CAAC,SAAS,CAAC;oBACrB,mBAAmB;oBACnB,mBAAmB;oBACnB,mBAAmB;iBACpB,CAAC,uBAAuB,CAC5B,CAAC;KACL;IACD,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAkBC,sCAAa;AAhBf;;;;;;IAMI;AACJ,SAAS,4BAA4B,CAAC,OAAO;IAC3C,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QACrC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAClE;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAUD;;GAEG"}
@@ -1 +1 @@
1
- {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../../lib/finder.js"],"names":[],"mappings":"AA0EA;IAOE;;;;OAIG;IACH,oBAHW,cAAc,gCAUxB;IAlBD,6BAA6B;IAC7B,QADW,cAAc,CAClB;IAEP,uCAAuC;IACvC,YADW,IAAI,MAAM,EAAC,YAAY,CAAC,CACxB;IAgBX,6BAEC;IAED;;;OAGG;IACH,4BAHW,YAAY,GACV,OAAO,CAMnB;IAED;;;;;;;;;OASG;IAEH;;;;;;;;;OASG;IACH,yBANW,MAAM;;;;;;;;;;;;;;;;;QAIJ,QAAQ,OAAO,GAAC,OAAO,EAAE,GAAC,YAAY,CAAC,CAuHnD;IAED;;;;;;;;OAQG;IACH,gCANW,MAAM,eACN,MAAM,gBACN,MAAM,GAEJ,QAAQ,MAAM,CAAC,CAqB3B;IAED;;;;;;;;OAQG;IACH,uCALW,MAAM,gBACN,MAAM;;OAuHhB;IAED;;;;;;;;;;OAUG;IACH;;;;;;;;;;OAUG;IACH,mCANW,MAAM;;;;+BAdH,OAAO;;;;mCACP,MAAM;;;;;;yCACN,OAAO;;;;gBAGP,MAAM;;;;gBACN,MAAM;QAYP,QAAQ,MAAM,CAAC,CA+D3B;CACF;6BAKY,OAAO,eAAe,EAAE,cAAc;sBACtC,OAAO,eAAe,EAAE,OAAO;;;;;mBAK9B,MAAM;;;;;;YAKN,MAAM;;;;YACN,MAAM;;;;AA7epB,oEAAwD;AADxD,4CAAsC;;;;;;;;;;;;;AAEtC,iDAA2C"}
1
+ {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../../lib/finder.js"],"names":[],"mappings":"AA6EA;IAOE;;;;OAIG;IACH,oBAHW,cAAc,gCAUxB;IAlBD,6BAA6B;IAC7B,QADW,cAAc,CAClB;IAEP,uCAAuC;IACvC,YADW,IAAI,MAAM,EAAC,YAAY,CAAC,CACxB;IAgBX,6BAEC;IAED;;;OAGG;IACH,4BAHW,YAAY,GACV,OAAO,CAMnB;IAED;;;;;;;;;OASG;IAEH;;;;;;;;;OASG;IACH,yBANW,MAAM;;;;;;;;;;;;;;;;;QAIJ,QAAQ,OAAO,GAAC,OAAO,EAAE,GAAC,YAAY,CAAC,CAuHnD;IAED;;;;;;;;OAQG;IACH,gCANW,MAAM,eACN,MAAM,gBACN,MAAM,GAEJ,QAAQ,MAAM,CAAC,CAqB3B;IAED;;;;;;;;OAQG;IACH,uCALW,MAAM,gBACN,MAAM;;OAuHhB;IAED;;;;;;;;;;OAUG;IACH;;;;;;;;;;OAUG;IACH,mCANW,MAAM;;;;+BAdH,OAAO;;;;mCACP,MAAM;;;;;;yCACN,OAAO;;;;gBAGP,MAAM;;;;gBACN,MAAM;QAYP,QAAQ,MAAM,CAAC,CA+D3B;CACF;6BAKY,OAAO,eAAe,EAAE,cAAc;sBACtC,OAAO,eAAe,EAAE,OAAO;;;;;mBAK9B,MAAM;;;;;;YAKN,MAAM;;;;YACN,MAAM;;;;AAhfpB,oEAAwD;AADxD,4CAAsC;;;;;;;;;;;;;AAEtC,iDAA2C"}