@applitools/core 3.10.2 → 3.10.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.10.3](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.10.2...js/core@3.10.3) (2023-09-11)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * suppport coded regions with layoutBreakpoints reload ([7903347](https://github.com/applitools/eyes.sdk.javascript1/commit/79033472b9475992a44cf3828ff334c958ae2066))
9
+
3
10
  ## [3.10.2](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.10.1...js/core@3.10.2) (2023-09-05)
4
11
 
5
12
 
@@ -31,7 +31,6 @@ const driver_1 = require("@applitools/driver");
31
31
  const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
32
  const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
33
33
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
34
- const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
35
34
  const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
36
35
  const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
37
36
  const abort_error_1 = require("../errors/abort-error");
@@ -39,7 +38,7 @@ const utils = __importStar(require("@applitools/utils"));
39
38
  const chalk_1 = __importDefault(require("chalk"));
40
39
  function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
41
40
  return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
42
- var _a, _b, _c, _d, _e, _f, _g, _h;
41
+ var _a, _b, _c;
43
42
  logger = logger.extend(mainLogger);
44
43
  logger.log('Command "checkAndClose" is called with settings', settings);
45
44
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
@@ -58,53 +57,20 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
58
57
  },
59
58
  logger,
60
59
  });
61
- let snapshots;
60
+ let snapshotResults;
62
61
  let snapshotUrl;
63
62
  let snapshotTitle;
64
63
  let userAgent;
65
- let regionToTarget;
66
- let scrollRootSelector;
67
- let selectorsToCalculate;
68
64
  const driver = spec && (0, driver_1.isDriver)(target, spec)
69
65
  ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
70
66
  : null;
71
67
  if (driver) {
72
68
  const environment = await driver.getEnvironment();
73
- let cleanupGeneratedSelectors;
74
- if (environment.isWeb) {
75
- userAgent = await driver.getUserAgentLegacy();
76
- const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
77
- context: driver.currentContext,
78
- elementReferences: [
79
- ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
80
- ...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
81
- ...elementReferencesToCalculate,
82
- ],
83
- });
84
- cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
85
- selectorsToCalculate = generated.selectors;
86
- if (elementReferenceToTarget) {
87
- if (!((_b = selectorsToCalculate[0]) === null || _b === void 0 ? void 0 : _b.safeSelector))
88
- throw new Error('Target element not found');
89
- regionToTarget = selectorsToCalculate[0].safeSelector;
90
- selectorsToCalculate = selectorsToCalculate.slice(1);
91
- }
92
- if (settings.scrollRootElement) {
93
- scrollRootSelector = (_c = selectorsToCalculate[0].safeSelector) !== null && _c !== void 0 ? _c : undefined;
94
- selectorsToCalculate = selectorsToCalculate.slice(1);
95
- }
96
- }
97
- else {
98
- regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
99
- ? (_e = (_d = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _d === void 0 ? void 0 : _d.call(spec, settings.scrollRootElement)) !== null && _e !== void 0 ? _e : undefined
100
- : undefined;
101
- scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
102
- ? (_g = (_f = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _f === void 0 ? void 0 : _f.call(spec, settings.scrollRootElement)) !== null && _g !== void 0 ? _g : undefined
103
- : undefined;
104
- }
105
69
  const currentContext = driver.currentContext;
70
+ await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
106
71
  if (environment.isWeb) {
107
- snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
72
+ userAgent = await driver.getUserAgentLegacy();
73
+ snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
108
74
  driver,
109
75
  settings: {
110
76
  ...eyes.test.eyesServer,
@@ -113,6 +79,11 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
113
79
  layoutBreakpoints: settings.layoutBreakpoints,
114
80
  renderers: uniqueRenderers,
115
81
  skipResources: ufgClient.getCachedResourceUrls(),
82
+ calculateRegionsOptions: {
83
+ elementReferencesToCalculate,
84
+ elementReferenceToTarget,
85
+ scrollRootElement: settings.scrollRootElement,
86
+ },
116
87
  },
117
88
  hooks: {
118
89
  async beforeSnapshots() {
@@ -138,7 +109,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
138
109
  settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
139
110
  logger,
140
111
  });
141
- snapshots = (await nmlClient.takeSnapshots({
112
+ const snapshots = (await nmlClient.takeSnapshots({
142
113
  settings: {
143
114
  ...eyes.test.eyesServer,
144
115
  waitBeforeCapture: settings.waitBeforeCapture,
@@ -146,22 +117,29 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
146
117
  },
147
118
  logger,
148
119
  }));
120
+ snapshotResults = snapshots.map(snapshot => {
121
+ var _a, _b, _c, _d;
122
+ return ({
123
+ snapshot,
124
+ regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
125
+ ? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
126
+ : undefined,
127
+ scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
128
+ ? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
129
+ : undefined,
130
+ });
131
+ });
149
132
  }
150
133
  await currentContext.focus();
151
134
  snapshotUrl = await driver.getUrl();
152
135
  snapshotTitle = await driver.getTitle();
153
- await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
154
136
  }
155
137
  else {
156
- snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
157
- snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
138
+ snapshotResults = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
139
+ snapshotUrl = utils.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, 'url') ? snapshotResults[0].snapshot.url : undefined;
158
140
  }
159
- regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_h = elementReferenceToTarget) !== null && _h !== void 0 ? _h : settings.region);
160
- selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
161
- originalSelector: selector,
162
- safeSelector: selector,
163
- })));
164
141
  const promises = uniqueRenderers.map(async (renderer, index) => {
142
+ var _a;
165
143
  const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
166
144
  const ufgRenderer = renderer;
167
145
  if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
@@ -173,7 +151,13 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
173
151
  rendererLogger.warn('Command "check" was aborted before rendering');
174
152
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
175
153
  }
176
- const { cookies, ...snapshot } = snapshots[index];
154
+ const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector, } = snapshotResults[index];
155
+ const { cookies, ...snapshot } = snapshotFromResult;
156
+ const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
157
+ const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
158
+ originalSelector: selector,
159
+ safeSelector: selector,
160
+ }));
177
161
  if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
