@applitools/eyes-browser 1.4.21 → 1.4.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4213,7 +4213,7 @@ var require_guard = __commonJS({
4213
4213
  return result;
4214
4214
  };
4215
4215
  Object.defineProperty(exports, "__esModule", { value: true });
4216
- exports.custom = exports.instanceOf = exports.isOneOf = exports.isEnumValue = exports.isObject = exports.isArray = exports.isNumeric = exports.isAlpha = exports.isAlphanumeric = exports.isString = exports.isGreaterThenOrEqual = exports.isGreaterThen = exports.isLessThenOrEqual = exports.isLessThen = exports.isInteger = exports.isNumber = exports.isBoolean = exports.notNull = void 0;
4216
+ exports.custom = exports.instanceOf = exports.isOneOf = exports.isEnumValue = exports.isObject = exports.isArray = exports.isNumeric = exports.isAlpha = exports.isAlphanumeric = exports.isString = exports.isGreaterThenOrEqual = exports.isGreaterThen = exports.isLessThenOrEqual = exports.isLessThen = exports.isFunction = exports.isInteger = exports.isNumber = exports.isBoolean = exports.notNull = void 0;
4217
4217
  var types20 = __importStar(require_types());
4218
4218
  function notNull(value, { name }) {
4219
4219
  if (types20.isNull(value)) {
@@ -4255,6 +4255,12 @@ var require_guard = __commonJS({
4255
4255
  isGreaterThenOrEqual(value, gte, { name });
4256
4256
  }
4257
4257
  exports.isInteger = isInteger;
4258
+ function isFunction(value, { name, strict = true }) {
4259
+ if ((strict || !types20.isNull(value)) && !types20.isFunction(value)) {
4260
+ throw new Error(`IllegalArgument: ${name} must be of type function. Received ${value}`);
4261
+ }
4262
+ }
4263
+ exports.isFunction = isFunction;
4258
4264
  function isLessThen(value, limit, { name }) {
4259
4265
  if (!(value < limit)) {
4260
4266
  throw new Error(`IllegalArgument: ${name} must be < ${limit}. Received ${value}`);
@@ -4392,7 +4398,7 @@ var require_general = __commonJS({
4392
4398
  return result;
4393
4399
  };
4394
4400
  Object.defineProperty(exports, "__esModule", { value: true });
4395
- exports.pluralize = exports.extend = exports.wrap = exports.batchify = exports.cachify = exports.absolutizeUrl = exports.removeUndefinedProps = exports.toUriEncoding = exports.toUnAnchoredUri = exports.toString = exports.toJSON = exports.sleep = exports.jwtDecode = exports.shortid = exports.guid = exports.getEnvValue = void 0;
4401
+ exports.dedupAndMap = exports.deepEqual = exports.pluralize = exports.extend = exports.wrap = exports.batchify = exports.cachify = exports.absolutizeUrl = exports.removeUndefinedProps = exports.toUriEncoding = exports.toUnAnchoredUri = exports.toString = exports.toJSON = exports.sleep = exports.jwtDecode = exports.shortid = exports.guid = exports.getEnvValue = void 0;
4396
4402
  var buffer_1 = require_buffer();
4397
4403
  var types20 = __importStar(require_types());
4398
4404
  function getEnvValue(name, type) {
@@ -4547,6 +4553,50 @@ var require_general = __commonJS({
4547
4553
  return res;
4548
4554
  }
4549
4555
  exports.pluralize = pluralize;
4556
+ function deepEqual(value1, value2) {
4557
+ return _deepEqual(value1, value2, /* @__PURE__ */ new Set());
4558
+ }
4559
+ exports.deepEqual = deepEqual;
4560
+ function _deepEqual(value1, value2, visitedObjects) {
4561
+ if (value1 === value2)
4562
+ return true;
4563
+ if (visitedObjects.has(value1) && visitedObjects.has(value2))
4564
+ throw new Error("circular reference");
4565
+ if (typeof value1 === "object" && typeof value2 === "object") {
4566
+ visitedObjects.add(value1);
4567
+ visitedObjects.add(value2);
4568
+ }
4569
+ if (types20.isArray(value1) && types20.isArray(value2)) {
4570
+ if (value1.length !== value2.length)
4571
+ return false;
4572
+ for (let i = 0; i < value1.length; i++) {
4573
+ if (!_deepEqual(value1[i], value2[i], visitedObjects))
4574
+ return false;
4575
+ }
4576
+ return true;
4577
+ }
4578
+ if (types20.isObject(value1) && types20.isObject(value2)) {
4579
+ const keys1 = Object.keys(value1);
4580
+ const keys2 = Object.keys(value2);
4581
+ if (keys1.length !== keys2.length)
4582
+ return false;
4583
+ for (const key of keys1) {
4584
+ if (!_deepEqual(value1[key], value2[key], visitedObjects))
4585
+ return false;
4586
+ }
4587
+ return true;
4588
+ }
4589
+ return false;
4590
+ }
4591
+ async function dedupAndMap(items, transform, isEqual) {
4592
+ const firstIndecies = items.map((value) => items.findIndex((v) => isEqual(v, value)));
4593
+ const uniqueValues = items.filter((_, index) => firstIndecies.indexOf(index) === index);
4594
+ const results = await transform(uniqueValues);
4595
+ const resultMap = /* @__PURE__ */ new WeakMap();
4596
+ uniqueValues.forEach((val, index) => resultMap.set(val, results[index]));
4597
+ return items.map((_, index) => resultMap.get(items[firstIndecies[index]]));
4598
+ }
4599
+ exports.dedupAndMap = dedupAndMap;
4550
4600
  }
4551
4601
  });
4552
4602
 
@@ -21574,7 +21624,7 @@ var require_requests = __commonJS({
21574
21624
  });
21575
21625
  return openCheckAndCloseResponse.then(() => {
21576
21626
  logger.log('Request "openCheckAndCloseResponse" finished successfully');
21577
- }).catch(() => void 0);
21627
+ });
21578
21628
  }
21579
21629
  async function locate({ target, settings, logger = mainLogger }) {
21580
21630
  logger = logger.extend(mainLogger, { tags: [`core-request-${utils34.general.shortid()}`] });
@@ -21721,9 +21771,23 @@ var require_requests = __commonJS({
21721
21771
  method: "GET",
21722
21772
  connectionTimeout: 2e3
21723
21773
  });
21724
- if (response2 && (response2.status >= 200 && response2.status < 300 || response2.status === 404))
21774
+ if (response2 && (response2.status >= 200 && response2.status < 300 || response2.status === 404)) {
21775
+ logger2.log(`UFG 'serviceUrlNew' is available, using: ${serviceUrl}`);
21776
+ logEvent({
21777
+ settings: {
21778
+ level: "Info",
21779
+ event: {
21780
+ type: "serviceUrlNew",
21781
+ message: `UFG 'serviceUrlNew' is available`,
21782
+ serviceUrlNew: serviceUrl
21783
+ },
21784
+ eyesServerUrl: settings2.eyesServerUrl,
21785
+ apiKey: settings2.apiKey
21786
+ }
21787
+ }).catch((err) => logger2.log("Error logging event", { error: err, event: `UFG 'serviceUrlNew' is available` }));
21725
21788
  return resolve(serviceUrl);
21726
- else {
21789
+ } else {
21790
+ logger2.log(`UFG 'serviceUrlNew' is blocked`);
21727
21791
  logEvent({
21728
21792
  settings: {
21729
21793
  level: "Notice",
@@ -51557,14 +51621,7 @@ var require_open_check_and_close = __commonJS({
51557
51621
  if (controller.signal.aborted) {
51558
51622
  throw new Error('Command "openCheckAndClose" was aborted');
51559
51623
  }
51560
- return new Promise(async (done, reject) => {
51561
- try {
51562
- await requests.openCheckAndClose({ target, settings, logger }).finally(done);
51563
- } catch (error) {
51564
- reject(error);
51565
- done();
51566
- }
51567
- });
51624
+ return await requests.openCheckAndClose({ target, settings, logger });
51568
51625
  };
51569
51626
  }
51570
51627
  exports.makeOpenCheckAndClose = makeOpenCheckAndClose;
@@ -51690,6 +51747,45 @@ var require_eyes = __commonJS({
51690
51747
  }
51691
51748
  });
51692
51749
 
51750
+ // ../core-base/dist/errors/test-error.js
51751
+ var require_test_error = __commonJS({
51752
+ "../core-base/dist/errors/test-error.js"(exports) {
51753
+ "use strict";
51754
+ init_process();
51755
+ init_setImmediate();
51756
+ init_buffer();
51757
+ init_setInterval();
51758
+ Object.defineProperty(exports, "__esModule", { value: true });
51759
+ exports.TestError = void 0;
51760
+ var core_error_1 = require_core_error();
51761
+ var TestError = class extends core_error_1.CoreError {
51762
+ constructor(result) {
51763
+ if (result.status === "Failed") {
51764
+ super(`Test '${result.name}' of '${result.appName}' is failed! See details at ${result.url}`, {
51765
+ reason: "test failed",
51766
+ result
51767
+ });
51768
+ } else if (result.status === "Unresolved") {
51769
+ if (result.isNew) {
51770
+ super(`Test '${result.name}' of '${result.appName}' is new! Please approve the new baseline at ${result.url}`, {
51771
+ reason: "test new",
51772
+ result
51773
+ });
51774
+ } else {
51775
+ super(`Test '${result.name}' of '${result.appName}' detected differences! See details at: ${result.url}`, {
51776
+ reason: "test different",
51777
+ result
51778
+ });
51779
+ }
51780
+ } else {
51781
+ super("");
51782
+ }
51783
+ }
51784
+ };
51785
+ exports.TestError = TestError;
51786
+ }
51787
+ });
51788
+
51693
51789
  // ../core-base/dist/index.js
51694
51790
  var require_dist2 = __commonJS({
51695
51791
  "../core-base/dist/index.js"(exports) {
@@ -51725,6 +51821,7 @@ var require_dist2 = __commonJS({
51725
51821
  __exportStar(require_requests(), exports);
51726
51822
  __exportStar(require_core_error(), exports);
51727
51823
  __exportStar(require_missingApiKeyError(), exports);
51824
+ __exportStar(require_test_error(), exports);
51728
51825
  }
51729
51826
  });
51730
51827
 
@@ -55992,6 +56089,16 @@ var require_driver = __commonJS({
55992
56089
  async execute(script, arg) {
55993
56090
  return this.currentContext.execute(script, arg);
55994
56091
  }
56092
+ async executeUserFunction(func) {
56093
+ var _a, _b;
56094
+ if (await ((_b = (_a = this._spec).isUserFunction) === null || _b === void 0 ? void 0 : _b.call(_a, func))) {
56095
+ return this._spec.executeUserFunction(func);
56096
+ } else if (typeof func === "function") {
56097
+ return func();
56098
+ } else {
56099
+ throw new Error(`User function is not supported (${JSON.stringify(func)})`);
56100
+ }
56101
+ }
55995
56102
  async visit(url) {
55996
56103
  var _a, _b;
55997
56104
  await ((_b = (_a = this._spec).visit) === null || _b === void 0 ? void 0 : _b.call(_a, this.target, url));
@@ -56709,7 +56816,10 @@ var require_take_stitched_screenshot = __commonJS({
56709
56816
  const preMoveOffset = await scroller.getInnerOffset();
56710
56817
  const postMoveOffset = await scroller.moveTo(initialOffset);
56711
56818
  const expectedRemainingOffset = utils34.geometry.offsetNegative(initialOffset, postMoveOffset);
56712
- await utils34.general.sleep(wait);
56819
+ if (typeof wait === "function")
56820
+ await wait();
56821
+ else
56822
+ await utils34.general.sleep(wait);
56713
56823
  const contentSize = await scroller.getContentSize({ lazyLoad });
56714
56824
  logger.verbose(
56715
56825
  "preMoveOffset",
@@ -56848,7 +56958,10 @@ var require_take_simple_screenshot = __commonJS({
56848
56958
  logger.verbose("Taking image of...");
56849
56959
  const driver = context.driver;
56850
56960
  const takeViewportScreenshot = await makeTakeViewportScreenshot({ logger, driver, stabilization, debug });
56851
- await utils34.general.sleep(wait);
56961
+ if (typeof wait === "function")
56962
+ await wait();
56963
+ else
56964
+ await utils34.general.sleep(wait);
56852
56965
  const image = await takeViewportScreenshot({ captureStatusBar, keepNavigationBar });
56853
56966
  if (region) {
56854
56967
  const cropRegion = await driver.getRegionInViewport(context, region);
@@ -57122,7 +57235,14 @@ var require_take_screenshot2 = __commonJS({
57122
57235
  hideCaret: settings.hideCaret,
57123
57236
  scrollingMode: (_c = (_b = settings.stitchMode) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : "scroll",
57124
57237
  overlap: settings.overlap,
57125
- wait: settings.waitBeforeCapture,
57238
+ wait: async () => {
57239
+ var _a2;
57240
+ if (typeof settings.waitBeforeCapture === "number") {
57241
+ await utils34.general.sleep(settings.waitBeforeCapture);
57242
+ } else if (settings.waitBeforeCapture) {
57243
+ await ((_a2 = driver.executeUserFunction) === null || _a2 === void 0 ? void 0 : _a2.call(driver, settings.waitBeforeCapture));
57244
+ }
57245
+ },
57126
57246
  framed: environment.isNative,
57127
57247
  lazyLoad: settings.lazyLoad,
57128
57248
  stabilization: settings.normalization && {
@@ -58006,7 +58126,7 @@ ${l2}`}`, { bundledCss: i2, unfetchedResources: u2 };
58006
58126
  return d4 && (N3.shadowRoot = d4), N3;
58007
58127
  }
58008
58128
  }(t4);
58009
- d2(i2.doCaptureDoc), l2(i2.waitForImages), await Promise.all(f2), d2(i2.waitForImages), N2.version = "1.3.0", N2.scriptVersion = "11.5.4";
58129
+ d2(i2.doCaptureDoc), l2(i2.waitForImages), await Promise.all(f2), d2(i2.waitForImages), N2.version = "1.3.0", N2.scriptVersion = "11.5.5";
58010
58130
  const S2 = h2.length ? `${h2.join("\n")}
58011
58131
  ` : "", A2 = m2.size ? `${Array.from(m2).join("\n")}
58012
58132
  ` : "", Y2 = JSON.stringify({ separator: y2, cssStartToken: g2, cssEndToken: g2, iframeStartToken: `"${p2}`, iframeEndToken: `${p2}"` });
@@ -58719,7 +58839,7 @@ var require_requests2 = __commonJS({
58719
58839
  brokerUrl = result.nextPath;
58720
58840
  }
58721
58841
  async function takeScreenshots({ settings: settings2, logger = mainLogger }) {
58722
- var _a, _b;
58842
+ var _a;
58723
58843
  logger = logger.extend(mainLogger, { tags: [`nml-request-${utils34.general.shortid()}`] });
58724
58844
  logger.log('Request "takeScreenshots" called with settings', settings2);
58725
58845
  const { localEnvironment, renderEnvironments, environmentSettings } = await (0, get_environments_info_1.getNMLEnvironmentsInfo)({
@@ -58741,6 +58861,7 @@ var require_requests2 = __commonJS({
58741
58861
  deviceList: !localEnvironment ? environmentSettings : void 0,
58742
58862
  scrollRootElement: fallbackId(settings2.scrollRootElement),
58743
58863
  region: fallbackId(settings2.region),
58864
+ sendDom: settings2.sendDom,
58744
58865
  selectorsToFindRegionsFor: (_a = settings2.selectorsToFindRegionsFor) === null || _a === void 0 ? void 0 : _a.map((selector) => fallbackId(selector))
58745
58866
  }
58746
58867
  },
@@ -58755,22 +58876,33 @@ var require_requests2 = __commonJS({
58755
58876
  {
58756
58877
  image: result.payload.result[0].result.screenshotUrl,
58757
58878
  environment: localEnvironment,
58758
- calculateRegions: (_b = result.payload.result[0].result) === null || _b === void 0 ? void 0 : _b.selectorRegions
58879
+ calculateRegions: result.payload.result[0].result.selectorRegions,
58880
+ dom: result.payload.result[0].result.dom
58759
58881
  }
58760
58882
  ] : renderEnvironments.map((environment, index) => {
58761
- var _a2;
58762
58883
  if (result.payload.result[index].error) {
58763
58884
  throw new Error(`There was a problem in taking screenshot for environment ${JSON.stringify(environment)}. The provided error message was "${result.payload.result[index].error.message}" and had a stack trace of "${result.payload.result[index].error.stack}"`);
58764
58885
  }
58765
58886
  return {
58766
58887
  image: result.payload.result[index].result.screenshotUrl,
58767
- calculateRegions: (_a2 = result.payload.result[index].result) === null || _a2 === void 0 ? void 0 : _a2.selectorRegions,
58888
+ calculateRegions: result.payload.result[index].result.selectorRegions,
58889
+ dom: result.payload.result[index].result.dom,
58768
58890
  environment
58769
58891
  };
58770
58892
  });
58771
58893
  } else {
58772
- screenshots = localEnvironment ? [{ image: result.payload.result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
58773
- return { image: result.payload[index].result.screenshotUrl, environment };
58894
+ screenshots = localEnvironment ? [
58895
+ {
58896
+ image: result.payload.result.screenshotUrl,
58897
+ environment: localEnvironment,
58898
+ dom: result.payload.result.dom
58899
+ }
58900
+ ] : renderEnvironments.map((environment, index) => {
58901
+ return {
58902
+ image: result.payload[index].result.screenshotUrl,
58903
+ dom: result.payload[index].result.dom,
58904
+ environment
58905
+ };
58774
58906
  });
58775
58907
  }
58776
58908
  logger.log('Request "takeScreenshots" finished successfully with body', screenshots);
@@ -58920,6 +59052,10 @@ var require_types7 = __commonJS({
58920
59052
  init_buffer();
58921
59053
  init_setInterval();
58922
59054
  Object.defineProperty(exports, "__esModule", { value: true });
59055
+ exports.DomResult = void 0;
59056
+ var DomResult = class {
59057
+ };
59058
+ exports.DomResult = DomResult;
58923
59059
  }
58924
59060
  });
58925
59061
 
@@ -59834,6 +59970,9 @@ var require_check2 = __commonJS({
59834
59970
  }
59835
59971
  });
59836
59972
  const calculate = elementReferences.calculate;
59973
+ if (typeof settings.waitBeforeCapture === "function") {
59974
+ throw new Error("providing functions to waitBeforeCapture is not supported in NML - please use a number instead");
59975
+ }
59837
59976
  const screenshots = await nmlClient.takeScreenshots({
59838
59977
  settings: {
59839
59978
  environments,
@@ -59848,11 +59987,13 @@ var require_check2 = __commonJS({
59848
59987
  name: settings.name,
59849
59988
  region: elementReferences.target,
59850
59989
  selectorsToFindRegionsFor: calculate.map(({ name }) => name),
59851
- scrollRootElement: elementReferences.scrolling
59990
+ scrollRootElement: elementReferences.scrolling,
59991
+ sendDom: settings.sendDom
59852
59992
  },
59853
59993
  logger
59854
59994
  });
59855
59995
  return screenshots.map(({ calculateRegions, ...baseTarget }) => {
59996
+ var _a, _b;
59856
59997
  const aggregateCalculatedRegions = [];
59857
59998
  calculate.forEach(({ reference }, index) => {
59858
59999
  const regions = calculateRegions === null || calculateRegions === void 0 ? void 0 : calculateRegions[index];
@@ -59862,8 +60003,11 @@ var require_check2 = __commonJS({
59862
60003
  logger.log(`Regions "${reference}" was not found in the screenshot`);
59863
60004
  }
59864
60005
  });
60006
+ if ((_a = baseTarget.dom) === null || _a === void 0 ? void 0 : _a.error) {
60007
+ logger.warn("could not fetch DOM: " + baseTarget.dom.error);
60008
+ }
59865
60009
  return {
59866
- baseTarget: { ...baseTarget, isTransformed: true },
60010
+ baseTarget: { ...baseTarget, dom: (_b = baseTarget.dom) === null || _b === void 0 ? void 0 : _b.url, isTransformed: true },
59867
60011
  baseSetting: getBaseCheckSettings({
59868
60012
  calculatedRegions: aggregateCalculatedRegions
59869
60013
  }),
@@ -60015,6 +60159,9 @@ var require_check_and_close2 = __commonJS({
60015
60159
  settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
60016
60160
  logger
60017
60161
  });
60162
+ if (typeof settings.waitBeforeCapture === "function") {
60163
+ throw new Error("providing functions to waitBeforeCapture is not supported in NML - please use a number instead");
60164
+ }
60018
60165
  const screenshots = await nmlClient.takeScreenshots({
60019
60166
  settings: {
60020
60167
  environments: uniqueEnvironments,
@@ -60026,13 +60173,18 @@ var require_check_and_close2 = __commonJS({
60026
60173
  waitBeforeCapture: settings.waitBeforeCapture,
60027
60174
  waitBetweenStitches: settings.waitBetweenStitches,
60028
60175
  lazyLoad: settings.lazyLoad,
60029
- name: settings.name
60176
+ name: settings.name,
60177
+ sendDom: settings.sendDom
60030
60178
  },
60031
60179
  logger
60032
60180
  });
60033
60181
  screenshots.forEach(({ environment, ...baseTarget }) => {
60182
+ var _a2, _b2;
60034
60183
  exactEnvironments.push(environment);
60035
- baseTargets.push({ ...baseTarget, isTransformed: true });
60184
+ if ((_a2 = baseTarget.dom) === null || _a2 === void 0 ? void 0 : _a2.error) {
60185
+ logger.warn("could not fetch DOM: " + baseTarget.dom.error);
60186
+ }
60187
+ baseTargets.push({ ...baseTarget, dom: (_b2 = baseTarget.dom) === null || _b2 === void 0 ? void 0 : _b2.url, isTransformed: true });
60036
60188
  baseSettings.push(getBaseCheckSettings({ calculatedRegions: [] }));
60037
60189
  });
60038
60190
  }
@@ -65376,7 +65528,7 @@ var require_processPagePollCjs = __commonJS({
65376
65528
  } catch {
65377
65529
  return false;
65378
65530
  }
65379
- }, od = Vh, id = gh, ad = /* @__PURE__ */ new Set(["date", "datetime-local", "email", "month", "number", "password", "search", "tel", "text", "time", "url", "week"]), sd = /^on[a-z]+$/;
65531
+ }, od = Vh, id = gh, ad = /* @__PURE__ */ new Set(["date", "datetime-local", "email", "month", "number", "password", "search", "tel", "text", "time", "url", "week", "range"]), sd = /^on[a-z]+$/;
65380
65532
  function ld({ attributes: e4 = {} }) {
65381
65533
  return Object.keys(e4).filter((t4) => e4[t4] && e4[t4].name);
65382
65534
  }
@@ -67055,7 +67207,7 @@ creating temp style for access.`), r2 = Sf(e4);
67055
67207
  function R2(e5) {
67056
67208
  return t5.defaultView && t5.defaultView.frameElement && t5.defaultView.frameElement.getAttribute(e5);
67057
67209
  }
67058
- }(t4).then((e4) => (h2("processPage end"), e4.scriptVersion = "4.11.15", e4));
67210
+ }(t4).then((e4) => (h2("processPage end"), e4.scriptVersion = "4.11.17", e4));
67059
67211
  };
67060
67212
  window[cg] = window[cg] || {};
67061
67213
  const dg = lg(hg, window[cg], ug);
@@ -67633,8 +67785,8 @@ var require_take_dom_snapshots = __commonJS({
67633
67785
  await ((_a2 = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _a2 === void 0 ? void 0 : _a2.call(hooks));
67634
67786
  if (utils34.types.isNumber(settings.waitBeforeCapture)) {
67635
67787
  await utils34.general.sleep(settings.waitBeforeCapture);
67636
- } else {
67637
- await ((_b2 = settings.waitBeforeCapture) === null || _b2 === void 0 ? void 0 : _b2.call(settings));
67788
+ } else if (settings.waitBeforeCapture) {
67789
+ await ((_b2 = driver.executeUserFunction) === null || _b2 === void 0 ? void 0 : _b2.call(driver, settings.waitBeforeCapture));
67638
67790
  }
67639
67791
  }
67640
67792
  function calculateBreakpoint({ breakpoints, value }) {
@@ -67826,6 +67978,52 @@ var require_to_generated_selectors = __commonJS({
67826
67978
  }
67827
67979
  });
67828
67980
 
67981
+ // ../core/dist/ufg/utils/filterStaleElements.js
67982
+ var require_filterStaleElements = __commonJS({
67983
+ "../core/dist/ufg/utils/filterStaleElements.js"(exports) {
67984
+ "use strict";
67985
+ init_process();
67986
+ init_setImmediate();
67987
+ init_buffer();
67988
+ init_setInterval();
67989
+ Object.defineProperty(exports, "__esModule", { value: true });
67990
+ exports.removeStaleElementsFromDomSnapshotsSettings = exports.filterStaleElements = exports.isStale = void 0;
67991
+ async function isStale({ context, element }) {
67992
+ try {
67993
+ await context.execute("return arguments[0]", element);
67994
+ } catch {
67995
+ return true;
67996
+ }
67997
+ return false;
67998
+ }
67999
+ exports.isStale = isStale;
68000
+ async function filterStaleElements({ context, elementReferences }) {
68001
+ if (!elementReferences)
68002
+ return [];
68003
+ const validElements = [];
68004
+ for (const element of elementReferences) {
68005
+ if (!await isStale({ context, element })) {
68006
+ validElements.push(element);
68007
+ }
68008
+ }
68009
+ return validElements;
68010
+ }
68011
+ exports.filterStaleElements = filterStaleElements;
68012
+ async function removeStaleElementsFromDomSnapshotsSettings({ context, settings, targetElement }) {
68013
+ if (await isStale({ context, element: targetElement })) {
68014
+ throw new Error("Target element is stale - please make sure the element is not detached from the DOM tree. Failed to recover from stale element");
68015
+ } else {
68016
+ settings.elementReferences = await filterStaleElements({
68017
+ context,
68018
+ elementReferences: settings.elementReferences
68019
+ });
68020
+ }
68021
+ return settings;
68022
+ }
68023
+ exports.removeStaleElementsFromDomSnapshotsSettings = removeStaleElementsFromDomSnapshotsSettings;
68024
+ }
68025
+ });
68026
+
67829
68027
  // ../core/dist/ufg/take-snapshots.js
67830
68028
  var require_take_snapshots2 = __commonJS({
67831
68029
  "../core/dist/ufg/take-snapshots.js"(exports) {
@@ -67841,9 +68039,10 @@ var require_take_snapshots2 = __commonJS({
67841
68039
  var to_safe_check_settings_1 = require_to_safe_check_settings();
67842
68040
  var to_generated_selectors_1 = require_to_generated_selectors();
67843
68041
  var abort_error_1 = require_abort_error();
68042
+ var filterStaleElements_1 = require_filterStaleElements();
67844
68043
  function makeTakeSnapshots({ core, spec, signal, logger: mainLogger }) {
67845
68044
  return async function takeSnapshots({ driver, settings = {}, account, logger = mainLogger }) {
67846
- var _a;
68045
+ var _a, _b;
67847
68046
  logger = logger.extend(mainLogger);
67848
68047
  logger.log('Command "takeSnapshots" is called with settings', settings);
67849
68048
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
@@ -67876,7 +68075,7 @@ var require_take_snapshots2 = __commonJS({
67876
68075
  },
67877
68076
  logger
67878
68077
  });
67879
- snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
68078
+ const takeSnapshotsSettings = {
67880
68079
  driver,
67881
68080
  settings: {
67882
68081
  waitBeforeCapture: settings.waitBeforeCapture,
@@ -67892,7 +68091,23 @@ var require_take_snapshots2 = __commonJS({
67892
68091
  getIOSDevices: ufgClient.getIOSDevices
67893
68092
  },
67894
68093
  logger
67895
- });
68094
+ };
68095
+ try {
68096
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)(takeSnapshotsSettings);
68097
+ } catch (err) {
68098
+ if ((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes("stale element")) {
68099
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
68100
+ ...takeSnapshotsSettings,
68101
+ settings: await (0, filterStaleElements_1.removeStaleElementsFromDomSnapshotsSettings)({
68102
+ settings: takeSnapshotsSettings.settings,
68103
+ context: currentContext,
68104
+ targetElement: elementReferences.target
68105
+ })
68106
+ });
68107
+ } else {
68108
+ throw err;
68109
+ }
68110
+ }
67896
68111
  } else {
67897
68112
  const nmlClient = await core.getNMLClient({
67898
68113
  driver,
@@ -68134,15 +68349,20 @@ var require_requests3 = __commonJS({
68134
68349
  __setModuleDefault(result, mod);
68135
68350
  return result;
68136
68351
  };
68352
+ var __importDefault = exports && exports.__importDefault || function(mod) {
68353
+ return mod && mod.__esModule ? mod : { "default": mod };
68354
+ };
68137
68355
  Object.defineProperty(exports, "__esModule", { value: true });
68138
- exports.makeUFGRequests = void 0;
68356
+ exports.toServerEnvironment = exports.makeUFGRequests = void 0;
68139
68357
  var logger_1 = require_browser6();
68140
68358
  var req_ufg_1 = require_req_ufg();
68141
68359
  var to_render_result_1 = require_to_render_result();
68142
68360
  var utils34 = __importStar(require_browser3());
68361
+ var throat_1 = __importDefault(require_throat());
68143
68362
  function makeUFGRequests({ settings, logger }) {
68144
68363
  const mainLogger = (0, logger_1.makeLogger)({ logger, format: { label: "ufg-requests" } });
68145
68364
  const req2 = (0, req_ufg_1.makeReqUFG)({ settings, logger: mainLogger });
68365
+ const callRenderThrottled = (0, throat_1.default)(5, callRender);
68146
68366
  const defaultAgentId = settings.agentId;
68147
68367
  const getChromeEmulationDevicesWithCache = utils34.general.cachify(getChromeEmulationDevices);
68148
68368
  const getIOSDevicesWithCache = utils34.general.cachify(getIOSDevices);
@@ -68157,64 +68377,72 @@ var require_requests3 = __commonJS({
68157
68377
  getIOSDevices: getIOSDevicesWithCache,
68158
68378
  getAndroidDevices: getAndroidDevicesWithCache
68159
68379
  };
68380
+ async function callRender(chunk) {
68381
+ const res = await req2("./render", {
68382
+ name: "startRenders",
68383
+ method: "POST",
68384
+ body: chunk,
68385
+ expected: 200,
68386
+ logger
68387
+ });
68388
+ return res;
68389
+ }
68160
68390
  async function startRenders({ renders, logger: logger2 = mainLogger }) {
68161
68391
  logger2 = logger2.extend(mainLogger, { tags: [`start-render-request-${utils34.general.shortid()}`] });
68162
68392
  logger2.log('Request "startRenders" called for requests', renders);
68163
- const response = await req2("./render", {
68164
- name: "startRenders",
68165
- method: "POST",
68166
- body: renders.map(({ target, settings: settings2 }) => {
68167
- var _a;
68168
- const renderOptions = {
68169
- url: target.source,
68170
- snapshot: target.snapshot,
68171
- resources: target.resources,
68172
- selectorsToFindRegionsFor: (_a = settings2.selectorsToCalculate) === null || _a === void 0 ? void 0 : _a.map(toServerSelector),
68173
- options: settings2.ufgOptions,
68174
- scriptHooks: settings2.hooks,
68175
- agentId: defaultAgentId,
68176
- prefixRenderId: settings2.prefixRenderId,
68177
- webhook: settings2.uploadUrl,
68178
- stitchingService: settings2.stitchingServiceUrl,
68179
- sendDom: settings2.sendDom,
68180
- includeFullPageSize: settings2.includeFullPageSize,
68181
- enableMultipleResultsPerSelector: true,
68182
- ...toServerEnvironment(settings2.environment)
68183
- };
68184
- if (utils34.types.has(settings2.environment, "type") && settings2.environment.type === "native") {
68185
- renderOptions.renderInfo.vhsType = target.vhsType;
68186
- renderOptions.renderInfo.vhsCompatibilityParams = target.vhsCompatibilityParams;
68187
- renderOptions.renderInfo.stitchMode = settings2.stitchMode;
68188
- }
68189
- if (settings2.region) {
68190
- if (utils34.types.has(settings2.region, ["x", "y", "width", "height"])) {
68191
- renderOptions.renderInfo.target = "region";
68192
- renderOptions.renderInfo.region = settings2.region;
68193
- } else {
68194
- renderOptions.renderInfo.target = settings2.fully ? "full-selector" : "selector";
68195
- renderOptions.renderInfo.selector = toServerSelector(settings2.region);
68196
- }
68393
+ const rendersOptions = renders.map(({ target, settings: settings2 }) => {
68394
+ var _a;
68395
+ const renderOptions = {
68396
+ url: target.source,
68397
+ snapshot: target.snapshot,
68398
+ resources: target.resources,
68399
+ selectorsToFindRegionsFor: (_a = settings2.selectorsToCalculate) === null || _a === void 0 ? void 0 : _a.map(toServerSelector),
68400
+ options: settings2.ufgOptions,
68401
+ scriptHooks: settings2.hooks,
68402
+ agentId: defaultAgentId,
68403
+ prefixRenderId: settings2.prefixRenderId,
68404
+ webhook: settings2.uploadUrl,
68405
+ stitchingService: settings2.stitchingServiceUrl,
68406
+ sendDom: settings2.sendDom,
68407
+ includeFullPageSize: settings2.includeFullPageSize,
68408
+ enableMultipleResultsPerSelector: true,
68409
+ ...toServerEnvironment(settings2.environment)
68410
+ };
68411
+ if (utils34.types.has(settings2.environment, "type") && settings2.environment.type === "native") {
68412
+ renderOptions.renderInfo.vhsType = target.vhsType;
68413
+ renderOptions.renderInfo.vhsCompatibilityParams = target.vhsCompatibilityParams;
68414
+ renderOptions.renderInfo.stitchMode = settings2.stitchMode;
68415
+ }
68416
+ if (settings2.region) {
68417
+ if (utils34.types.has(settings2.region, ["x", "y", "width", "height"])) {
68418
+ renderOptions.renderInfo.target = "region";
68419
+ renderOptions.renderInfo.region = settings2.region;
68197
68420
  } else {
68198
- renderOptions.renderInfo.target = settings2.fully ? "full-page" : "viewport";
68199
- if (utils34.types.has(settings2.environment, "type") && settings2.environment.type === "native") {
68200
- renderOptions.renderInfo.selector = settings2.scrollRootElement;
68201
- }
68421
+ renderOptions.renderInfo.target = settings2.fully ? "full-selector" : "selector";
68422
+ renderOptions.renderInfo.selector = toServerSelector(settings2.region);
68202
68423
  }
68203
- return renderOptions;
68204
- }),
68205
- expected: 200,
68206
- logger: logger2
68424
+ } else {
68425
+ renderOptions.renderInfo.target = settings2.fully ? "full-page" : "viewport";
68426
+ if (utils34.types.has(settings2.environment, "type") && settings2.environment.type === "native") {
68427
+ renderOptions.renderInfo.selector = settings2.scrollRootElement;
68428
+ }
68429
+ }
68430
+ return renderOptions;
68207
68431
  });
68208
- const results = await response.json().then((results2) => {
68209
- return results2.map((result) => {
68210
- return {
68211
- jobId: result.jobId,
68212
- renderId: result.renderId,
68213
- status: result.renderStatus,
68214
- needMoreResources: result.needMoreResources,
68215
- needMoreDom: result.needMoreDom
68216
- };
68217
- });
68432
+ const chunks = [...Array(Math.ceil(rendersOptions.length / 50))].map((_) => rendersOptions.splice(0, 50));
68433
+ const chunksResponse = await Promise.all(chunks.map(async (chunk) => {
68434
+ const response2 = await callRenderThrottled(chunk);
68435
+ return response2.json();
68436
+ }));
68437
+ const response = chunksResponse.flat();
68438
+ const results = response.map((result) => {
68439
+ return {
68440
+ jobId: result.jobId,
68441
+ renderId: result.renderId,
68442
+ status: result.renderStatus,
68443
+ needMoreResources: result.needMoreResources,
68444
+ needMoreDom: result.needMoreDom
68445
+ };
68218
68446
  });
68219
68447
  logger2.log('Request "startRenders" finished successfully with body', results);
68220
68448
  return results;
@@ -68287,32 +68515,35 @@ var require_requests3 = __commonJS({
68287
68515
  async function getActualEnvironments({ settings: settings2, logger: logger2 = mainLogger }) {
68288
68516
  logger2 = logger2.extend(mainLogger, { tags: [`get-actual-environments-${utils34.general.shortid()}`] });
68289
68517
  logger2.log('Request "getActualEnvironments" called for with settings', settings2);
68290
- const response = await req2("./job-info", {
68291
- name: "getActualEnvironments",
68292
- method: "POST",
68293
- body: settings2.map((settings3) => {
68294
- const renderOptions = {
68295
- agentId: defaultAgentId,
68296
- webhook: "",
68297
- stitchingService: "",
68298
- ...toServerEnvironment(settings3.environment)
68299
- };
68300
- renderOptions.renderInfo.target = "viewport";
68301
- return renderOptions;
68302
- }),
68303
- expected: 200,
68304
- logger: logger2
68305
- });
68306
- const results = await response.json().then((results2) => {
68307
- return results2.map((result, index) => {
68308
- var _a;
68309
- return {
68310
- requested: (_a = settings2[index]) === null || _a === void 0 ? void 0 : _a.environment,
68311
- environmentId: utils34.general.guid(),
68312
- rawEnvironment: result.eyesEnvironment
68313
- };
68518
+ const results = await utils34.general.dedupAndMap(settings2, async (settings3) => {
68519
+ const response = await req2("./job-info", {
68520
+ name: "getActualEnvironments",
68521
+ method: "POST",
68522
+ body: settings3.map((settings4) => {
68523
+ const renderOptions = {
68524
+ agentId: defaultAgentId,
68525
+ webhook: "",
68526
+ stitchingService: "",
68527
+ ...toServerEnvironment(settings4.environment)
68528
+ };
68529
+ renderOptions.renderInfo.target = "viewport";
68530
+ return renderOptions;
68531
+ }),
68532
+ expected: 200,
68533
+ logger: logger2
68314
68534
  });
68315
- });
68535
+ const results2 = await response.json().then((results3) => {
68536
+ return results3.map((result, index) => {
68537
+ var _a;
68538
+ return {
68539
+ requested: (_a = settings3[index]) === null || _a === void 0 ? void 0 : _a.environment,
68540
+ environmentId: utils34.general.guid(),
68541
+ rawEnvironment: result.eyesEnvironment
68542
+ };
68543
+ });
68544
+ });
68545
+ return results2;
68546
+ }, utils34.general.deepEqual);
68316
68547
  logger2.log('Request "getActualEnvironments" finished successfully with body', results);
68317
68548
  return results;
68318
68549
  }
@@ -68345,17 +68576,23 @@ var require_requests3 = __commonJS({
68345
68576
  function toServerEnvironment(environment) {
68346
68577
  var _a, _b;
68347
68578
  if (utils34.types.has(environment, ["width", "height"])) {
68579
+ if (!environment.name) {
68580
+ throw new Error("Expected browser name to be defined when width and height are defined");
68581
+ }
68348
68582
  return {
68349
68583
  platform: { name: "linux", type: "web" },
68350
68584
  browser: {
68351
- name: environment.name.replace(/(one|two)-versions?-back$/, (_, num) => num === "one" ? "1" : "2")
68585
+ name: replaceVersionsBack(environment.name)
68352
68586
  },
68353
68587
  renderInfo: { width: environment.width, height: environment.height }
68354
68588
  };
68355
68589
  } else if (utils34.types.has(environment, "chromeEmulationInfo")) {
68590
+ if (environment.name && !environment.name.includes("chrome")) {
68591
+ throw new Error("Expected browser name to be undefined or chrome when chromeEmulationInfo is defined");
68592
+ }
68356
68593
  return {
68357
68594
  platform: { name: "linux", type: "web" },
68358
- browser: { name: "chrome" },
68595
+ browser: { name: replaceVersionsBack((_a = environment.name) !== null && _a !== void 0 ? _a : "chrome") },
68359
68596
  renderInfo: {
68360
68597
  emulationInfo: {
68361
68598
  deviceName: environment.chromeEmulationInfo.deviceName,
@@ -68365,7 +68602,7 @@ var require_requests3 = __commonJS({
68365
68602
  };
68366
68603
  } else if (utils34.types.has(environment, "androidDeviceInfo")) {
68367
68604
  return {
68368
- platform: { name: "android", type: (_a = environment.type) !== null && _a !== void 0 ? _a : "native" },
68605
+ platform: { name: "android", type: (_b = environment.type) !== null && _b !== void 0 ? _b : "native" },
68369
68606
  browser: environment.type === "web" ? { name: "chrome" } : void 0,
68370
68607
  renderInfo: {
68371
68608
  androidDeviceInfo: {
@@ -68377,8 +68614,8 @@ var require_requests3 = __commonJS({
68377
68614
  };
68378
68615
  } else if (utils34.types.has(environment, "iosDeviceInfo")) {
68379
68616
  return {
68380
- platform: { name: "ios", type: (_b = environment.type) !== null && _b !== void 0 ? _b : "web" },
68381
- browser: environment.type === "web" ? { name: "safari" } : void 0,
68617
+ platform: { name: "ios", type: "web" },
68618
+ browser: { name: "safari" },
68382
68619
  renderInfo: {
68383
68620
  iosDeviceInfo: {
68384
68621
  name: environment.iosDeviceInfo.deviceName,
@@ -68388,7 +68625,11 @@ var require_requests3 = __commonJS({
68388
68625
  }
68389
68626
  };
68390
68627
  }
68628
+ function replaceVersionsBack(name) {
68629
+ return name.replace(/(one|two)-versions?-back$/, (_, num) => num === "one" ? "1" : "2");
68630
+ }
68391
68631
  }
68632
+ exports.toServerEnvironment = toServerEnvironment;
68392
68633
  function toServerSelector(selector) {
68393
68634
  var _a;
68394
68635
  if (utils34.types.isString(selector))
@@ -68682,7 +68923,6 @@ var require_create_render_target = __commonJS({
68682
68923
  processResources({
68683
68924
  resources: Object.fromEntries([
68684
68925
  ...((_a = snapshot.resourceUrls) !== null && _a !== void 0 ? _a : []).map((url) => {
68685
- url = replaceResourceUrlIfNeeded(url, replaceResourceUrlsSettings);
68686
68926
  return [url, (0, resource_1.makeResource)({ url, environment: settings === null || settings === void 0 ? void 0 : settings.environment })];
68687
68927
  }),
68688
68928
  ...Object.entries((_b = snapshot.resourceContents) !== null && _b !== void 0 ? _b : {}).map(([url, resource]) => {
@@ -68702,7 +68942,8 @@ var require_create_render_target = __commonJS({
68702
68942
  ]),
68703
68943
  settings: {
68704
68944
  ...settings,
68705
- headers: { ...settings === null || settings === void 0 ? void 0 : settings.headers, Referer: utils34.types.has(snapshot, "url") ? snapshot.url : void 0 }
68945
+ headers: { ...settings === null || settings === void 0 ? void 0 : settings.headers, Referer: utils34.types.has(snapshot, "url") ? snapshot.url : void 0 },
68946
+ getUrlForUrlResource: replaceResourceUrlsSettings ? (url) => replaceResourceUrlIfNeeded(url, replaceResourceUrlsSettings) : void 0
68706
68947
  },
68707
68948
  logger
68708
68949
  }),
@@ -68714,7 +68955,12 @@ var require_create_render_target = __commonJS({
68714
68955
  const frameUrl = replaceResourceUrlIfNeeded(snapshot.frames[index].url, replaceResourceUrlsSettings);
68715
68956
  return Object.assign(mapping, { [frameUrl]: resources.mapping[frameUrl] });
68716
68957
  }, {});
68717
- const resourceMappingWithoutDom = { ...snapshotResources.mapping, ...frameDomResourceMapping };
68958
+ const snapshotResourcesMapping = Object.keys(snapshotResources.mapping).reduce((mapping, resourceUrl) => {
68959
+ const url = replaceResourceUrlIfNeeded(resourceUrl, replaceResourceUrlsSettings);
68960
+ mapping[url] = snapshotResources.mapping[resourceUrl];
68961
+ return mapping;
68962
+ }, {});
68963
+ const resourceMappingWithoutDom = { ...snapshotResourcesMapping, ...frameDomResourceMapping };
68718
68964
  if (utils34.types.has(snapshot, "url"))
68719
68965
  snapshot.url = replaceResourceUrlIfNeeded(snapshot.url, replaceResourceUrlsSettings);
68720
68966
  const domResource = utils34.types.has(snapshot, "cdt") ? {
@@ -85828,6 +86074,9 @@ var require_process_resources = __commonJS({
85828
86074
  async function doProcessUrlResourceWithDependencies(resource2) {
85829
86075
  const processedResource = await processUrlResource({ resource: resource2, settings, logger });
85830
86076
  if (processedResource) {
86077
+ if (settings === null || settings === void 0 ? void 0 : settings.getUrlForUrlResource) {
86078
+ resource2.url = settings.getUrlForUrlResource(resource2.url);
86079
+ }
85831
86080
  processedResourcesWithDependencies[resource2.url] = processedResource;
85832
86081
  if (processedResource.dependencies) {
85833
86082
  const dependencyResources = processedResource.dependencies.flatMap((dependencyUrl) => {
@@ -88635,6 +88884,27 @@ var require_types9 = __commonJS({
88635
88884
  init_buffer();
88636
88885
  init_setInterval();
88637
88886
  Object.defineProperty(exports, "__esModule", { value: true });
88887
+ exports.BrowserNameEnum = void 0;
88888
+ var BrowserNameEnum;
88889
+ (function(BrowserNameEnum2) {
88890
+ BrowserNameEnum2["CHROME"] = "chrome";
88891
+ BrowserNameEnum2["CHROME_ONE_VERSION_BACK"] = "chrome-one-version-back";
88892
+ BrowserNameEnum2["CHROME_TWO_VERSIONS_BACK"] = "chrome-two-versions-back";
88893
+ BrowserNameEnum2["FIREFOX"] = "firefox";
88894
+ BrowserNameEnum2["FIREFOX_ONE_VERSION_BACK"] = "firefox-one-version-back";
88895
+ BrowserNameEnum2["FIREFOX_TWO_VERSIONS_BACK"] = "firefox-two-versions-back";
88896
+ BrowserNameEnum2["IE_11"] = "ie";
88897
+ BrowserNameEnum2["IE_10"] = "ie10";
88898
+ BrowserNameEnum2["EDGE"] = "edge";
88899
+ BrowserNameEnum2["EDGE_CHROMIUM"] = "edgechromium";
88900
+ BrowserNameEnum2["EDGE_LEGACY"] = "edgelegacy";
88901
+ BrowserNameEnum2["EDGE_CHROMIUM_ONE_VERSION_BACK"] = "edgechromium-one-version-back";
88902
+ BrowserNameEnum2["EDGE_CHROMIUM_TWO_VERSIONS_BACK"] = "edgechromium-two-versions-back";
88903
+ BrowserNameEnum2["SAFARI"] = "safari";
88904
+ BrowserNameEnum2["SAFARI_EARLY_ACCESS"] = "safari-earlyaccess";
88905
+ BrowserNameEnum2["SAFARI_ONE_VERSION_BACK"] = "safari-one-version-back";
88906
+ BrowserNameEnum2["SAFARI_TWO_VERSIONS_BACK"] = "safari-two-versions-back";
88907
+ })(BrowserNameEnum || (exports.BrowserNameEnum = BrowserNameEnum = {}));
88638
88908
  }
88639
88909
  });
88640
88910
 
@@ -89320,6 +89590,108 @@ var require_extract_default_environment = __commonJS({
89320
89590
  }
89321
89591
  });
89322
89592
 
89593
+ // ../core/dist/ufg/utils/verify-environment-info.js
89594
+ var require_verify_environment_info = __commonJS({
89595
+ "../core/dist/ufg/utils/verify-environment-info.js"(exports) {
89596
+ "use strict";
89597
+ init_process();
89598
+ init_setImmediate();
89599
+ init_buffer();
89600
+ init_setInterval();
89601
+ var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
89602
+ if (k2 === void 0)
89603
+ k2 = k;
89604
+ var desc = Object.getOwnPropertyDescriptor(m, k);
89605
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
89606
+ desc = { enumerable: true, get: function() {
89607
+ return m[k];
89608
+ } };
89609
+ }
89610
+ Object.defineProperty(o, k2, desc);
89611
+ } : function(o, m, k, k2) {
89612
+ if (k2 === void 0)
89613
+ k2 = k;
89614
+ o[k2] = m[k];
89615
+ });
89616
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
89617
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
89618
+ } : function(o, v) {
89619
+ o["default"] = v;
89620
+ });
89621
+ var __importStar = exports && exports.__importStar || function(mod) {
89622
+ if (mod && mod.__esModule)
89623
+ return mod;
89624
+ var result = {};
89625
+ if (mod != null) {
89626
+ for (var k in mod)
89627
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
89628
+ __createBinding(result, mod, k);
89629
+ }
89630
+ __setModuleDefault(result, mod);
89631
+ return result;
89632
+ };
89633
+ Object.defineProperty(exports, "__esModule", { value: true });
89634
+ exports.verifyEnvironmentsInfo = void 0;
89635
+ var utils34 = __importStar(require_browser3());
89636
+ var ufg_client_1 = require_dist6();
89637
+ async function verifyEnvironmentsInfo({ environments, ufgClient }) {
89638
+ const invalid = [];
89639
+ await Promise.all(environments.map(async (environment) => {
89640
+ if (utils34.types.has(environment, ["width", "height"])) {
89641
+ const browserName = environment.name || "";
89642
+ if (!getAllBrowserNames().includes(browserName)) {
89643
+ invalid.push(browserName);
89644
+ }
89645
+ } else if (utils34.types.has(environment, "chromeEmulationInfo")) {
89646
+ const devices = await ufgClient.getChromeEmulationDevices();
89647
+ const deviceName = environment.chromeEmulationInfo.deviceName;
89648
+ if (!devices[deviceName]) {
89649
+ invalid.push(deviceName);
89650
+ }
89651
+ } else if (utils34.types.has(environment, "iosDeviceInfo")) {
89652
+ const devices = await ufgClient.getIOSDevices();
89653
+ const deviceName = environment.iosDeviceInfo.deviceName;
89654
+ if (!devices[deviceName]) {
89655
+ invalid.push(deviceName);
89656
+ }
89657
+ }
89658
+ }));
89659
+ if (invalid.length > 0) {
89660
+ throw new Error(`The specified UFG environment(s): ${invalid.map((item) => `"${item}"`).join(", ")} are either invalid or no longer supported.
89661
+ Refer to our current list of supported devices and browsers at: https://applitools.com/tutorials/concepts/test-execution/ultrafast-grid-devices-browsers
89662
+ If you continue to experience issues, ensure that your SDK is updated to the latest version.`);
89663
+ }
89664
+ }
89665
+ exports.verifyEnvironmentsInfo = verifyEnvironmentsInfo;
89666
+ function getAllBrowserNames() {
89667
+ return [
89668
+ ...Object.values(ufg_client_1.BrowserNameEnum),
89669
+ "chrome-1",
89670
+ "firefox-1",
89671
+ "edgechromium-1",
89672
+ "safari-1",
89673
+ "chrome-2",
89674
+ "firefox-2",
89675
+ "edgechromium-2",
89676
+ "safari-2",
89677
+ "chrome-canary",
89678
+ "firefox-canary",
89679
+ "edgechromium-canary",
89680
+ "safari-canary",
89681
+ "chrome-one-versions-back",
89682
+ "firefox-one-versions-back",
89683
+ "edgechromium-one-versions-back",
89684
+ "safari-one-versions-back",
89685
+ "chrome-two-version-back",
89686
+ "firefox-two-version-back",
89687
+ "edgechromium-two-version-back",
89688
+ "safari-two-version-back",
89689
+ "ie11"
89690
+ ];
89691
+ }
89692
+ }
89693
+ });
89694
+
89323
89695
  // ../core/dist/ufg/open-eyes.js
89324
89696
  var require_open_eyes3 = __commonJS({
89325
89697
  "../core/dist/ufg/open-eyes.js"(exports) {
@@ -89370,11 +89742,12 @@ var require_open_eyes3 = __commonJS({
89370
89742
  var abort_1 = require_abort2();
89371
89743
  var get_results_1 = require_get_results2();
89372
89744
  var extract_default_environment_1 = require_extract_default_environment();
89745
+ var verify_environment_info_1 = require_verify_environment_info();
89373
89746
  var abort_controller_1 = (init_abort_controller(), __toCommonJS(abort_controller_exports));
89374
89747
  var utils34 = __importStar(require_browser3());
89375
89748
  function makeOpenEyes({ core, spec, logger: mainLogger }) {
89376
89749
  return async function openEyes({ target, settings, storage = /* @__PURE__ */ new Map(), logger = mainLogger }) {
89377
- var _a, _b, _c;
89750
+ var _a, _b, _c, _d;
89378
89751
  logger = logger.extend(mainLogger);
89379
89752
  logger.log(`Command "openEyes" is called with ${target ? "default driver" : ""}`, ...settings ? ["and settings", settings] : [], storage.size > 0 ? "and default eyes storage" : "");
89380
89753
  const driver = target && await (0, driver_1.makeDriver)({ spec, driver: target, logger });
@@ -89392,8 +89765,17 @@ var require_open_eyes3 = __commonJS({
89392
89765
  const controller = new abort_controller_1.AbortController();
89393
89766
  const { signal } = controller;
89394
89767
  const account = await core.getAccountInfo({ settings, logger });
89768
+ const ufgClient = await core.getUFGClient({
89769
+ settings: {
89770
+ ...account.ufgServer,
89771
+ eyesServerUrl: account.eyesServer.eyesServerUrl,
89772
+ apiKey: account.eyesServer.apiKey
89773
+ },
89774
+ logger
89775
+ });
89776
+ await (0, verify_environment_info_1.verifyEnvironmentsInfo)({ environments: (_d = settings.environments) !== null && _d !== void 0 ? _d : [], ufgClient });
89395
89777
  return utils34.general.extend({}, (eyes) => {
89396
- var _a2, _b2, _c2, _d;
89778
+ var _a2, _b2, _c2, _d2;
89397
89779
  return {
89398
89780
  type: "ufg",
89399
89781
  core,
@@ -89403,7 +89785,7 @@ var require_open_eyes3 = __commonJS({
89403
89785
  batchBuildId: (_b2 = settings.batch) === null || _b2 === void 0 ? void 0 : _b2.buildId,
89404
89786
  keepBatchOpen: settings.keepBatchOpen,
89405
89787
  eyesServer: account.eyesServer,
89406
- ufgServer: { ...account.ufgServer, ufgServerUrl: (_c2 = settings.ufgServerUrl) !== null && _c2 !== void 0 ? _c2 : (_d = account.ufgServer) === null || _d === void 0 ? void 0 : _d.ufgServerUrl },
89788
+ ufgServer: { ...account.ufgServer, ufgServerUrl: (_c2 = settings.ufgServerUrl) !== null && _c2 !== void 0 ? _c2 : (_d2 = account.ufgServer) === null || _d2 === void 0 ? void 0 : _d2.ufgServerUrl },
89407
89789
  uploadUrl: account.uploadUrl,
89408
89790
  stitchingServiceUrl: account.stitchingServiceUrl,
89409
89791
  supportedEnvironmentsUrl: account.supportedEnvironmentsUrl,
@@ -89551,7 +89933,8 @@ var require_populate_eyes_server_settings = __commonJS({
89551
89933
  var _a, _b, _c, _d, _e, _f;
89552
89934
  (_a = settings.eyesServerUrl) !== null && _a !== void 0 ? _a : settings.eyesServerUrl = (_c = (_b = utils34.general.getEnvValue("EYES_SERVER_URL")) !== null && _b !== void 0 ? _b : utils34.general.getEnvValue("SERVER_URL")) !== null && _c !== void 0 ? _c : "https://eyesapi.applitools.com";
89553
89935
  (_d = settings.apiKey) !== null && _d !== void 0 ? _d : settings.apiKey = utils34.general.getEnvValue("API_KEY");
89554
- (_e = settings.proxy) !== null && _e !== void 0 ? _e : settings.proxy = utils34.general.getEnvValue("PROXY_URL") ? { url: utils34.general.getEnvValue("PROXY_URL") } : void 0;
89936
+ const proxyUrl = utils34.general.getEnvValue("PROXY_URL");
89937
+ (_e = settings.proxy) !== null && _e !== void 0 ? _e : settings.proxy = proxyUrl ? { url: proxyUrl } : void 0;
89555
89938
  (_f = settings.useDnsCache) !== null && _f !== void 0 ? _f : settings.useDnsCache = utils34.general.getEnvValue("USE_DNS_CACHE", "boolean");
89556
89939
  return {
89557
89940
  eyesServerUrl: settings.eyesServerUrl,
@@ -89969,7 +90352,7 @@ var require_check4 = __commonJS({
89969
90352
  settings.overlap = { top: 10, bottom: 50, ...settings === null || settings === void 0 ? void 0 : settings.overlap };
89970
90353
  (_e = settings.matchLevel) !== null && _e !== void 0 ? _e : settings.matchLevel = "Strict";
89971
90354
  (_f = settings.ignoreCaret) !== null && _f !== void 0 ? _f : settings.ignoreCaret = true;
89972
- (_g = settings.sendDom) !== null && _g !== void 0 ? _g : settings.sendDom = eyes.test.account.rcaEnabled || settings.matchLevel === "Layout" || settings.matchLevel === "Dynamic" || settings.enablePatterns || settings.useDom || !utils34.types.isEmpty(settings.dynamicRegions) || !utils34.types.isEmpty(settings.layoutRegions);
90355
+ (_g = settings.sendDom) !== null && _g !== void 0 ? _g : settings.sendDom = eyes.test.account.rcaEnabled || settings.matchLevel === "Layout" || settings.matchLevel === "Dynamic" || settings.enablePatterns || settings.useDom || !utils34.types.isEmpty(settings.dynamicRegions) || !utils34.types.isEmpty(settings.layoutRegions) || !utils34.types.isEmpty(settings.accessibilitySettings);
89973
90356
  (_h = settings.autProxy) !== null && _h !== void 0 ? _h : settings.autProxy = eyes.test.eyesServer.proxy;
89974
90357
  (_j = settings.useDom) !== null && _j !== void 0 ? _j : settings.useDom = false;
89975
90358
  (_k = (_r = settings).retryTimeout) !== null && _k !== void 0 ? _k : _r.retryTimeout = 0;
@@ -90172,45 +90555,6 @@ var require_abort3 = __commonJS({
90172
90555
  }
90173
90556
  });
90174
90557
 
90175
- // ../core/dist/errors/test-error.js
90176
- var require_test_error = __commonJS({
90177
- "../core/dist/errors/test-error.js"(exports) {
90178
- "use strict";
90179
- init_process();
90180
- init_setImmediate();
90181
- init_buffer();
90182
- init_setInterval();
90183
- Object.defineProperty(exports, "__esModule", { value: true });
90184
- exports.TestError = void 0;
90185
- var core_base_1 = require_dist2();
90186
- var TestError = class extends core_base_1.CoreError {
90187
- constructor(result) {
90188
- if (result.status === "Failed") {
90189
- super(`Test '${result.name}' of '${result.appName}' is failed! See details at ${result.url}`, {
90190
- reason: "test failed",
90191
- result
90192
- });
90193
- } else if (result.status === "Unresolved") {
90194
- if (result.isNew) {
90195
- super(`Test '${result.name}' of '${result.appName}' is new! Please approve the new baseline at ${result.url}`, {
90196
- reason: "test new",
90197
- result
90198
- });
90199
- } else {
90200
- super(`Test '${result.name}' of '${result.appName}' detected differences! See details at: ${result.url}`, {
90201
- reason: "test different",
90202
- result
90203
- });
90204
- }
90205
- } else {
90206
- super("");
90207
- }
90208
- }
90209
- };
90210
- exports.TestError = TestError;
90211
- }
90212
- });
90213
-
90214
90558
  // ../core/dist/get-eyes-results.js
90215
90559
  var require_get_eyes_results = __commonJS({
90216
90560
  "../core/dist/get-eyes-results.js"(exports) {
@@ -90253,7 +90597,7 @@ var require_get_eyes_results = __commonJS({
90253
90597
  };
90254
90598
  Object.defineProperty(exports, "__esModule", { value: true });
90255
90599
  exports.makeGetEyesResults = void 0;
90256
- var test_error_1 = require_test_error();
90600
+ var core_base_1 = require_dist2();
90257
90601
  var utils34 = __importStar(require_browser3());
90258
90602
  function makeGetEyesResults({ eyes, logger: mainLogger }) {
90259
90603
  return async function getEyesResults({ settings, logger = mainLogger } = {}) {
@@ -90264,7 +90608,7 @@ var require_get_eyes_results = __commonJS({
90264
90608
  results.forEach((result) => {
90265
90609
  var _a;
90266
90610
  if (result.status !== "Passed")
90267
- throw (_a = result === null || result === void 0 ? void 0 : result.reason) !== null && _a !== void 0 ? _a : new test_error_1.TestError(result);
90611
+ throw (_a = result === null || result === void 0 ? void 0 : result.reason) !== null && _a !== void 0 ? _a : new core_base_1.TestError(result);
90268
90612
  });
90269
90613
  }
90270
90614
  return results;
@@ -90508,31 +90852,31 @@ var require_open_eyes4 = __commonJS({
90508
90852
  var extract_git_info_1 = require_extract_git_info();
90509
90853
  function makeOpenEyes({ type: defaultType = "classic", clients, batch, removeDuplicateTests, core, cores, spec, environment, logger: mainLogger, asyncCache, cwd = process.cwd() }) {
90510
90854
  return async function openEyes({ type = defaultType, settings: openSettings, config, target, logger = mainLogger }) {
90511
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
90512
- var _w, _x, _y, _z, _0;
90855
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
90856
+ var _2, _3, _4, _5, _6;
90513
90857
  logger = logger.extend(mainLogger, { tags: [`eyes-${type}-${utils34.general.shortid()}`] });
90514
- const settings = { ...config === null || config === void 0 ? void 0 : config.open, ...openSettings };
90858
+ const settings = { environments: config === null || config === void 0 ? void 0 : config.check.environments, ...config === null || config === void 0 ? void 0 : config.open, ...openSettings };
90515
90859
  const eyesServerSettings = (0, populate_eyes_server_settings_1.populateEyesServerSettings)(settings);
90516
90860
  logger.mask(eyesServerSettings.apiKey);
90517
90861
  logger.mask(eyesServerSettings.eyesServerUrl);
90518
90862
  (_a = settings.userTestId) !== null && _a !== void 0 ? _a : settings.userTestId = `${settings.testName}--${utils34.general.guid()}`;
90519
90863
  settings.batch = { ...batch, ...settings.batch };
90520
- (_b = (_w = settings.batch).id) !== null && _b !== void 0 ? _b : _w.id = (_c = utils34.general.getEnvValue("BATCH_ID")) !== null && _c !== void 0 ? _c : `generated-${utils34.general.guid()}`;
90521
- (_d = (_x = settings.batch).buildId) !== null && _d !== void 0 ? _d : _x.buildId = utils34.general.getEnvValue("BATCH_BUILD_ID");
90522
- (_e = (_y = settings.batch).name) !== null && _e !== void 0 ? _e : _y.name = utils34.general.getEnvValue("BATCH_NAME");
90523
- (_f = (_z = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : _z.sequenceName = utils34.general.getEnvValue("BATCH_SEQUENCE");
90524
- (_g = (_0 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : _0.notifyOnCompletion = utils34.general.getEnvValue("BATCH_NOTIFY", "boolean");
90864
+ (_b = (_2 = settings.batch).id) !== null && _b !== void 0 ? _b : _2.id = (_c = utils34.general.getEnvValue("BATCH_ID")) !== null && _c !== void 0 ? _c : `generated-${utils34.general.guid()}`;
90865
+ (_d = (_3 = settings.batch).buildId) !== null && _d !== void 0 ? _d : _3.buildId = utils34.general.getEnvValue("BATCH_BUILD_ID");
90866
+ (_e = (_4 = settings.batch).name) !== null && _e !== void 0 ? _e : _4.name = utils34.general.getEnvValue("BATCH_NAME");
90867
+ (_f = (_5 = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : _5.sequenceName = utils34.general.getEnvValue("BATCH_SEQUENCE");
90868
+ (_g = (_6 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : _6.notifyOnCompletion = utils34.general.getEnvValue("BATCH_NOTIFY", "boolean");
90525
90869
  (_h = settings.keepBatchOpen) !== null && _h !== void 0 ? _h : settings.keepBatchOpen = utils34.general.getEnvValue("DONT_CLOSE_BATCHES", "boolean");
90526
- (_j = settings.branchName) !== null && _j !== void 0 ? _j : settings.branchName = utils34.general.getEnvValue("BRANCH");
90527
- (_k = settings.parentBranchName) !== null && _k !== void 0 ? _k : settings.parentBranchName = utils34.general.getEnvValue("PARENT_BRANCH");
90528
- (_l = settings.baselineBranchName) !== null && _l !== void 0 ? _l : settings.baselineBranchName = utils34.general.getEnvValue("BASELINE_BRANCH");
90529
- (_m = settings.gitBranchingTimestamp) !== null && _m !== void 0 ? _m : settings.gitBranchingTimestamp = utils34.general.getEnvValue("GIT_MERGE_BASE_TIMESTAMP");
90530
- (_o = settings.latestCommitInfo) !== null && _o !== void 0 ? _o : settings.latestCommitInfo = getLatestCommitInfoFromEnvVars(logger);
90531
- (_p = settings.ufgServerUrl) !== null && _p !== void 0 ? _p : settings.ufgServerUrl = utils34.general.getEnvValue("UFG_SERVER_URL");
90532
- (_q = settings.ignoreBaseline) !== null && _q !== void 0 ? _q : settings.ignoreBaseline = false;
90533
- (_r = settings.compareWithParentBranch) !== null && _r !== void 0 ? _r : settings.compareWithParentBranch = false;
90534
- (_s = settings.removeDuplicateTests) !== null && _s !== void 0 ? _s : settings.removeDuplicateTests = removeDuplicateTests;
90535
- (_t = settings.latestCommitInfo) !== null && _t !== void 0 ? _t : settings.latestCommitInfo = await (0, extract_git_info_1.extractLatestCommitInfo)({ execOptions: { cwd }, logger });
90870
+ (_j = settings.branchName) !== null && _j !== void 0 ? _j : settings.branchName = (_k = utils34.general.getEnvValue("BRANCH")) !== null && _k !== void 0 ? _k : utils34.general.getEnvValue("BRANCH_NAME");
90871
+ (_l = settings.parentBranchName) !== null && _l !== void 0 ? _l : settings.parentBranchName = (_m = utils34.general.getEnvValue("PARENT_BRANCH")) !== null && _m !== void 0 ? _m : utils34.general.getEnvValue("PARENT_BRANCH_NAME");
90872
+ (_o = settings.baselineBranchName) !== null && _o !== void 0 ? _o : settings.baselineBranchName = (_p = utils34.general.getEnvValue("BASELINE_BRANCH")) !== null && _p !== void 0 ? _p : utils34.general.getEnvValue("BASELINE_BRANCH_NAME");
90873
+ (_q = settings.gitBranchingTimestamp) !== null && _q !== void 0 ? _q : settings.gitBranchingTimestamp = utils34.general.getEnvValue("GIT_MERGE_BASE_TIMESTAMP");
90874
+ (_r = settings.latestCommitInfo) !== null && _r !== void 0 ? _r : settings.latestCommitInfo = getLatestCommitInfoFromEnvVars(logger);
90875
+ (_s = settings.ufgServerUrl) !== null && _s !== void 0 ? _s : settings.ufgServerUrl = utils34.general.getEnvValue("UFG_SERVER_URL");
90876
+ (_t = settings.ignoreBaseline) !== null && _t !== void 0 ? _t : settings.ignoreBaseline = false;
90877
+ (_u = settings.compareWithParentBranch) !== null && _u !== void 0 ? _u : settings.compareWithParentBranch = false;
90878
+ (_v = settings.removeDuplicateTests) !== null && _v !== void 0 ? _v : settings.removeDuplicateTests = removeDuplicateTests;
90879
+ (_w = settings.latestCommitInfo) !== null && _w !== void 0 ? _w : settings.latestCommitInfo = await (0, extract_git_info_1.extractLatestCommitInfo)({ execOptions: { cwd }, logger });
90536
90880
  if (settings.latestCommitInfo && !(0, extract_git_info_1.isISODate)(settings.latestCommitInfo.timestamp)) {
90537
90881
  logger.warn(`latestCommitInfo.timestamp is an invalid ISO date string: ${settings.latestCommitInfo.timestamp}`);
90538
90882
  settings.latestCommitInfo = void 0;
@@ -90560,6 +90904,15 @@ var require_open_eyes4 = __commonJS({
90560
90904
  const driver = target && await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: settings });
90561
90905
  const driverEnvironment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
90562
90906
  const driverUrl = await (driver === null || driver === void 0 ? void 0 : driver.getDriverUrl());
90907
+ const multiDeviceTargets = [];
90908
+ for (const checkEnv of (_x = settings.environments) !== null && _x !== void 0 ? _x : []) {
90909
+ if (utils34.types.has(checkEnv, "iosDeviceInfo") && ((_y = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _y === void 0 ? void 0 : _y.instrumented)) {
90910
+ multiDeviceTargets.push({
90911
+ deviceInfo: checkEnv.iosDeviceInfo.deviceName,
90912
+ orientation: (_z = checkEnv.iosDeviceInfo.screenOrientation) !== null && _z !== void 0 ? _z : "portrait"
90913
+ });
90914
+ }
90915
+ }
90563
90916
  void core.logEvent({
90564
90917
  settings: {
90565
90918
  ...settings,
@@ -90567,7 +90920,7 @@ var require_open_eyes4 = __commonJS({
90567
90920
  event: {
90568
90921
  type: "openEyes",
90569
90922
  userTestId: settings.userTestId,
90570
- concurrency: (_u = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _u !== void 0 ? _u : core.concurrency,
90923
+ concurrency: (_0 = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _0 !== void 0 ? _0 : core.concurrency,
90571
90924
  environment,
90572
90925
  driver: {
90573
90926
  deviceName: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.deviceName,
@@ -90575,10 +90928,11 @@ var require_open_eyes4 = __commonJS({
90575
90928
  browserVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.browserVersion,
90576
90929
  platformName: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformName,
90577
90930
  platformVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformVersion,
90578
- isApplitoolsLib: (_v = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _v === void 0 ? void 0 : _v.instrumented,
90931
+ isApplitoolsLib: (_1 = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _1 === void 0 ? void 0 : _1.instrumented,
90579
90932
  isEC: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.isEC
90580
90933
  },
90581
- driverUrl
90934
+ driverUrl,
90935
+ multiDeviceTargets
90582
90936
  }
90583
90937
  },
90584
90938
  logger
@@ -90816,7 +91170,7 @@ var require_get_manager_results = __commonJS({
90816
91170
  };
90817
91171
  Object.defineProperty(exports, "__esModule", { value: true });
90818
91172
  exports.makeGetManagerResults = void 0;
90819
- var test_error_1 = require_test_error();
91173
+ var core_base_1 = require_dist2();
90820
91174
  var internal_error_1 = require_internal_error();
90821
91175
  var separate_duplicate_results_1 = require_separate_duplicate_results();
90822
91176
  var utils34 = __importStar(require_browser3());
@@ -90832,7 +91186,7 @@ var require_get_manager_results = __commonJS({
90832
91186
  var _a2;
90833
91187
  return {
90834
91188
  result,
90835
- error: result.status !== "Passed" ? (_a2 = result.reason) !== null && _a2 !== void 0 ? _a2 : new test_error_1.TestError(result) : void 0,
91189
+ error: result.status !== "Passed" ? (_a2 = result.reason) !== null && _a2 !== void 0 ? _a2 : new core_base_1.TestError(result) : void 0,
90836
91190
  userTestId: result.userTestId,
90837
91191
  environment: result.environment
90838
91192
  };
@@ -91191,7 +91545,7 @@ var require_package2 = __commonJS({
91191
91545
  "../core/package.json"(exports, module) {
91192
91546
  module.exports = {
91193
91547
  name: "@applitools/core",
91194
- version: "4.31.0",
91548
+ version: "4.35.1",
91195
91549
  homepage: "https://applitools.com",
91196
91550
  bugs: {
91197
91551
  url: "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -92706,7 +93060,7 @@ var require_parse_env = __commonJS({
92706
93060
  url: SAUCE_SERVER_URL,
92707
93061
  capabilities: {
92708
93062
  platformName: "iOS",
92709
- "appium:platformVersion": "13.0",
93063
+ "appium:platformVersion": "14.0",
92710
93064
  "appium:deviceName": "iPhone XS Simulator"
92711
93065
  },
92712
93066
  options: {
@@ -93366,6 +93720,16 @@ var require_spec_driver2 = __commonJS({
93366
93720
  function getWebDriver() {
93367
93721
  return getFrameworkMajorVersion() < 8 ? __require("webdriver").default : __require("webdriver");
93368
93722
  }
93723
+ function getAgents(httpUrl, httpsUrl) {
93724
+ const httpProxyOptions = { ...(0, url_1.parse)(httpUrl.href), rejectUnauthorized: false };
93725
+ const httpAgent = (0, http_proxy_agent_1.default)(httpProxyOptions);
93726
+ const httpsProxyOptions = { ...(0, url_1.parse)(httpsUrl.href), rejectUnauthorized: false };
93727
+ const httpsAgent = (0, https_proxy_agent_1.default)(httpsProxyOptions);
93728
+ httpsAgent.callback = utils34.general.wrap(httpsAgent.callback.bind(httpsAgent), (fn, request, options, ...rest) => {
93729
+ return fn(request, { ...options, rejectUnauthorized: false }, ...rest);
93730
+ });
93731
+ return { httpAgent, httpsAgent };
93732
+ }
93369
93733
  function isDriver(driver) {
93370
93734
  if (!driver)
93371
93735
  return false;
@@ -93418,7 +93782,7 @@ var require_spec_driver2 = __commonJS({
93418
93782
  }
93419
93783
  exports.isStaleElementError = isStaleElementError;
93420
93784
  function toDriver(driver) {
93421
- var _a, _b, _c;
93785
+ var _a, _b, _c, _d, _e;
93422
93786
  let transformedDriver;
93423
93787
  if (utils34.types.has(driver, ["sessionId", "serverUrl"])) {
93424
93788
  const url = new URL(driver.serverUrl);
@@ -93443,12 +93807,12 @@ var require_spec_driver2 = __commonJS({
93443
93807
  const proxyUrl = new URL(driver.proxy.url);
93444
93808
  proxyUrl.username = (_b = driver.proxy.username) !== null && _b !== void 0 ? _b : proxyUrl.username;
93445
93809
  proxyUrl.password = (_c = driver.proxy.password) !== null && _c !== void 0 ? _c : proxyUrl.password;
93446
- const proxyOptions = { ...(0, url_1.parse)(proxyUrl.href), rejectUnauthorized: false };
93447
- const httpAgent = (0, http_proxy_agent_1.default)(proxyOptions);
93448
- const httpsAgent = (0, https_proxy_agent_1.default)(proxyOptions);
93449
- httpsAgent.callback = utils34.general.wrap(httpsAgent.callback.bind(httpsAgent), (fn, request, options2, ...rest) => {
93450
- return fn(request, { ...options2, rejectUnauthorized: false }, ...rest);
93451
- });
93810
+ const { httpAgent, httpsAgent } = getAgents(proxyUrl, proxyUrl);
93811
+ options.agent = { http: httpAgent, https: httpsAgent };
93812
+ } else if (process.env.HTTP_PROXY || process.env.HTTPS_PROXY) {
93813
+ const httpUrl = new URL((_d = process.env.HTTP_PROXY) !== null && _d !== void 0 ? _d : process.env.HTTPS_PROXY);
93814
+ const httpsUrl = new URL((_e = process.env.HTTPS_PROXY) !== null && _e !== void 0 ? _e : process.env.HTTP_PROXY);
93815
+ const { httpAgent, httpsAgent } = getAgents(httpUrl, httpsUrl);
93452
93816
  options.agent = { http: httpAgent, https: httpsAgent };
93453
93817
  } else {
93454
93818
  const httpAgent = http_1.default.globalAgent;
@@ -93728,6 +94092,7 @@ var require_spec_driver2 = __commonJS({
93728
94092
  firefox: "moz:firefoxOptions"
93729
94093
  };
93730
94094
  async function build(env) {
94095
+ var _a, _b;
93731
94096
  const WebDriver = getWebDriver();
93732
94097
  const parseEnv = require_parse_env();
93733
94098
  const { browser = "", capabilities, url, proxy, configurable = true, args = [], headless, logLevel = "silent" } = parseEnv(env);
@@ -93763,7 +94128,14 @@ var require_spec_driver2 = __commonJS({
93763
94128
  noProxy: proxy.bypass.join(",")
93764
94129
  };
93765
94130
  }
93766
- options.agent = { https: require_https_browserify().Agent({ rejectUnauthorized: false }) };
94131
+ if (process.env.HTTP_PROXY || process.env.HTTPS_PROXY) {
94132
+ const httpUrl = new URL((_a = process.env.HTTP_PROXY) !== null && _a !== void 0 ? _a : process.env.HTTPS_PROXY);
94133
+ const httpsUrl = new URL((_b = process.env.HTTPS_PROXY) !== null && _b !== void 0 ? _b : process.env.HTTP_PROXY);
94134
+ const { httpAgent, httpsAgent } = getAgents(httpUrl, httpsUrl);
94135
+ options.agent = { http: httpAgent, https: httpsAgent };
94136
+ } else {
94137
+ options.agent = { https: require_https_browserify().Agent({ rejectUnauthorized: false }) };
94138
+ }
93767
94139
  const driver = await WebDriver.newSession(options);
93768
94140
  return [driver, () => driver.deleteSession()];
93769
94141
  }
@@ -93988,13 +94360,35 @@ var require_spec_driver3 = __commonJS({
93988
94360
  },
93989
94361
  async reload(driver) {
93990
94362
  return socket.request("Driver.reload", { driver });
94363
+ },
94364
+ async isUserFunction(ref) {
94365
+ return utils34.types.has(ref, "applitools-ref-id");
94366
+ },
94367
+ async executeUserFunction(userFunction) {
94368
+ return socket.request("Driver.executeUserFunction", userFunction);
93991
94369
  }
93992
94370
  };
94371
+ spec = addDefaultCommands(spec);
93993
94372
  return spec.reduce((spec2, name) => {
93994
94373
  return Object.assign(spec2, { [name]: commands[name] });
93995
94374
  }, {});
93996
94375
  }
93997
94376
  exports.makeSpec = makeSpec;
94377
+ function addDefaultCommands(spec) {
94378
+ const defaultCommands = [
94379
+ {
94380
+ command: "isUserFunction",
94381
+ dependsOn: ["executeUserFunction"]
94382
+ }
94383
+ ];
94384
+ const commands = spec.slice();
94385
+ defaultCommands.forEach(({ command, dependsOn }) => {
94386
+ if (!commands.includes(command) && dependsOn.every((dep) => commands.includes(dep))) {
94387
+ commands.push(command);
94388
+ }
94389
+ });
94390
+ return commands;
94391
+ }
93998
94392
  }
93999
94393
  });
94000
94394
 
@@ -95498,8 +95892,14 @@ var require_run_offline_snapshots = __commonJS({
95498
95892
  var utils34 = __importStar(require_browser3());
95499
95893
  var merge_configs_1 = require_merge_configs();
95500
95894
  var format_results_1 = require_format_results();
95895
+ var throat_1 = __importDefault(require_throat());
95896
+ function getConsoleLogLimit() {
95897
+ var _a;
95898
+ return (_a = utils34.general.getEnvValue("OFFLINE_LOG_LIMIT", "number")) !== null && _a !== void 0 ? _a : 20;
95899
+ }
95501
95900
  async function runOfflineSnapshots(options) {
95502
95901
  var _a;
95902
+ const limitConsoleLogs = getConsoleLogLimit();
95503
95903
  if (!options.offlineLocationPath)
95504
95904
  throw new Error("offlineLocationPath is required");
95505
95905
  const offlineLocationPath = path_1.default.resolve(options.offlineLocationPath);
@@ -95528,7 +95928,9 @@ var require_run_offline_snapshots = __commonJS({
95528
95928
  totalTime: Date.now() - startTime,
95529
95929
  jsonFilePath: options.jsonFilePath
95530
95930
  });
95531
- if (!isSuccess && options.failOnDiff) {
95931
+ if (!isSuccess.onErrors && options.failOnError) {
95932
+ throw new Error(outputStr);
95933
+ } else if (!isSuccess.onDiffs && options.failOnDiff) {
95532
95934
  throw new Error(outputStr);
95533
95935
  } else {
95534
95936
  logger.console.log(outputStr);
@@ -95536,13 +95938,27 @@ var require_run_offline_snapshots = __commonJS({
95536
95938
  return allTestResults;
95537
95939
  async function runTests(testFolders2) {
95538
95940
  logger.log("running tests", testFolders2);
95539
- const results = await Promise.all(testFolders2.map(async (testFolder) => {
95941
+ const messages = [];
95942
+ const testPromises = testFolders2.map(async (testFolder) => {
95540
95943
  const testLogger = logger.extend({ tags: [testFolder] });
95541
95944
  const testPath = path_1.default.join(offlineLocationPath, testFolder);
95542
95945
  const fileOpenSettings = await fs_1.default.promises.readFile(path_1.default.join(testPath, "settings.json"), "utf-8").then(JSON.parse);
95543
95946
  const openSettings = (0, merge_configs_1.mergeConfigs)(fileOpenSettings, options.config.open);
95544
- logger.console.log(`Running test: ${openSettings.testName} (${formatEnvironment(openSettings.environment)})`);
95545
- return runTest(testPath, openSettings, testLogger);
95947
+ messages.push(`Running test: ${openSettings.testName} (${formatEnvironment(openSettings.environment)})`);
95948
+ return { testPath, openSettings, testLogger };
95949
+ });
95950
+ const preparedTests = await Promise.all(testPromises);
95951
+ if (messages.length > limitConsoleLogs) {
95952
+ const slice = messages.slice(0, limitConsoleLogs);
95953
+ logger.console.log(slice.join("\n") + `
95954
+ ... ${messages.length - limitConsoleLogs} more tests`);
95955
+ } else {
95956
+ logger.console.log(messages.join("\n"));
95957
+ }
95958
+ const testConcurrency = utils34.general.getEnvValue("TEST_CONCURRENCY", "number");
95959
+ const runTestThrottled = testConcurrency ? (0, throat_1.default)(testConcurrency, runTest) : runTest;
95960
+ const results = await Promise.all(preparedTests.map(async ({ testPath, openSettings, testLogger }) => {
95961
+ return runTestThrottled(testPath, openSettings, testLogger);
95546
95962
  }));
95547
95963
  const batchIds = [...new Set(results.map((t) => t.batchId))];
95548
95964
  const allTestResults2 = results.map((t) => t.results);
@@ -95550,8 +95966,8 @@ var require_run_offline_snapshots = __commonJS({
95550
95966
  const keepBatchOpen = utils34.general.getEnvValue("DONT_CLOSE_BATCHES", "boolean") || options.config.open.keepBatchOpen;
95551
95967
  if (!keepBatchOpen) {
95552
95968
  await core.closeBatch({ settings: batchIds.map((batchId) => ({ batchId, ...account.eyesServer })) });
95969
+ logger.log("done closing batches");
95553
95970
  }
95554
- logger.log("done closing batches");
95555
95971
  return allTestResults2;
95556
95972
  }
95557
95973
  async function runTest(testPath, openSettings, logger2) {
@@ -95569,20 +95985,29 @@ var require_run_offline_snapshots = __commonJS({
95569
95985
  },
95570
95986
  logger: logger2
95571
95987
  });
95572
- const checkFolders = (await fs_1.default.promises.readdir(testPath)).filter((folderpath) => folderpath.startsWith("check-"));
95573
- logger2.log("running checks for test", testPath, ":", checkFolders);
95574
- const targets = await Promise.all(checkFolders.map(async (checkFolder) => {
95575
- const snapshot = await fs_1.default.promises.readFile(path_1.default.resolve(testPath, checkFolder, "snapshot.json"), "utf-8").then(JSON.parse);
95576
- snapshot.settings.environment.environmentId = utils34.general.guid();
95577
- return snapshot;
95578
- }));
95579
- await uploadResources(targets, logger2);
95580
- logger2.log("uploaded resources for test", testPath);
95581
- await Promise.all(targets.map((target, index) => runCheck(eyes, target, index, logger2)));
95582
- const fileCloseSettings = await fs_1.default.promises.readFile(path_1.default.resolve(testPath, "close.json"), "utf-8").then(JSON.parse);
95583
- const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, options.config.close);
95584
- await eyes.close({ settings: closeSettings });
95585
- logger2.log("done running test", logger2);
95988
+ const closeSettingsPath = path_1.default.resolve(testPath, "close.json");
95989
+ if (fs_1.default.existsSync(closeSettingsPath)) {
95990
+ const checkFolders = (await fs_1.default.promises.readdir(testPath)).filter((folderpath) => folderpath.startsWith("check-"));
95991
+ logger2.log("running checks for test", testPath, ":", checkFolders);
95992
+ const targets = await Promise.all(checkFolders.map(async (checkFolder) => {
95993
+ const snapshot = await fs_1.default.promises.readFile(path_1.default.resolve(testPath, checkFolder, "snapshot.json"), "utf-8").then(JSON.parse);
95994
+ snapshot.settings.environment.environmentId = utils34.general.guid();
95995
+ return snapshot;
95996
+ }));
95997
+ await uploadResources(targets, logger2);
95998
+ logger2.log("uploaded resources for test", testPath);
95999
+ await Promise.all(targets.map((target, index) => runCheck(eyes, target, index, logger2)));
96000
+ const fileCloseSettings = await fs_1.default.promises.readFile(closeSettingsPath, "utf-8").then(JSON.parse);
96001
+ const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, options.config.close);
96002
+ await eyes.close({ settings: closeSettings });
96003
+ } else {
96004
+ await eyes.abort({
96005
+ settings: {
96006
+ reason: "internal"
96007
+ }
96008
+ });
96009
+ }
96010
+ logger2.log("done running test", testPath);
95586
96011
  return { batchId: openSettings.batch.id, results: (await eyes.getResults({ logger: logger2 }))[0] };
95587
96012
  }
95588
96013
  async function uploadResources(targets, logger2) {
@@ -95658,7 +96083,7 @@ var require_run_offline_snapshots = __commonJS({
95658
96083
  function uniq(arr) {
95659
96084
  return [...new Set(arr)];
95660
96085
  }
95661
- function processResults({ testResults, totalTime, saveNewTests = true, failOnDiff = true, jsonFilePath }) {
96086
+ function processResults({ testResults, totalTime, saveNewTests = true, jsonFilePath }) {
95662
96087
  let outputStr = "\n";
95663
96088
  const pluralize = utils34.general.pluralize;
95664
96089
  const testResultsWithErrors = testResults.filter((r) => r && r.reason);
@@ -95686,16 +96111,16 @@ var require_run_offline_snapshots = __commonJS({
95686
96111
  }
95687
96112
  outputStr += "[EYES: TEST RESULTS]:\n\n";
95688
96113
  if (passedOrNew.length > 0) {
95689
- outputStr += testResultsOutput(passedOrNew, warnForUnsavedNewTests);
96114
+ outputStr += testResultsOutput(passedOrNew, warnForUnsavedNewTests, "Passed");
95690
96115
  }
95691
96116
  if (failedTests.length > 0) {
95692
- outputStr += testResultsOutput(failedTests, warnForUnsavedNewTests);
96117
+ outputStr += testResultsOutput(failedTests, warnForUnsavedNewTests, "Failed");
95693
96118
  }
95694
96119
  if (unresolved.length > 0) {
95695
- outputStr += testResultsOutput(unresolved, warnForUnsavedNewTests);
96120
+ outputStr += testResultsOutput(unresolved, warnForUnsavedNewTests, "Unresolved");
95696
96121
  }
95697
96122
  if (aborted.length > 0) {
95698
- outputStr += testResultsOutput(aborted, warnForUnsavedNewTests);
96123
+ outputStr += testResultsOutput(aborted, warnForUnsavedNewTests, "Aborted");
95699
96124
  }
95700
96125
  if (errors.length) {
95701
96126
  const sortedErrors = errors.sort((a, b) => a.title.localeCompare(b.title));
@@ -95746,42 +96171,48 @@ ${seeDetailsStr}
95746
96171
  Total time: ${Math.round(totalTime / 1e3)} seconds
95747
96172
  `;
95748
96173
  }
95749
- let isSuccess;
95750
- if (errors.length) {
95751
- isSuccess = false;
95752
- } else if (failOnDiff) {
95753
- isSuccess = !warnForUnsavedNewTests && passedOrNew.length && !unresolvedOrFailed.length;
95754
- } else {
95755
- isSuccess = true;
95756
- }
96174
+ const isSuccess = { onErrors: true, onDiffs: true };
96175
+ isSuccess.onErrors = !errors.length;
96176
+ isSuccess.onDiffs = !!(!warnForUnsavedNewTests && passedOrNew.length && !unresolvedOrFailed.length);
95757
96177
  return {
95758
96178
  outputStr,
95759
96179
  isSuccess
95760
96180
  };
95761
96181
  }
95762
- function testResultsOutput(results, warnForUnsavedNewTests) {
95763
- let outputStr = "";
96182
+ function testResultsOutput(results, warnForUnsavedNewTests, tag) {
96183
+ const limitConsoleLogs = getConsoleLogLimit();
96184
+ const truncated = [];
96185
+ let limitCount = 0;
95764
96186
  const sortedTestResults = results.sort((a, b) => a.name.localeCompare(b.name));
95765
96187
  sortedTestResults.forEach((result) => {
95766
96188
  const testTitle = `${result.name} [${result.hostApp}] [${result.hostDisplaySize.width}x${result.hostDisplaySize.height}] - `;
95767
96189
  if (result.isAborted) {
95768
- outputStr += `${testTitle}${chalk_1.default.keyword("red")(`Aborted`)}
96190
+ const str = `${testTitle}${chalk_1.default.keyword("red")(`Aborted`)}
95769
96191
  `;
96192
+ truncated.push(str);
95770
96193
  } else if (result.isNew) {
95771
96194
  const newResColor = warnForUnsavedNewTests ? "orange" : "blue";
95772
- outputStr += `${testTitle}${chalk_1.default.keyword(newResColor)("New")}
96195
+ const str = `${testTitle}${chalk_1.default.keyword(newResColor)("New")}
95773
96196
  `;
96197
+ truncated.push(str);
95774
96198
  } else if (result.status === "Passed") {
95775
- outputStr += `${testTitle}${chalk_1.default.green("Passed")}
96199
+ const str = `${testTitle}${chalk_1.default.green("Passed")}
95776
96200
  `;
96201
+ truncated.push(str);
95777
96202
  } else if (result.status === "Failed") {
95778
- outputStr += `${testTitle}${chalk_1.default.keyword("red")("Failed")}
96203
+ const str = `${testTitle}${chalk_1.default.keyword("red")("Failed")}
95779
96204
  `;
96205
+ truncated.push(str);
95780
96206
  } else {
95781
- outputStr += `${testTitle}${chalk_1.default.keyword("orange")(`Unresolved`)}
96207
+ const str = `${testTitle}${chalk_1.default.keyword("orange")(`Unresolved`)}
95782
96208
  `;
96209
+ truncated.push(str);
95783
96210
  }
96211
+ if (limitCount < limitConsoleLogs)
96212
+ limitCount++;
95784
96213
  });
96214
+ let outputStr = truncated.slice(0, limitConsoleLogs).join("");
96215
+ outputStr += results.length - limitCount > 0 ? `... ${results.length - limitCount} more ${tag} tests` : "";
95785
96216
  outputStr += "\n";
95786
96217
  return outputStr;
95787
96218
  }
@@ -95873,7 +96304,7 @@ var require_package3 = __commonJS({
95873
96304
  "../eyes/package.json"(exports, module) {
95874
96305
  module.exports = {
95875
96306
  name: "@applitools/eyes",
95876
- version: "1.32.0",
96307
+ version: "1.33.2",
95877
96308
  keywords: [
95878
96309
  "applitools",
95879
96310
  "eyes",
@@ -97912,6 +98343,10 @@ var CheckSettingsAutomationFluent = class extends CheckSettingsBaseFluent {
97912
98343
  this._settings.densityMetrics = options;
97913
98344
  return this;
97914
98345
  }
98346
+ stitchMode(stitchMode) {
98347
+ this._settings.stitchMode = stitchMode;
98348
+ return this;
98349
+ }
97915
98350
  /** @internal */
97916
98351
  toJSON() {
97917
98352
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
@@ -97950,7 +98385,8 @@ var CheckSettingsAutomationFluent = class extends CheckSettingsBaseFluent {
97950
98385
  retryTimeout: this._settings.timeout,
97951
98386
  userCommandId: this._settings.variationGroupId,
97952
98387
  densityMetrics: this._settings.densityMetrics,
97953
- assumesMutability: this.assumesMutability()
98388
+ assumesMutability: this.assumesMutability(),
98389
+ stitchMode: this._settings.stitchMode
97954
98390
  })
97955
98391
  };
97956
98392
  }
@@ -99524,7 +99960,11 @@ var ConfigurationData = class {
99524
99960
  return this._config.waitBeforeCapture;
99525
99961
  }
99526
99962
  set waitBeforeCapture(waitBeforeCapture) {
99527
- utils20.guard.isInteger(waitBeforeCapture, { name: "waitBeforeCapture", gt: 0 });
99963
+ if (utils20.types.isNumber(waitBeforeCapture)) {
99964
+ utils20.guard.isInteger(waitBeforeCapture, { name: "waitBeforeCapture", gt: 0 });
99965
+ } else {
99966
+ utils20.guard.isFunction(waitBeforeCapture, { name: "waitBeforeCapture" });
99967
+ }
99528
99968
  this._config.waitBeforeCapture = waitBeforeCapture;
99529
99969
  }
99530
99970
  getWaitBeforeCapture() {
@@ -99548,13 +99988,27 @@ var ConfigurationData = class {
99548
99988
  this.waitBeforeScreenshots = waitBeforeScreenshots;
99549
99989
  return this;
99550
99990
  }
99991
+ get fully() {
99992
+ return this._config.fully;
99993
+ }
99994
+ set fully(fully) {
99995
+ utils20.guard.isBoolean(fully, { name: "fully" });
99996
+ this._config.fully = fully;
99997
+ }
99998
+ getFully() {
99999
+ return this.fully;
100000
+ }
100001
+ setFully(fully) {
100002
+ this.fully = fully;
100003
+ return this;
100004
+ }
99551
100005
  /** @internal */
99552
100006
  toObject() {
99553
100007
  return this._config;
99554
100008
  }
99555
100009
  /** @internal */
99556
100010
  toJSON() {
99557
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
100011
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
99558
100012
  return utils20.general.toJSON({
99559
100013
  open: utils20.general.removeUndefinedProps({
99560
100014
  eyesServerUrl: this.serverUrl,
@@ -99595,7 +100049,7 @@ var ConfigurationData = class {
99595
100049
  disableBrokerUrlCache: this.disableNMLUrlCache
99596
100050
  }),
99597
100051
  screenshot: utils20.general.removeUndefinedProps({
99598
- fully: this.forceFullPageScreenshot,
100052
+ fully: (_a = this.fully) != null ? _a : this.forceFullPageScreenshot,
99599
100053
  scrollRootElement: this.scrollRootElement,
99600
100054
  stitchMode: this.stitchMode,
99601
100055
  hideScrollbars: this.hideScrollbars,
@@ -99608,12 +100062,12 @@ var ConfigurationData = class {
99608
100062
  rotation: this.rotation,
99609
100063
  scaleRatio: this.scaleRatio
99610
100064
  }),
99611
- debugImages: ((_a = this.debugScreenshots) == null ? void 0 : _a.save) && utils20.types.has(this.debugScreenshots, "path") ? this.debugScreenshots : void 0,
100065
+ debugImages: ((_b = this.debugScreenshots) == null ? void 0 : _b.save) && utils20.types.has(this.debugScreenshots, "path") ? this.debugScreenshots : void 0,
99612
100066
  captureStatusBar: this.captureStatusBar,
99613
100067
  mobileOptions: this.mobileOptions
99614
100068
  }),
99615
100069
  check: utils20.general.removeUndefinedProps({
99616
- environments: (_b = this.browsersInfo) == null ? void 0 : _b.map((browserInfo) => {
100070
+ environments: (_c = this.browsersInfo) == null ? void 0 : _c.map((browserInfo) => {
99617
100071
  if (utils20.types.has(browserInfo, "iosDeviceInfo") && utils20.types.has(browserInfo.iosDeviceInfo, "iosVersion")) {
99618
100072
  const { iosVersion, ...iosDeviceInfo } = browserInfo.iosDeviceInfo;
99619
100073
  return { iosDeviceInfo: { ...iosDeviceInfo, version: iosVersion } };
@@ -99621,26 +100075,26 @@ var ConfigurationData = class {
99621
100075
  return browserInfo;
99622
100076
  }),
99623
100077
  ufgOptions: this.visualGridOptions,
99624
- layoutBreakpoints: utils20.types.isDefined(this.layoutBreakpoints) ? utils20.types.has(this.layoutBreakpoints, "breakpoints") ? this.layoutBreakpoints : { breakpoints: (_c = this.layoutBreakpoints) != null ? _c : false } : void 0,
100078
+ layoutBreakpoints: utils20.types.isDefined(this.layoutBreakpoints) ? utils20.types.has(this.layoutBreakpoints, "breakpoints") ? this.layoutBreakpoints : { breakpoints: (_d = this.layoutBreakpoints) != null ? _d : false } : void 0,
99625
100079
  disableBrowserFetching: this.disableBrowserFetching,
99626
100080
  autProxy: this.autProxy,
99627
100081
  sendDom: this.sendDom,
99628
100082
  retryTimeout: this.matchTimeout,
99629
- matchLevel: (_d = this.defaultMatchSettings) == null ? void 0 : _d.matchLevel,
99630
- ignoreCaret: (_e = this.defaultMatchSettings) == null ? void 0 : _e.ignoreCaret,
99631
- ignoreDisplacements: (_f = this.defaultMatchSettings) == null ? void 0 : _f.ignoreDisplacements,
99632
- enablePatterns: (_g = this.defaultMatchSettings) == null ? void 0 : _g.enablePatterns,
99633
- accessibilitySettings: ((_h = this.defaultMatchSettings) == null ? void 0 : _h.accessibilitySettings) && {
100083
+ matchLevel: (_e = this.defaultMatchSettings) == null ? void 0 : _e.matchLevel,
100084
+ ignoreCaret: (_f = this.defaultMatchSettings) == null ? void 0 : _f.ignoreCaret,
100085
+ ignoreDisplacements: (_g = this.defaultMatchSettings) == null ? void 0 : _g.ignoreDisplacements,
100086
+ enablePatterns: (_h = this.defaultMatchSettings) == null ? void 0 : _h.enablePatterns,
100087
+ accessibilitySettings: ((_i = this.defaultMatchSettings) == null ? void 0 : _i.accessibilitySettings) && {
99634
100088
  level: this.defaultMatchSettings.accessibilitySettings.level,
99635
100089
  version: this.defaultMatchSettings.accessibilitySettings.guidelinesVersion
99636
100090
  },
99637
- useDom: (_i = this.defaultMatchSettings) == null ? void 0 : _i.useDom,
99638
- ignoreRegions: (_j = this.defaultMatchSettings) == null ? void 0 : _j.ignoreRegions,
99639
- contentRegions: (_k = this.defaultMatchSettings) == null ? void 0 : _k.contentRegions,
99640
- layoutRegions: (_l = this.defaultMatchSettings) == null ? void 0 : _l.layoutRegions,
99641
- strictRegions: (_m = this.defaultMatchSettings) == null ? void 0 : _m.strictRegions,
99642
- floatingRegions: (_n = this.defaultMatchSettings) == null ? void 0 : _n.floatingRegions,
99643
- accessibilityRegions: (_o = this.defaultMatchSettings) == null ? void 0 : _o.accessibilityRegions
100091
+ useDom: (_j = this.defaultMatchSettings) == null ? void 0 : _j.useDom,
100092
+ ignoreRegions: (_k = this.defaultMatchSettings) == null ? void 0 : _k.ignoreRegions,
100093
+ contentRegions: (_l = this.defaultMatchSettings) == null ? void 0 : _l.contentRegions,
100094
+ layoutRegions: (_m = this.defaultMatchSettings) == null ? void 0 : _m.layoutRegions,
100095
+ strictRegions: (_n = this.defaultMatchSettings) == null ? void 0 : _n.strictRegions,
100096
+ floatingRegions: (_o = this.defaultMatchSettings) == null ? void 0 : _o.floatingRegions,
100097
+ accessibilityRegions: (_p = this.defaultMatchSettings) == null ? void 0 : _p.accessibilityRegions
99644
100098
  }),
99645
100099
  close: utils20.general.removeUndefinedProps({
99646
100100
  updateBaselineIfDifferent: this.saveFailedTests,
@@ -100278,8 +100732,10 @@ init_setInterval();
100278
100732
  var import_core = __toESM(require_dist9());
100279
100733
  var utils29 = __toESM(require_browser3());
100280
100734
  function initSDK(options, maskLog) {
100281
- if (options)
100735
+ if (options) {
100282
100736
  options.maskLog = maskLog;
100737
+ options.offlineLocationPath = utils29.general.getEnvValue("OFFLINE_LOCATION_PATH");
100738
+ }
100283
100739
  return {
100284
100740
  core: getCoreWithCache(options),
100285
100741
  spec: options == null ? void 0 : options.spec