@appium/images-plugin 1.2.4 → 1.3.1

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.
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @typedef Dimension
3
+ * @property {number} width - width of rect
4
+ * @property {number} height - height of rect
5
+ */
6
+ /**
7
+ * @typedef Position
8
+ * @property {number} x - x coordinate
9
+ * @property {number} y - y coordinate
10
+ */
11
+ /**
12
+ * Representation of an "image element", which is simply a set of coordinates
13
+ * and methods that can be used on that set of coordinates via the driver
14
+ */
15
+ export default class ImageElement {
16
+ /**
17
+ * Handle various Appium commands that involve an image element
18
+ *
19
+ * @param {import('appium/driver').BaseDriver} driver - the driver to use for commands
20
+ * @param {string} cmd - the name of the driver command
21
+ * @param {string} imgElId - the id of the ImageElement to work with
22
+ * @param {string[]} args - Rest of arguments for executeScripts
23
+ *
24
+ * @returns {object} - the result of running a command
25
+ */
26
+ static execute(driver: import("@appium/types").DriverClass<import("@appium/types").Driver, import("@appium/types").DriverStatic>, imgEl: any, cmd: string, ...args: string[]): object;
27
+ /**
28
+ * @param {string} b64Template - the base64-encoded image which was used to
29
+ * find this ImageElement
30
+ * @param {Rect} rect - bounds of matched image element
31
+ * @param {number} score The similarity score as a float number in range [0.0, 1.0].
32
+ * 1.0 is the highest score (means both images are totally equal).
33
+ * @param {string?} b64Result - the base64-encoded image which has matched marks.
34
+ * Defaults to null.
35
+ * @param {import('./finder').default?} finder - the finder we can use to re-check stale elements
36
+ */
37
+ constructor(b64Template: string, rect: Rect, score: number, b64Result?: string | null, finder?: import('./finder').default | null);
38
+ template: string;
39
+ rect: import("@appium/types").Rect;
40
+ id: string;
41
+ b64MatchedImage: string | null;
42
+ score: number;
43
+ finder: import("./finder").default | null;
44
+ /**
45
+ * @returns {Dimension} - dimension of element
46
+ */
47
+ get size(): Dimension;
48
+ /**
49
+ * @returns {Position} - coordinates of top-left corner of element
50
+ */
51
+ get location(): Position;
52
+ /**
53
+ * @returns {Position} - coordinates of center of element
54
+ */
55
+ get center(): Position;
56
+ /**
57
+ * @returns {?string} - the base64-encoded image which has matched marks
58
+ */
59
+ get matchedImage(): string | null;
60
+ /**
61
+ * @param {string} protocolKey - the protocol-specific JSON key for
62
+ * a WebElement
63
+ *
64
+ * @returns {Element} - this image element as a WebElement
65
+ */
66
+ asElement(protocolKey: string): Element;
67
+ /**
68
+ * @param {ImageElement} other - an ImageElement to compare with this one
69
+ *
70
+ * @returns {boolean} - whether the other element and this one have the same
71
+ * properties
72
+ */
73
+ equals(other: ImageElement): boolean;
74
+ /**
75
+ * Use a driver to tap the screen at the center of this ImageElement's
76
+ * position
77
+ *
78
+ * @param {BaseDriver} driver - driver for calling actions with
79
+ */
80
+ click(driver: BaseDriver): Promise<any>;
81
+ }
82
+ export type Dimension = {
83
+ /**
84
+ * - width of rect
85
+ */
86
+ width: number;
87
+ /**
88
+ * - height of rect
89
+ */
90
+ height: number;
91
+ };
92
+ export type Position = {
93
+ /**
94
+ * - x coordinate
95
+ */
96
+ x: number;
97
+ /**
98
+ * - y coordinate
99
+ */
100
+ y: number;
101
+ };
102
+ export type Rect = import('@appium/types').Rect;
103
+ export type Element = import('@appium/types').Element;
104
+ export const IMAGE_EL_TAP_STRATEGY_MJSONWP: "touchActions";
105
+ export const IMAGE_EL_TAP_STRATEGY_W3C: "w3cActions";
106
+ export const DEFAULT_TEMPLATE_IMAGE_SCALE: 1;
107
+ export const IMAGE_ELEMENT_PREFIX: "appium-image-element-";
108
+ //# sourceMappingURL=image-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-element.d.ts","sourceRoot":"","sources":["../../lib/image-element.js"],"names":[],"mappings":"AAaA;;;;GAIG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH;IAsLE;;;;;;;;;OASG;IACH,mJANW,MAAM,WAEN,MAAM,EAAE,GAEN,MAAM,CA8BlB;IA3ND;;;;;;;;;OASG;IACH,yBATW,MAAM,QAEN,IAAI,SACJ,MAAM,cAEN,MAAM,kBAEN,OAAO,UAAU,EAAE,OAAO,SASpC;IANC,iBAA2B;IAC3B,mCAAgB;IAChB,WAAmD;IACnD,+BAAgC;IAChC,cAAkB;IAClB,0CAAoB;IAGtB;;OAEG;IACH,sBAEC;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,uBAKC;IAED;;OAEG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uBALW,MAAM,GAGJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,cALW,YAAY,GAEV,OAAO,CAUnB;IAED;;;;;OAKG;IACH,wCAkGC;CAyCF;;;;;WA3Oa,MAAM;;;;YACN,MAAM;;;;;;OAKN,MAAM;;;;OACN,MAAM;;mBA+OP,OAAO,eAAe,EAAE,IAAI;sBAC5B,OAAO,eAAe,EAAE,OAAO;AA7P5C,2DAAqD;AADrD,qDAA+C;AAG/C,6CAAyC;AALzC,2DAAqD"}
@@ -1,14 +1,24 @@
1
1
  "use strict";
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.IMAGE_ELEMENT_PREFIX = exports.DEFAULT_TEMPLATE_IMAGE_SCALE = exports.IMAGE_EL_TAP_STRATEGY_W3C = exports.IMAGE_EL_TAP_STRATEGY_MJSONWP = exports.ImageElement = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
- const base_driver_1 = require("@appium/base-driver");
9
- const logger_1 = __importDefault(require("./logger"));
10
- const support_1 = require("@appium/support");
11
- const finder_1 = require("./finder");
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.ImageElement = exports.IMAGE_EL_TAP_STRATEGY_W3C = exports.IMAGE_EL_TAP_STRATEGY_MJSONWP = exports.IMAGE_ELEMENT_PREFIX = exports.DEFAULT_TEMPLATE_IMAGE_SCALE = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _lodash = _interopRequireDefault(require("lodash"));
13
+
14
+ var _driver = require("appium/driver");
15
+
16
+ var _support = require("appium/support");
17
+
18
+ var _logger = _interopRequireDefault(require("./logger"));
19
+
20
+ var _finder = require("./finder");
21
+
12
22
  const IMAGE_ELEMENT_PREFIX = 'appium-image-element-';
