@applitools/eyes-browser 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/index.js +298 -231
  3. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.0.1](https://github.com/applitools/eyes.sdk.javascript1/compare/js/eyes-browser@1.0.0...js/eyes-browser@1.0.1) (2023-12-12)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * @applitools/core bumped to 4.4.0
9
+ #### Features
10
+
11
+ * sign windows binaries ([87fd29c](https://github.com/applitools/eyes.sdk.javascript1/commit/87fd29c8953fc512489c3bb00841ca91c5b2f030))
12
+ * support updated applitools lib protocol ([#2086](https://github.com/applitools/eyes.sdk.javascript1/issues/2086)) ([31b49fc](https://github.com/applitools/eyes.sdk.javascript1/commit/31b49fc411c452d0b3da341fd701309714484485))
13
+
14
+
15
+ #### Bug Fixes
16
+
17
+ * layout breakpoints reload and lazy load ([#2073](https://github.com/applitools/eyes.sdk.javascript1/issues/2073)) ([ab2c49e](https://github.com/applitools/eyes.sdk.javascript1/commit/ab2c49ea1ecff3fef337637a83aa5bef755a7b01))
18
+
19
+
20
+ #### Code Refactoring
21
+
22
+ * fix safe selector generation ([#2072](https://github.com/applitools/eyes.sdk.javascript1/issues/2072)) ([373f11b](https://github.com/applitools/eyes.sdk.javascript1/commit/373f11b0dfea6eab417eb7077e0cfec79877dc1b))
23
+
24
+
25
+
26
+ * @applitools/spec-driver-webdriver bumped to 1.0.52
27
+
28
+ * @applitools/spec-driver-selenium bumped to 1.5.66
29
+
30
+ * @applitools/spec-driver-puppeteer bumped to 1.3.2
31
+
32
+ * @applitools/driver bumped to 1.15.3
33
+ #### Bug Fixes
34
+
35
+ * layout breakpoints reload and lazy load ([#2073](https://github.com/applitools/eyes.sdk.javascript1/issues/2073)) ([ab2c49e](https://github.com/applitools/eyes.sdk.javascript1/commit/ab2c49ea1ecff3fef337637a83aa5bef755a7b01))
36
+ * @applitools/screenshoter bumped to 3.8.18
37
+
38
+ * @applitools/nml-client bumped to 1.6.0
39
+ #### Features
40
+
41
+ * support updated applitools lib protocol ([#2086](https://github.com/applitools/eyes.sdk.javascript1/issues/2086)) ([31b49fc](https://github.com/applitools/eyes.sdk.javascript1/commit/31b49fc411c452d0b3da341fd701309714484485))
42
+
43
+
44
+
45
+ * @applitools/tunnel-client bumped to 1.4.0
46
+ #### Features
47
+
48
+ * sign windows binaries ([87fd29c](https://github.com/applitools/eyes.sdk.javascript1/commit/87fd29c8953fc512489c3bb00841ca91c5b2f030))
49
+ * @applitools/ec-client bumped to 1.7.18
50
+
51
+ * @applitools/eyes bumped to 1.13.1
52
+
53
+
3
54
  ## 1.0.0 (2023-12-05)
4
55
 
5
56
 
package/dist/index.js CHANGED
@@ -30444,21 +30444,23 @@ var require_context = __commonJS({
30444
30444
  async getScrollingElement() {
30445
30445
  if (!(0, element_1.isElementInstance)(this._scrollingElement)) {
30446
30446
  await this.focus();
30447
- const environment = await this.driver.getEnvironment();
30448
30447
  if (this._scrollingElement) {
30449
30448
  this._scrollingElement = await this.element(this._scrollingElement);
30450
- } else if (environment.isWeb) {
30451
- let selector;
30452
- if (environment.isIOS && !environment.isEmulation) {
30453
- selector = "html";
30454
- this.logger.log(`Using hardcoded default scrolling element for Safari on iOS - "${selector}"`);
30449
+ } else {
30450
+ const environment = await this.driver.getEnvironment();
30451
+ if (environment.isWeb) {
30452
+ let selector;
30453
+ if (environment.isIOS && !environment.isEmulation) {
30454
+ selector = "html";
30455
+ this.logger.log(`Using hardcoded default scrolling element for Safari on iOS - "${selector}"`);
30456
+ } else {
30457
+ selector = await this.execute(snippets.getDocumentScrollingElement);
30458
+ this.logger.log(`Using dynamic default scrolling element - "${selector}"`);
30459
+ }
30460
+ this._scrollingElement = await this.element({ type: "css", selector });
30455
30461
  } else {
30456
- selector = await this.execute(snippets.getDocumentScrollingElement);
30457
- this.logger.log(`Using dynamic default scrolling element - "${selector}"`);
30462
+ this._scrollingElement = await this.element({ type: "xpath", selector: '//*[@scrollable="true"]' });
30458
30463
  }
30459
- this._scrollingElement = await this.element({ type: "css", selector });
30460
- } else {
30461
- this._scrollingElement = await this.element({ type: "xpath", selector: '//*[@scrollable="true"]' });
30462
30464
  }
30463
30465
  }
30464
30466
  return this._scrollingElement;
@@ -31691,7 +31693,10 @@ var require_driver = __commonJS({
31691
31693
  }
31692
31694
  async reloadPage() {
31693
31695
  await this.mainContext.execute(snippets.reloadPage).catch(() => null);
31694
- return this.refresh({ reset: false });
31696
+ const refreshThis = await this.refresh({ reset: false });
31697
+ const scrollingElement = await this.mainContext.getScrollingElement();
31698
+ await (scrollingElement === null || scrollingElement === void 0 ? void 0 : scrollingElement.refresh());
31699
+ return refreshThis;
31695
31700
  }
31696
31701
  async refresh({ reset } = {}) {
31697
31702
  if (reset) {
@@ -32791,9 +32796,20 @@ var require_requests2 = __commonJS({
32791
32796
  });
32792
32797
  const result = await response.json();
32793
32798
  brokerUrl = result.nextPath;
32794
- const screenshots = localEnvironment ? [{ image: result.payload.result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
32795
- return { image: result.payload[index].result.screenshotUrl, environment };
32796
- });
32799
+ let screenshots;
32800
+ if (Number(result.protocolVersion) >= 2) {
32801
+ logger.log(`Request "takeScreenshots" was performed on applitools lib v${result.nmlVersion} through protocol v${result.protocolVersion} on device`, result.payload.debugInfo);
32802
+ screenshots = localEnvironment ? [{ image: result.payload.result[0].result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
32803
+ if (result.payload.result[index].error) {
32804
+ 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}"`);
32805
+ }
32806
+ return { image: result.payload.result[index].result.screenshotUrl, environment };
32807
+ });
32808
+ } else {
32809
+ screenshots = localEnvironment ? [{ image: result.payload.result.screenshotUrl, environment: localEnvironment }] : renderEnvironments.map((environment, index) => {
32810
+ return { image: result.payload[index].result.screenshotUrl, environment };
32811
+ });
32812
+ }
32797
32813
  logger.log('Request "takeScreenshots" finished successfully with body', screenshots);
32798
32814
  return screenshots;
32799
32815
  } catch (error) {
@@ -35555,21 +35571,22 @@ var require_to_base_check_settings = __commonJS({
35555
35571
  var utils34 = __importStar(require_browser3());
35556
35572
  function toBaseCheckSettings({ settings }) {
35557
35573
  const regionTypes = ["ignore", "layout", "strict", "content", "floating", "accessibility"];
35558
- const elementReferencesToCalculate = regionTypes.flatMap((regionType) => {
35574
+ const calculate = regionTypes.flatMap((regionType) => {
35559
35575
  var _a;
35560
35576
  return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
35561
35577
  const { region } = utils34.types.has(reference, "region") ? reference : { region: reference };
35562
35578
  return !isRegion(region) ? regions.concat(region) : regions;
35563
35579
  }, []);
35564
35580
  });
35565
- const elementReferenceToTarget = !isRegion(settings.region) ? settings.region : void 0;
35566
- return { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings };
35581
+ const target = !isRegion(settings.region) ? settings.region : void 0;
35582
+ const scrolling = settings.scrollRootElement;
35583
+ return { elementReferences: { target, scrolling, calculate }, getBaseCheckSettings };
35567
35584
  function getBaseCheckSettings({ calculatedRegions, preserveTransformation }) {
35568
35585
  const transformedSettings = { ...settings };
35569
35586
  if (!preserveTransformation) {
35570
35587
  delete transformedSettings.region;
35571
35588
  delete transformedSettings.normalization;
35572
- } else if (elementReferenceToTarget) {
35589
+ } else if (target) {
35573
35590
  delete transformedSettings.region;
35574
35591
  }
35575
35592
  regionTypes.forEach((regionType) => {
@@ -35608,10 +35625,10 @@ var require_wait_for_lazy_load = __commonJS({
35608
35625
  Object.defineProperty(exports, "__esModule", { value: true });
35609
35626
  exports.waitForLazyLoad = void 0;
35610
35627
  var { lazyLoad } = require_dist3();
35611
- async function waitForLazyLoad({ context, settings, logger }) {
35612
- var _a, _b;
35613
- logger.log("lazy loading the page before capturing a screenshot");
35614
- const { scrollLength = 300, waitingTime = 2e3, maxAmountToScroll = 15e3 } = typeof settings === "boolean" ? {} : settings;
35628
+ async function waitForLazyLoad({ context, settings = {}, logger }) {
35629
+ var _a;
35630
+ logger.log("Running scrolling sequence to lazy load a view content");
35631
+ const { scrollLength = 300, waitingTime = 2e3, maxAmountToScroll = 15e3 } = settings;
35615
35632
  await context.executePoll(lazyLoad, {
35616
35633
  main: [
35617
35634
  await context.getScrollingElement(),
@@ -35622,8 +35639,8 @@ var require_wait_for_lazy_load = __commonJS({
35622
35639
  }
35623
35640
  ],
35624
35641
  poll: [],
35625
- executionTimeout: 5 * 60 * 1e3,
35626
- pollTimeout: (_b = (_a = settings.pollTimeout) !== null && _a !== void 0 ? _a : settings.waitingTime) !== null && _b !== void 0 ? _b : 2e3
35642
+ executionTimeout: 3e5,
35643
+ pollTimeout: (_a = settings.pollTimeout) !== null && _a !== void 0 ? _a : waitingTime
35627
35644
  });
35628
35645
  }
35629
35646
  exports.waitForLazyLoad = waitForLazyLoad;
@@ -35812,14 +35829,14 @@ var require_check2 = __commonJS({
35812
35829
  logger
35813
35830
  });
35814
35831
  }
35815
- const { elementReferencesToCalculate, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
35832
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
35816
35833
  if (driverEnvironment.isWeb || !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) || settings.screenshotMode === "default") {
35817
35834
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
35818
35835
  driver,
35819
35836
  settings: {
35820
35837
  ...settings,
35821
35838
  environments: uniqueEnvironments,
35822
- regionsToCalculate: elementReferencesToCalculate,
35839
+ regionsToCalculate: elementReferences.calculate,
35823
35840
  calculateView: !!settings.pageId,
35824
35841
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : void 0
35825
35842
  },
@@ -36007,14 +36024,14 @@ var require_check_and_close2 = __commonJS({
36007
36024
  logger
36008
36025
  });
36009
36026
  }
36010
- const { elementReferencesToCalculate, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
36027
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
36011
36028
  if (driverEnvironment.isWeb || !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) || settings.screenshotMode === "default") {
36012
36029
  const screenshots = await (0, take_screenshots_1.takeScreenshots)({
36013
36030
  driver,
36014
36031
  settings: {
36015
36032
  ...settings,
36016
36033
  environments: uniqueEnvironments,
36017
- regionsToCalculate: elementReferencesToCalculate,
36034
+ regionsToCalculate: elementReferences.calculate,
36018
36035
  calculateView: !!settings.pageId,
36019
36036
  domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : void 0
36020
36037
  },
@@ -82351,46 +82368,6 @@ var require_generate_safe_selectors = __commonJS({
82351
82368
  }
82352
82369
  });
82353
82370
 
82354
- // ../core/dist/ufg/utils/calculate-regions.js
82355
- var require_calculate_regions = __commonJS({
82356
- "../core/dist/ufg/utils/calculate-regions.js"(exports) {
82357
- "use strict";
82358
- init_process();
82359
- init_setImmediate();
82360
- init_buffer();
82361
- Object.defineProperty(exports, "__esModule", { value: true });
82362
- exports.calculateRegions = void 0;
82363
- var generate_safe_selectors_1 = require_generate_safe_selectors();
82364
- async function calculateRegions({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement }) {
82365
- var _a, _b;
82366
- const elementReferences = [
82367
- ...elementReferenceToTarget ? [elementReferenceToTarget] : [],
82368
- ...scrollRootElement ? [scrollRootElement] : [],
82369
- ...elementReferencesToCalculate
82370
- ];
82371
- const { cleanupGeneratedSelectors, selectors } = await (0, generate_safe_selectors_1.generateSafeSelectors)({
82372
- context: driver.currentContext,
82373
- elementReferences
82374
- });
82375
- let selectorsToCalculate = selectors;
82376
- let regionToTarget;
82377
- let scrollRootSelector;
82378
- if (elementReferenceToTarget) {
82379
- if (!((_a = selectorsToCalculate[0]) === null || _a === void 0 ? void 0 : _a.safeSelector))
82380
- throw new Error("Target element not found");
82381
- regionToTarget = selectorsToCalculate[0].safeSelector;
82382
- selectorsToCalculate = selectorsToCalculate.slice(1);
82383
- }
82384
- if (scrollRootElement) {
82385
- scrollRootSelector = (_b = selectorsToCalculate[0].safeSelector) !== null && _b !== void 0 ? _b : void 0;
82386
- selectorsToCalculate = selectorsToCalculate.slice(1);
82387
- }
82388
- return { cleanupGeneratedSelectors, selectorsToCalculate, regionToTarget, scrollRootSelector };
82389
- }
82390
- exports.calculateRegions = calculateRegions;
82391
- }
82392
- });
82393
-
82394
82371
  // ../core/dist/ufg/utils/take-dom-snapshots.js
82395
82372
  var require_take_dom_snapshots = __commonJS({
82396
82373
  "../core/dist/ufg/utils/take-dom-snapshots.js"(exports) {
@@ -82441,47 +82418,36 @@ var require_take_dom_snapshots = __commonJS({
82441
82418
  Object.defineProperty(exports, "__esModule", { value: true });
82442
82419
  exports.takeDomSnapshots = void 0;
82443
82420
  var take_dom_snapshot_1 = require_take_dom_snapshot();
82444
- var calculate_regions_1 = require_calculate_regions();
82421
+ var generate_safe_selectors_1 = require_generate_safe_selectors();
82445
82422
  var wait_for_lazy_load_1 = require_wait_for_lazy_load();
82446
82423
  var chalk_1 = __importDefault(require_source());
82447
82424
  var utils34 = __importStar(require_browser3());
82448
82425
  var lang = __importStar(require_lang());
82449
82426
  __exportStar(require_take_dom_snapshot(), exports);
82450
82427
  async function takeDomSnapshots({ driver, settings, hooks, provides, logger }) {
82451
- var _a, _b, _c, _d, _e, _f, _g;
82428
+ var _a, _b, _c;
82452
82429
  const features = await driver.getFeatures();
82453
82430
  settings.cookies = features.allCookies ? await driver.getCookies().catch(() => []) : [];
82431
+ settings.lazyLoad = settings.lazyLoad !== true ? settings.lazyLoad : {};
82454
82432
  const currentContext = driver.currentContext;
82455
- let calculateRegionsResults = {};
82456
- const waitBeforeCapture = async () => {
82457
- if (utils34.types.isFunction(settings.waitBeforeCapture)) {
82458
- await settings.waitBeforeCapture();
82459
- } else if (settings.waitBeforeCapture) {
82460
- await utils34.general.sleep(settings.waitBeforeCapture);
82461
- }
82462
- };
82463
- if (settings.lazyLoad) {
82464
- await (0, wait_for_lazy_load_1.waitForLazyLoad)({
82465
- context: driver.currentContext,
82466
- settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
82467
- logger
82468
- });
82469
- }
82470
82433
  if (!((_a = settings.layoutBreakpoints) === null || _a === void 0 ? void 0 : _a.breakpoints)) {
82434
+ if (settings.lazyLoad) {
82435
+ await (0, wait_for_lazy_load_1.waitForLazyLoad)({ context: currentContext, settings: settings.lazyLoad, logger });
82436
+ }
82471
82437
  logger.log(`taking single dom snapshot`);
82472
- await ((_b = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _b === void 0 ? void 0 : _b.call(hooks));
82473
- await waitBeforeCapture();
82474
- if (settings.calculateRegionsOptions) {
82475
- calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
82476
- ...settings.calculateRegionsOptions,
82477
- driver
82438
+ await beforeEachSnapshot();
82439
+ let safeSelectorResult2;
82440
+ if (settings.elementReferences) {
82441
+ safeSelectorResult2 = await (0, generate_safe_selectors_1.generateSafeSelectors)({
82442
+ context: currentContext,
82443
+ elementReferences: settings.elementReferences
82478
82444
  });
82479
82445
  }
82480
82446
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
82481
- await ((_c = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _c === void 0 ? void 0 : _c.call(calculateRegionsResults));
82482
- return Array(settings.environments.length).fill({ snapshot, ...calculateRegionsResults });
82447
+ await ((_b = safeSelectorResult2 === null || safeSelectorResult2 === void 0 ? void 0 : safeSelectorResult2.cleanupGeneratedSelectors) === null || _b === void 0 ? void 0 : _b.call(safeSelectorResult2));
82448
+ return Array(settings.environments.length).fill({ ...snapshot, generatedSelectors: safeSelectorResult2 === null || safeSelectorResult2 === void 0 ? void 0 : safeSelectorResult2.selectors });
82483
82449
  }
82484
- const isStrictBreakpoints = utils34.types.isArray((_d = settings.layoutBreakpoints) === null || _d === void 0 ? void 0 : _d.breakpoints);
82450
+ const isStrictBreakpoints = utils34.types.isArray((_c = settings.layoutBreakpoints) === null || _c === void 0 ? void 0 : _c.breakpoints);
82485
82451
  const requiredWidths = await settings.environments.reduce(async (prev, environment, index) => {
82486
82452
  const { name, width } = await extractEnvironmentInfo(environment);
82487
82453
  const requiredWidths2 = await prev;
@@ -82500,76 +82466,78 @@ var require_take_dom_snapshots = __commonJS({
82500
82466
  });
82501
82467
  logger.console.log(chalk_1.default.yellow(message));
82502
82468
  }
82503
- logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints.breakpoints);
82504
- logger.log(`required widths: ${[...requiredWidths.keys()].join(", ")}`);
82505
- const viewportSize = await driver.getViewportSize();
82506
- const snapshotsResults = Array(settings.environments.length);
82507
- if (requiredWidths.has(viewportSize.width)) {
82508
- logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
82509
- await ((_e = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _e === void 0 ? void 0 : _e.call(hooks));
82510
- await waitBeforeCapture();
82511
- if (settings.calculateRegionsOptions) {
82512
- calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
82513
- ...settings.calculateRegionsOptions,
82514
- driver
82515
- });
82516
- }
82517
- const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
82518
- requiredWidths.get(viewportSize.width).forEach(({ index }) => {
82519
- snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
82520
- });
82521
- }
82522
- for (const [requiredWidth, browsersInfo] of requiredWidths.entries()) {
82523
- logger.log(`taking dom snapshot for width ${requiredWidth}`);
82524
- try {
82525
- await driver.setViewportSize({ width: requiredWidth, height: viewportSize.height });
82526
- } catch (error) {
82527
- logger.error(`Failed to set viewport size to ${requiredWidth} du to error: `, error);
82528
- const actualViewportSize = await driver.getViewportSize();
82529
- if (isStrictBreakpoints) {
82530
- const message = lang.breakpointOutOfDriverBoundsWarning({
82531
- requiredWidth,
82532
- actualWidth: actualViewportSize.width,
82533
- browsers: browsersInfo
82534
- });
82535
- logger.console.log(chalk_1.default.yellow(message));
82536
- logger.log(message);
82537
- } else {
82538
- const message = lang.requestedEnvironmentOutOfDriverBoundsWarning({
82539
- requiredWidth,
82540
- actualWidth: actualViewportSize.width,
82541
- browsers: browsersInfo
82542
- });
82543
- logger.console.log(chalk_1.default.yellow(message));
82544
- logger.log(message);
82469
+ logger.log(`Taking multiple dom snapshots for the breakpoints`, settings.layoutBreakpoints);
82470
+ const initialViewportSize = await driver.getViewportSize();
82471
+ const entries = [];
82472
+ const initialsBrowsers = requiredWidths.get(initialViewportSize.width);
82473
+ if (initialsBrowsers) {
82474
+ logger.log(`The first dom snapshot is going to be taking for initial viewport size`, initialViewportSize);
82475
+ requiredWidths.delete(initialViewportSize.width);
82476
+ entries.push({ browsers: initialsBrowsers });
82477
+ }
82478
+ requiredWidths.forEach((browsers, requiredWidth) => entries.push({ viewportSize: { width: requiredWidth, height: initialViewportSize.height }, browsers }));
82479
+ logger.log(`All entries to take dom snapshots for`, entries);
82480
+ let safeSelectorResult;
82481
+ const snapshots = Array(settings.environments.length);
82482
+ for (const [index, { viewportSize, browsers }] of entries.entries()) {
82483
+ logger.log(`Taking dom snapshot for viewport size ${viewportSize}`);
82484
+ if (viewportSize) {
82485
+ try {
82486
+ await driver.setViewportSize(viewportSize);
82487
+ } catch (error) {
82488
+ logger.error(`Failed to set viewport size to ${viewportSize} due to the error`, error);
82489
+ const actualViewportSize = await driver.getViewportSize();
82490
+ if (isStrictBreakpoints) {
82491
+ const message = lang.breakpointOutOfDriverBoundsWarning({
82492
+ requiredWidth: viewportSize.width,
82493
+ actualWidth: actualViewportSize.width,
82494
+ browsers
82495
+ });
82496
+ logger.console.log(chalk_1.default.yellow(message));
82497
+ logger.log(message);
82498
+ } else {
82499
+ const message = lang.requestedEnvironmentOutOfDriverBoundsWarning({
82500
+ requiredWidth: viewportSize.width,
82501
+ actualWidth: actualViewportSize.width,
82502
+ browsers
82503
+ });
82504
+ logger.console.log(chalk_1.default.yellow(message));
82505
+ logger.log(message);
82506
+ }
82545
82507
  }
82508
+ if (settings.layoutBreakpoints.reload)
82509
+ await driver.reloadPage();
82546
82510
  }
82547
- if (settings.layoutBreakpoints.reload) {
82548
- await driver.reloadPage();
82511
+ if (settings.lazyLoad && (index === 0 || settings.layoutBreakpoints.reload)) {
82512
+ await (0, wait_for_lazy_load_1.waitForLazyLoad)({ context: currentContext, settings: settings.lazyLoad, logger });
82549
82513
  }
82550
- await ((_f = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _f === void 0 ? void 0 : _f.call(hooks));
82551
- await waitBeforeCapture();
82552
- if (settings.layoutBreakpoints.reload) {
82553
- if (settings.calculateRegionsOptions) {
82554
- calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
82555
- ...settings.calculateRegionsOptions,
82556
- driver
82557
- });
82558
- }
82514
+ await beforeEachSnapshot();
82515
+ if (settings.elementReferences && (index === 0 || settings.layoutBreakpoints.reload)) {
82516
+ safeSelectorResult = await (0, generate_safe_selectors_1.generateSafeSelectors)({
82517
+ context: currentContext,
82518
+ elementReferences: settings.elementReferences
82519
+ });
82559
82520
  }
82560
82521
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
82561
- browsersInfo.forEach(({ index }) => {
82562
- snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
82563
- });
82522
+ browsers.forEach(({ index: index2 }) => snapshots[index2] = { ...snapshot, generatedSelectors: safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.selectors });
82564
82523
  }
82565
- await driver.setViewportSize(viewportSize);
82524
+ await driver.setViewportSize(initialViewportSize);
82566
82525
  if (settings.layoutBreakpoints.reload) {
82567
82526
  await driver.reloadPage();
82568
- await waitBeforeCapture();
82527
+ await beforeEachSnapshot();
82569
82528
  } else {
82570
- (_g = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _g === void 0 ? void 0 : _g.call(calculateRegionsResults);
82529
+ await (safeSelectorResult === null || safeSelectorResult === void 0 ? void 0 : safeSelectorResult.cleanupGeneratedSelectors());
82530
+ }
82531
+ return snapshots;
82532
+ async function beforeEachSnapshot() {
82533
+ var _a2, _b2;
82534
+ await ((_a2 = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _a2 === void 0 ? void 0 : _a2.call(hooks));
82535
+ if (utils34.types.isNumber(settings.waitBeforeCapture)) {
82536
+ await utils34.general.sleep(settings.waitBeforeCapture);
82537
+ } else {
82538
+ await ((_b2 = settings.waitBeforeCapture) === null || _b2 === void 0 ? void 0 : _b2.call(settings));
82539
+ }
82571
82540
  }
82572
- return snapshotsResults;
82573
82541
  function calculateBreakpoint({ breakpoints, value }) {
82574
82542
  const nextBreakpointIndex = breakpoints.sort((item1, item2) => item1 > item2 ? 1 : -1).findIndex((breakpoint) => breakpoint > value);
82575
82543
  if (nextBreakpointIndex === -1)
@@ -82598,6 +82566,55 @@ var require_take_dom_snapshots = __commonJS({
82598
82566
  }
82599
82567
  });
82600
82568
 
82569
+ // ../core/dist/ufg/utils/to-generated-selectors.js
82570
+ var require_to_generated_selectors = __commonJS({
82571
+ "../core/dist/ufg/utils/to-generated-selectors.js"(exports) {
82572
+ "use strict";
82573
+ init_process();
82574
+ init_setImmediate();
82575
+ init_buffer();
82576
+ Object.defineProperty(exports, "__esModule", { value: true });
82577
+ exports.toGeneratedSelectors = void 0;
82578
+ function toGeneratedSelectors({ elementReferences, transformElementReference }) {
82579
+ var _a, _b, _c;
82580
+ const elementReferencesToMark = [
82581
+ (_a = elementReferences.target) !== null && _a !== void 0 ? _a : [],
82582
+ (_b = elementReferences.scrolling) !== null && _b !== void 0 ? _b : [],
82583
+ (_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : []
82584
+ ].flat();
82585
+ return { elementReferencesToMark, getGeneratedSelectors };
82586
+ function getGeneratedSelectors(generatedSelectors) {
82587
+ var _a2, _b2, _c2;
82588
+ let target = void 0;
82589
+ let scrolling = void 0;
82590
+ let calculate = [];
82591
+ if (generatedSelectors) {
82592
+ let offset = 0;
82593
+ if (elementReferences.target) {
82594
+ target = (_a2 = generatedSelectors[offset++].safeSelector) !== null && _a2 !== void 0 ? _a2 : void 0;
82595
+ if (!target)
82596
+ throw new Error("Target element not found");
82597
+ }
82598
+ if (elementReferences.scrolling) {
82599
+ scrolling = (_b2 = generatedSelectors[offset++].safeSelector) !== null && _b2 !== void 0 ? _b2 : void 0;
82600
+ }
82601
+ calculate = generatedSelectors.slice(offset);
82602
+ } else {
82603
+ target = elementReferences.target && transformElementReference(elementReferences.target);
82604
+ scrolling = elementReferences.scrolling && transformElementReference(elementReferences.scrolling);
82605
+ calculate = ((_c2 = elementReferences.calculate) !== null && _c2 !== void 0 ? _c2 : []).map((elementReference) => {
82606
+ var _a3;
82607
+ const selector = (_a3 = transformElementReference(elementReference)) !== null && _a3 !== void 0 ? _a3 : null;
82608
+ return { originalSelector: selector, safeSelector: selector };
82609
+ });
82610
+ }
82611
+ return { target, scrolling, calculate };
82612
+ }
82613
+ }
82614
+ exports.toGeneratedSelectors = toGeneratedSelectors;
82615
+ }
82616
+ });
82617
+
82601
82618
  // ../core/dist/ufg/check.js
82602
82619
  var require_check3 = __commonJS({
82603
82620
  "../core/dist/ufg/check.js"(exports) {
@@ -82645,6 +82662,7 @@ var require_check3 = __commonJS({
82645
82662
  var driver_1 = require_dist4();
82646
82663
  var take_dom_snapshots_1 = require_take_dom_snapshots();
82647
82664
  var to_base_check_settings_1 = require_to_base_check_settings();
82665
+ var to_generated_selectors_1 = require_to_generated_selectors();
82648
82666
  var uniquify_environments_1 = require_uniquify_environments();
82649
82667
  var to_environment_key_1 = require_to_environment_key();
82650
82668
  var abort_error_1 = require_abort_error();
@@ -82653,15 +82671,20 @@ var require_check3 = __commonJS({
82653
82671
  var chalk_1 = __importDefault(require_source());
82654
82672
  function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger }) {
82655
82673
  return async function check({ target = defaultTarget, settings = {}, logger = mainLogger } = {}) {
82656
- var _a, _b, _c;
82674
+ var _a, _b;
82657
82675
  logger = logger.extend(mainLogger);
82658
82676
  logger.log('Command "check" is called with settings', settings);
82659
82677
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
82660
82678
  logger.warn('Command "check" was called after test was already aborted');
82661
82679
  throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
82662
82680
  }
82663
- const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
82664
- settings
82681
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
82682
+ const { elementReferencesToMark, getGeneratedSelectors } = (0, to_generated_selectors_1.toGeneratedSelectors)({
82683
+ elementReferences,
82684
+ transformElementReference: (elementReference) => {
82685
+ var _a2;
82686
+ return (0, driver_1.isSelector)(elementReference) && ((_a2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a2 === void 0 ? void 0 : _a2.call(spec, elementReference)) || void 0;
82687
+ }
82665
82688
  });
82666
82689
  const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
82667
82690
  const ufgClient = await eyes.core.getUFGClient({
@@ -82672,7 +82695,7 @@ var require_check3 = __commonJS({
82672
82695
  },
82673
82696
  logger
82674
82697
  });
82675
- let snapshotResults;
82698
+ let snapshots;
82676
82699
  let snapshotUrl;
82677
82700
  let snapshotTitle;
82678
82701
  let userAgent;
@@ -82683,7 +82706,7 @@ var require_check3 = __commonJS({
82683
82706
  await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
82684
82707
  if (environment.isWeb) {
82685
82708
  userAgent = await driver.getUserAgentLegacy();
82686
- snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
82709
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
82687
82710
  driver,
82688
82711
  settings: {
82689
82712
  ...eyes.test.eyesServer,
@@ -82693,11 +82716,7 @@ var require_check3 = __commonJS({
82693
82716
  environments: uniqueEnvironments,
82694
82717
  skipResources: ufgClient.getCachedResourceUrls(),
82695
82718
  lazyLoad: settings.lazyLoad,
82696
- calculateRegionsOptions: {
82697
- elementReferencesToCalculate,
82698
- elementReferenceToTarget,
82699
- scrollRootElement: settings.scrollRootElement
82700
- }
82719
+ elementReferences: elementReferencesToMark
82701
82720
  },
82702
82721
  provides: {
82703
82722
  getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
@@ -82711,7 +82730,7 @@ var require_check3 = __commonJS({
82711
82730
  settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
82712
82731
  logger
82713
82732
  });
82714
- const snapshots = await nmlClient.takeSnapshots({
82733
+ snapshots = await nmlClient.takeSnapshots({
82715
82734
  settings: {
82716
82735
  ...eyes.test.eyesServer,
82717
82736
  waitBeforeCapture: settings.waitBeforeCapture,
@@ -82719,24 +82738,17 @@ var require_check3 = __commonJS({
82719
82738
  },
82720
82739
  logger
82721
82740
  });
82722
- snapshotResults = snapshots.map((snapshot) => {
82723
- var _a2, _b2, _c2, _d;
82724
- return {
82725
- snapshot,
82726
- regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget) ? (_b2 = (_a2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a2 === void 0 ? void 0 : _a2.call(spec, settings.scrollRootElement)) !== null && _b2 !== void 0 ? _b2 : void 0 : void 0,
82727
- scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement) ? (_d = (_c2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c2 === void 0 ? void 0 : _c2.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : void 0 : void 0
82728
- };
82729
- });
82730
82741
  }
82731
82742
  await currentContext.focus();
82732
82743
  snapshotUrl = await driver.getUrl();
82733
82744
  snapshotTitle = await driver.getTitle();
82734
82745
  } else {
82735
- snapshotResults = !utils34.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
82736
- snapshotUrl = utils34.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, "url") ? snapshotResults[0].snapshot.url : void 0;
82746
+ snapshots = !utils34.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
82747
+ snapshotUrl = utils34.types.has(snapshots[0], "url") ? snapshots[0].url : void 0;
82737
82748
  }
82749
+ const generatedSelectors = snapshots.map((snapshot) => getGeneratedSelectors(utils34.types.has(snapshot, "generatedSelectors") ? snapshot.generatedSelectors : void 0));
82738
82750
  const promises = uniqueEnvironments.map(async (environment, index) => {
82739
- var _a2, _b2, _c2, _d, _e, _f, _g, _h;
82751
+ var _a2, _b2, _c, _d, _e, _f, _g, _h;
82740
82752
  const environmentLogger = logger.extend({ tags: [`environment-${utils34.general.shortid()}`] });
82741
82753
  const ufgEnvironment = environment;
82742
82754
  if (utils34.types.has(ufgEnvironment, "name") && ufgEnvironment.name === "edge") {
@@ -82747,13 +82759,8 @@ var require_check3 = __commonJS({
82747
82759
  environmentLogger.warn('Command "check" was aborted before rendering');
82748
82760
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
82749
82761
  }
82750
- const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector } = snapshotResults[index];
82751
- const { cookies, ...snapshot } = snapshotFromResult;
82752
- const region = (_a2 = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a2 !== void 0 ? _a2 : settings.region;
82753
- const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map((selector) => ({
82754
- originalSelector: selector,
82755
- safeSelector: selector
82756
- }));
82762
+ const { cookies, ...snapshot } = snapshots[index];
82763
+ const selectors = generatedSelectors[index];
82757
82764
  if (utils34.types.has(ufgEnvironment, "iosDeviceInfo") || utils34.types.has(ufgEnvironment, "androidDeviceInfo")) {
82758
82765
  ufgEnvironment.type = utils34.types.has(snapshot, "cdt") ? "web" : "native";
82759
82766
  }
@@ -82778,24 +82785,24 @@ var require_check3 = __commonJS({
82778
82785
  environmentLogger.warn('Command "check" was aborted before rendering');
82779
82786
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
82780
82787
  } else if (!baseEyes.running) {
82781
- environmentLogger.warn(`Render on environment with id "${(_b2 = baseEyes.test.environment) === null || _b2 === void 0 ? void 0 : _b2.environmentId}" was aborted during one of the previous steps`);
82782
- throw new abort_error_1.AbortError(`Render on environment with id "${(_c2 = baseEyes.test.environment) === null || _c2 === void 0 ? void 0 : _c2.environmentId}" was aborted during one of the previous steps`);
82788
+ environmentLogger.warn(`Render on environment with id "${(_a2 = baseEyes.test.environment) === null || _a2 === void 0 ? void 0 : _a2.environmentId}" was aborted during one of the previous steps`);
82789
+ throw new abort_error_1.AbortError(`Render on environment with id "${(_b2 = baseEyes.test.environment) === null || _b2 === void 0 ? void 0 : _b2.environmentId}" was aborted during one of the previous steps`);
82783
82790
  }
82784
82791
  const renderTarget = await renderTargetPromise;
82785
82792
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
82786
82793
  environmentLogger.warn('Command "check" was aborted before rendering');
82787
82794
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
82788
82795
  } else if (!baseEyes.running) {
82789
- environmentLogger.warn(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
82790
- throw new abort_error_1.AbortError(`Render on environment with id "${(_e = baseEyes.test.environment) === null || _e === void 0 ? void 0 : _e.environmentId}" was aborted during one of the previous steps`);
82796
+ environmentLogger.warn(`Render on environment with id "${(_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId}" was aborted during one of the previous steps`);
82797
+ throw new abort_error_1.AbortError(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
82791
82798
  }
82792
82799
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
82793
82800
  target: renderTarget,
82794
82801
  settings: {
82795
82802
  ...settings,
82796
- region,
82797
- scrollRootElement: scrollRootSelector,
82798
- selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
82803
+ region: (_e = selectors.target) !== null && _e !== void 0 ? _e : settings.region,
82804
+ scrollRootElement: selectors.scrolling,
82805
+ selectorsToCalculate: selectors.calculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
82799
82806
  includeFullPageSize: Boolean(settings.pageId),
82800
82807
  environment: ufgEnvironment,
82801
82808
  environmentId: baseEyes.test.environment.environmentId,
@@ -82807,7 +82814,7 @@ var require_check3 = __commonJS({
82807
82814
  });
82808
82815
  let offset = 0;
82809
82816
  const baseSettings = getBaseCheckSettings({
82810
- calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
82817
+ calculatedRegions: selectors.calculate.map(({ originalSelector, safeSelector }) => ({
82811
82818
  selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : void 0,
82812
82819
  regions: safeSelector ? selectorRegions[offset++] : []
82813
82820
  }))
@@ -82900,6 +82907,7 @@ var require_check_and_close3 = __commonJS({
82900
82907
  var driver_1 = require_dist4();
82901
82908
  var take_dom_snapshots_1 = require_take_dom_snapshots();
82902
82909
  var to_base_check_settings_1 = require_to_base_check_settings();
82910
+ var to_generated_selectors_1 = require_to_generated_selectors();
82903
82911
  var uniquify_environments_1 = require_uniquify_environments();
82904
82912
  var to_environment_key_1 = require_to_environment_key();
82905
82913
  var abort_error_1 = require_abort_error();
@@ -82908,15 +82916,20 @@ var require_check_and_close3 = __commonJS({
82908
82916
  var chalk_1 = __importDefault(require_source());
82909
82917
  function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger }) {
82910
82918
  return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger } = {}) {
82911
- var _a, _b, _c;
82919
+ var _a, _b;
82912
82920
  logger = logger.extend(mainLogger);
82913
82921
  logger.log('Command "checkAndClose" is called with settings', settings);
82914
82922
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
82915
82923
  logger.warn('Command "checkAndClose" was called after test was already aborted');
82916
82924
  throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
82917
82925
  }
82918
- const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
82919
- settings
82926
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
82927
+ const { elementReferencesToMark, getGeneratedSelectors } = (0, to_generated_selectors_1.toGeneratedSelectors)({
82928
+ elementReferences,
82929
+ transformElementReference: (elementReference) => {
82930
+ var _a2;
82931
+ return (0, driver_1.isSelector)(elementReference) && ((_a2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a2 === void 0 ? void 0 : _a2.call(spec, elementReference)) || void 0;
82932
+ }
82920
82933
  });
82921
82934
  const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
82922
82935
  const ufgClient = await eyes.core.getUFGClient({
@@ -82927,7 +82940,7 @@ var require_check_and_close3 = __commonJS({
82927
82940
  },
82928
82941
  logger
82929
82942
  });
82930
- let snapshotResults;
82943
+ let snapshots;
82931
82944
  let snapshotUrl;
82932
82945
  let snapshotTitle;
82933
82946
  let userAgent;
@@ -82938,7 +82951,7 @@ var require_check_and_close3 = __commonJS({
82938
82951
  await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
82939
82952
  if (environment.isWeb) {
82940
82953
  userAgent = await driver.getUserAgentLegacy();
82941
- snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
82954
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
82942
82955
  driver,
82943
82956
  settings: {
82944
82957
  ...eyes.test.eyesServer,
@@ -82948,11 +82961,7 @@ var require_check_and_close3 = __commonJS({
82948
82961
  environments: uniqueEnvironments,
82949
82962
  skipResources: ufgClient.getCachedResourceUrls(),
82950
82963
  lazyLoad: settings.lazyLoad,
82951
- calculateRegionsOptions: {
82952
- elementReferencesToCalculate,
82953
- elementReferenceToTarget,
82954
- scrollRootElement: settings.scrollRootElement
82955
- }
82964
+ elementReferences: elementReferencesToMark
82956
82965
  },
82957
82966
  provides: {
82958
82967
  getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
@@ -82966,7 +82975,7 @@ var require_check_and_close3 = __commonJS({
82966
82975
  settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
82967
82976
  logger
82968
82977
  });
82969
- const snapshots = await nmlClient.takeSnapshots({
82978
+ snapshots = await nmlClient.takeSnapshots({
82970
82979
  settings: {
82971
82980
  ...eyes.test.eyesServer,
82972
82981
  waitBeforeCapture: settings.waitBeforeCapture,
@@ -82974,24 +82983,17 @@ var require_check_and_close3 = __commonJS({
82974
82983
  },
82975
82984
  logger
82976
82985
  });
82977
- snapshotResults = snapshots.map((snapshot) => {
82978
- var _a2, _b2, _c2, _d;
82979
- return {
82980
- snapshot,
82981
- regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget) ? (_b2 = (_a2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a2 === void 0 ? void 0 : _a2.call(spec, settings.scrollRootElement)) !== null && _b2 !== void 0 ? _b2 : void 0 : void 0,
82982
- scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement) ? (_d = (_c2 = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c2 === void 0 ? void 0 : _c2.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : void 0 : void 0
82983
- };
82984
- });
82985
82986
  }
82986
82987
  await currentContext.focus();
82987
82988
  snapshotUrl = await driver.getUrl();
82988
82989
  snapshotTitle = await driver.getTitle();
82989
82990
  } else {
82990
- snapshotResults = !utils34.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
82991
- snapshotUrl = utils34.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, "url") ? snapshotResults[0].snapshot.url : void 0;
82991
+ snapshots = !utils34.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
82992
+ snapshotUrl = utils34.types.has(snapshots[0], "url") ? snapshots[0].url : void 0;
82992
82993
  }
82994
+ const generatedSelectors = snapshots.map((snapshot) => getGeneratedSelectors(utils34.types.has(snapshot, "generatedSelectors") ? snapshot.generatedSelectors : void 0));
82993
82995
  const promises = uniqueEnvironments.map(async (environment, index) => {
82994
- var _a2, _b2, _c2, _d, _e, _f, _g, _h;
82996
+ var _a2, _b2, _c, _d, _e, _f, _g, _h;
82995
82997
  const environmentLogger = logger.extend({ tags: [`environment-${utils34.general.shortid()}`] });
82996
82998
  const ufgEnvironment = environment;
82997
82999
  if (utils34.types.has(ufgEnvironment, "name") && ufgEnvironment.name === "edge") {
@@ -83002,13 +83004,8 @@ var require_check_and_close3 = __commonJS({
83002
83004
  environmentLogger.warn('Command "check" was aborted before rendering');
83003
83005
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
83004
83006
  }
83005
- const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector } = snapshotResults[index];
83006
- const { cookies, ...snapshot } = snapshotFromResult;
83007
- const region = (_a2 = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a2 !== void 0 ? _a2 : settings.region;
83008
- const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map((selector) => ({
83009
- originalSelector: selector,
83010
- safeSelector: selector
83011
- }));
83007
+ const { cookies, ...snapshot } = snapshots[index];
83008
+ const selectors = generatedSelectors[index];
83012
83009
  if (utils34.types.has(ufgEnvironment, "iosDeviceInfo") || utils34.types.has(ufgEnvironment, "androidDeviceInfo")) {
83013
83010
  ufgEnvironment.type = utils34.types.has(snapshot, "cdt") ? "web" : "native";
83014
83011
  }
@@ -83033,24 +83030,24 @@ var require_check_and_close3 = __commonJS({
83033
83030
  environmentLogger.warn('Command "check" was aborted before rendering');
83034
83031
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
83035
83032
  } else if (!baseEyes.running) {
83036
- environmentLogger.warn(`Render on environment with id "${(_b2 = baseEyes.test.environment) === null || _b2 === void 0 ? void 0 : _b2.environmentId}" was aborted during one of the previous steps`);
83037
- throw new abort_error_1.AbortError(`Render on environment with id "${(_c2 = baseEyes.test.environment) === null || _c2 === void 0 ? void 0 : _c2.environmentId}" was aborted during one of the previous steps`);
83033
+ environmentLogger.warn(`Render on environment with id "${(_a2 = baseEyes.test.environment) === null || _a2 === void 0 ? void 0 : _a2.environmentId}" was aborted during one of the previous steps`);
83034
+ throw new abort_error_1.AbortError(`Render on environment with id "${(_b2 = baseEyes.test.environment) === null || _b2 === void 0 ? void 0 : _b2.environmentId}" was aborted during one of the previous steps`);
83038
83035
  }
83039
83036
  const renderTarget = await renderTargetPromise;
83040
83037
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
83041
83038
  environmentLogger.warn('Command "check" was aborted before rendering');
83042
83039
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
83043
83040
  } else if (!baseEyes.running) {
83044
- environmentLogger.warn(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
83045
- throw new abort_error_1.AbortError(`Render on environment with id "${(_e = baseEyes.test.environment) === null || _e === void 0 ? void 0 : _e.environmentId}" was aborted during one of the previous steps`);
83041
+ environmentLogger.warn(`Render on environment with id "${(_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId}" was aborted during one of the previous steps`);
83042
+ throw new abort_error_1.AbortError(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
83046
83043
  }
83047
83044
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
83048
83045
  target: renderTarget,
83049
83046
  settings: {
83050
83047
  ...settings,
83051
- region,
83052
- scrollRootElement: scrollRootSelector,
83053
- selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
83048
+ region: (_e = selectors.target) !== null && _e !== void 0 ? _e : settings.region,
83049
+ scrollRootElement: selectors.scrolling,
83050
+ selectorsToCalculate: selectors.calculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
83054
83051
  includeFullPageSize: !!settings.pageId,
83055
83052
  environment: ufgEnvironment,
83056
83053
  environmentId: baseEyes.test.environment.environmentId,
@@ -83062,7 +83059,7 @@ var require_check_and_close3 = __commonJS({
83062
83059
  });
83063
83060
  let offset = 0;
83064
83061
  const baseSettings = getBaseCheckSettings({
83065
- calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
83062
+ calculatedRegions: selectors.calculate.map(({ originalSelector, safeSelector }) => ({
83066
83063
  selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : void 0,
83067
83064
  regions: safeSelector ? selectorRegions[offset++] : []
83068
83065
  }))
@@ -84281,7 +84278,7 @@ var require_package2 = __commonJS({
84281
84278
  "../core/package.json"(exports, module) {
84282
84279
  module.exports = {
84283
84280
  name: "@applitools/core",
84284
- version: "4.3.0",
84281
+ version: "4.4.0",
84285
84282
  homepage: "https://applitools.com",
84286
84283
  bugs: {
84287
84284
  url: "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -84340,6 +84337,12 @@ var require_package2 = __commonJS({
84340
84337
  },
84341
84338
  sea: {
84342
84339
  bin: "eyes",
84340
+ certs: {
84341
+ win: {
84342
+ cert: "env.CODE_SIGNING_CERT_WIN",
84343
+ pass: "env.CODE_SIGNING_PASS_WIN"
84344
+ }
84345
+ },
84343
84346
  targets: {
84344
84347
  "node20-linux-x64-glibc-217": "./bin/core-linux",
84345
84348
  "node20-linux-x64-musl": "./bin/core-alpine",
@@ -84605,6 +84608,68 @@ var require_validate_sdk_version = __commonJS({
84605
84608
  }
84606
84609
  });
84607
84610
 
84611
+ // ../core/dist/utils/memory-usage-logging.js
84612
+ var require_memory_usage_logging = __commonJS({
84613
+ "../core/dist/utils/memory-usage-logging.js"(exports) {
84614
+ "use strict";
84615
+ init_process();
84616
+ init_setImmediate();
84617
+ init_buffer();
84618
+ var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
84619
+ if (k2 === void 0)
84620
+ k2 = k;
84621
+ var desc = Object.getOwnPropertyDescriptor(m, k);
84622
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
84623
+ desc = { enumerable: true, get: function() {
84624
+ return m[k];
84625
+ } };
84626
+ }
84627
+ Object.defineProperty(o, k2, desc);
84628
+ } : function(o, m, k, k2) {
84629
+ if (k2 === void 0)
84630
+ k2 = k;
84631
+ o[k2] = m[k];
84632
+ });
84633
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
84634
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
84635
+ } : function(o, v) {
84636
+ o["default"] = v;
84637
+ });
84638
+ var __importStar = exports && exports.__importStar || function(mod) {
84639
+ if (mod && mod.__esModule)
84640
+ return mod;
84641
+ var result = {};
84642
+ if (mod != null) {
84643
+ for (var k in mod)
84644
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
84645
+ __createBinding(result, mod, k);
84646
+ }
84647
+ __setModuleDefault(result, mod);
84648
+ return result;
84649
+ };
84650
+ Object.defineProperty(exports, "__esModule", { value: true });
84651
+ exports.startMemoryUsageLogging = void 0;
84652
+ var utils34 = __importStar(require_browser3());
84653
+ function startMemoryUsageLogging({ timeout = 3e4, logger }) {
84654
+ var _a;
84655
+ logger = logger.extend({ tags: [`mem-usage-${utils34.general.shortid()}`] });
84656
+ const interval = setInterval(() => logger.log(formatMemoryUsage(process.memoryUsage())), (_a = utils34.general.getEnvValue("MEMORY_LOG_TIMEOUT", "number")) !== null && _a !== void 0 ? _a : timeout);
84657
+ interval.unref();
84658
+ return { stop: stop2 };
84659
+ function stop2() {
84660
+ clearInterval(interval);
84661
+ }
84662
+ }
84663
+ exports.startMemoryUsageLogging = startMemoryUsageLogging;
84664
+ function formatMemoryUsage(usage) {
84665
+ return `Memory usage: ${Object.entries(usage).map(([key, value]) => `${key}: ${toMB(value)}MB`).join(", ")}`;
84666
+ }
84667
+ function toMB(size) {
84668
+ return Math.round(size / 1024 / 1024 * 100) / 100;
84669
+ }
84670
+ }
84671
+ });
84672
+
84608
84673
  // ../core/dist/core.js
84609
84674
  var require_core4 = __commonJS({
84610
84675
  "../core/dist/core.js"(exports) {
@@ -84662,9 +84727,11 @@ var require_core4 = __commonJS({
84662
84727
  var delete_test_1 = require_delete_test2();
84663
84728
  var extract_test_environment_1 = require_extract_test_environment();
84664
84729
  var validate_sdk_version_1 = require_validate_sdk_version();
84730
+ var memory_usage_logging_1 = require_memory_usage_logging();
84665
84731
  var utils34 = __importStar(require_browser3());
84666
84732
  function makeCore({ spec, clients, concurrency, base: defaultBase, environment: defaultEnvironment, agentId = "core", cwd = process.cwd(), logger: defaultLogger, asyncCache } = {}) {
84667
84733
  const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: "core" } });
84734
+ (0, memory_usage_logging_1.startMemoryUsageLogging)({ logger });
84668
84735
  const environment = (0, extract_test_environment_1.extractTestEnvironment)(defaultEnvironment);
84669
84736
  logger.log(`Core is initialized ${defaultBase ? "with" : "without"} custom base core and environment`, environment);
84670
84737
  if (environment.sdk)
@@ -87926,7 +87993,7 @@ var require_package3 = __commonJS({
87926
87993
  "../eyes/package.json"(exports, module) {
87927
87994
  module.exports = {
87928
87995
  name: "@applitools/eyes",
87929
- version: "1.13.0",
87996
+ version: "1.13.1",
87930
87997
  keywords: [
87931
87998
  "applitools",
87932
87999
  "eyes",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/eyes-browser",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "keywords": [
5
5
  "applitools",
6
6
  "browser",
@@ -48,7 +48,7 @@
48
48
  "test": "run --top-level mocha './test/**/*.spec.ts'"
49
49
  },
50
50
  "dependencies": {
51
- "@applitools/eyes": "1.13.0"
51
+ "@applitools/eyes": "1.13.1"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/node": "^12.20.55",