@applitools/core 2.3.11 → 2.3.12

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
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.3.12 - 2023/3/7
6
+
7
+ ### Features
8
+ - Update broker url using last response instead of using driver
9
+ ### Bug fixes
10
+ - Replaced broker url cache with nml element cache
11
+
5
12
  ## 2.3.11 - 2023/3/6
6
13
 
7
14
  ### Features
@@ -28,7 +28,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheckAndClose = void 0;
30
30
  const driver_1 = require("@applitools/driver");
31
- const take_snapshots_1 = require("./utils/take-snapshots");
31
+ const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
+ const take_vhses_1 = require("./utils/take-vhses");
32
33
  const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
33
34
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
34
35
  const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
@@ -36,14 +37,15 @@ const uniquify_renderers_1 = require("./utils/uniquify-renderers");
36
37
  const abort_error_1 = require("../errors/abort-error");
37
38
  const utils = __importStar(require("@applitools/utils"));
38
39
  const chalk_1 = __importDefault(require("chalk"));
39
- function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget, logger: defaultLogger, }) {
40
+ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
40
41
  return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
41
- var _a, _b, _c;
42
+ var _a, _b, _c, _d, _e, _f, _g, _h;
42
43
  logger.log('Command "checkAndClose" is called with settings', settings);
43
44
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
44
45
  logger.warn('Command "checkAndClose" was called after test was already aborted');
45
46
  throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
46
47
  }
48
+ const ufgClient = await eyes.getUFGClient({ logger });
47
49
  const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
48
50
  settings,
49
51
  });
@@ -52,6 +54,7 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
52
54
  let snapshotTitle;
53
55
  let userAgent;
54
56
  let regionToTarget;
57
+ let scrollRootSelector;
55
58
  let selectorsToCalculate;
56
59
  const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
57
60
  if ((0, driver_1.isDriver)(target, spec)) {
@@ -72,30 +75,40 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
72
75
  context: driver.currentContext,
73
76
  elementReferences: [
74
77
  ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
78
+ ...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
75
79
  ...elementReferencesToCalculate,
76
80
  ],
77
81
  });
78
82
  cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
83
+ selectorsToCalculate = generated.selectors;
79
84
  if (elementReferenceToTarget) {
80
- if (!((_b = generated.selectors[0]) === null || _b === void 0 ? void 0 : _b.safeSelector))
85
+ if (!((_b = selectorsToCalculate[0]) === null || _b === void 0 ? void 0 : _b.safeSelector))
81
86
  throw new Error('Target element not found');
82
- regionToTarget = generated.selectors[0].safeSelector;
83
- selectorsToCalculate = generated.selectors.slice(1);
87
+ regionToTarget = selectorsToCalculate[0].safeSelector;
88
+ selectorsToCalculate = selectorsToCalculate.slice(1);
84
89
  }
85
- else {
86
- selectorsToCalculate = generated.selectors;
90
+ if (settings.scrollRootElement) {
91
+ scrollRootSelector = (_c = selectorsToCalculate[0].safeSelector) !== null && _c !== void 0 ? _c : undefined;
92
+ selectorsToCalculate = selectorsToCalculate.slice(1);
87
93
  }
88
94
  }
95
+ else {
96
+ regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
97
+ ? (_e = (_d = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _d === void 0 ? void 0 : _d.call(spec, settings.scrollRootElement)) !== null && _e !== void 0 ? _e : undefined
98
+ : undefined;
99
+ scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
100
+ ? (_g = (_f = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _f === void 0 ? void 0 : _f.call(spec, settings.scrollRootElement)) !== null && _g !== void 0 ? _g : undefined
101
+ : undefined;
102
+ }
89
103
  const currentContext = driver.currentContext;
90
- snapshots = await (0, take_snapshots_1.takeSnapshots)({
91
- driver,
104
+ const snapshotOptions = {
92
105
  settings: {
93
106
  ...eyes.test.server,
94
107
  waitBeforeCapture: settings.waitBeforeCapture,
95
108
  disableBrowserFetching: settings.disableBrowserFetching,
96
109
  layoutBreakpoints: settings.layoutBreakpoints,
97
110
  renderers: uniqueRenderers,
98
- skipResources: client.getCachedResourceUrls(),
111
+ skipResources: ufgClient.getCachedResourceUrls(),
99
112
  },
100
113
  hooks: {
101
114
  async beforeSnapshots() {
@@ -109,11 +122,22 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
109
122
  },
110
123
  },
111
124
  provides: {
112
- getChromeEmulationDevices: client.getChromeEmulationDevices,
113
- getIOSDevices: client.getIOSDevices,
125
+ getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
126
+ getIOSDevices: ufgClient.getIOSDevices,
114
127
  },
115
- logger,
116
- });
128
+ };
129
+ if (driver.isWeb) {
130
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, ...snapshotOptions, logger });
131
+ }
132
+ else {
133
+ const nmlClient = await eyes.getNMLClient({ driver, logger });
134
+ if (nmlClient) {
135
+ snapshots = (await nmlClient.takeSnapshots({ ...snapshotOptions, logger }));
136
+ }
137
+ else {
138
+ snapshots = await (0, take_vhses_1.takeVHSes)({ driver, ...snapshotOptions, logger });
139
+ }
140
+ }
117
141
  await currentContext.focus();