13
23
  exports.IMAGE_ELEMENT_PREFIX = IMAGE_ELEMENT_PREFIX;
14
24
  const TAP_DURATION_MS = 125;
@@ -16,227 +26,186 @@ const IMAGE_EL_TAP_STRATEGY_W3C = 'w3cActions';
16
26
  exports.IMAGE_EL_TAP_STRATEGY_W3C = IMAGE_EL_TAP_STRATEGY_W3C;
17
27
  const IMAGE_EL_TAP_STRATEGY_MJSONWP = 'touchActions';
18
28
  exports.IMAGE_EL_TAP_STRATEGY_MJSONWP = IMAGE_EL_TAP_STRATEGY_MJSONWP;
19
- const IMAGE_TAP_STRATEGIES = [
20
- IMAGE_EL_TAP_STRATEGY_MJSONWP,
21
- IMAGE_EL_TAP_STRATEGY_W3C
22
- ];
29
+ const IMAGE_TAP_STRATEGIES = [IMAGE_EL_TAP_STRATEGY_MJSONWP, IMAGE_EL_TAP_STRATEGY_W3C];
23
30
  const DEFAULT_TEMPLATE_IMAGE_SCALE = 1.0;
24
31
  exports.DEFAULT_TEMPLATE_IMAGE_SCALE = DEFAULT_TEMPLATE_IMAGE_SCALE;
