@appium/images-plugin 1.2.0 → 1.2.4

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.
@@ -18,22 +18,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
- return new (P || (P = Promise))(function (resolve, reject) {
24
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
- step((generator = generator.apply(thisArg, _arguments || [])).next());
28
- });
29
- };
30
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
31
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
32
23
  };
33
24
  Object.defineProperty(exports, "__esModule", { value: true });
34
25
  const lodash_1 = __importDefault(require("lodash"));
35
- const appium_support_1 = require("appium-support");
36
- const appium_base_driver_1 = __importDefault(require("appium-base-driver"));
26
+ const support_1 = require("@appium/support");
27
+ const base_driver_1 = __importDefault(require("@appium/base-driver"));
37
28
  const index_1 = __importStar(require("../../index"));
38
29
  const finder_1 = __importDefault(require("../../lib/finder"));
39
30
  const image_element_1 = __importDefault(require("../../lib/image-element"));
@@ -45,13 +36,9 @@ const compareModule = require('../../lib/compare');
45
36
  chai_1.default.use(chai_as_promised_1.default);
46
37
  const should = chai_1.default.should();
47
38
  const plugin = new index_1.default();
48
- class PluginDriver extends appium_base_driver_1.default {
49
- getWindowSize() {
50
- return __awaiter(this, void 0, void 0, function* () { });
51
- }
52
- getScreenshot() {
53
- return __awaiter(this, void 0, void 0, function* () { });
54
- }
39
+ class PluginDriver extends base_driver_1.default {
40
+ async getWindowSize() { }
41
+ async getScreenshot() { }
55
42
  findElement(strategy, selector) {
56
43
  return plugin.findElement(lodash_1.default.noop, this, strategy, selector);
57
44
  }
@@ -61,23 +48,19 @@ class PluginDriver extends appium_base_driver_1.default {
61
48
  }
62
49
  describe('finding elements by image', function () {
63
50
  describe('findElement', function () {
64
- it('should use a different special method to find element by image', function () {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- const d = new PluginDriver();
67
- sinon_1.default.stub(plugin.finder, 'findByImage').returns(true);
68
- sinon_1.default.stub(d, 'findElOrElsWithProcessing').returns(false);
69
- yield d.findElement(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
70
- yield d.findElements(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
71
- });
72
- });
73
- it('should not be able to find image element from any other element', function () {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- const d = new PluginDriver();
76
- yield d.findElementFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
77
- .should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
78
- yield d.findElementsFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
79
- .should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
80
- });
51
+ it('should use a different special method to find element by image', async function () {
52
+ const d = new PluginDriver();
53
+ sinon_1.default.stub(plugin.finder, 'findByImage').returns(true);
54
+ sinon_1.default.stub(d, 'findElOrElsWithProcessing').returns(false);
55
+ await d.findElement(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
56
+ await d.findElements(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
57
+ });
58
+ it('should not be able to find image element from any other element', async function () {
59
+ const d = new PluginDriver();
60
+ await d.findElementFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
61
+ .should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
62
+ await d.findElementsFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
63
+ .should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
81
64
  });
82
65
  });
83
66
  describe('findByImage', function () {
@@ -112,199 +95,153 @@ describe('finding elements by image', function () {
112
95
  afterEach(function () {
113
96
  compareStub.restore();
114
97
  });
115
- it('should find an image element happypath', function () {
116
- return __awaiter(this, void 0, void 0, function* () {
117
- const imgElProto = yield f.findByImage(template, { multiple: false });
118
- basicImgElVerify(imgElProto, f);
119
- });
120
- });
121
- it('should find image elements happypath', function () {
122
- return __awaiter(this, void 0, void 0, function* () {
123
- compareStub.restore();
124
- compareStub = sinon_1.default.stub(compareModule, 'compareImages').returns([{ rect, score }]);
125
- const els = yield f.findByImage(template, { multiple: true });
126
- els.should.have.length(1);
127
- basicImgElVerify(els[0], f);
128
- });
129
- });
130
- it('should fail if driver does not support getWindowSize', function () {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- d.getWindowSize = null;
133
- yield f.findByImage(template, { multiple: false })
134
- .should.eventually.be.rejectedWith(/driver does not support/);
135
- });
136
- });
137
- it('should fix template size if requested', function () {
138
- return __awaiter(this, void 0, void 0, function* () {
139
- const newTemplate = 'iVBORbaz';
140
- yield d.settings.update({ fixImageTemplateSize: true });
141
- sinon_1.default.stub(f, 'ensureTemplateSize').returns(newTemplate);
142
- const imgElProto = yield f.findByImage(template, { multiple: false });
143
- const imgEl = basicImgElVerify(imgElProto, f);
144
- imgEl.template.should.eql(newTemplate);
145
- lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
146
- });
147
- });
148
- it('should fix template size scale if requested', function () {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- const newTemplate = 'iVBORbaz';
151
- yield d.settings.update({ fixImageTemplateScale: true });
152
- sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
153
- const imgElProto = yield f.findByImage(template, { multiple: false });
154
- const imgEl = basicImgElVerify(imgElProto, f);
155
- imgEl.template.should.eql(newTemplate);
156
- lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
157
- });
158
- });
159
- it('should not fix template size scale if it is not requested', function () {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- const newTemplate = 'iVBORbaz';
162
- yield d.settings.update({});
163
- sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
164
- f.fixImageTemplateScale.callCount.should.eql(0);
165
- });
166
- });
167
- it('should throw an error if template match fails', function () {
168
- return __awaiter(this, void 0, void 0, function* () {
169
- compareStub.throws(new Error('Cannot find any occurrences'));
170
- yield f.findByImage(template, { multiple: false })
171
- .should.eventually.be.rejectedWith(/element could not be located/);
172
- });
173
- });
174
- it('should return empty array for multiple elements if template match fails', function () {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- compareStub.throws(new Error('Cannot find any occurrences'));
177
- yield f.findByImage(template, { multiple: true }).should.eventually.eql([]);
178
- });
179
- });
180
- it('should respect implicit wait', function () {
181
- return __awaiter(this, void 0, void 0, function* () {
182
- d.setImplicitWait(10);
183
- compareStub.resetHistory();
184
- compareStub.onCall(0).throws(new Error('Cannot find any occurrences'));
185
- compareStub.returns({ rect, score });
186
- const imgElProto = yield f.findByImage(template, { multiple: false });
187
- basicImgElVerify(imgElProto, f);
188
- compareStub.callCount.should.eql(2);
189
- });
190
- });
191
- it('should not add element to cache and return it directly when checking staleness', function () {
192
- return __awaiter(this, void 0, void 0, function* () {
193
- const imgEl = yield f.findByImage(template, { multiple: false, shouldCheckStaleness: true });
194
- (imgEl instanceof image_element_1.default).should.be.true;
195
- f.imgElCache.has(imgEl.id).should.be.false;
196
- imgEl.rect.should.eql(rect);
197
- });
98
+ it('should find an image element happypath', async function () {
99
+ const imgElProto = await f.findByImage(template, { multiple: false });
100
+ basicImgElVerify(imgElProto, f);
101
+ });
102
+ it('should find image elements happypath', async function () {
103
+ compareStub.restore();
104
+ compareStub = sinon_1.default.stub(compareModule, 'compareImages').returns([{ rect, score }]);
105
+ const els = await f.findByImage(template, { multiple: true });
106
+ els.should.have.length(1);
107
+ basicImgElVerify(els[0], f);
108
+ });
109
+ it('should fail if driver does not support getWindowSize', async function () {
110
+ d.getWindowSize = null;
111
+ await f.findByImage(template, { multiple: false })
112
+ .should.eventually.be.rejectedWith(/driver does not support/);
113
+ });
114
+ it('should fix template size if requested', async function () {
115
+ const newTemplate = 'iVBORbaz';
116
+ await d.settings.update({ fixImageTemplateSize: true });
117
+ sinon_1.default.stub(f, 'ensureTemplateSize').returns(newTemplate);
118
+ const imgElProto = await f.findByImage(template, { multiple: false });
119
+ const imgEl = basicImgElVerify(imgElProto, f);
120
+ imgEl.template.should.eql(newTemplate);
121
+ lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
122
+ });
123
+ it('should fix template size scale if requested', async function () {
124
+ const newTemplate = 'iVBORbaz';
125
+ await d.settings.update({ fixImageTemplateScale: true });
126
+ sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
127
+ const imgElProto = await f.findByImage(template, { multiple: false });
128
+ const imgEl = basicImgElVerify(imgElProto, f);
129
+ imgEl.template.should.eql(newTemplate);
130
+ lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
131
+ });
132
+ it('should not fix template size scale if it is not requested', async function () {
133
+ const newTemplate = 'iVBORbaz';
134
+ await d.settings.update({});
135
+ sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
136
+ f.fixImageTemplateScale.callCount.should.eql(0);
137
+ });
138
+ it('should throw an error if template match fails', async function () {
139
+ compareStub.throws(new Error('Cannot find any occurrences'));
140
+ await f.findByImage(template, { multiple: false })
141
+ .should.eventually.be.rejectedWith(/element could not be located/);
142
+ });
143
+ it('should return empty array for multiple elements if template match fails', async function () {
144
+ compareStub.throws(new Error('Cannot find any occurrences'));
145
+ await f.findByImage(template, { multiple: true }).should.eventually.eql([]);
146
+ });
147
+ it('should respect implicit wait', async function () {
148
+ d.setImplicitWait(10);
149
+ compareStub.resetHistory();
150
+ compareStub.onCall(0).throws(new Error('Cannot find any occurrences'));
151
+ compareStub.returns({ rect, score });
152
+ const imgElProto = await f.findByImage(template, { multiple: false });
153
+ basicImgElVerify(imgElProto, f);
154
+ compareStub.callCount.should.eql(2);
155
+ });
156
+ it('should not add element to cache and return it directly when checking staleness', async function () {
157
+ const imgEl = await f.findByImage(template, { multiple: false, shouldCheckStaleness: true });
158
+ (imgEl instanceof image_element_1.default).should.be.true;
159
+ f.imgElCache.has(imgEl.id).should.be.false;
160
+ imgEl.rect.should.eql(rect);
198
161
  });
199
162
  });
200
163
  describe('fixImageTemplateScale', function () {
201
164
  const d = new PluginDriver();
202
165
  const f = new finder_1.default(d);
203
166
  const basicTemplate = 'iVBORbaz';
204
- it('should not fix template size scale if no scale value', function () {
205
- return __awaiter(this, void 0, void 0, function* () {
206
- yield f.fixImageTemplateScale(basicTemplate, { fixImageTemplateScale: true })
207
- .should.eventually.eql(basicTemplate);
208
- });
209
- });
210
- it('should not fix template size scale if it is null', function () {
211
- return __awaiter(this, void 0, void 0, function* () {
212
- yield f.fixImageTemplateScale(basicTemplate, null)
213
- .should.eventually.eql(basicTemplate);
214
- });
215
- });
216
- it('should not fix template size scale if it is not number', function () {
217
- return __awaiter(this, void 0, void 0, function* () {
218
- yield f.fixImageTemplateScale(basicTemplate, 'wrong-scale')
219
- .should.eventually.eql(basicTemplate);
220
- });
221
- });
222
- it('should fix template size scale', function () {
223
- return __awaiter(this, void 0, void 0, function* () {
224
- const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
225
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
226
- fixImageTemplateScale: true, xScale: 1.5, yScale: 1.5
227
- }).should.eventually.eql(actual);
228
- });
229
- });
230
- it('should not fix template size scale because of fixImageTemplateScale being false', function () {
231
- return __awaiter(this, void 0, void 0, function* () {
232
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
233
- fixImageTemplateScale: false, xScale: 1.5, yScale: 1.5
234
- }).should.eventually.eql(fixtures_1.TINY_PNG);
235
- });
236
- });
237
- it('should fix template size scale with default scale', function () {
238
- return __awaiter(this, void 0, void 0, function* () {
239
- const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
240
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
241
- defaultImageTemplateScale: 4.0
242
- }).should.eventually.eql(actual);
243
- });
244
- });
245
- it('should fix template size scale with default scale and image scale', function () {
246
- return __awaiter(this, void 0, void 0, function* () {
247
- const actual = 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACaUlEQVR4AbXBMWvrWBSF0c9BsFPtW91UR1U6+///FKlKKt8qqnyqnMozggkI8xgMj6x1uv+L/6zryrIsrOvKsiys68qyLFwuF87nM5fLhfP5zOVy4Xw+84wXftkLv2ziQBK26b0TEVQVu4jANrvM5Hq9spOEJCQhCUlI4mjiQBK26b1TVewkYRvb7DKTMQaZiW1s01rDNraRxNHEgSRaa1QVO0m01jjKTDKTXe+d3jtVxU4SjyYOJGGbnSRs03snM8lMMpPb7UZmkplEBFXFThK2eTRxIAnbSMI2VcX39zdjDMYYZCaZyRiDMQZVxU4StqkqHk0cSEISf5KZ7DKTMQbLsrCTRGuN3jtVxaOJg6qiqqgqqoqqoqoYY5CZ7GwTEdzvd97f34kIeu/YRhKPJg6qiswkM7ndbmQmmUlmkpnsbBMR2CYimOeZ3ju2kcSjiYOqIjP5+vpi2za2bWPbNo5aa7TW2PXe6b3Te6e1hiQeTRxUFbfbjW3bGGNwvV4ZY2Ab27TWsI1tbGMb27TWsI0kHk0cVBWZybZtXK9XPj8/+fj4YJ5nIoLWGraJCOZ5RhKSkIQkJPFo4qCqyEy2bWOMwefnJ+u6cjqdsM3ONvM8cz6feca0ris/rtcrmcnONhHB/X7n/f2diKD3jm0k8axpWRZ+ZCaZyc42EYFtIoJ5num9YxtJPGta15U/sY1tdm9vb/Te6b1jG0k8a1qWhR+2sU1rjdYatrGNbWxjm9YaknjWtK4rPyKCiKC1hm0igojg9fUVSUhCEpJ41rQsC0e22dkmIrhcLvyNF/7H6XTib73wy174Zf8AJEsePtlPj10AAAAASUVORK5CYII=';
248
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
249
- defaultImageTemplateScale: 4.0,
250
- fixImageTemplateScale: true,
251
- xScale: 1.5, yScale: 1.5
252
- }).should.eventually.eql(actual);
253
- });
254
- });
255
- it('should not fix template size scale with default scale and image scale', function () {
256
- return __awaiter(this, void 0, void 0, function* () {
257
- const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
258
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
259
- defaultImageTemplateScale: 4.0,
260
- fixImageTemplateScale: false,
261
- xScale: 1.5, yScale: 1.5
262
- }).should.eventually.eql(actual);
263
- });
264
- });
265
- it('should not fix template size scale because of ignoreDefaultImageTemplateScale', function () {
266
- return __awaiter(this, void 0, void 0, function* () {
267
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
268
- defaultImageTemplateScale: 4.0,
269
- ignoreDefaultImageTemplateScale: true,
270
- }).should.eventually.eql(fixtures_1.TINY_PNG);
271
- });
272
- });
273
- it('should ignore defaultImageTemplateScale to fix template size scale because of ignoreDefaultImageTemplateScale', function () {
274
- return __awaiter(this, void 0, void 0, function* () {
275
- const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
276
- yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
277
- defaultImageTemplateScale: 4.0,
278
- ignoreDefaultImageTemplateScale: true,
279
- fixImageTemplateScale: true,
280
- xScale: 1.5, yScale: 1.5
281
- }).should.eventually.eql(actual);
282
- });
167
+ it('should not fix template size scale if no scale value', async function () {
168
+ await f.fixImageTemplateScale(basicTemplate, { fixImageTemplateScale: true })
169
+ .should.eventually.eql(basicTemplate);
170
+ });
171
+ it('should not fix template size scale if it is null', async function () {
172
+ await f.fixImageTemplateScale(basicTemplate, null)
173
+ .should.eventually.eql(basicTemplate);
174
+ });
175
+ it('should not fix template size scale if it is not number', async function () {
176
+ await f.fixImageTemplateScale(basicTemplate, 'wrong-scale')
177
+ .should.eventually.eql(basicTemplate);
178
+ });
179
+ it('should fix template size scale', async function () {
180
+ const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
181
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
182
+ fixImageTemplateScale: true, xScale: 1.5, yScale: 1.5
183
+ }).should.eventually.eql(actual);
184
+ });
185
+ it('should not fix template size scale because of fixImageTemplateScale being false', async function () {
186
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
187
+ fixImageTemplateScale: false, xScale: 1.5, yScale: 1.5
188
+ }).should.eventually.eql(fixtures_1.TINY_PNG);
189
+ });
190
+ it('should fix template size scale with default scale', async function () {
191
+ const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
192
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
193
+ defaultImageTemplateScale: 4.0
194
+ }).should.eventually.eql(actual);
195
+ });
196
+ it('should fix template size scale with default scale and image scale', async function () {
197
+ const actual = 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACaUlEQVR4AbXBMWvrWBSF0c9BsFPtW91UR1U6+///FKlKKt8qqnyqnMozggkI8xgMj6x1uv+L/6zryrIsrOvKsiys68qyLFwuF87nM5fLhfP5zOVy4Xw+84wXftkLv2ziQBK26b0TEVQVu4jANrvM5Hq9spOEJCQhCUlI4mjiQBK26b1TVewkYRvb7DKTMQaZiW1s01rDNraRxNHEgSRaa1QVO0m01jjKTDKTXe+d3jtVxU4SjyYOJGGbnSRs03snM8lMMpPb7UZmkplEBFXFThK2eTRxIAnbSMI2VcX39zdjDMYYZCaZyRiDMQZVxU4StqkqHk0cSEISf5KZ7DKTMQbLsrCTRGuN3jtVxaOJg6qiqqgqqoqqoqoYY5CZ7GwTEdzvd97f34kIeu/YRhKPJg6qiswkM7ndbmQmmUlmkpnsbBMR2CYimOeZ3ju2kcSjiYOqIjP5+vpi2za2bWPbNo5aa7TW2PXe6b3Te6e1hiQeTRxUFbfbjW3bGGNwvV4ZY2Ab27TWsI1tbGMb27TWsI0kHk0cVBWZybZtXK9XPj8/+fj4YJ5nIoLWGraJCOZ5RhKSkIQkJPFo4qCqyEy2bWOMwefnJ+u6cjqdsM3ONvM8cz6feca0ris/rtcrmcnONhHB/X7n/f2diKD3jm0k8axpWRZ+ZCaZyc42EYFtIoJ5num9YxtJPGta15U/sY1tdm9vb/Te6b1jG0k8a1qWhR+2sU1rjdYatrGNbWxjm9YaknjWtK4rPyKCiKC1hm0igojg9fUVSUhCEpJ41rQsC0e22dkmIrhcLvyNF/7H6XTib73wy174Zf8AJEsePtlPj10AAAAASUVORK5CYII=';
198
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
199
+ defaultImageTemplateScale: 4.0,
200
+ fixImageTemplateScale: true,
201
+ xScale: 1.5, yScale: 1.5
202
+ }).should.eventually.eql(actual);
203
+ });
204
+ it('should not fix template size scale with default scale and image scale', async function () {
205
+ const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
206
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
207
+ defaultImageTemplateScale: 4.0,
208
+ fixImageTemplateScale: false,
209
+ xScale: 1.5, yScale: 1.5
210
+ }).should.eventually.eql(actual);
211
+ });
212
+ it('should not fix template size scale because of ignoreDefaultImageTemplateScale', async function () {
213
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
214
+ defaultImageTemplateScale: 4.0,
215
+ ignoreDefaultImageTemplateScale: true,
216
+ }).should.eventually.eql(fixtures_1.TINY_PNG);
217
+ });
218
+ it('should ignore defaultImageTemplateScale to fix template size scale because of ignoreDefaultImageTemplateScale', async function () {
219
+ const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
220
+ await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
221
+ defaultImageTemplateScale: 4.0,
222
+ ignoreDefaultImageTemplateScale: true,
223
+ fixImageTemplateScale: true,
224
+ xScale: 1.5, yScale: 1.5
225
+ }).should.eventually.eql(actual);
283
226
  });