118
142
  snapshotUrl = await driver.getUrl();
119
143
  snapshotTitle = await driver.getTitle();
@@ -123,7 +147,7 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
123
147
  snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
124
148
  snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
125
149
  }
126
- regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_c = elementReferenceToTarget) !== null && _c !== void 0 ? _c : settings.region);
150
+ regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_h = elementReferenceToTarget) !== null && _h !== void 0 ? _h : settings.region);
127
151
  selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
128
152
  originalSelector: selector,
129
153
  safeSelector: selector,
@@ -140,7 +164,7 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
140
164
  }
141
165
  const { cookies, ...snapshot } = snapshots[index];
142
166
  const snapshotType = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
143
- const renderTargetPromise = client.createRenderTarget({
167
+ const renderTargetPromise = ufgClient.createRenderTarget({
144
168
  snapshot,
145
169
  settings: {
146
170
  renderer,
@@ -170,11 +194,12 @@ function makeCheckAndClose({ spec, eyes, client, signal, target: defaultTarget,
170
194
  logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
171
195
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
172
196
  }
173
- const { renderId, selectorRegions, ...baseTarget } = await client.render({
197
+ const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
174
198
  target: renderTarget,
175
199
  settings: {
176
200
  ...settings,
177
201
  region: regionToTarget,
202
+ scrollRootElement: scrollRootSelector,
178
203
  selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
179
204
  includeFullPageSize: Boolean(settings.pageId),
180
205
  type: snapshotType,
package/dist/ufg/check.js CHANGED
@@ -28,7 +28,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheck = void 0;
30
30
  const driver_1 = require("@applitools/driver");
31
- const take_snapshots_1 = require("./utils/take-snapshots");
31
+ const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
+ const take_vhses_1 = require("./utils/take-vhses");
32
33
  const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
33
34
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
34
35
  const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
@@ -36,14 +37,15 @@ const uniquify_renderers_1 = require("./utils/uniquify-renderers");
36
37
  const abort_error_1 = require("../errors/abort-error");
37
38
  const utils = __importStar(require("@applitools/utils"));
38
39
  const chalk_1 = __importDefault(require("chalk"));
39
- function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
40
+ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
40
41
  return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
41
- var _a, _b, _c, _d, _e;
42
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
42
43
  logger.log('Command "check" is called with settings', settings);
43
44
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
44
45
  logger.warn('Command "check" was called after test was already aborted');
45
46
  throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
46
47
  }
48
+ const ufgClient = await eyes.getUFGClient({ logger });
47
49
  const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
48
50
  settings,
49
51
  });
@@ -52,6 +54,7 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
52
54
  let snapshotTitle;
53
55
  let userAgent;
54
56
  let regionToTarget;
57
+ let scrollRootSelector;
55
58
  let selectorsToCalculate;
56
59
  const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
57
60
  const driver = spec && (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
@@ -77,26 +80,35 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
77
80
  ],
78
81
  });
79
82
  cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
83
+ selectorsToCalculate = generated.selectors;
80
84
  if (elementReferenceToTarget) {
81
- if (!((_c = generated.selectors[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
85
+ if (!((_c = selectorsToCalculate[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
82
86
  throw new Error('Target element not found');
83
- regionToTarget = (_d = generated.selectors[0]) === null || _d === void 0 ? void 0 : _d.safeSelector;
84
- selectorsToCalculate = generated.selectors.slice(1);
87
+ regionToTarget = selectorsToCalculate[0].safeSelector;
88
+ selectorsToCalculate = selectorsToCalculate.slice(1);
85
89
  }
86
- else {
87
- selectorsToCalculate = generated.selectors;
90
+ if (settings.scrollRootElement) {
91
+ scrollRootSelector = (_d = selectorsToCalculate[0].safeSelector) !== null && _d !== void 0 ? _d : undefined;
92
+ selectorsToCalculate = selectorsToCalculate.slice(1);
88
93
  }
89
94
  }
95
+ else {
96
+ regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
97
+ ? (_f = (_e = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _e === void 0 ? void 0 : _e.call(spec, settings.scrollRootElement)) !== null && _f !== void 0 ? _f : undefined
98
+ : undefined;
99
+ scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
100
+ ? (_h = (_g = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _g === void 0 ? void 0 : _g.call(spec, settings.scrollRootElement)) !== null && _h !== void 0 ? _h : undefined
101
+ : undefined;
102
+ }
90
103
  const currentContext = driver.currentContext;
91
- snapshots = await (0, take_snapshots_1.takeSnapshots)({
92
- driver,
104
+ const snapshotOptions = {
93
105
  settings: {
94
106
  ...eyes.test.server,
95
107
  waitBeforeCapture: settings.waitBeforeCapture,
96
108
  disableBrowserFetching: settings.disableBrowserFetching,
97
109
  layoutBreakpoints: settings.layoutBreakpoints,
98
110
  renderers: uniqueRenderers,
99
- skipResources: client.getCachedResourceUrls(),
111
+ skipResources: ufgClient.getCachedResourceUrls(),
100
112
  },
101
113
  hooks: {
102
114
  async beforeSnapshots() {
@@ -110,11 +122,22 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
110
122
  },
111
123
  },
112
124
  provides: {
113
- getChromeEmulationDevices: client.getChromeEmulationDevices,
114
- getIOSDevices: client.getIOSDevices,
125
+ getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
126
+ getIOSDevices: ufgClient.getIOSDevices,
115
127
  },
116
- logger,
117
- });
128
+ };
129
+ if (driver.isWeb) {
130
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, ...snapshotOptions, logger });
131
+ }
132
+ else {
133
+ const nmlClient = await eyes.getNMLClient({ driver, logger });
134
+ if (nmlClient) {
135
+ snapshots = (await nmlClient.takeSnapshots({ ...snapshotOptions, logger }));
136
+ }
137
+ else {
138
+ snapshots = await (0, take_vhses_1.takeVHSes)({ driver, ...snapshotOptions, logger });
139
+ }
140
+ }
118
141
  await currentContext.focus();
119
142
  snapshotUrl = await driver.getUrl();
120
143
  snapshotTitle = await driver.getTitle();
@@ -124,7 +147,7 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
124
147
  snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
125
148
  snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
126
149
  }
127
- regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_e = elementReferenceToTarget) !== null && _e !== void 0 ? _e : settings.region);
150
+ regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_j = elementReferenceToTarget) !== null && _j !== void 0 ? _j : settings.region);
128
151
  selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
129
152
  originalSelector: selector,
130
153
  safeSelector: selector,
@@ -141,7 +164,7 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
141
164
  }
142
165
  const { cookies, ...snapshot } = snapshots[index];
143
166
  const snapshotType = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
144
- const renderTargetPromise = client.createRenderTarget({
167
+ const renderTargetPromise = ufgClient.createRenderTarget({
145
168
  snapshot,
146
169
  settings: {
147
170
  renderer,
@@ -171,11 +194,12 @@ function makeCheck({ eyes, client, target: defaultTarget, spec, signal, logger:
171
194
  logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
172
195
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
173
196
  }
174
- const { renderId, selectorRegions, ...baseTarget } = await client.render({
197
+ const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
175
198
  target: renderTarget,
176
199
  settings: {
177
200
  ...settings,
178
201
  region: regionToTarget,
202
+ scrollRootElement: scrollRootSelector,
179
203
  selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
180
204
  includeFullPageSize: Boolean(settings.pageId),
181
205
  type: snapshotType,
package/dist/ufg/core.js CHANGED
@@ -37,7 +37,7 @@ const extract_text_1 = require("../automation/extract-text");
37
37
  const open_eyes_1 = require("./open-eyes");
38
38
  const utils = __importStar(require("@applitools/utils"));
39
39
  const throat_1 = __importDefault(require("throat"));
40
- function makeCore({ concurrency, spec, client, core, agentId = 'core-ufg', cwd = process.cwd(), logger, }) {
40
+ function makeCore({ concurrency, spec, clients, core, agentId = 'core-ufg', cwd = process.cwd(), logger, }) {
41
41
  var _a;
42
42
  logger = (_a = logger === null || logger === void 0 ? void 0 : logger.extend({ label: 'core-ufg' })) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ label: 'core-ufg' });
43
43
  logger.log(`Core ufg is initialized ${core ? 'with' : 'without'} custom base core`);
@@ -78,7 +78,7 @@ function makeCore({ concurrency, spec, client, core, agentId = 'core-ufg', cwd =
78
78
  locate: (0, locate_1.makeLocate)({ spec, core, logger }),
79
79
  locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
80
80
  extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
81
- openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, client, core, logger }),
81
+ openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, clients, core, logger }),
82
82
  });
83
83
  }
84
84
  exports.makeCore = makeCore;
@@ -25,21 +25,23 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeGetBaseEyes = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
- function makeGetBaseEyes({ settings: defaultSettings, core, client, eyes, logger: defaultLogger }) {
28
+ function makeGetBaseEyes({ eyes, settings: defaultSettings, core, baseEyes, logger: defaultLogger }) {
29
29
  const getBaseEyesWithCache = utils.general.cachify(getBaseEyes, ([options]) => options === null || options === void 0 ? void 0 : options.settings);
30
- if (eyes)
31
- eyes.forEach(eyes => getBaseEyesWithCache.setCachedValue(eyes.test.rendererInfo, Promise.resolve([eyes])));
30
+ if (baseEyes) {
31
+ baseEyes.forEach(baseEyes => getBaseEyesWithCache.setCachedValue(baseEyes.test.rendererInfo, Promise.resolve([baseEyes])));
32
+ }
32
33
  return getBaseEyesWithCache;
33
34
  async function getBaseEyes({ settings, logger = defaultLogger, } = {}) {
34
35
  logger.log(`Command "getBaseEyes" is called with settings`, settings);
35
36
  if (!settings)
36
37
  throw new Error('');
37
- const environment = await client.bookRenderer({ settings });
38
- const eyes = await core.openEyes({
38
+ const ufgClient = await eyes.getUFGClient({ logger });
39
+ const environment = await ufgClient.bookRenderer({ settings });
40
+ const eyesBase = await core.openEyes({
39
41
  settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
40
42
  logger,
41
43
  });
42
- return [eyes];
44
+ return [eyesBase];
43
45
  }
44
46
  }
45
47
  exports.makeGetBaseEyes = makeGetBaseEyes;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeGetNMLClient = void 0;
27
+ const nml_client_1 = require("@applitools/nml-client");
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ function makeGetNMLClient({ config, client, logger: defaultLogger }) {
30
+ const getBaseEyesWithCache = utils.general.cachify(getNMLClient, () => 'default');
31
+ if (client)
32
+ getBaseEyesWithCache.setCachedValue('default', Promise.resolve(client));
33
+ return getBaseEyesWithCache;
34
+ async function getNMLClient({ driver, logger = defaultLogger }) {
35
+ const brokerUrl = await driver.extractBrokerUrl();
36
+ if (!brokerUrl)
37
+ return null;
38
+ return (0, nml_client_1.makeNMLClient)({ config: { brokerUrl, ...config }, logger });
39
+ }
40
+ }
41
+ exports.makeGetNMLClient = makeGetNMLClient;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeGetUFGClient = void 0;
27
+ const ufg_client_1 = require("@applitools/ufg-client");
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ function makeGetUFGClient({ config, concurrency, client, logger: defaultLogger }) {
30
+ const getBaseEyesWithCache = utils.general.cachify(getUFGClient, () => 'default');
31
+ if (client)
32
+ getBaseEyesWithCache.setCachedValue('default', Promise.resolve(client));
33
+ return getBaseEyesWithCache;
34
+ async function getUFGClient({ logger = defaultLogger } = {}) {
35
+ return (0, ufg_client_1.makeUFGClient)({ config, concurrency, logger });
36
+ }
37
+ }
38
+ exports.makeGetUFGClient = makeGetUFGClient;
@@ -25,7 +25,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeOpenEyes = void 0;
27
27
  const driver_1 = require("@applitools/driver");
28
- const ufg_client_1 = require("@applitools/ufg-client");
28
+ const get_ufg_client_1 = require("./get-ufg-client");
29
+ const get_nml_client_1 = require("./get-nml-client");
29
30
  const get_base_eyes_1 = require("./get-base-eyes");
30
31
  const check_1 = require("./check");
31
32
  const check_and_close_1 = require("./check-and-close");
@@ -34,9 +35,9 @@ const abort_1 = require("./abort");
34
35
  const get_results_1 = require("./get-results");
35
36
  const abort_controller_1 = require("abort-controller");
36
37
  const utils = __importStar(require("@applitools/utils"));
37
- function makeOpenEyes({ core, client, spec, logger: defaultLogger }) {
38
+ function makeOpenEyes({ core, clients, spec, logger: defaultLogger }) {
38
39
  return async function openEyes({ target, settings, eyes, logger = defaultLogger, }) {
39
- var _a, _b;
40
+ var _a;
40
41
  logger.log(`Command "openEyes" is called with ${target ? 'default driver and' : ''}`, ...(settings ? ['settings', settings] : []), eyes ? 'predefined eyes' : '');
41
42
  const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger }));
42
43
  if (driver && !eyes) {
@@ -52,14 +53,8 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger }) {
52
53
  }
53
54
  const controller = new abort_controller_1.AbortController();
54
55
  const account = await core.getAccountInfo({ settings, logger });
55
- client !== null && client !== void 0 ? client : (client = (0, ufg_client_1.makeUFGClient)({
56
- config: { ...account.ufg, ...account, proxy: settings.proxy },
57
- concurrency: (_b = settings.renderConcurrency) !== null && _b !== void 0 ? _b : 5,
58
- logger,
59
- }));
60
- const getBaseEyes = (0, get_base_eyes_1.makeGetBaseEyes)({ settings, eyes, core, client, logger });
61
56
  return utils.general.extend({}, eyes => {
62
- var _a;
57
+ var _a, _b;
63
58
  const storage = new Map();
64
59
  let running = true;
65
60
  return {
@@ -74,9 +69,16 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger }) {
74
69
  get running() {
75
70
  return running;
76
71
  },
77
- getBaseEyes,
72
+ getUFGClient: (0, get_ufg_client_1.makeGetUFGClient)({
73
+ config: { ...account.ufg, ...account, proxy: settings.proxy },
74
+ concurrency: (_b = settings.renderConcurrency) !== null && _b !== void 0 ? _b : 5,
75
+ client: clients === null || clients === void 0 ? void 0 : clients.ufg,
76
+ logger,
77
+ }),
78
+ getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ config: settings, client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
79
+ getBaseEyes: (0, get_base_eyes_1.makeGetBaseEyes)({ eyes, settings, core, logger }),
78
80
  // check with indexing and storage
79
- check: utils.general.wrap((0, check_1.makeCheck)({ eyes, client: client, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
81
+ check: utils.general.wrap((0, check_1.makeCheck)({ eyes, target: driver, spec, signal: controller.signal, logger }), async (check, options = {}) => {
80
82
  const results = await check(options);
81
83
  results.forEach(result => {
82
84
  var _a;
@@ -85,14 +87,7 @@ function makeOpenEyes({ core, client, spec, logger: defaultLogger }) {
85
87
  });
86
88
  return results;
87
89
  }),
88
- checkAndClose: utils.general.wrap((0, check_and_close_1.makeCheckAndClose)({
89
- eyes,
90
- client: client,
91
- target: driver,
92
- spec,
93
- signal: controller.signal,
94
- logger,
95
- }), async (checkAndClose, options = {}) => {
90
+ checkAndClose: utils.general.wrap((0, check_and_close_1.makeCheckAndClose)({ eyes, target: driver, spec, signal: controller.signal, logger }), async (checkAndClose, options = {}) => {
96
91
  const results = await checkAndClose(options);
97
92
  results.forEach(result => {
98
93
  var _a;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "2.3.11",
3
+ "version": "2.3.12",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -76,16 +76,16 @@
76
76
  "@applitools/core-base": "1.1.39",
77
77
  "@applitools/dom-capture": "11.2.1",
78
78
  "@applitools/dom-snapshot": "4.7.5",
79
- "@applitools/driver": "1.11.34",
80
- "@applitools/ec-client": "1.2.12",
79
+ "@applitools/driver": "1.11.35",
80
+ "@applitools/ec-client": "1.2.13",
81
81
  "@applitools/logger": "1.1.46",
82
- "@applitools/nml-client": "1.3.37",
82
+ "@applitools/nml-client": "1.3.38",
83
83
  "@applitools/req": "1.1.30",
84
- "@applitools/screenshoter": "3.7.28",
84
+ "@applitools/screenshoter": "3.7.29",
85
85
  "@applitools/snippets": "2.4.15",
86
86
  "@applitools/socket": "1.0.8",
87
- "@applitools/spec-driver-webdriver": "1.0.14",
88
- "@applitools/ufg-client": "1.2.0",
87
+ "@applitools/spec-driver-webdriver": "1.0.15",
88
+ "@applitools/ufg-client": "1.2.1",
89
89
  "@applitools/utils": "1.3.30",
90
90
  "@types/ws": "8.5.4",
91
91
  "abort-controller": "3.0.0",
@@ -99,9 +99,9 @@
99
99
  "devDependencies": {
100
100
  "@applitools/bongo": "^2.2.5",
101
101
  "@applitools/sdk-coverage-tests": "^2.7.12",
102
- "@applitools/spec-driver-puppeteer": "^1.1.46",
103
- "@applitools/spec-driver-selenium": "^1.5.31",
104
- "@applitools/spec-driver-webdriverio": "^1.4.29",
102
+ "@applitools/spec-driver-puppeteer": "^1.1.47",
103
+ "@applitools/spec-driver-selenium": "^1.5.32",
104
+ "@applitools/spec-driver-webdriverio": "^1.4.30",
105
105
  "@applitools/test-server": "^1.1.26",
106
106
  "@applitools/test-utils": "^1.5.12",
107
107
  "@types/mocha": "^9.1.1",
@@ -2,17 +2,15 @@ import type { Region } from '@applitools/utils';
2
2
  import type { DriverTarget, Target, Eyes, CheckSettings, TestResult, CloseSettings } from './types';
3
3
  import { type AbortSignal } from 'abort-controller';
4
4
  import { type Logger } from '@applitools/logger';
5
- import { type UFGClient } from '@applitools/ufg-client';
6
5
  import { type SpecType, type SpecDriver } from '@applitools/driver';
7
6
  type Options<TSpec extends SpecType> = {
8
7
  eyes: Eyes<TSpec>;
9
- client: UFGClient;
10
8
  target?: DriverTarget<TSpec>;
11
9
  spec?: SpecDriver<TSpec>;
12
10
  signal?: AbortSignal;
13
11
  logger: Logger;
14
12
  };
15
- export declare function makeCheckAndClose<TSpec extends SpecType>({ spec, eyes, client, signal, target: defaultTarget, logger: defaultLogger, }: Options<TSpec>): ({ target, settings, logger, }: {
13
+ export declare function makeCheckAndClose<TSpec extends SpecType>({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }: Options<TSpec>): ({ target, settings, logger, }: {
16
14
  target?: Target<TSpec> | undefined;
17
15
  settings?: (import("@applitools/core-base").CheckSettings<Region | import("@applitools/driver").ElementReference<TSpec>> & import("./types").ScreenshotSettings<TSpec> & {
18
16
  renderers?: import("@applitools/ufg-client").Renderer[] | undefined;
@@ -1,17 +1,15 @@
1
1
  import type { DriverTarget, Target, Eyes, CheckSettings, CheckResult } from './types';
2
2
  import { type AbortSignal } from 'abort-controller';
3
3
  import { type Logger } from '@applitools/logger';
4
- import { type UFGClient } from '@applitools/ufg-client';
5
4
  import { type SpecType, type SpecDriver } from '@applitools/driver';
6
5
  type Options<TSpec extends SpecType> = {
7
6
  eyes: Eyes<TSpec>;
8
- client: UFGClient;
9
7
  target?: DriverTarget<TSpec>;
10
8
  spec?: SpecDriver<TSpec>;
11
9
  signal?: AbortSignal;
12
10
  logger: Logger;
13
11
  };
14
- export declare function makeCheck<TSpec extends SpecType>({ eyes, client, target: defaultTarget, spec, signal, logger: defaultLogger, }: Options<TSpec>): ({ target, settings, logger, }: {
12
+ export declare function makeCheck<TSpec extends SpecType>({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }: Options<TSpec>): ({ target, settings, logger, }: {
15
13
  settings?: CheckSettings<TSpec> | undefined;
16
14
  target?: Target<TSpec> | undefined;
17
15
  logger?: Logger | undefined;
@@ -1,16 +1,20 @@
1
1
  import type { Core } from './types';
2
2
  import type { Core as BaseCore } from '@applitools/core-base';
3
3
  import { type UFGClient } from '@applitools/ufg-client';
4
+ import { type NMLClient } from '@applitools/nml-client';
4
5
  import { type SpecType, type SpecDriver } from '@applitools/driver';
5
6
  import { type Logger } from '@applitools/logger';
6
7
  type Options<TSpec extends SpecType> = {
7
8
  concurrency: number;
8
9
  spec?: SpecDriver<TSpec>;
9
- client?: UFGClient;
10
+ clients?: {
11
+ ufg?: UFGClient;
12
+ nml?: NMLClient;
13
+ };
10
14
  core?: BaseCore;
11
15
  agentId?: string;
12
16
  cwd?: string;
13
17
  logger?: Logger;
14
18
  };
15
- export declare function makeCore<TSpec extends SpecType>({ concurrency, spec, client, core, agentId, cwd, logger, }: Options<TSpec>): Core<TSpec>;
19
+ export declare function makeCore<TSpec extends SpecType>({ concurrency, spec, clients, core, agentId, cwd, logger, }: Options<TSpec>): Core<TSpec>;
16
20
  export {};
@@ -1,15 +1,16 @@
1
- import type { OpenSettings } from './types';
2
- import type { Core as CoreBase, Eyes as EyesBase } from '@applitools/core-base';
1
+ import type { Eyes, OpenSettings } from './types';
2
+ import type { Core as BaseCore, Eyes as EyesBase } from '@applitools/core-base';
3
+ import { type SpecType } from '@applitools/driver';
3
4
  import { type Logger } from '@applitools/logger';
4
- import { type UFGClient, type Renderer } from '@applitools/ufg-client';
5
+ import { type Renderer } from '@applitools/ufg-client';
5
6
  type Options = {
7
+ eyes: Eyes<SpecType>;
6
8
  settings: OpenSettings;
7
- eyes?: EyesBase[];
8
- core: CoreBase;
9
- client: UFGClient;
9
+ core: BaseCore;
10
+ baseEyes?: EyesBase[];
10
11
  logger: Logger;
11
12
  };
12
- export declare function makeGetBaseEyes({ settings: defaultSettings, core, client, eyes, logger: defaultLogger }: Options): (({ settings, logger, }?: {
13
+ export declare function makeGetBaseEyes({ eyes, settings: defaultSettings, core, baseEyes, logger: defaultLogger }: Options): (({ settings, logger, }?: {
13
14
  settings?: {
14
15
  type: 'web' | 'native';
15
16
  renderer: Renderer;
@@ -0,0 +1,17 @@
1
+ import { type SpecType, type Driver } from '@applitools/driver';
2
+ import { type Logger } from '@applitools/logger';
3
+ import { type NMLClient, type NMLRequestsConfig } from '@applitools/nml-client';
4
+ type Options = {
5
+ config: Omit<NMLRequestsConfig, 'brokerUrl'>;
6
+ client?: NMLClient;
7
+ logger: Logger;
8
+ };
9
+ export declare function makeGetNMLClient({ config, client, logger: defaultLogger }: Options): (({ driver, logger }: {
10
+ driver: Driver<SpecType>;
11
+ logger?: Logger | undefined;
12
+ }) => Promise<NMLClient | null>) & {
13
+ getCachedValues(): Promise<NMLClient | null>[];
14
+ setCachedValue(key: any, value: Promise<NMLClient | null>): void;
15
+ clearCache(): void;
16
+ };
17
+ export {};
@@ -0,0 +1,16 @@
1
+ import { type Logger } from '@applitools/logger';
2
+ import { type UFGClient, type UFGRequestsConfig } from '@applitools/ufg-client';
3
+ type Options = {
4
+ config: UFGRequestsConfig;
5
+ concurrency: number;
6
+ client?: UFGClient;
7
+ logger: Logger;
8
+ };
9
+ export declare function makeGetUFGClient({ config, concurrency, client, logger: defaultLogger }: Options): (({ logger }?: {
10
+ logger?: Logger | undefined;
11
+ }) => Promise<UFGClient>) & {
12
+ getCachedValues(): Promise<UFGClient>[];
13
+ setCachedValue(key: any, value: Promise<UFGClient>): void;
14
+ clearCache(): void;
15
+ };
16
+ export {};
@@ -1,15 +1,19 @@
1
1
  import type { DriverTarget, Eyes, OpenSettings } from './types';
2
2
  import type { Core as BaseCore, Eyes as BaseEyes } from '@applitools/core-base';
3
3
  import { type Logger } from '@applitools/logger';
4
- import { type SpecType, type SpecDriver } from '@applitools/driver';
5
4
  import { type UFGClient } from '@applitools/ufg-client';
5
+ import { type NMLClient } from '@applitools/nml-client';
6
+ import { type SpecType, type SpecDriver } from '@applitools/driver';
6
7
  type Options<TSpec extends SpecType> = {
7
8
  core: BaseCore;
8
- client?: UFGClient;
9
+ clients?: {
10
+ ufg?: UFGClient;
11
+ nml?: NMLClient;
12
+ };
9
13
  spec?: SpecDriver<TSpec>;
10
14
  logger: Logger;
11
15
  };
12
- export declare function makeOpenEyes<TSpec extends SpecType>({ core, client, spec, logger: defaultLogger }: Options<TSpec>): ({ target, settings, eyes, logger, }: {
16
+ export declare function makeOpenEyes<TSpec extends SpecType>({ core, clients, spec, logger: defaultLogger }: Options<TSpec>): ({ target, settings, eyes, logger, }: {
13
17
  target?: DriverTarget<TSpec> | undefined;
14
18
  settings: OpenSettings;
15
19
  eyes?: BaseEyes<import("@applitools/core-base").ImageTarget>[] | undefined;
@@ -1,10 +1,11 @@
1
1
  import type { MaybeArray } from '@applitools/utils';
2
2
  import type * as BaseCore from '@applitools/core-base/types';
3
3
  import type * as AutomationCore from '../automation/types';
4
- import { type SpecType } from '@applitools/driver';
4
+ import { type SpecType, type Driver } from '@applitools/driver';
5
5
  import { type Logger } from '@applitools/logger';
6
6
  import { type Proxy } from '@applitools/req';
7
- import { type Renderer, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
7
+ import { type UFGClient, type Renderer, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
8
+ import { type NMLClient } from '@applitools/nml-client';
8
9
  export * from '../automation/types';
9
10
  export type SnapshotTarget = MaybeArray<DomSnapshot> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
10
11
  export type Target<TSpec extends SpecType> = SnapshotTarget | AutomationCore.Target<TSpec>;
@@ -19,6 +20,13 @@ export interface Core<TSpec extends SpecType, TTarget = AutomationCore.Target<TS
19
20
  }
20
21
  export interface Eyes<TSpec extends SpecType, TTarget = Target<TSpec>> extends AutomationCore.Eyes<TSpec, TTarget> {
21
22
  readonly type: 'ufg';
23
+ getUFGClient(options?: {
24
+ logger?: Logger;
25
+ }): Promise<UFGClient>;
26
+ getNMLClient(options: {
27
+ driver: Driver<TSpec>;
28
+ logger?: Logger;
29
+ }): Promise<NMLClient | null>;
22
30
  getBaseEyes(options?: {
23
31
  settings?: {
24
32
  type: 'web' | 'native';
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.takeSnapshots = void 0;
18
- const take_dom_snapshots_1 = require("./take-dom-snapshots");
19
- const take_vhses_1 = require("./take-vhses");
20
- const nml_client_1 = require("@applitools/nml-client");
21
- __exportStar(require("./take-dom-snapshots"), exports);
22
- __exportStar(require("./take-vhses"), exports);
23
- async function takeSnapshots({ driver, settings, hooks, provides, logger, }) {
24
- if (driver.isWeb) {
25
- return (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, settings, hooks, provides, logger });
26
- }
27
- else {
28
- const brokerUrl = await driver.extractBrokerUrl();
29
- if (brokerUrl) {
30
- return (await (0, nml_client_1.takeSnapshots)({ url: brokerUrl, settings, logger }));
31
- }
32
- else {
33
- return (0, take_vhses_1.takeVHSes)({ driver, settings, hooks, logger });
34
- }
35
- }
36
- }
37
- exports.takeSnapshots = takeSnapshots;
@@ -1,21 +0,0 @@
1
- import type { Size } from '@applitools/utils';
2
- import { type Logger } from '@applitools/logger';
3
- import { type SpecType, type Driver } from '@applitools/driver';
4
- import { type DomSnapshot, type AndroidSnapshot, type IOSSnapshot, type ChromeEmulationDevice, type IOSDevice, type ScreenOrientation } from '@applitools/ufg-client';
5
- import { type DomSnapshotsSettings } from './take-dom-snapshots';
6
- import { type VHSesSettings } from './take-vhses';
7
- export * from './take-dom-snapshots';
8
- export * from './take-vhses';
9
- export declare function takeSnapshots<TSpec extends SpecType>({ driver, settings, hooks, provides, logger, }: {
10
- driver: Driver<TSpec>;
11
- settings: DomSnapshotsSettings & VHSesSettings;
12
- hooks: {
13
- beforeSnapshots?(): void | Promise<void>;
14
- beforeEachSnapshot?(): void | Promise<void>;
15
- };
16
- provides: {
17
- getChromeEmulationDevices(): Promise<Record<ChromeEmulationDevice, Record<ScreenOrientation, Size>>>;
18
- getIOSDevices(): Promise<Record<IOSDevice, Record<ScreenOrientation, Size>>>;
19
- };
20
- logger: Logger;
21
- }): Promise<DomSnapshot[] | AndroidSnapshot[] | IOSSnapshot[]>;