178
162
  ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
179
163
  }
@@ -215,7 +199,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, renderers: defaultRend
215
199
  target: renderTarget,
216
200
  settings: {
217
201
  ...settings,
218
- region: regionToTarget,
202
+ region,
219
203
  scrollRootElement: scrollRootSelector,
220
204
  selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
221
205
  includeFullPageSize: !!settings.pageId,
package/dist/ufg/check.js CHANGED
@@ -31,7 +31,6 @@ const driver_1 = require("@applitools/driver");
31
31
  const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
32
  const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
33
33
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
34
- const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
35
34
  const uniquify_renderers_1 = require("../automation/utils/uniquify-renderers");
36
35
  const extract_renderer_key_1 = require("../automation/utils/extract-renderer-key");
37
36
  const abort_error_1 = require("../errors/abort-error");
@@ -39,7 +38,7 @@ const utils = __importStar(require("@applitools/utils"));
39
38
  const chalk_1 = __importDefault(require("chalk"));
40
39
  function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers = [], spec, signal, logger: mainLogger, }) {
41
40
  return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
42
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
41
+ var _a, _b, _c;
43
42
  logger = logger.extend(mainLogger);
44
43
  logger.log('Command "check" is called with settings', settings);
45
44
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
@@ -58,54 +57,20 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
58
57
  },
59
58
  logger,
60
59
  });
61
- let snapshots;
60
+ let snapshotResults;
62
61
  let snapshotUrl;
63
62
  let snapshotTitle;
64
63
  let userAgent;
65
- let regionToTarget;
66
- let scrollRootSelector;
67
- let selectorsToCalculate;
68
64
  const driver = spec && (0, driver_1.isDriver)(target, spec)
69
65
  ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
70
66
  : null;