284
227
  });
285
228
  describe('ensureTemplateSize', function () {
286
229
  const d = new PluginDriver();
287
230
  const f = new finder_1.default(d);
288
- it('should not resize the template if it is smaller than the screen', function () {
289
- return __awaiter(this, void 0, void 0, function* () {
290
- const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 2);
291
- yield f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen)
292
- .should.eventually.eql(fixtures_1.TINY_PNG);
293
- });
294
- });
295
- it('should not resize the template if it is the same size as the screen', function () {
296
- return __awaiter(this, void 0, void 0, function* () {
297
- yield f.ensureTemplateSize(fixtures_1.TINY_PNG, ...fixtures_1.TINY_PNG_DIMS)
298
- .should.eventually.eql(fixtures_1.TINY_PNG);
299
- });
300
- });
301
- it('should resize the template if it is bigger than the screen', function () {
302
- return __awaiter(this, void 0, void 0, function* () {
303
- const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n / 2);
304
- const newTemplate = yield f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen);
305
- newTemplate.should.not.eql(fixtures_1.TINY_PNG);
306
- newTemplate.length.should.be.below(fixtures_1.TINY_PNG.length);
307
- });
231
+ it('should not resize the template if it is smaller than the screen', async function () {
232
+ const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 2);
233
+ await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen)
234
+ .should.eventually.eql(fixtures_1.TINY_PNG);
235
+ });
236
+ it('should not resize the template if it is the same size as the screen', async function () {
237
+ await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...fixtures_1.TINY_PNG_DIMS)
238
+ .should.eventually.eql(fixtures_1.TINY_PNG);
239
+ });
240
+ it('should resize the template if it is bigger than the screen', async function () {
241
+ const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n / 2);
242
+ const newTemplate = await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen);
243
+ newTemplate.should.not.eql(fixtures_1.TINY_PNG);
244
+ newTemplate.length.should.be.below(fixtures_1.TINY_PNG.length);
308
245
  });
