@appium/images-plugin 1.2.3 → 1.3.2

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,23 +1,24 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- 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;
16
- const lodash_1 = __importDefault(require("lodash"));
17
- const base_driver_1 = require("@appium/base-driver");
18
- const logger_1 = __importDefault(require("./logger"));
19
- const support_1 = require("@appium/support");
20
- 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
+
21
22
  const IMAGE_ELEMENT_PREFIX = 'appium-image-element-';
22
23
  exports.IMAGE_ELEMENT_PREFIX = IMAGE_ELEMENT_PREFIX;
23
24
  const TAP_DURATION_MS = 125;
@@ -25,231 +26,186 @@ const IMAGE_EL_TAP_STRATEGY_W3C = 'w3cActions';
25
26
  exports.IMAGE_EL_TAP_STRATEGY_W3C = IMAGE_EL_TAP_STRATEGY_W3C;
26
27
  const IMAGE_EL_TAP_STRATEGY_MJSONWP = 'touchActions';
27
28
  exports.IMAGE_EL_TAP_STRATEGY_MJSONWP = IMAGE_EL_TAP_STRATEGY_MJSONWP;
28
- const IMAGE_TAP_STRATEGIES = [
29
- IMAGE_EL_TAP_STRATEGY_MJSONWP,
30
- IMAGE_EL_TAP_STRATEGY_W3C
31
- ];
29
+ const IMAGE_TAP_STRATEGIES = [IMAGE_EL_TAP_STRATEGY_MJSONWP, IMAGE_EL_TAP_STRATEGY_W3C];
32
30
  const DEFAULT_TEMPLATE_IMAGE_SCALE = 1.0;
33
31
  exports.DEFAULT_TEMPLATE_IMAGE_SCALE = DEFAULT_TEMPLATE_IMAGE_SCALE;
34
- /**
35
- * @typedef {Object} Rect
36
- * @property {int} x - x-coordinate of top-left corner
37
- * @property {int} y - y-coordinate of top-left corner
38
- * @property {int} width - width of rect
39
- * @property {int} height - height of rect
40
- */
41
- /**
42
- * @typedef {Object} Dimension
43
- * @property {int} width - width of rect
44
- * @property {int} height - height of rect
45
- */
46
- /**
47
- * @typedef {Object} Position
48
- * @property {int} x - x coordinate
49
- * @property {int} y - y coordinate
50
- */
51
- /**
52
- * Representation of an "image element", which is simply a set of coordinates
53
- * and methods that can be used on that set of coordinates via the driver
54
- */
32
+
55
33
  class ImageElement {
56
- /**
57
- * @param {string} b64Template - the base64-encoded image which was used to
58
- * find this ImageElement
59
- * @param {Rect} rect - bounds of matched image element
60
- * @param {number} score The similarity score as a float number in range [0.0, 1.0].
61
- * 1.0 is the highest score (means both images are totally equal).
62
- * @param {?string} b64Result - the base64-encoded image which has matched marks.
63
- * Defaults to null.
64
- * @param {?ImageElementFinder} finder - the finder we can use to re-check stale elements
65
- *
66
- * @returns {ImageElement}
67
- */
68
- constructor(b64Template, rect, score, b64Result = null, finder = null) {
69
- this.template = b64Template;
70
- this.rect = rect;
71
- this.id = `${IMAGE_ELEMENT_PREFIX}${support_1.util.uuidV4()}`;
72
- this.b64MatchedImage = b64Result;
73
- this.score = score;
74
- 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));
75
89
  }