71
67
  if (driver) {
72
68
  const environment = await driver.getEnvironment();
73
- await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
74
- let cleanupGeneratedSelectors;
75
- if (environment.isWeb) {
76
- userAgent = await driver.getUserAgentLegacy();
77
- const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
78
- context: driver.currentContext,
79
- elementReferences: [
80
- ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
81
- ...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
82
- ...elementReferencesToCalculate,
83
- ],
84
- });
85
- cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
86
- selectorsToCalculate = generated.selectors;
87
- if (elementReferenceToTarget) {
88
- if (!((_c = selectorsToCalculate[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
89
- throw new Error('Target element not found');
90
- regionToTarget = selectorsToCalculate[0].safeSelector;
91
- selectorsToCalculate = selectorsToCalculate.slice(1);
92
- }
93
- if (settings.scrollRootElement) {
94
- scrollRootSelector = (_d = selectorsToCalculate[0].safeSelector) !== null && _d !== void 0 ? _d : undefined;
95
- selectorsToCalculate = selectorsToCalculate.slice(1);
96
- }
97
- }
98
- else {
99
- regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
100
- ? (_f = (_e = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _e === void 0 ? void 0 : _e.call(spec, settings.scrollRootElement)) !== null && _f !== void 0 ? _f : undefined
101
- : undefined;
102
- scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
103
- ? (_h = (_g = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _g === void 0 ? void 0 : _g.call(spec, settings.scrollRootElement)) !== null && _h !== void 0 ? _h : undefined
104
- : undefined;
105
- }
106
69
  const currentContext = driver.currentContext;
70
+ await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
107
71
  if (environment.isWeb) {
108
- snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
72
+ userAgent = await driver.getUserAgentLegacy();
73
+ snapshotResults = await (0, take_dom_snapshots_1.takeDomSnapshots)({
109
74
  driver,
110
75
  settings: {
111
76
  ...eyes.test.eyesServer,
@@ -114,6 +79,11 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
114
79
  layoutBreakpoints: settings.layoutBreakpoints,
115
80
  renderers: uniqueRenderers,
116
81
  skipResources: ufgClient.getCachedResourceUrls(),
82
+ calculateRegionsOptions: {
83
+ elementReferencesToCalculate,
84
+ elementReferenceToTarget,
85
+ scrollRootElement: settings.scrollRootElement,
86
+ },
117
87
  },
118
88
  hooks: {
119
89
  async beforeSnapshots() {
@@ -139,7 +109,7 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
139
109
  settings: { ...eyes.test.eyesServer, renderEnvironmentsUrl: eyes.test.renderEnvironmentsUrl },
140
110
  logger,
141
111
  });
142
- snapshots = (await nmlClient.takeSnapshots({
112
+ const snapshots = (await nmlClient.takeSnapshots({
143
113
  settings: {
144
114
  ...eyes.test.eyesServer,
145
115
  waitBeforeCapture: settings.waitBeforeCapture,
@@ -147,22 +117,29 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
147
117
  },
148
118
  logger,
149
119
  }));
120
+ snapshotResults = snapshots.map(snapshot => {
121
+ var _a, _b, _c, _d;
122
+ return ({
123
+ snapshot,
124
+ regionToTarget: (0, driver_1.isSelector)(elementReferenceToTarget)
125
+ ? (_b = (_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, settings.scrollRootElement)) !== null && _b !== void 0 ? _b : undefined
126
+ : undefined,
127
+ scrollRootSelector: (0, driver_1.isSelector)(settings.scrollRootElement)
128
+ ? (_d = (_c = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _c === void 0 ? void 0 : _c.call(spec, settings.scrollRootElement)) !== null && _d !== void 0 ? _d : undefined
129
+ : undefined,
130
+ });
131
+ });
150
132
  }
151
133
  await currentContext.focus();
152
134
  snapshotUrl = await driver.getUrl();
153
135
  snapshotTitle = await driver.getTitle();
154
- await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
155
136
  }
156
137
  else {
157
- snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
158
- snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
138
+ snapshotResults = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
139
+ snapshotUrl = utils.types.has((_c = snapshotResults[0]) === null || _c === void 0 ? void 0 : _c.snapshot, 'url') ? snapshotResults[0].snapshot.url : undefined;
159
140
  }
160
- regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_j = elementReferenceToTarget) !== null && _j !== void 0 ? _j : settings.region);
161
- selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
162
- originalSelector: selector,
163
- safeSelector: selector,
164
- })));
165
141
  const promises = uniqueRenderers.map(async (renderer, index) => {
142
+ var _a;
166
143
  const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
167
144
  const ufgRenderer = renderer;
168
145
  if (utils.types.has(ufgRenderer, 'name') && ufgRenderer.name === 'edge') {
@@ -174,7 +151,13 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
174
151
  rendererLogger.warn('Command "check" was aborted before rendering');
175
152
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
176
153
  }
177
- const { cookies, ...snapshot } = snapshots[index];
154
+ const { snapshot: snapshotFromResult, selectorsToCalculate: selectorsToCalculateFromSnapshot, regionToTarget, scrollRootSelector, } = snapshotResults[index];
155
+ const { cookies, ...snapshot } = snapshotFromResult;
156
+ const region = (_a = regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : elementReferenceToTarget) !== null && _a !== void 0 ? _a : settings.region;
157
+ const selectorsToCalculate = selectorsToCalculateFromSnapshot !== null && selectorsToCalculateFromSnapshot !== void 0 ? selectorsToCalculateFromSnapshot : elementReferencesToCalculate.map(selector => ({
158
+ originalSelector: selector,
159
+ safeSelector: selector,
160
+ }));
178
161
  if (utils.types.has(ufgRenderer, 'iosDeviceInfo') || utils.types.has(ufgRenderer, 'androidDeviceInfo')) {
179
162
  ufgRenderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
180
163
  }
@@ -216,7 +199,7 @@ function makeCheck({ eyes, target: defaultTarget, renderers: defaultRenderers =
216
199
  target: renderTarget,
217
200
  settings: {
218
201
  ...settings,
219
- region: regionToTarget,
202
+ region,
220
203
  scrollRootElement: scrollRootSelector,
221
204
  selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
222
205
  includeFullPageSize: Boolean(settings.pageId),
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateRegions = void 0;
4
+ const generate_safe_selectors_1 = require("../utils/generate-safe-selectors");
5
+ async function calculateRegions({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }) {
6
+ var _a, _b;
7
+ const elementReferences = [
8
+ ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
9
+ ...(scrollRootElement ? [scrollRootElement] : []),
10
+ ...elementReferencesToCalculate,
11
+ ];
12
+ const { cleanupGeneratedSelectors, selectors } = await (0, generate_safe_selectors_1.generateSafeSelectors)({
13
+ context: driver.currentContext,
14
+ elementReferences,
15
+ });
16
+ let selectorsToCalculate = selectors;
17
+ let regionToTarget;
18
+ let scrollRootSelector;
19
+ if (elementReferenceToTarget) {
20
+ if (!((_a = selectorsToCalculate[0]) === null || _a === void 0 ? void 0 : _a.safeSelector))
21
+ throw new Error('Target element not found');
22
+ regionToTarget = selectorsToCalculate[0].safeSelector;
23
+ selectorsToCalculate = selectorsToCalculate.slice(1);
24
+ }
25
+ if (scrollRootElement) {
26
+ scrollRootSelector = (_b = selectorsToCalculate[0].safeSelector) !== null && _b !== void 0 ? _b : undefined;
27
+ selectorsToCalculate = selectorsToCalculate.slice(1);
28
+ }
29
+ return { cleanupGeneratedSelectors, selectorsToCalculate, regionToTarget, scrollRootSelector };
30
+ }
31
+ exports.calculateRegions = calculateRegions;
@@ -33,10 +33,12 @@ exports.takeDomSnapshots = void 0;
33
33
  const take_dom_snapshot_1 = require("./take-dom-snapshot");
34
34
  const utils = __importStar(require("@applitools/utils"));
35
35
  const chalk_1 = __importDefault(require("chalk"));
36
+ const calculate_regions_1 = require("./calculate-regions");
36
37
  __exportStar(require("./take-dom-snapshot"), exports);
37
38
  async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
38
- var _a, _b, _c, _d, _e;
39
+ var _a, _b, _c, _d, _e, _f, _g, _h;
39
40
  const currentContext = driver.currentContext;
41
+ let calculateRegionsResults = {};
40
42
  const waitBeforeCapture = async () => {
41
43
  if (utils.types.isFunction(settings.waitBeforeCapture)) {
42
44
  await settings.waitBeforeCapture();
@@ -46,14 +48,21 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
46
48
  }
47
49
  };
48
50
  await ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.beforeSnapshots) === null || _a === void 0 ? void 0 : _a.call(hooks));
51
+ if (!((_b = settings.layoutBreakpoints) === null || _b === void 0 ? void 0 : _b.reload) && settings.calculateRegionsOptions) {
52
+ calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
53
+ ...settings.calculateRegionsOptions,
54
+ driver,
55
+ });
56
+ }
49
57
  if (!settings.layoutBreakpoints) {
50
58
  logger.log(`taking single dom snapshot`);
51
- await ((_b = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _b === void 0 ? void 0 : _b.call(hooks));
59
+ await ((_c = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _c === void 0 ? void 0 : _c.call(hooks));
52
60
  await waitBeforeCapture();
53
61
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
54
- return Array(settings.renderers.length).fill(snapshot);
62
+ await ((_d = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _d === void 0 ? void 0 : _d.call(calculateRegionsResults));
63
+ return Array(settings.renderers.length).fill({ snapshot, ...calculateRegionsResults });
55
64
  }
56
- const isStrictBreakpoints = utils.types.isArray((_c = settings.layoutBreakpoints) === null || _c === void 0 ? void 0 : _c.breakpoints);
65
+ const isStrictBreakpoints = utils.types.isArray((_e = settings.layoutBreakpoints) === null || _e === void 0 ? void 0 : _e.breakpoints);
57
66
  const requiredWidths = await settings.renderers.reduce(async (prev, renderer, index) => {
58
67
  const { name, width } = (await extractRendererInfo({ renderer }));
59
68
  const requiredWidths = await prev;
@@ -78,13 +87,15 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
78
87
  logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints.breakpoints);
79
88
  logger.log(`required widths: ${[...requiredWidths.keys()].join(', ')}`);
80
89
  const viewportSize = await driver.getViewportSize();
81
- const snapshots = Array(settings.renderers.length);
90
+ const snapshotsResults = Array(settings.renderers.length);
82
91
  if (requiredWidths.has(viewportSize.width)) {
83
92
  logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
84
- await ((_d = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _d === void 0 ? void 0 : _d.call(hooks));
93
+ await ((_f = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _f === void 0 ? void 0 : _f.call(hooks));
85
94
  await waitBeforeCapture();
86
95
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
87
- requiredWidths.get(viewportSize.width).forEach(({ index }) => (snapshots[index] = snapshot));
96
+ requiredWidths.get(viewportSize.width).forEach(({ index }) => {
97
+ snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
98
+ });
88
99
  }
89
100
  for (const [requiredWidth, browsersInfo] of requiredWidths.entries()) {
90
101
  logger.log(`taking dom snapshot for width ${requiredWidth}`);
@@ -93,6 +104,12 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
93
104
  if (settings.layoutBreakpoints.reload) {
94
105
  await driver.reloadPage();
95
106
  await waitBeforeCapture();
107
+ if (settings.calculateRegionsOptions) {
108
+ calculateRegionsResults = await (0, calculate_regions_1.calculateRegions)({
109
+ ...settings.calculateRegionsOptions,
110
+ driver,
111
+ });
112
+ }
96
113
  }
97
114
  }
98
115
  catch (err) {
@@ -111,17 +128,22 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
111
128
  logger.log(message);
112
129
  }
113
130
  }
114
- await ((_e = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _e === void 0 ? void 0 : _e.call(hooks));
131
+ await ((_g = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _g === void 0 ? void 0 : _g.call(hooks));
115
132
  await waitBeforeCapture();
116
133
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
117
- browsersInfo.forEach(({ index }) => (snapshots[index] = snapshot));
134
+ browsersInfo.forEach(({ index }) => {
135
+ snapshotsResults[index] = { snapshot, ...calculateRegionsResults };
136
+ });
118
137
  }
119
138
  await driver.setViewportSize(viewportSize);
120
139
  if (settings.layoutBreakpoints.reload) {
121
140
  await driver.reloadPage();
122
141
  await waitBeforeCapture();
123
142
  }
124
- return snapshots;
143
+ else {
144
+ (_h = calculateRegionsResults === null || calculateRegionsResults === void 0 ? void 0 : calculateRegionsResults.cleanupGeneratedSelectors) === null || _h === void 0 ? void 0 : _h.call(calculateRegionsResults);
145
+ }
146
+ return snapshotsResults;
125
147
  function calculateBreakpoint({ breakpoints, value }) {
126
148
  const nextBreakpointIndex = breakpoints
127
149
  .sort((item1, item2) => (item1 > item2 ? 1 : -1))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "3.10.2",
3
+ "version": "3.10.3",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -1,12 +1,21 @@
1
- import type { MaybeArray } from '@applitools/utils';
1
+ import type { MaybeArray, Region } from '@applitools/utils';
2
2
  import type * as AutomationCore from '../automation/types';
3
- import { type SpecType } from '@applitools/driver';
3
+ import { type Selector, type SpecType } from '@applitools/driver';
4
4
  import { type Logger } from '@applitools/logger';
5
5
  import { type Proxy } from '@applitools/req';
6
6
  import { type UFGClient, type UFGClientSettings, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
7
7
  export * from '../automation/types';
8
- export type SnapshotTarget = MaybeArray<DomSnapshot> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
8
+ export type SnapshotTarget = MaybeArray<SnapshotResult<DomSnapshot>> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
9
9
  export type Target<TSpec extends SpecType> = SnapshotTarget | AutomationCore.Target<TSpec>;
10
+ export type SnapshotResult<TSnapshotType extends DomSnapshot | AndroidSnapshot | IOSSnapshot> = {
11
+ snapshot: TSnapshotType;
12
+ selectorsToCalculate?: {
13
+ originalSelector: Selector | null;
14
+ safeSelector: Selector | null;
15
+ }[];
16
+ regionToTarget?: Selector | Region;
17
+ scrollRootSelector?: Selector;
18
+ };
10
19
  export interface Core<TSpec extends SpecType> extends AutomationCore.Core<TSpec> {
11
20
  readonly type: 'ufg';
12
21
  getUFGClient(options?: {
@@ -0,0 +1,22 @@
1
+ import type { SpecType, Driver, ElementReference } from '@applitools/driver';
2
+ export type CalculateRegionsOptions = {
3
+ elementReferencesToCalculate: ElementReference<SpecType>[];
4
+ elementReferenceToTarget?: ElementReference<SpecType>;
5
+ scrollRootElement?: ElementReference<SpecType>;
6
+ };
7
+ export declare function calculateRegions<TSpec extends SpecType>({ driver, elementReferencesToCalculate, elementReferenceToTarget, scrollRootElement, }: {
8
+ driver: Driver<TSpec>;
9
+ } & CalculateRegionsOptions): Promise<{
10
+ cleanupGeneratedSelectors: () => Promise<void>;
11
+ selectorsToCalculate: ({
12
+ safeSelector: null;
13
+ originalSelector: null;
14
+ elementReference: ElementReference<TSpec>;
15
+ } | {
16
+ safeSelector: import("@applitools/driver").CommonSelector;
17
+ originalSelector: import("@applitools/driver").CommonSelector | null;
18
+ elementReference: ElementReference<TSpec>;
19
+ })[];
20
+ regionToTarget: import("@applitools/driver").CommonSelector | undefined;
21
+ scrollRootSelector: import("@applitools/driver").CommonSelector | undefined;
22
+ }>;
@@ -1,8 +1,10 @@
1
- import type { Size } from '@applitools/utils';
1
+ import { type Size } from '@applitools/utils';
2
2
  import { type Logger } from '@applitools/logger';
3
3
  import { type SpecType, type Driver } from '@applitools/driver';
4
4
  import { type DomSnapshot, type Renderer } from '@applitools/ufg-client';
5
5
  import { type DomSnapshotSettings } from './take-dom-snapshot';
6
+ import { type CalculateRegionsOptions } from './calculate-regions';
7
+ import { SnapshotResult } from '../types';
6
8
  export * from './take-dom-snapshot';
7
9
  export type DomSnapshotsSettings = DomSnapshotSettings & {
8
10
  renderers: Renderer[];
@@ -11,6 +13,7 @@ export type DomSnapshotsSettings = DomSnapshotSettings & {
11
13
  breakpoints: number[] | boolean;
12
14
  reload?: boolean;
13
15
  };
16
+ calculateRegionsOptions?: CalculateRegionsOptions;
14
17
  };
15
18
  export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, settings, hooks, provides, logger, }: {
16
19
  driver: Driver<TSpec>;
@@ -24,4 +27,4 @@ export declare function takeDomSnapshots<TSpec extends SpecType>({ driver, setti
24
27
  getIOSDevices(): Promise<Record<string, Record<string, Size>>>;
25
28
  };
26
29
  logger: Logger;
27
- }): Promise<DomSnapshot[]>;
30
+ }): Promise<SnapshotResult<DomSnapshot>[]>;