309
246
  });
310
247
  describe('getScreenshotForImageFind', function () {
@@ -315,95 +252,83 @@ describe('finding elements by image', function () {
315
252
  f = new finder_1.default(d);
316
253
  sinon_1.default.stub(d, 'getScreenshot').returns(fixtures_1.TINY_PNG);
317
254
  });
318
- it('should fail if driver does not support getScreenshot', function () {
319
- return __awaiter(this, void 0, void 0, function* () {
320
- const d = new appium_base_driver_1.default();
321
- const f = new finder_1.default(d);
322
- yield f.getScreenshotForImageFind()
323
- .should.eventually.be.rejectedWith(/driver does not support/);
324
- });
325
- });
326
- it('should not adjust or verify screenshot if asked not to by settings', function () {
327
- return __awaiter(this, void 0, void 0, function* () {
328
- yield d.settings.update({ fixImageFindScreenshotDims: false });
329
- const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n + 1);
330
- const { b64Screenshot, scale } = yield f.getScreenshotForImageFind(...screen);
331
- b64Screenshot.should.eql(fixtures_1.TINY_PNG);
332
- should.equal(scale, undefined);
333
- });
334
- });
335
- it('should return screenshot without adjustment if it matches screen size', function () {
336
- return __awaiter(this, void 0, void 0, function* () {
337
- const { b64Screenshot, scale } = yield f.getScreenshotForImageFind(...fixtures_1.TINY_PNG_DIMS);
338
- b64Screenshot.should.eql(fixtures_1.TINY_PNG);
339
- should.equal(scale, undefined);
340
- });
341
- });
342
- it('should return scaled screenshot with same aspect ratio if matching screen aspect ratio', function () {
343
- return __awaiter(this, void 0, void 0, function* () {
344
- const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 1.5);
345
- const { b64Screenshot, scale } = yield f.getScreenshotForImageFind(...screen);
346
- b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
347
- const screenshotObj = yield appium_support_1.imageUtil.getJimpImage(b64Screenshot);
348
- screenshotObj.bitmap.width.should.eql(screen[0]);
349
- screenshotObj.bitmap.height.should.eql(screen[1]);
350
- scale.should.eql({ xScale: 1.5, yScale: 1.5 });
351
- });
352
- });
353
- it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio', function () {
354
- return __awaiter(this, void 0, void 0, function* () {
355
- // try first with portrait screen, screen = 8 x 12
356
- let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
357
- let expectedScale = { xScale: 2.67, yScale: 4 };
358
- const { b64Screenshot, scale } = yield f.getScreenshotForImageFind(...screen);
359
- b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
360
- let screenshotObj = yield appium_support_1.imageUtil.getJimpImage(b64Screenshot);
361
- screenshotObj.bitmap.width.should.eql(screen[0]);
362
- screenshotObj.bitmap.height.should.eql(screen[1]);
363
- scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
364
- scale.yScale.should.eql(expectedScale.yScale);
365
- // then with landscape screen, screen = 12 x 8
366
- screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
367
- expectedScale = { xScale: 4, yScale: 2.67 };
368
- const { b64Screenshot: newScreen, scale: newScale } = yield f.getScreenshotForImageFind(...screen);
369
- newScreen.should.not.eql(fixtures_1.TINY_PNG);
370
- screenshotObj = yield appium_support_1.imageUtil.getJimpImage(newScreen);
371
- screenshotObj.bitmap.width.should.eql(screen[0]);
372
- screenshotObj.bitmap.height.should.eql(screen[1]);
373
- newScale.xScale.should.eql(expectedScale.xScale);
374
- newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
375
- });
376
- });
377
- it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio with fixImageTemplateScale', function () {
378
- return __awaiter(this, void 0, void 0, function* () {
379
- // try first with portrait screen, screen = 8 x 12
380
- let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
381
- let expectedScale = { xScale: 2.67, yScale: 4 };
382
- const { b64Screenshot, scale } = yield f.getScreenshotForImageFind(...screen);
383
- b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
384
- let screenshotObj = yield appium_support_1.imageUtil.getJimpImage(b64Screenshot);
385
- screenshotObj.bitmap.width.should.eql(screen[0]);
386
- screenshotObj.bitmap.height.should.eql(screen[1]);
387
- scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
388
- scale.yScale.should.eql(expectedScale.yScale);
389
- // 8 x 12 stretched TINY_PNG
390
- yield f.fixImageTemplateScale(b64Screenshot, { fixImageTemplateScale: true, scale })
391
- .should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAgAAAAMCAYAAABfnvydAAAAJ0lEQVR4AYXBAQEAIACDMKR/p0fTBrKdbZcPCRIkSJAgQYIECRIkPAzBA1TpeNwZAAAAAElFTkSuQmCC');
392
- // then with landscape screen, screen = 12 x 8
393
- screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
394
- expectedScale = { xScale: 4, yScale: 2.67 };
395
- const { b64Screenshot: newScreen, scale: newScale } = yield f.getScreenshotForImageFind(...screen);
396
- newScreen.should.not.eql(fixtures_1.TINY_PNG);
397
- screenshotObj = yield appium_support_1.imageUtil.getJimpImage(newScreen);
398
- screenshotObj.bitmap.width.should.eql(screen[0]);
399
- screenshotObj.bitmap.height.should.eql(screen[1]);
400
- newScale.xScale.should.eql(expectedScale.xScale);
401
- newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
402
- // 12 x 8 stretched TINY_PNG
403
- yield f.fixImageTemplateScale(newScreen, { fixImageTemplateScale: true, scale })
404
- .should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAI0lEQVR4AZXBAQEAMAyDMI5/T5W2ayB5245AIokkkkgiiST6+W4DTLyo5PUAAAAASUVORK5CYII=');
405
- });
255
+ it('should fail if driver does not support getScreenshot', async function () {
256
+ const d = new base_driver_1.default();
257
+ const f = new finder_1.default(d);
258
+ await f.getScreenshotForImageFind()
259
+ .should.eventually.be.rejectedWith(/driver does not support/);
260
+ });
261
+ it('should not adjust or verify screenshot if asked not to by settings', async function () {
262
+ await d.settings.update({ fixImageFindScreenshotDims: false });
263
+ const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n + 1);
264
+ const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
265
+ b64Screenshot.should.eql(fixtures_1.TINY_PNG);
266
+ should.equal(scale, undefined);
267
+ });
268
+ it('should return screenshot without adjustment if it matches screen size', async function () {
269
+ const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...fixtures_1.TINY_PNG_DIMS);
270
+ b64Screenshot.should.eql(fixtures_1.TINY_PNG);
271
+ should.equal(scale, undefined);
272
+ });
273
+ it('should return scaled screenshot with same aspect ratio if matching screen aspect ratio', async function () {
274
+ const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 1.5);
275
+ const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
276
+ b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
277
+ const screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
278
+ screenshotObj.bitmap.width.should.eql(screen[0]);
279
+ screenshotObj.bitmap.height.should.eql(screen[1]);
280
+ scale.should.eql({ xScale: 1.5, yScale: 1.5 });
281
+ });
282
+ it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio', async function () {
283
+ // try first with portrait screen, screen = 8 x 12
284
+ let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
285
+ let expectedScale = { xScale: 2.67, yScale: 4 };
286
+ const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
287
+ b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
288
+ let screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
289
+ screenshotObj.bitmap.width.should.eql(screen[0]);
290
+ screenshotObj.bitmap.height.should.eql(screen[1]);
291
+ scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
292
+ scale.yScale.should.eql(expectedScale.yScale);
293
+ // then with landscape screen, screen = 12 x 8
294
+ screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
295
+ expectedScale = { xScale: 4, yScale: 2.67 };
296
+ const { b64Screenshot: newScreen, scale: newScale } = await f.getScreenshotForImageFind(...screen);
297
+ newScreen.should.not.eql(fixtures_1.TINY_PNG);
298
+ screenshotObj = await support_1.imageUtil.getJimpImage(newScreen);
299
+ screenshotObj.bitmap.width.should.eql(screen[0]);
300
+ screenshotObj.bitmap.height.should.eql(screen[1]);
301
+ newScale.xScale.should.eql(expectedScale.xScale);
302
+ newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
303
+ });
304
+ it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio with fixImageTemplateScale', async function () {
305
+ // try first with portrait screen, screen = 8 x 12
306
+ let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
307
+ let expectedScale = { xScale: 2.67, yScale: 4 };
308
+ const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
309
+ b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
310
+ let screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
311
+ screenshotObj.bitmap.width.should.eql(screen[0]);
312
+ screenshotObj.bitmap.height.should.eql(screen[1]);
313
+ scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
314
+ scale.yScale.should.eql(expectedScale.yScale);
315
+ // 8 x 12 stretched TINY_PNG
316
+ await f.fixImageTemplateScale(b64Screenshot, { fixImageTemplateScale: true, scale })
317
+ .should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAgAAAAMCAYAAABfnvydAAAAJ0lEQVR4AYXBAQEAIACDMKR/p0fTBrKdbZcPCRIkSJAgQYIECRIkPAzBA1TpeNwZAAAAAElFTkSuQmCC');
318
+ // then with landscape screen, screen = 12 x 8
319
+ screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
320
+ expectedScale = { xScale: 4, yScale: 2.67 };
321
+ const { b64Screenshot: newScreen, scale: newScale } = await f.getScreenshotForImageFind(...screen);
322
+ newScreen.should.not.eql(fixtures_1.TINY_PNG);
323
+ screenshotObj = await support_1.imageUtil.getJimpImage(newScreen);
324
+ screenshotObj.bitmap.width.should.eql(screen[0]);
325
+ screenshotObj.bitmap.height.should.eql(screen[1]);
326
+ newScale.xScale.should.eql(expectedScale.xScale);
327
+ newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
328
+ // 12 x 8 stretched TINY_PNG
329
+ await f.fixImageTemplateScale(newScreen, { fixImageTemplateScale: true, scale })
330
+ .should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAI0lEQVR4AZXBAQEAMAyDMI5/T5W2ayB5245AIokkkkgiiST6+W4DTLyo5PUAAAAASUVORK5CYII=');
406
331
  });