76
- /**
77
- * @returns {Dimension} - dimension of element
78
- */
79
- get size() {
80
- return { width: this.rect.width, height: this.rect.height };
81
- }
82
- /**
83
- * @returns {Position} - coordinates of top-left corner of element
84
- */
85
- get location() {
86
- return { x: this.rect.x, y: this.rect.y };
87
- }
88
- /**
89
- * @returns {Position} - coordinates of center of element
90
- */
91
- get center() {
92
- return {
93
- x: this.rect.x + this.rect.width / 2,
94
- y: this.rect.y + this.rect.height / 2,
95
- };
96
- }
97
- /**
98
- * @returns {?string} - the base64-encoded image which has matched marks
99
- */
100
- get matchedImage() {
101
- return this.b64MatchedImage;
102
- }
103
- /**
104
- * @param {string} protocolKey - the protocol-specific JSON key for
105
- * a WebElement
106
- *
107
- * @returns {WebElement} - this image element as a WebElement
108
- */
109
- asElement(protocolKey) {
110
- 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
+ }
111
114
  }
112
- /**
113
- * @param {ImageElement} other - an ImageElement to compare with this one
114
- *
115
- * @returns {boolean} - whether the other element and this one have the same
116
- * properties
117
- */
118
- equals(other) {
119
- return this.rect.x === other.rect.x &&
120
- this.rect.y === other.rect.y &&
121
- this.rect.width === other.rect.width &&
122
- 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');
123
154
  }
124
- /**
125
- * Use a driver to tap the screen at the center of this ImageElement's
126
- * position
127
- *
128
- * @param {BaseDriver} driver - driver for calling actions with
129
- */
130
- click(driver) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- // before we click we need to make sure the element is actually still there
133
- // where we expect it to be
134
- let newImgEl;
135
- const settings = Object.assign({}, finder_1.DEFAULT_SETTINGS, driver.settings.getSettings());
136
- const { autoUpdateImageElementPosition: updatePos, checkForImageElementStaleness, imageElementTapStrategy, } = settings;
137
- // validate tap strategy
138
- if (!IMAGE_TAP_STRATEGIES.includes(imageElementTapStrategy)) {
139
- throw new Error(`Incorrect imageElementTapStrategy setting ` +
140
- `'${imageElementTapStrategy}'. Must be one of ` +
141
- JSON.stringify(IMAGE_TAP_STRATEGIES));
142
- }
143
- if (checkForImageElementStaleness || updatePos) {
144
- logger_1.default.info('Checking image element for staleness before clicking');
145
- try {
146
- newImgEl = yield this.finder.findByImage(this.template, {
147
- shouldCheckStaleness: true,
148
- // Set ignoreDefaultImageTemplateScale because this.template is device screenshot based image
149
- // managed inside Appium after finidng image by template which managed by a user
150
- ignoreDefaultImageTemplateScale: true
151
- });
152
- }
153
- catch (err) {
154
- throw new base_driver_1.errors.StaleElementReferenceError();
155
- }
156
- if (!this.equals(newImgEl)) {
157
- logger_1.default.warn(`When trying to click on an image element, the image changed ` +
158
- `position from where it was originally found. It is now at ` +
159
- `${JSON.stringify(newImgEl.rect)} and was originally at ` +
160
- `${JSON.stringify(this.rect)}.`);
161
- if (updatePos) {
162
- logger_1.default.warn('Click will proceed at new coordinates');
163
- this.rect = lodash_1.default.clone(newImgEl.rect);
164
- }
165
- else {
166
- logger_1.default.warn('Click will take place at original coordinates. If you ' +
167
- 'would like Appium to automatically click the new ' +
168
- "coordinates, set the 'autoUpdateImageElementPosition' " +
169
- 'setting to true');
170
- }
171
- }
172
- }
173
- const { x, y } = this.center;
174
- logger_1.default.info(`Will tap on image element at coordinate [${x}, ${y}]`);
175
- if (imageElementTapStrategy === IMAGE_EL_TAP_STRATEGY_W3C) {
176
- // set up a W3C action to click on the image by position
177
- logger_1.default.info('Will tap using W3C actions');
178
- const action = {
179
- type: 'pointer',
180
- id: 'mouse',
181
- parameters: { pointerType: 'touch' },
182
- actions: [
183
- { type: 'pointerMove', x, y, duration: 0 },
184
- { type: 'pointerDown', button: 0 },
185
- { type: 'pause', duration: TAP_DURATION_MS },
186
- { type: 'pointerUp', button: 0 },
187
- ]
188
- };
189
- // check if the driver has the appropriate performActions method
190
- if (driver.performActions) {
191
- return yield driver.performActions([action]);
192
- }
193
- // if not, warn and fall back to the other method
194
- logger_1.default.warn('Driver does not seem to implement W3C actions, falling back ' +
195
- 'to TouchActions');
196
- }
197
- // if the w3c strategy was not requested, do the only other option (mjsonwp
198
- // touch actions)
199
- logger_1.default.info('Will tap using MJSONWP TouchActions');
200
- const action = {
201
- action: 'tap',
202
- options: { x, y }
203
- };
204
- if (driver.performTouch) {
205
- return yield driver.performTouch([action]);
206
- }
207
- throw new Error("Driver did not implement the 'performTouch' command. " +
208
- 'For drivers to support finding image elements, they ' +
209
- "should support 'performTouch' and 'performActions'");
210
- });
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]);
211
168
  }