25
- /**
26
- * @typedef {Object} Rect
27
- * @property {int} x - x-coordinate of top-left corner
28
- * @property {int} y - y-coordinate of top-left corner
29
- * @property {int} width - width of rect
30
- * @property {int} height - height of rect
31
- */
32
- /**
33
- * @typedef {Object} Dimension
34
- * @property {int} width - width of rect
35
- * @property {int} height - height of rect
36
- */
37
- /**
38
- * @typedef {Object} Position
39
- * @property {int} x - x coordinate
40
- * @property {int} y - y coordinate
41
- */
42
- /**
43
- * Representation of an "image element", which is simply a set of coordinates
44
- * and methods that can be used on that set of coordinates via the driver
45
- */
32
+
46
33
  class ImageElement {
47
- /**
48
- * @param {string} b64Template - the base64-encoded image which was used to
49
- * find this ImageElement
50
- * @param {Rect} rect - bounds of matched image element
51
- * @param {number} score The similarity score as a float number in range [0.0, 1.0].
52
- * 1.0 is the highest score (means both images are totally equal).
53
- * @param {?string} b64Result - the base64-encoded image which has matched marks.
54
- * Defaults to null.
55
- * @param {?ImageElementFinder} finder - the finder we can use to re-check stale elements
56
- *
57
- * @returns {ImageElement}
58
- */
59
- constructor(b64Template, rect, score, b64Result = null, finder = null) {
60
- this.template = b64Template;
61
- this.rect = rect;
62
- this.id = `${IMAGE_ELEMENT_PREFIX}${support_1.util.uuidV4()}`;
63
- this.b64MatchedImage = b64Result;
64
- this.score = score;
65
- this.finder = finder;
34
+ constructor(b64Template, rect, score, b64Result = null, finder = null) {
35
+ this.template = b64Template;
36
+ this.rect = rect;
37
+ this.id = `${IMAGE_ELEMENT_PREFIX}${_support.util.uuidV4()}`;
38
+ this.b64MatchedImage = b64Result;
39
+ this.score = score;
40
+ this.finder = finder;
41
+ }
42
+
43
+ get size() {
44
+ return {
45
+ width: this.rect.width,
46
+ height: this.rect.height
47
+ };
48
+ }
49
+
50
+ get location() {
51
+ return {
52
+ x: this.rect.x,
53
+ y: this.rect.y
54
+ };
55
+ }
56
+
57
+ get center() {
58
+ return {
59
+ x: this.rect.x + this.rect.width / 2,
60
+ y: this.rect.y + this.rect.height / 2
61
+ };
62
+ }
63
+
64
+ get matchedImage() {
65
+ return this.b64MatchedImage;
66
+ }
67
+
68
+ asElement(protocolKey) {
69
+ return {
70
+ [protocolKey]: this.id
71
+ };
72
+ }
73
+
74
+ equals(other) {
75
+ return this.rect.x === other.rect.x && this.rect.y === other.rect.y && this.rect.width === other.rect.width && this.rect.height === other.rect.height;
76
+ }
77
+
78
+ async click(driver) {
79
+ let newImgEl;
80
+ const settings = Object.assign({}, _finder.DEFAULT_SETTINGS, driver.settings.getSettings());
81
+ const {
82
+ autoUpdateImageElementPosition: updatePos,
83
+ checkForImageElementStaleness,
84
+ imageElementTapStrategy
85
+ } = settings;
86
+
87
+ if (!IMAGE_TAP_STRATEGIES.includes(imageElementTapStrategy)) {
88
+ throw new Error(`Incorrect imageElementTapStrategy setting ` + `'${imageElementTapStrategy}'. Must be one of ` + JSON.stringify(IMAGE_TAP_STRATEGIES));
66
89
  }
67
- /**
68
- * @returns {Dimension} - dimension of element
69
- */
70
- get size() {
71
- return { width: this.rect.width, height: this.rect.height };
72
- }
73
- /**
74
- * @returns {Position} - coordinates of top-left corner of element
75
- */
76
- get location() {
77
- return { x: this.rect.x, y: this.rect.y };
78
- }
79
- /**
80
- * @returns {Position} - coordinates of center of element
81
- */
82
- get center() {
83
- return {
84
- x: this.rect.x + this.rect.width / 2,
85
- y: this.rect.y + this.rect.height / 2,
86
- };
87
- }
88
- /**
89
- * @returns {?string} - the base64-encoded image which has matched marks
90
- */
91
- get matchedImage() {
92
- return this.b64MatchedImage;
93
- }
94
- /**
95
- * @param {string} protocolKey - the protocol-specific JSON key for
96
- * a WebElement
97
- *
98
- * @returns {WebElement} - this image element as a WebElement
99
- */
100
- asElement(protocolKey) {
101
- return { [protocolKey]: this.id };
90
+
91
+ if (checkForImageElementStaleness || updatePos) {
92
+ _logger.default.info('Checking image element for staleness before clicking');
93
+
94
+ try {
95
+ newImgEl = await this.finder.findByImage(this.template, {
96
+ shouldCheckStaleness: true,
97
+ ignoreDefaultImageTemplateScale: true
98
+ });
99
+ } catch (err) {
100
+ throw new _driver.errors.StaleElementReferenceError();
101
+ }
102
+
103
+ if (!this.equals(newImgEl)) {
104
+ _logger.default.warn(`When trying to click on an image element, the image changed ` + `position from where it was originally found. It is now at ` + `${JSON.stringify(newImgEl.rect)} and was originally at ` + `${JSON.stringify(this.rect)}.`);
105
+
106
+ if (updatePos) {
107
+ _logger.default.warn('Click will proceed at new coordinates');
108
+
109
+ this.rect = _lodash.default.clone(newImgEl.rect);
110
+ } else {
111
+ _logger.default.warn('Click will take place at original coordinates. If you ' + 'would like Appium to automatically click the new ' + "coordinates, set the 'autoUpdateImageElementPosition' " + 'setting to true');
112
+ }
113
+ }
102
114
  }
103
- /**
104
- * @param {ImageElement} other - an ImageElement to compare with this one
105
- *
106
- * @returns {boolean} - whether the other element and this one have the same
107
- * properties
108
- */
109
- equals(other) {
110
- return this.rect.x === other.rect.x &&
111
- this.rect.y === other.rect.y &&
112
- this.rect.width === other.rect.width &&
113
- this.rect.height === other.rect.height;
115
+
116
+ const {
117
+ x,
118
+ y
119
+ } = this.center;
120
+
121
+ _logger.default.info(`Will tap on image element at coordinate [${x}, ${y}]`);
122
+
123
+ if (imageElementTapStrategy === IMAGE_EL_TAP_STRATEGY_W3C) {
124
+ _logger.default.info('Will tap using W3C actions');
125
+
126
+ const action = {
127
+ type: 'pointer',
128
+ id: 'mouse',
129
+ parameters: {
130
+ pointerType: 'touch'
131
+ },
132
+ actions: [{
133
+ type: 'pointerMove',
134
+ x,
135
+ y,
136
+ duration: 0
137
+ }, {
138
+ type: 'pointerDown',
139
+ button: 0
140
+ }, {
141
+ type: 'pause',
142
+ duration: TAP_DURATION_MS
143
+ }, {
144
+ type: 'pointerUp',
145
+ button: 0
146
+ }]
147
+ };
148
+
149
+ if (driver.performActions) {
150
+ return await driver.performActions([action]);
151
+ }
152
+
153
+ _logger.default.warn('Driver does not seem to implement W3C actions, falling back ' + 'to TouchActions');
114
154
  }
115
- /**
116
- * Use a driver to tap the screen at the center of this ImageElement's
117
- * position
118
- *
119
- * @param {BaseDriver} driver - driver for calling actions with
120
- */
121
- async click(driver) {
122
- // before we click we need to make sure the element is actually still there
123
- // where we expect it to be
124
- let newImgEl;
125
- const settings = Object.assign({}, finder_1.DEFAULT_SETTINGS, driver.settings.getSettings());
126
- const { autoUpdateImageElementPosition: updatePos, checkForImageElementStaleness, imageElementTapStrategy, } = settings;
127
- // validate tap strategy
128
- if (!IMAGE_TAP_STRATEGIES.includes(imageElementTapStrategy)) {
129
- throw new Error(`Incorrect imageElementTapStrategy setting ` +
130
- `'${imageElementTapStrategy}'. Must be one of ` +
131
- JSON.stringify(IMAGE_TAP_STRATEGIES));
132
- }
133
- if (checkForImageElementStaleness || updatePos) {
134
- logger_1.default.info('Checking image element for staleness before clicking');
135
- try {
136
- newImgEl = await this.finder.findByImage(this.template, {
137
- shouldCheckStaleness: true,
138
- // Set ignoreDefaultImageTemplateScale because this.template is device screenshot based image
139
- // managed inside Appium after finidng image by template which managed by a user
140
- ignoreDefaultImageTemplateScale: true
141
- });
142
- }
143
- catch (err) {
144
- throw new base_driver_1.errors.StaleElementReferenceError();
145
- }
146
- if (!this.equals(newImgEl)) {
147
- logger_1.default.warn(`When trying to click on an image element, the image changed ` +
148
- `position from where it was originally found. It is now at ` +
149
- `${JSON.stringify(newImgEl.rect)} and was originally at ` +
150
- `${JSON.stringify(this.rect)}.`);
151
- if (updatePos) {
152
- logger_1.default.warn('Click will proceed at new coordinates');
153
- this.rect = lodash_1.default.clone(newImgEl.rect);
154
- }
155
- else {
156
- logger_1.default.warn('Click will take place at original coordinates. If you ' +
157
- 'would like Appium to automatically click the new ' +
158
- "coordinates, set the 'autoUpdateImageElementPosition' " +
159
- 'setting to true');
160
- }
161
- }
162
- }
163
- const { x, y } = this.center;
164
- logger_1.default.info(`Will tap on image element at coordinate [${x}, ${y}]`);
165
- if (imageElementTapStrategy === IMAGE_EL_TAP_STRATEGY_W3C) {
166
- // set up a W3C action to click on the image by position
167
- logger_1.default.info('Will tap using W3C actions');
168
- const action = {
169
- type: 'pointer',
170
- id: 'mouse',
171
- parameters: { pointerType: 'touch' },
172
- actions: [
173
- { type: 'pointerMove', x, y, duration: 0 },
174
- { type: 'pointerDown', button: 0 },
175
- { type: 'pause', duration: TAP_DURATION_MS },
176
- { type: 'pointerUp', button: 0 },
177
- ]
178
- };
179
- // check if the driver has the appropriate performActions method
180
- if (driver.performActions) {
181
- return await driver.performActions([action]);
182
- }
183
- // if not, warn and fall back to the other method
184
- logger_1.default.warn('Driver does not seem to implement W3C actions, falling back ' +
185
- 'to TouchActions');
186
- }
187
- // if the w3c strategy was not requested, do the only other option (mjsonwp
188
- // touch actions)
189
- logger_1.default.info('Will tap using MJSONWP TouchActions');
190
- const action = {
191
- action: 'tap',
192
- options: { x, y }
193
- };
194
- if (driver.performTouch) {
195
- return await driver.performTouch([action]);
196
- }
197
- throw new Error("Driver did not implement the 'performTouch' command. " +
198
- 'For drivers to support finding image elements, they ' +
199
- "should support 'performTouch' and 'performActions'");
155
+
156
+ _logger.default.info('Will tap using MJSONWP TouchActions');
157
+
158
+ const action = {
159
+ action: 'tap',
160
+ options: {
161
+ x,
162
+ y
163
+ }
164
+ };
165
+
166
+ if (driver.performTouch) {
167
+ return await driver.performTouch([action]);
200
168
  }
201
- /**
202
- * Handle various Appium commands that involve an image element
203
- *
204
- * @param {BaseDriver} driver - the driver to use for commands
205
- * @param {string} cmd - the name of the driver command
206
- * @param {string} imgElId - the id of the ImageElement to work with
207
- * @param {Array} args - Rest of arguments for executeScripts
208
- *
209
- * @returns {Object} - the result of running a command
210
- */
211
- static async execute(driver, imgEl, cmd, ...args) {
212
- switch (cmd) {
213
- case 'click':
214
- return await imgEl.click(driver);
215
- case 'elementDisplayed':
216
- return true;
217
- case 'getSize':
218
- return imgEl.size;
219
- case 'getLocation':
220
- case 'getLocationInView':
221
- return imgEl.location;
222
- case 'getElementRect':
223
- return imgEl.rect;
224
- case 'getAttribute':
225
- // /session/:sessionId/element/:elementId/attribute/:name
226
- // /session/:sessionId/element/:elementId/attribute/visual should retun the visual data
227
- // e.g. ["content-desc","appium-image-element-xxxxx","xxxxx"], ["visual","appium-image-element-xxxxx","xxxxx"]
228
- switch (args[0]) {
229
- case 'visual':
230
- return imgEl.matchedImage;
231
- case 'score':
232
- return imgEl.score;
233
- default:
234
- throw new base_driver_1.errors.NotYetImplementedError();
235
- }
236
- default: throw new base_driver_1.errors.NotYetImplementedError();
169
+
170
+ throw new Error("Driver did not implement the 'performTouch' command. " + 'For drivers to support finding image elements, they ' + "should support 'performTouch' and 'performActions'");
171
+ }
172
+
173
+ static async execute(driver, imgEl, cmd, ...args) {
174
+ switch (cmd) {
175
+ case 'click':
176
+ return await imgEl.click(driver);
177
+
178
+ case 'elementDisplayed':
179
+ return true;
180
+
181
+ case 'getSize':
182
+ return imgEl.size;
183
+
184
+ case 'getLocation':
185
+ case 'getLocationInView':
186
+ return imgEl.location;
187
+
188
+ case 'getElementRect':
189
+ return imgEl.rect;
190
+
191
+ case 'getAttribute':
192
+ switch (args[0]) {
193
+ case 'visual':
194
+ return imgEl.matchedImage;
195
+
196
+ case 'score':
197
+ return imgEl.score;
198
+
199
+ default:
200
+ throw new _driver.errors.NotYetImplementedError();
237
201
  }
202
+
203
+ default:
204
+ throw new _driver.errors.NotYetImplementedError();
238
205
  }
206
+ }
207
+
239
208
  }
240
- exports.default = ImageElement;
241
- exports.ImageElement = ImageElement;
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbWFnZS1lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QixxREFBNkM7QUFDN0Msc0RBQTJCO0FBQzNCLDZDQUF1QztBQUN2QyxxQ0FBNEM7QUFFNUMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztBQTRQckIsb0RBQW9CO0FBM1BwRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsTUFBTSx5QkFBeUIsR0FBRyxZQUFZLENBQUM7QUF5UEEsOERBQXlCO0FBeFB4RSxNQUFNLDZCQUE2QixHQUFHLGNBQWMsQ0FBQztBQXdQckMsc0VBQTZCO0FBdlA3QyxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLDZCQUE2QjtJQUM3Qix5QkFBeUI7Q0FDMUIsQ0FBQztBQUNGLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBb1B2QyxvRUFBNEI7QUFsUDlCOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBQ0gsTUFBcUIsWUFBWTtJQUUvQjs7Ozs7Ozs7Ozs7T0FXRztJQUNILFlBQWEsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsb0JBQW9CLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FB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
209
+
210
+ exports.ImageElement = exports.default = ImageElement;
211
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTUFHRV9FTEVNRU5UX1BSRUZJWCIsIlRBUF9EVVJBVElPTl9NUyIsIklNQUdFX0VMX1RBUF9TVFJBVEVHWV9XM0MiLCJJTUFHRV9FTF9UQVBfU1RSQVRFR1lfTUpTT05XUCIsIklNQUdFX1RBUF9TVFJBVEVHSUVTIiwiREVGQVVMVF9URU1QTEFURV9JTUFHRV9TQ0FMRSIsIkltYWdlRWxlbWVudCIsImNvbnN0cnVjdG9yIiwiYjY0VGVtcGxhdGUiLCJyZWN0Iiwic2NvcmUiLCJiNjRSZXN1bHQiLCJmaW5kZXIiLCJ0ZW1wbGF0ZSIsImlkIiwidXRpbCIsInV1aWRWNCIsImI2NE1hdGNoZWRJbWFnZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxvY2F0aW9uIiwieCIsInkiLCJjZW50ZXIiLCJtYXRjaGVkSW1hZ2UiLCJhc0VsZW1lbnQiLCJwcm90b2NvbEtleSIsImVxdWFscyIsIm90aGVyIiwiY2xpY2siLCJkcml2ZXIiLCJuZXdJbWdFbCIsInNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwiREVGQVVMVF9TRVRUSU5HUyIsImdldFNldHRpbmdzIiwiYXV0b1VwZGF0ZUltYWdlRWxlbWVudFBvc2l0aW9uIiwidXBkYXRlUG9zIiwiY2hlY2tGb3JJbWFnZUVsZW1lbnRTdGFsZW5lc3MiLCJpbWFnZUVsZW1lbnRUYXBTdHJhdGVneSIsImluY2x1ZGVzIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwibG9nIiwiaW5mbyIsImZpbmRCeUltYWdlIiwic2hvdWxkQ2hlY2tTdGFsZW5lc3MiLCJpZ25vcmVEZWZhdWx0SW1hZ2VUZW1wbGF0ZVNjYWxlIiwiZXJyIiwiZXJyb3JzIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJ3YXJuIiwiXyIsImNsb25lIiwiYWN0aW9uIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwb2ludGVyVHlwZSIsImFjdGlvbnMiLCJkdXJhdGlvbiIsImJ1dHRvbiIsInBlcmZvcm1BY3Rpb25zIiwib3B0aW9ucyIsInBlcmZvcm1Ub3VjaCIsImV4ZWN1dGUiLCJpbWdFbCIsImNtZCIsImFyZ3MiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2ltYWdlLWVsZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7dXRpbH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge0RFRkFVTFRfU0VUVElOR1N9IGZyb20gJy4vZmluZGVyJztcblxuY29uc3QgSU1BR0VfRUxFTUVOVF9QUkVGSVggPSAnYXBwaXVtLWltYWdlLWVsZW1lbnQtJztcbmNvbnN0IFRBUF9EVVJBVElPTl9NUyA9IDEyNTtcbmNvbnN0IElNQUdFX0VMX1RBUF9TVFJBVEVHWV9XM0MgPSAndzNjQWN0aW9ucyc7XG5jb25zdCBJTUFHRV9FTF9UQVBfU1RSQVRFR1lfTUpTT05XUCA9ICd0b3VjaEFjdGlvbnMnO1xuY29uc3QgSU1BR0VfVEFQX1NUUkFURUdJRVMgPSBbSU1BR0VfRUxfVEFQX1NUUkFURUdZX01KU09OV1AsIElNQUdFX0VMX1RBUF9TVFJBVEVHWV9XM0NdO1xuY29uc3QgREVGQVVMVF9URU1QTEFURV9JTUFHRV9TQ0FMRSA9IDEuMDtcblxuLyoqXG4gKiBAdHlwZWRlZiBEaW1lbnNpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIHdpZHRoIG9mIHJlY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBoZWlnaHQgb2YgcmVjdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0geCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0geSAtIHkgY29vcmRpbmF0ZVxuICovXG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYW4gXCJpbWFnZSBlbGVtZW50XCIsIHdoaWNoIGlzIHNpbXBseSBhIHNldCBvZiBjb29yZGluYXRlc1xuICogYW5kIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCBvbiB0aGF0IHNldCBvZiBjb29yZGluYXRlcyB2aWEgdGhlIGRyaXZlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUVsZW1lbnQge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGI2NFRlbXBsYXRlIC0gdGhlIGJhc2U2NC1lbmNvZGVkIGltYWdlIHdoaWNoIHdhcyB1c2VkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgdGhpcyBJbWFnZUVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWN0fSByZWN0IC0gYm91bmRzIG9mIG1hdGNoZWQgaW1hZ2UgZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gc2NvcmUgVGhlIHNpbWlsYXJpdHkgc2NvcmUgYXMgYSBmbG9hdCBudW1iZXIgaW4gcmFuZ2UgWzAuMCwgMS4wXS5cbiAgICogMS4wIGlzIHRoZSBoaWdoZXN0IHNjb3JlIChtZWFucyBib3RoIGltYWdlcyBhcmUgdG90YWxseSBlcXVhbCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nP30gYjY0UmVzdWx0IC0gdGhlIGJhc2U2NC1lbmNvZGVkIGltYWdlIHdoaWNoIGhhcyBtYXRjaGVkIG1hcmtzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIG51bGwuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbmRlcicpLmRlZmF1bHQ/fSBmaW5kZXIgLSB0aGUgZmluZGVyIHdlIGNhbiB1c2UgdG8gcmUtY2hlY2sgc3RhbGUgZWxlbWVudHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGI2NFRlbXBsYXRlLCByZWN0LCBzY29yZSwgYjY0UmVzdWx0ID0gbnVsbCwgZmluZGVyID0gbnVsbCkge1xuICAgIHRoaXMudGVtcGxhdGUgPSBiNjRUZW1wbGF0ZTtcbiAgICB0aGlzLnJlY3QgPSByZWN0O1xuICAgIHRoaXMuaWQgPSBgJHtJTUFHRV9FTEVNRU5UX1BSRUZJWH0ke3V0aWwudXVpZFY0KCl9YDtcbiAgICB0aGlzLmI2NE1hdGNoZWRJbWFnZSA9IGI2NFJlc3VsdDtcbiAgICB0aGlzLnNjb3JlID0gc2NvcmU7XG4gICAgdGhpcy5maW5kZXIgPSBmaW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0RpbWVuc2lvbn0gLSBkaW1lbnNpb24gb2YgZWxlbWVudFxuICAgKi9cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHt3aWR0aDogdGhpcy5yZWN0LndpZHRoLCBoZWlnaHQ6IHRoaXMucmVjdC5oZWlnaHR9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQb3NpdGlvbn0gLSBjb29yZGluYXRlcyBvZiB0b3AtbGVmdCBjb3JuZXIgb2YgZWxlbWVudFxuICAgKi9cbiAgZ2V0IGxvY2F0aW9uKCkge1xuICAgIHJldHVybiB7eDogdGhpcy5yZWN0LngsIHk6IHRoaXMucmVjdC55fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UG9zaXRpb259IC0gY29vcmRpbmF0ZXMgb2YgY2VudGVyIG9mIGVsZW1lbnRcbiAgICovXG4gIGdldCBjZW50ZXIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMixcbiAgICAgIHk6IHRoaXMucmVjdC55ICsgdGhpcy5yZWN0LmhlaWdodCAvIDIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7P3N0cmluZ30gLSB0aGUgYmFzZTY0LWVuY29kZWQgaW1hZ2Ugd2hpY2ggaGFzIG1hdGNoZWQgbWFya3NcbiAgICovXG4gIGdldCBtYXRjaGVkSW1hZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuYjY0TWF0Y2hlZEltYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbEtleSAtIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBKU09OIGtleSBmb3JcbiAgICogYSBXZWJFbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIHRoaXMgaW1hZ2UgZWxlbWVudCBhcyBhIFdlYkVsZW1lbnRcbiAgICovXG4gIGFzRWxlbWVudChwcm90b2NvbEtleSkge1xuICAgIHJldHVybiB7W3Byb3RvY29sS2V5XTogdGhpcy5pZH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtJbWFnZUVsZW1lbnR9IG90aGVyIC0gYW4gSW1hZ2VFbGVtZW50IHRvIGNvbXBhcmUgd2l0aCB0aGlzIG9uZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB3aGV0aGVyIHRoZSBvdGhlciBlbGVtZW50IGFuZCB0aGlzIG9uZSBoYXZlIHRoZSBzYW1lXG4gICAqIHByb3BlcnRpZXNcbiAgICovXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlY3QueCA9PT0gb3RoZXIucmVjdC54ICYmXG4gICAgICB0aGlzLnJlY3QueSA9PT0gb3RoZXIucmVjdC55ICYmXG4gICAgICB0aGlzLnJlY3Qud2lkdGggPT09IG90aGVyLnJlY3Qud2lkdGggJiZcbiAgICAgIHRoaXMucmVjdC5oZWlnaHQgPT09IG90aGVyLnJlY3QuaGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgYSBkcml2ZXIgdG8gdGFwIHRoZSBzY3JlZW4gYXQgdGhlIGNlbnRlciBvZiB0aGlzIEltYWdlRWxlbWVudCdzXG4gICAqIHBvc2l0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZURyaXZlcn0gZHJpdmVyIC0gZHJpdmVyIGZvciBjYWxsaW5nIGFjdGlvbnMgd2l0aFxuICAgKi9cbiAgYXN5bmMgY2xpY2soZHJpdmVyKSB7XG4gICAgLy8gYmVmb3JlIHdlIGNsaWNrIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIGFjdHVhbGx5IHN0aWxsIHRoZXJlXG4gICAgLy8gd2hlcmUgd2UgZXhwZWN0IGl0IHRvIGJlXG4gICAgbGV0IG5ld0ltZ0VsO1xuICAgIGNvbnN0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgZHJpdmVyLnNldHRpbmdzLmdldFNldHRpbmdzKCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dG9VcGRhdGVJbWFnZUVsZW1lbnRQb3NpdGlvbjogdXBkYXRlUG9zLFxuICAgICAgY2hlY2tGb3JJbWFnZUVsZW1lbnRTdGFsZW5lc3MsXG4gICAgICBpbWFnZUVsZW1lbnRUYXBTdHJhdGVneSxcbiAgICB9ID0gc2V0dGluZ3M7XG5cbiAgICAvLyB2YWxpZGF0ZSB0YXAgc3RyYXRlZ3lcbiAgICBpZiAoIUlNQUdFX1RBUF9TVFJBVEVHSUVTLmluY2x1ZGVzKGltYWdlRWxlbWVudFRhcFN0cmF0ZWd5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW5jb3JyZWN0IGltYWdlRWxlbWVudFRhcFN0cmF0ZWd5IHNldHRpbmcgYCArXG4gICAgICAgICAgYCcke2ltYWdlRWxlbWVudFRhcFN0cmF0ZWd5fScuIE11c3QgYmUgb25lIG9mIGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KElNQUdFX1RBUF9TVFJBVEVHSUVTKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tGb3JJbWFnZUVsZW1lbnRTdGFsZW5lc3MgfHwgdXBkYXRlUG9zKSB7XG4gICAgICBsb2cuaW5mbygnQ2hlY2tpbmcgaW1hZ2UgZWxlbWVudCBmb3Igc3RhbGVuZXNzIGJlZm9yZSBjbGlja2luZycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3SW1nRWwgPSBhd2FpdCB0aGlzLmZpbmRlci5maW5kQnlJbWFnZSh0aGlzLnRlbXBsYXRlLCB7XG4gICAgICAgICAgc2hvdWxkQ2hlY2tTdGFsZW5lc3M6IHRydWUsXG4gICAgICAgICAgLy8gU2V0IGlnbm9yZURlZmF1bHRJbWFnZVRlbXBsYXRlU2NhbGUgYmVjYXVzZSB0aGlzLnRlbXBsYXRlIGlzIGRldmljZSBzY3JlZW5zaG90IGJhc2VkIGltYWdlXG4gICAgICAgICAgLy8gbWFuYWdlZCBpbnNpZGUgQXBwaXVtIGFmdGVyIGZpbmlkbmcgaW1hZ2UgYnkgdGVtcGxhdGUgd2hpY2ggbWFuYWdlZCBieSBhIHVzZXJcbiAgICAgICAgICBpZ25vcmVEZWZhdWx0SW1hZ2VUZW1wbGF0ZVNjYWxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5lcXVhbHMobmV3SW1nRWwpKSB7XG4gICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgIGBXaGVuIHRyeWluZyB0byBjbGljayBvbiBhbiBpbWFnZSBlbGVtZW50LCB0aGUgaW1hZ2UgY2hhbmdlZCBgICtcbiAgICAgICAgICAgIGBwb3NpdGlvbiBmcm9tIHdoZXJlIGl0IHdhcyBvcmlnaW5hbGx5IGZvdW5kLiBJdCBpcyBub3cgYXQgYCArXG4gICAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShuZXdJbWdFbC5yZWN0KX0gYW5kIHdhcyBvcmlnaW5hbGx5IGF0IGAgK1xuICAgICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWN0KX0uYFxuICAgICAgICApO1xuICAgICAgICBpZiAodXBkYXRlUG9zKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0NsaWNrIHdpbGwgcHJvY2VlZCBhdCBuZXcgY29vcmRpbmF0ZXMnKTtcbiAgICAgICAgICB0aGlzLnJlY3QgPSBfLmNsb25lKG5ld0ltZ0VsLnJlY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgJ0NsaWNrIHdpbGwgdGFrZSBwbGFjZSBhdCBvcmlnaW5hbCBjb29yZGluYXRlcy4gSWYgeW91ICcgK1xuICAgICAgICAgICAgICAnd291bGQgbGlrZSBBcHBpdW0gdG8gYXV0b21hdGljYWxseSBjbGljayB0aGUgbmV3ICcgK1xuICAgICAgICAgICAgICBcImNvb3JkaW5hdGVzLCBzZXQgdGhlICdhdXRvVXBkYXRlSW1hZ2VFbGVtZW50UG9zaXRpb24nIFwiICtcbiAgICAgICAgICAgICAgJ3NldHRpbmcgdG8gdHJ1ZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qge3gsIHl9ID0gdGhpcy5jZW50ZXI7XG4gICAgbG9nLmluZm8oYFdpbGwgdGFwIG9uIGltYWdlIGVsZW1lbnQgYXQgY29vcmRpbmF0ZSBbJHt4fSwgJHt5fV1gKTtcblxuICAgIGlmIChpbWFnZUVsZW1lbnRUYXBTdHJhdGVneSA9PT0gSU1BR0VfRUxfVEFQX1NUUkFURUdZX1czQykge1xuICAgICAgLy8gc2V0IHVwIGEgVzNDIGFjdGlvbiB0byBjbGljayBvbiB0aGUgaW1hZ2UgYnkgcG9zaXRpb25cbiAgICAgIGxvZy5pbmZvKCdXaWxsIHRhcCB1c2luZyBXM0MgYWN0aW9ucycpO1xuICAgICAgY29uc3QgYWN0aW9uID0ge1xuICAgICAgICB0eXBlOiAncG9pbnRlcicsXG4gICAgICAgIGlkOiAnbW91c2UnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7cG9pbnRlclR5cGU6ICd0b3VjaCd9LFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAge3R5cGU6ICdwb2ludGVyTW92ZScsIHgsIHksIGR1cmF0aW9uOiAwfSxcbiAgICAgICAgICB7dHlwZTogJ3BvaW50ZXJEb3duJywgYnV0dG9uOiAwfSxcbiAgICAgICAgICB7dHlwZTogJ3BhdXNlJywgZHVyYXRpb246IFRBUF9EVVJBVElPTl9NU30sXG4gICAgICAgICAge3R5cGU6ICdwb2ludGVyVXAnLCBidXR0b246IDB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRyaXZlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHBlcmZvcm1BY3Rpb25zIG1ldGhvZFxuICAgICAgaWYgKGRyaXZlci5wZXJmb3JtQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgZHJpdmVyLnBlcmZvcm1BY3Rpb25zKFthY3Rpb25dKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgbm90LCB3YXJuIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIG1ldGhvZFxuICAgICAgbG9nLndhcm4oJ0RyaXZlciBkb2VzIG5vdCBzZWVtIHRvIGltcGxlbWVudCBXM0MgYWN0aW9ucywgZmFsbGluZyBiYWNrICcgKyAndG8gVG91Y2hBY3Rpb25zJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHczYyBzdHJhdGVneSB3YXMgbm90IHJlcXVlc3RlZCwgZG8gdGhlIG9ubHkgb3RoZXIgb3B0aW9uIChtanNvbndwXG4gICAgLy8gdG91Y2ggYWN0aW9ucylcbiAgICBsb2cuaW5mbygnV2lsbCB0YXAgdXNpbmcgTUpTT05XUCBUb3VjaEFjdGlvbnMnKTtcbiAgICBjb25zdCBhY3Rpb24gPSB7XG4gICAgICBhY3Rpb246ICd0YXAnLFxuICAgICAgb3B0aW9uczoge3gsIHl9LFxuICAgIH07XG5cbiAgICBpZiAoZHJpdmVyLnBlcmZvcm1Ub3VjaCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGRyaXZlci5wZXJmb3JtVG91Y2goW2FjdGlvbl0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiRHJpdmVyIGRpZCBub3QgaW1wbGVtZW50IHRoZSAncGVyZm9ybVRvdWNoJyBjb21tYW5kLiBcIiArXG4gICAgICAgICdGb3IgZHJpdmVycyB0byBzdXBwb3J0IGZpbmRpbmcgaW1hZ2UgZWxlbWVudHMsIHRoZXkgJyArXG4gICAgICAgIFwic2hvdWxkIHN1cHBvcnQgJ3BlcmZvcm1Ub3VjaCcgYW5kICdwZXJmb3JtQWN0aW9ucydcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHZhcmlvdXMgQXBwaXVtIGNvbW1hbmRzIHRoYXQgaW52b2x2ZSBhbiBpbWFnZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdhcHBpdW0vZHJpdmVyJykuQmFzZURyaXZlcn0gZHJpdmVyIC0gdGhlIGRyaXZlciB0byB1c2UgZm9yIGNvbW1hbmRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWQgLSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIGNvbW1hbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGltZ0VsSWQgLSB0aGUgaWQgb2YgdGhlIEltYWdlRWxlbWVudCB0byB3b3JrIHdpdGhcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIFJlc3Qgb2YgYXJndW1lbnRzIGZvciBleGVjdXRlU2NyaXB0c1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvbW1hbmRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBleGVjdXRlKGRyaXZlciwgaW1nRWwsIGNtZCwgLi4uYXJncykge1xuICAgIHN3aXRjaCAoY21kKSB7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIHJldHVybiBhd2FpdCBpbWdFbC5jbGljayhkcml2ZXIpO1xuICAgICAgY2FzZSAnZWxlbWVudERpc3BsYXllZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnZ2V0U2l6ZSc6XG4gICAgICAgIHJldHVybiBpbWdFbC5zaXplO1xuICAgICAgY2FzZSAnZ2V0TG9jYXRpb24nOlxuICAgICAgY2FzZSAnZ2V0TG9jYXRpb25JblZpZXcnOlxuICAgICAgICByZXR1cm4gaW1nRWwubG9jYXRpb247XG4gICAgICBjYXNlICdnZXRFbGVtZW50UmVjdCc6XG4gICAgICAgIHJldHVybiBpbWdFbC5yZWN0O1xuICAgICAgY2FzZSAnZ2V0QXR0cmlidXRlJzpcbiAgICAgICAgLy8gL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50LzplbGVtZW50SWQvYXR0cmlidXRlLzpuYW1lXG4gICAgICAgIC8vIC9zZXNzaW9uLzpzZXNzaW9uSWQvZWxlbWVudC86ZWxlbWVudElkL2F0dHJpYnV0ZS92aXN1YWwgc2hvdWxkIHJldHVuIHRoZSB2aXN1YWwgZGF0YVxuICAgICAgICAvLyBlLmcuIFtcImNvbnRlbnQtZGVzY1wiLFwiYXBwaXVtLWltYWdlLWVsZW1lbnQteHh4eHhcIixcInh4eHh4XCJdLCBbXCJ2aXN1YWxcIixcImFwcGl1bS1pbWFnZS1lbGVtZW50LXh4eHh4XCIsXCJ4eHh4eFwiXVxuICAgICAgICBzd2l0Y2ggKGFyZ3NbMF0pIHtcbiAgICAgICAgICBjYXNlICd2aXN1YWwnOlxuICAgICAgICAgICAgcmV0dXJuIGltZ0VsLm1hdGNoZWRJbWFnZTtcbiAgICAgICAgICBjYXNlICdzY29yZSc6XG4gICAgICAgICAgICByZXR1cm4gaW1nRWwuc2NvcmU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgSW1hZ2VFbGVtZW50LFxuICBJTUFHRV9FTF9UQVBfU1RSQVRFR1lfTUpTT05XUCxcbiAgSU1BR0VfRUxfVEFQX1NUUkFURUdZX1czQyxcbiAgREVGQVVMVF9URU1QTEFURV9JTUFHRV9TQ0FMRSxcbiAgSU1BR0VfRUxFTUVOVF9QUkVGSVgsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5SZWN0fSBSZWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsb0JBQW9CLEdBQUcsdUJBQTdCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxHQUF4QjtBQUNB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
@@ -0,0 +1,3 @@
1
+ export default log;
2
+ declare const log: import("@appium/types").AppiumLogger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.js"],"names":[],"mappings":";AAEA,wDAAmD"}
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const support_1 = require("@appium/support");
4
- const log = support_1.logger.getLogger('ImageElementPlugin');
5
- exports.default = log;
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUF5QztBQUN6QyxNQUFNLEdBQUcsR0FBRyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ25ELGtCQUFlLEdBQUcsQ0FBQyJ9
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("source-map-support/register");
9
+
10
+ var _support = require("appium/support");
11
+
12
+ const log = _support.logger.getLogger('ImageElementPlugin');
13
+
14
+ var _default = log;
15
+ exports.default = _default;
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bG9nZ2VyfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0ltYWdlRWxlbWVudFBsdWdpbicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLG9CQUFqQixDQUFaOztlQUVlRixHIn0=