407
332
  });
408
333
  });
409
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZGVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ZpbmRlci1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBdUI7QUFDdkIsbURBQTJDO0FBQzNDLDRFQUE0QztBQUM1QyxxREFBaUU7QUFDakUsOERBQWtEO0FBQ2xELDRFQUFtRDtBQUNuRCxrREFBMEI7QUFDMUIsMENBQXNEO0FBQ3RELGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbkQsY0FBSSxDQUFDLEdBQUcsQ0FBQywwQkFBYyxDQUFDLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sWUFBYSxTQUFRLDRCQUFVO0lBQzdCLGFBQWE7OERBQUssQ0FBQztLQUFBO0lBQ25CLGFBQWE7OERBQUssQ0FBQztLQUFBO0lBQ3pCLFdBQVcsQ0FBRSxRQUFRLEVBQUUsUUFBUTtRQUM3QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsWUFBWSxDQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FFRjtBQUVELFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRTs7Z0JBQ25FLE1B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
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZGVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ZpbmRlci1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBdUI7QUFDdkIsNkNBQTRDO0FBQzVDLHNFQUE2QztBQUM3QyxxREFBaUU7QUFDakUsOERBQWtEO0FBQ2xELDRFQUFtRDtBQUNuRCxrREFBMEI7QUFDMUIsMENBQXNEO0FBQ3RELGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbkQsY0FBSSxDQUFDLEdBQUcsQ0FBQywwQkFBYyxDQUFDLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sWUFBYSxTQUFRLHFCQUFVO0lBQ25DLEtBQUssQ0FBQyxhQUFhLEtBQUssQ0FBQztJQUN6QixLQUFLLENBQUMsYUFBYSxLQUFLLENBQUM7SUFDekIsV0FBVyxDQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzdCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxZQUFZLENBQUUsUUFBUSxFQUFFLFFBQVE7UUFDOUIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUVGO0FBRUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFO0lBQ3BDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUs7WUFDeEUs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