212
- /**
213
- * Handle various Appium commands that involve an image element
214
- *
215
- * @param {BaseDriver} driver - the driver to use for commands
216
- * @param {string} cmd - the name of the driver command
217
- * @param {string} imgElId - the id of the ImageElement to work with
218
- * @param {Array} args - Rest of arguments for executeScripts
219
- *
220
- * @returns {Object} - the result of running a command
221
- */
222
- static execute(driver, imgEl, cmd, ...args) {
223
- return __awaiter(this, void 0, void 0, function* () {
224
- switch (cmd) {
225
- case 'click':
226
- return yield imgEl.click(driver);
227
- case 'elementDisplayed':
228
- return true;
229
- case 'getSize':
230
- return imgEl.size;
231
- case 'getLocation':
232
- case 'getLocationInView':
233
- return imgEl.location;
234
- case 'getElementRect':
235
- return imgEl.rect;
236
- case 'getAttribute':
237
- // /session/:sessionId/element/:elementId/attribute/:name
238
- // /session/:sessionId/element/:elementId/attribute/visual should retun the visual data
239
- // e.g. ["content-desc","appium-image-element-xxxxx","xxxxx"], ["visual","appium-image-element-xxxxx","xxxxx"]
240
- switch (args[0]) {
241
- case 'visual':
242
- return imgEl.matchedImage;
243
- case 'score':
244
- return imgEl.score;
245
- default:
246
- throw new base_driver_1.errors.NotYetImplementedError();
247
- }
248
- default: throw new base_driver_1.errors.NotYetImplementedError();
249
- }
250
- });
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();
201
+ }
202
+
203
+ default:
204
+ throw new _driver.errors.NotYetImplementedError();
251
205
  }
206
+ }
207
+
252
208
  }
253
- exports.default = ImageElement;
254
- exports.ImageElement = ImageElement;
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbWFnZS1lbGVtZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QixxREFBNkM7QUFDN0Msc0RBQTJCO0FBQzNCLDZDQUF1QztBQUN2QyxxQ0FBNEM7QUFFNUMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztBQTRQckIsb0RBQW9CO0FBM1BwRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsTUFBTSx5QkFBeUIsR0FBRyxZQUFZLENBQUM7QUF5UEEsOERBQXlCO0FBeFB4RSxNQUFNLDZCQUE2QixHQUFHLGNBQWMsQ0FBQztBQXdQckMsc0VBQTZCO0FBdlA3QyxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLDZCQUE2QjtJQUM3Qix5QkFBeUI7Q0FDMUIsQ0FBQztBQUNGLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBb1B2QyxvRUFBNEI7QUFsUDlCOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBQ0gsTUFBcUIsWUFBWTtJQUUvQjs7Ozs7Ozs7Ozs7T0FXRztJQUNILFlBQWEsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsb0JBQW9CLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7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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=