@applitools/core 2.5.10 → 3.0.0

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 (83) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/automation/extract-text.js +3 -2
  3. package/dist/automation/get-viewport-size.js +3 -2
  4. package/dist/automation/locate-text.js +3 -2
  5. package/dist/automation/locate.js +3 -2
  6. package/dist/automation/set-viewport-size.js +3 -2
  7. package/dist/check-and-close.js +27 -2
  8. package/dist/check.js +3 -2
  9. package/dist/classic/abort.js +3 -2
  10. package/dist/classic/check-and-close.js +3 -2
  11. package/dist/classic/check.js +3 -2
  12. package/dist/classic/close.js +3 -2
  13. package/dist/classic/core.js +1 -2
  14. package/dist/classic/get-base-eyes.js +3 -2
  15. package/dist/classic/open-eyes.js +3 -2
  16. package/dist/cli/cli.js +50 -0
  17. package/dist/close-batch.js +3 -3
  18. package/dist/close.js +27 -2
  19. package/dist/core.js +1 -2
  20. package/dist/delete-test.js +3 -3
  21. package/dist/extract-text.js +8 -7
  22. package/dist/get-ec-client.js +3 -2
  23. package/dist/get-eyes-results.js +27 -2
  24. package/dist/get-manager-results.js +27 -2
  25. package/dist/get-typed-eyes.js +3 -2
  26. package/dist/index.js +2 -1
  27. package/dist/locate-text.js +3 -2
  28. package/dist/locate.js +3 -2
  29. package/dist/make-manager.js +4 -2
  30. package/dist/open-eyes.js +3 -2
  31. package/dist/troubleshoot/logs.js +41 -0
  32. package/dist/ufg/abort.js +3 -2
  33. package/dist/ufg/check-and-close.js +18 -24
  34. package/dist/ufg/check.js +18 -14
  35. package/dist/ufg/close.js +3 -2
  36. package/dist/ufg/core.js +1 -2
  37. package/dist/ufg/get-base-eyes.js +4 -3
  38. package/dist/ufg/get-nml-client.js +3 -2
  39. package/dist/ufg/get-results.js +3 -2
  40. package/dist/ufg/get-ufg-client.js +3 -2
  41. package/dist/ufg/open-eyes.js +3 -2
  42. package/dist/ufg/utils/take-dom-snapshots.js +15 -7
  43. package/dist/universal/core-server.js +1 -2
  44. package/package.json +18 -18
  45. package/types/automation/extract-text.d.ts +1 -1
  46. package/types/automation/get-viewport-size.d.ts +1 -1
  47. package/types/automation/locate-text.d.ts +1 -1
  48. package/types/automation/locate.d.ts +1 -1
  49. package/types/automation/set-viewport-size.d.ts +1 -1
  50. package/types/check-and-close.d.ts +1 -1
  51. package/types/check.d.ts +1 -1
  52. package/types/classic/abort.d.ts +1 -1
  53. package/types/classic/check-and-close.d.ts +1 -1
  54. package/types/classic/check.d.ts +1 -1
  55. package/types/classic/close.d.ts +1 -1
  56. package/types/classic/get-base-eyes.d.ts +1 -1
  57. package/types/classic/open-eyes.d.ts +1 -1
  58. package/types/close-batch.d.ts +1 -1
  59. package/types/close.d.ts +1 -1
  60. package/types/delete-test.d.ts +1 -1
  61. package/types/extract-text.d.ts +1 -1
  62. package/types/get-ec-client.d.ts +1 -1
  63. package/types/get-eyes-results.d.ts +1 -1
  64. package/types/get-manager-results.d.ts +1 -1
  65. package/types/get-typed-eyes.d.ts +2 -2
  66. package/types/index.d.ts +1 -0
  67. package/types/locate-text.d.ts +1 -1
  68. package/types/locate.d.ts +1 -1
  69. package/types/make-manager.d.ts +1 -1
  70. package/types/open-eyes.d.ts +1 -1
  71. package/types/troubleshoot/logs.d.ts +10 -0
  72. package/types/types.d.ts +1 -1
  73. package/types/ufg/abort.d.ts +1 -1
  74. package/types/ufg/check-and-close.d.ts +5 -2
  75. package/types/ufg/check.d.ts +1 -1
  76. package/types/ufg/close.d.ts +1 -1
  77. package/types/ufg/get-base-eyes.d.ts +1 -1
  78. package/types/ufg/get-nml-client.d.ts +1 -1
  79. package/types/ufg/get-results.d.ts +1 -1
  80. package/types/ufg/get-ufg-client.d.ts +1 -1
  81. package/types/ufg/open-eyes.d.ts +1 -1
  82. package/types/ufg/types.d.ts +4 -1
  83. package/types/ufg/utils/take-dom-snapshots.d.ts +4 -1
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.structureLogs = exports.parseLogs = void 0;
4
+ function parseLogs(logs) {
5
+ const regexp = /^(?<label>[^\s]+) (?:\((?<tags>[^\)]+)\) )?\| (?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z)? (?:\[(?<level>[A-Z]+)\s*\])? (?<message>.+)$/;
6
+ const lines = logs.split('\n');
7
+ return lines.reduce((logs, line) => {
8
+ var _a, _b;
9
+ const match = line.match(regexp);
10
+ if (match) {
11
+ logs.push({
12
+ ...match.groups,
13
+ tags: (_b = (_a = match.groups) === null || _a === void 0 ? void 0 : _a.tags) === null || _b === void 0 ? void 0 : _b.split(' & ').map(tags => tags.split('/')),
14
+ });
15
+ }
16
+ else if (logs[logs.length - 1]) {
17
+ logs[logs.length - 1].message += line;
18
+ }
19
+ return logs;
20
+ }, []);
21
+ }
22
+ exports.parseLogs = parseLogs;
23
+ function structureLogs(logs) {
24
+ const groups = {};
25
+ logs.forEach(log => {
26
+ var _a;
27
+ const tags = (_a = log.tags) !== null && _a !== void 0 ? _a : [[]];
28
+ tags.forEach(tags => {
29
+ var _a;
30
+ const group = tags.reduce((object, key) => {
31
+ var _a;
32
+ (_a = object[key]) !== null && _a !== void 0 ? _a : (object[key] = {});
33
+ return object[key];
34
+ }, groups);
35
+ (_a = group.logs) !== null && _a !== void 0 ? _a : (group.logs = []);
36
+ group.logs.push(log);
37
+ });
38
+ });
39
+ return groups;
40
+ }
41
+ exports.structureLogs = structureLogs;
package/dist/ufg/abort.js CHANGED
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeAbort = void 0;
4
4
  const driver_1 = require("@applitools/driver");
5
- function makeAbort({ storage, target, spec, controller, logger: defaultLogger, }) {
6
- return async function abort({ settings, logger = defaultLogger, } = {}) {
5
+ function makeAbort({ storage, target, spec, controller, logger: mainLogger, }) {
6
+ return async function abort({ settings, logger = mainLogger, } = {}) {
7
+ logger = logger.extend(mainLogger);
7
8
  logger.log('Command "abort" is called with settings', settings);
8
9
  controller.abort();
9
10
  settings !== null && settings !== void 0 ? settings : (settings = {});
@@ -37,9 +37,10 @@ const uniquify_renderers_1 = require("./utils/uniquify-renderers");
37
37
  const abort_error_1 = require("../errors/abort-error");
38
38
  const utils = __importStar(require("@applitools/utils"));
39
39
  const chalk_1 = __importDefault(require("chalk"));
40
- function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
41
- return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
40
+ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger: mainLogger, }) {
41
+ return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, }) {
42
42
  var _a, _b, _c, _d, _e, _f, _g, _h;
43
+ logger = logger.extend(mainLogger);
43
44
  logger.log('Command "checkAndClose" is called with settings', settings);
44
45
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
45
46
  logger.warn('Command "checkAndClose" was called after test was already aborted');
@@ -158,13 +159,14 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
158
159
  safeSelector: selector,
159
160
  })));
160
161
  const promises = uniqueRenderers.map(async (renderer, index) => {
162
+ const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
161
163
  if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
162
164
  const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
163
- logger.console.log(message);
165
+ rendererLogger.console.log(message);
164
166
  }
165
167
  try {
166
168
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
167
- logger.warn('Command "check" was aborted before rendering');
169
+ rendererLogger.warn('Command "check" was aborted before rendering');
168
170
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
169
171
  }
170
172
  const { cookies, ...snapshot } = snapshots[index];
@@ -179,24 +181,25 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
179
181
  autProxy: settings.autProxy,
180
182
  userAgent,
181
183
  },
184
+ logger: rendererLogger,
182
185
  });
183
186
  const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
184
187
  try {
185
188
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
186
- logger.warn('Command "check" was aborted before rendering');
189
+ rendererLogger.warn('Command "check" was aborted before rendering');
187
190
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
188
191
  }
189
192
  else if (!baseEyes.running) {
190
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
193
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
191
194
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
192
195
  }
193
196
  const renderTarget = await renderTargetPromise;
194
197
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
195
- logger.warn('Command "check" was aborted before rendering');
198
+ rendererLogger.warn('Command "check" was aborted before rendering');
196
199
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
197
200
  }
198
201
  else if (!baseEyes.running) {
199
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
202
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
200
203
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
201
204
  }
202
205
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
@@ -213,6 +216,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
213
216
  rendererId: baseEyes.test.rendererId,
214
217
  },
215
218
  signal,
219
+ logger: rendererLogger,
216
220
  });
217
221
  let offset = 0;
218
222
  const baseSettings = getBaseCheckSettings({
@@ -225,22 +229,22 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
225
229
  baseTarget.source = snapshotUrl;
226
230
  baseTarget.name = snapshotTitle;
227
231
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
228
- logger.warn('Command "check" was aborted after rendering');
232
+ rendererLogger.warn('Command "check" was aborted after rendering');
229
233
  throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
230
234
  }
231
235
  else if (!baseEyes.running) {
232
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
236
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
233
237
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
234
238
  }
235
239
  const [result] = await baseEyes.checkAndClose({
236
240
  target: { ...baseTarget, isTransformed: true },
237
241
  settings: baseSettings,
238
- logger,
242
+ logger: rendererLogger,
239
243
  });
240
- return { ...result, eyes: baseEyes, renderer };
244
+ return { ...result, userTestId: eyes.test.userTestId, eyes: baseEyes, renderer };
241
245
  }
242
246
  catch (error) {
243
- await baseEyes.abort();
247
+ await baseEyes.abort({ logger: rendererLogger });
244
248
  error.info = { eyes: baseEyes };
245
249
  throw error;
246
250
  }
@@ -250,17 +254,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
250
254
  throw error;
251
255
  }
252
256
  });
253
- return Promise.all(promises.map(async (promise) => {
254
- var _a, _b;
255
- try {
256
- const result = await promise;
257
- return { ...result, userTestId: eyes.test.userTestId };
258
- }
259
- catch (error) {
260
- await ((_b = (_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ logger }));
261
- throw error;
262
- }
263
- }));
257
+ return Promise.all(promises);
264
258
  };
265
259
  }
266
260
  exports.makeCheckAndClose = makeCheckAndClose;
package/dist/ufg/check.js CHANGED
@@ -37,9 +37,10 @@ const uniquify_renderers_1 = require("./utils/uniquify-renderers");
37
37
  const abort_error_1 = require("../errors/abort-error");
38
38
  const utils = __importStar(require("@applitools/utils"));
39
39
  const chalk_1 = __importDefault(require("chalk"));
40
- function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultLogger, }) {
41
- return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
40
+ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: mainLogger, }) {
41
+ return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, }) {
42
42
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
43
+ logger = logger.extend(mainLogger);
43
44
  logger.log('Command "check" is called with settings', settings);
44
45
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
45
46
  logger.warn('Command "check" was called after test was already aborted');
@@ -159,13 +160,14 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultL
159
160
  safeSelector: selector,
160
161
  })));
161
162
  const promises = uniqueRenderers.map(async (renderer, index) => {
163
+ const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
162
164
  if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
163
165
  const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
164
- logger.console.log(message);
166
+ rendererLogger.console.log(message);
165
167
  }
166
168
  try {
167
169
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
168
- logger.warn('Command "check" was aborted before rendering');
170
+ rendererLogger.warn('Command "check" was aborted before rendering');
169
171
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
170
172
  }
171
173
  const { cookies, ...snapshot } = snapshots[index];
@@ -180,24 +182,25 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultL
180
182
  autProxy: settings.autProxy,
181
183
  userAgent,
182
184
  },
185
+ logger: rendererLogger,
183
186
  });
184
- const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
187
+ const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger: rendererLogger });
185
188
  try {
186
189
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
187
- logger.warn('Command "check" was aborted before rendering');
190
+ rendererLogger.warn('Command "check" was aborted before rendering');
188
191
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
189
192
  }
190
193
  else if (!baseEyes.running) {
191
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
194
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
192
195
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
193
196
  }
194
197
  const renderTarget = await renderTargetPromise;
195
198
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
196
- logger.warn('Command "check" was aborted before rendering');
199
+ rendererLogger.warn('Command "check" was aborted before rendering');
197
200
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
198
201
  }
199
202
  else if (!baseEyes.running) {
200
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
203
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
201
204
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
202
205
  }
203
206
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
@@ -214,6 +217,7 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultL
214
217
  rendererId: baseEyes.test.rendererId,
215
218
  },
216
219
  signal,
220
+ logger: rendererLogger,
217
221
  });
218
222
  let offset = 0;
219
223
  const baseSettings = getBaseCheckSettings({
@@ -226,27 +230,27 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: defaultL
226
230
  baseTarget.source = snapshotUrl;
227
231
  baseTarget.name = snapshotTitle;
228
232
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
229
- logger.warn('Command "check" was aborted after rendering');
233
+ rendererLogger.warn('Command "check" was aborted after rendering');
230
234
  throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
231
235
  }
232
236
  else if (!baseEyes.running) {
233
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
237
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
234
238
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
235
239
  }
236
240
  const [result] = await baseEyes.check({
237
241
  target: { ...baseTarget, isTransformed: true },
238
242
  settings: baseSettings,
239
- logger,
243
+ logger: rendererLogger,
240
244
  });
241
245
  if (!baseEyes.running) {
242
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
246
+ rendererLogger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
243
247
  throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
244
248
  }
245
249
  return { ...result, eyes: baseEyes, renderer };
246
250
  }
247
251
  catch (error) {
248
252
  if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
249
- await baseEyes.abort({ logger });
253
+ await baseEyes.abort({ logger: rendererLogger });
250
254
  error.info = { eyes: baseEyes };
251
255
  throw error;
252
256
  }
package/dist/ufg/close.js CHANGED
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeClose = void 0;
4
4
  const driver_1 = require("@applitools/driver");
5
- function makeClose({ storage, target, spec, logger: defaultLogger }) {
6
- return async function close({ settings, logger = defaultLogger, } = {}) {
5
+ function makeClose({ storage, target, spec, logger: mainLogger }) {
6
+ return async function close({ settings, logger = mainLogger, } = {}) {
7
+ logger = logger.extend(mainLogger);
7
8
  logger.log('Command "close" is called with settings', settings);
8
9
  settings !== null && settings !== void 0 ? settings : (settings = {});
9
10
  if (!settings.testMetadata) {
package/dist/ufg/core.js CHANGED
@@ -36,8 +36,7 @@ const get_nml_client_1 = require("./get-nml-client");
36
36
  const open_eyes_1 = require("./open-eyes");
37
37
  const utils = __importStar(require("@applitools/utils"));
38
38
  function makeCore({ concurrency, spec, clients, base, fetchConcurrency, agentId = 'core-ufg', cwd = process.cwd(), logger: defaultLogger, }) {
39
- var _a;
40
- const logger = (_a = defaultLogger === null || defaultLogger === void 0 ? void 0 : defaultLogger.extend({ label: 'core-ufg' })) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ label: 'core-ufg' });
39
+ const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core-ufg' } });
41
40
  logger.log(`Core ufg is initialized ${base ? 'with' : 'without'} custom base core`);
42
41
  base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ agentId, concurrency, cwd, logger }));
43
42
  return utils.general.extend(base, core => {
@@ -25,13 +25,14 @@ 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, eyes, base, logger: defaultLogger, }) {
28
+ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLogger, }) {
29
29
  const getBaseEyesWithCache = utils.general.cachify(getBaseEyes, ([options]) => options === null || options === void 0 ? void 0 : options.settings);
30
30
  if (base) {
31
31
  base.forEach(baseEyes => getBaseEyesWithCache.setCachedValue(baseEyes.test.rendererInfo, Promise.resolve([baseEyes])));
32
32
  }
33
33
  return getBaseEyesWithCache;
34
- async function getBaseEyes({ settings, logger = defaultLogger, } = {}) {
34
+ async function getBaseEyes({ settings, logger = mainLogger, } = {}) {
35
+ logger = logger.extend(mainLogger);
35
36
  logger.log(`Command "getBaseEyes" is called with settings`, settings);
36
37
  if (!settings)
37
38
  throw new Error('');
@@ -39,7 +40,7 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: defaul
39
40
  config: { ...eyes.test.ufgServer },
40
41
  logger,
41
42
  });
42
- const environment = await ufgClient.bookRenderer({ settings });
43
+ const environment = await ufgClient.bookRenderer({ settings, logger });
43
44
  const baseEyes = await eyes.core.base.openEyes({
44
45
  settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
45
46
  logger,
@@ -26,12 +26,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeGetNMLClient = void 0;
27
27
  const nml_client_1 = require("@applitools/nml-client");
28
28
  const utils = __importStar(require("@applitools/utils"));
29
- function makeGetNMLClient({ client, logger: defaultLogger }) {
29
+ function makeGetNMLClient({ client, logger: mainLogger }) {
30
30
  const getNMLClientWithCache = utils.general.cachify(getNMLClient, ([options]) => client ? 'default' : [options.driver.guid, options.config]);
31
31
  if (client)
32
32
  getNMLClientWithCache.setCachedValue('default', Promise.resolve(client));
33
33
  return getNMLClientWithCache;
34
- async function getNMLClient({ driver, config, logger = defaultLogger, }) {
34
+ async function getNMLClient({ driver, config, logger = mainLogger, }) {
35
+ logger = logger.extend(mainLogger);
35
36
  const brokerUrl = await driver.extractBrokerUrl();
36
37
  if (!brokerUrl)
37
38
  return null;
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeGetResults = void 0;
4
4
  const abort_error_1 = require("../errors/abort-error");
5
- function makeGetResults({ storage, logger: defaultLogger }) {
6
- return async function getResults({ settings, logger = defaultLogger, } = {}) {
5
+ function makeGetResults({ storage, logger: mainLogger }) {
6
+ return async function getResults({ settings, logger = mainLogger, } = {}) {
7
+ logger = logger.extend(mainLogger);
7
8
  logger.log('Command "getResults" is called with settings', settings);
8
9
  return Promise.all(Array.from(storage.values(), async (promises) => {
9
10
  var _a;
@@ -26,14 +26,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeGetUFGClient = void 0;
27
27
  const ufg_client_1 = require("@applitools/ufg-client");
28
28
  const utils = __importStar(require("@applitools/utils"));
29
- function makeGetUFGClient({ client, fetchConcurrency, logger: defaultLogger }) {
29
+ function makeGetUFGClient({ client, fetchConcurrency, logger: mainLogger }) {
30
30
  // we are caching by the server config, therefor if the user creates another Runner / manager with the same server config but different
31
31
  // fetchConcurrency, it will not take any affect.
32
32
  const getUFGClientWithCache = utils.general.cachify(getUFGClient, ([options]) => client ? 'default' : [{ ...options.config, fetchConcurrency: undefined }]);
33
33
  if (client)
34
34
  getUFGClientWithCache.setCachedValue('default', Promise.resolve(client));
35
35
  return getUFGClientWithCache;
36
- async function getUFGClient({ config, logger = defaultLogger }) {
36
+ async function getUFGClient({ config, logger = mainLogger }) {
37
+ logger = logger.extend(mainLogger);
37
38
  return (0, ufg_client_1.makeUFGClient)({ config: { ...config, fetchConcurrency }, logger });
38
39
  }
39
40
  }
@@ -33,9 +33,10 @@ const abort_1 = require("./abort");
33
33
  const get_results_1 = require("./get-results");
34
34
  const abort_controller_1 = require("abort-controller");
35
35
  const utils = __importStar(require("@applitools/utils"));
36
- function makeOpenEyes({ core, spec, logger: defaultLogger }) {
37
- return async function openEyes({ target, settings, base, logger = defaultLogger, }) {
36
+ function makeOpenEyes({ core, spec, logger: mainLogger }) {
37
+ return async function openEyes({ target, settings, base, logger = mainLogger, }) {
38
38
  var _a, _b;
39
+ logger = logger.extend(mainLogger);
39
40
  logger.log(`Command "openEyes" is called with ${target ? 'default driver and' : ''}`, ...(settings ? ['settings', settings] : []), base ? 'predefined eyes' : '');
40
41
  const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger }));
41
42
  if (driver && !base) {
@@ -35,7 +35,7 @@ const utils = __importStar(require("@applitools/utils"));
35
35
  const chalk_1 = __importDefault(require("chalk"));
36
36
  __exportStar(require("./take-dom-snapshot"), exports);
37
37
  async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
38
- var _a, _b, _c, _d;
38
+ var _a, _b, _c, _d, _e;
39
39
  const currentContext = driver.currentContext;
40
40
  const waitBeforeCapture = async () => {
41
41
  if (utils.types.isFunction(settings.waitBeforeCapture)) {
@@ -53,12 +53,12 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
53
53
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
54
54
  return Array(settings.renderers.length).fill(snapshot);
55
55
  }
56
- const isStrictBreakpoints = utils.types.isArray(settings.layoutBreakpoints);
56
+ const isStrictBreakpoints = utils.types.isArray((_c = settings.layoutBreakpoints) === null || _c === void 0 ? void 0 : _c.breakpoints);
57
57
  const requiredWidths = await settings.renderers.reduce(async (prev, renderer, index) => {
58
58
  const { name, width } = (await extractRendererInfo({ renderer }));
59
59
  const requiredWidths = await prev;
60
60
  const requiredWidth = isStrictBreakpoints
61
- ? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints, value: width })
61
+ ? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints.breakpoints, value: width })
62
62
  : width;
63
63
  let renderers = requiredWidths.get(requiredWidth);
64
64
  if (!renderers)
@@ -66,7 +66,7 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
66
66
  renderers.push({ name, width, index });
67
67
  return requiredWidths;
68
68
  }, Promise.resolve(new Map()));
69
- const smallestBreakpoint = Math.min(...(isStrictBreakpoints ? settings.layoutBreakpoints : []));
69
+ const smallestBreakpoint = Math.min(...(isStrictBreakpoints ? settings.layoutBreakpoints.breakpoints : []));
70
70
  if (isStrictBreakpoints && requiredWidths.has(smallestBreakpoint - 1)) {
71
71
  const smallestBrowsers = requiredWidths
72
72
  .get(smallestBreakpoint - 1)
@@ -75,13 +75,13 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
75
75
  const message = chalk_1.default.yellow(`The following configuration's viewport-widths are smaller than the smallest configured layout breakpoint (${smallestBreakpoint} pixels): [${smallestBrowsers}]. As a fallback, the resources that will be used for these configurations have been captured on a viewport-width of ${smallestBreakpoint} - 1 pixels. If an additional layout breakpoint is needed for you to achieve better results - please add it to your configuration.`);
76
76
  logger.console.log(message);
77
77
  }
78
- logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints);
78
+ logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints.breakpoints);
79
79
  logger.log(`required widths: ${[...requiredWidths.keys()].join(', ')}`);
80
80
  const viewportSize = await driver.getViewportSize();
81
81
  const snapshots = Array(settings.renderers.length);
82
82
  if (requiredWidths.has(viewportSize.width)) {
83
83
  logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
84
- await ((_c = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _c === void 0 ? void 0 : _c.call(hooks));
84
+ await ((_d = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _d === void 0 ? void 0 : _d.call(hooks));
85
85
  await waitBeforeCapture();
86
86
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
87
87
  requiredWidths.get(viewportSize.width).forEach(({ index }) => (snapshots[index] = snapshot));
@@ -90,6 +90,10 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
90
90
  logger.log(`taking dom snapshot for width ${requiredWidth}`);
91
91
  try {
92
92
  await driver.setViewportSize({ width: requiredWidth, height: viewportSize.height });
93
+ if (settings.layoutBreakpoints.reload) {
94
+ await driver.reloadPage();
95
+ await waitBeforeCapture();
96
+ }
93
97
  }
94
98
  catch (err) {
95
99
  logger.error(err);
@@ -107,12 +111,16 @@ async function takeDomSnapshots({ driver, settings, hooks, provides, logger, })
107
111
  logger.log(message);
108
112
  }
109
113
  }
110
- await ((_d = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _d === void 0 ? void 0 : _d.call(hooks));
114
+ await ((_e = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _e === void 0 ? void 0 : _e.call(hooks));
111
115
  await waitBeforeCapture();
112
116
  const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
113
117
  browsersInfo.forEach(({ index }) => (snapshots[index] = snapshot));
114
118
  }
115
119
  await driver.setViewportSize(viewportSize);
120
+ if (settings.layoutBreakpoints.reload) {
121
+ await driver.reloadPage();
122
+ await waitBeforeCapture();
123
+ }
116
124
  return snapshots;
117
125
  function calculateBreakpoint({ breakpoints, value }) {
118
126
  const nextBreakpointIndex = breakpoints
@@ -20,9 +20,8 @@ printStdout = false, ...handlerOptions } = {}) {
20
20
  const logDirname = (_a = process.env.APPLITOOLS_LOG_DIR) !== null && _a !== void 0 ? _a : path_1.default.resolve(os_1.default.tmpdir(), `applitools-logs`);
21
21
  const baseLogger = (0, logger_1.makeLogger)({
22
22
  handler: { type: 'rolling file', name: 'universal', dirname: logDirname },
23
- label: 'core-universal',
24
23
  level: 'info',
25
- colors: false,
24
+ format: { label: 'core-universal', colors: false },
26
25
  });
27
26
  baseLogger.log('Core universal is going to be initialized with options', {
28
27
  debug,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "2.5.10",
3
+ "version": "3.0.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -75,20 +75,20 @@
75
75
  ]
76
76
  },
77
77
  "dependencies": {
78
- "@applitools/core-base": "1.1.53",
79
- "@applitools/dom-capture": "11.2.1",
78
+ "@applitools/core-base": "1.1.54",
79
+ "@applitools/dom-capture": "11.2.2",
80
80
  "@applitools/dom-snapshot": "4.7.9",
81
- "@applitools/driver": "1.11.49",
82
- "@applitools/ec-client": "1.2.29",
83
- "@applitools/logger": "1.1.52",
84
- "@applitools/nml-client": "1.3.52",
85
- "@applitools/req": "1.2.5",
86
- "@applitools/screenshoter": "3.7.43",
87
- "@applitools/snippets": "2.4.19",
88
- "@applitools/socket": "1.0.13",
89
- "@applitools/spec-driver-webdriver": "1.0.30",
90
- "@applitools/ufg-client": "1.2.12",
91
- "@applitools/utils": "1.3.35",
81
+ "@applitools/driver": "1.11.51",
82
+ "@applitools/ec-client": "1.2.30",
83
+ "@applitools/logger": "2.0.0",
84
+ "@applitools/nml-client": "1.3.53",
85
+ "@applitools/req": "1.2.6",
86
+ "@applitools/screenshoter": "3.7.44",
87
+ "@applitools/snippets": "2.4.20",
88
+ "@applitools/socket": "1.0.14",
89
+ "@applitools/spec-driver-webdriver": "1.0.31",
90
+ "@applitools/ufg-client": "1.2.13",
91
+ "@applitools/utils": "1.3.36",
92
92
  "@types/ws": "8.5.4",
93
93
  "abort-controller": "3.0.0",
94
94
  "chalk": "4.1.2",
@@ -100,10 +100,10 @@
100
100
  "devDependencies": {
101
101
  "@applitools/bongo": "^3.0.3",
102
102
  "@applitools/sdk-coverage-tests": "^3.0.2",
103
- "@applitools/spec-driver-puppeteer": "^1.1.60",
104
- "@applitools/spec-driver-selenium": "^1.5.44",
105
- "@applitools/spec-driver-webdriverio": "^1.4.45",
106
- "@applitools/test-server": "^1.1.31",
103
+ "@applitools/spec-driver-puppeteer": "^1.1.62",
104
+ "@applitools/spec-driver-selenium": "^1.5.45",
105
+ "@applitools/spec-driver-webdriverio": "^1.5.0",
106
+ "@applitools/test-server": "^1.2.0",
107
107
  "@applitools/test-utils": "^1.5.16",
108
108
  "@types/node": "^12.20.55",
109
109
  "@types/selenium-webdriver": "^4.1.2",
@@ -7,7 +7,7 @@ type Options<TSpec extends SpecType> = {
7
7
  spec?: SpecDriver<TSpec>;
8
8
  logger: Logger;
9
9
  };
10
- export declare function makeExtractText<TSpec extends SpecType>({ core, spec, logger: defaultLogger }: Options<TSpec>): ({ target, settings, logger, }: {
10
+ export declare function makeExtractText<TSpec extends SpecType>({ core, spec, logger: mainLogger }: Options<TSpec>): ({ target, settings, logger, }: {
11
11
  target: Target<TSpec>;
12
12
  settings: MaybeArray<ExtractTextSettings<TSpec>>;
13
13
  logger?: Logger | undefined;
@@ -5,7 +5,7 @@ type Options<TSpec extends SpecType> = {
5
5
  spec: SpecDriver<TSpec>;
6
6
  logger: Logger;
7
7
  };
8
- export declare function makeGetViewportSize<TSpec extends SpecType>({ spec, logger: defaultLogger }: Options<TSpec>): ({ target, logger, }: {
8
+ export declare function makeGetViewportSize<TSpec extends SpecType>({ spec, logger: mainLogger }: Options<TSpec>): ({ target, logger }: {
9
9
  target: DriverTarget<TSpec>;
10
10
  logger?: Logger | undefined;
11
11
  }) => Promise<import("@applitools/utils").Size>;
@@ -6,7 +6,7 @@ type Options<TSpec extends SpecType> = {
6
6
  spec?: SpecDriver<TSpec>;
7
7
  logger: Logger;
8
8
  };
9
- export declare function makeLocateText<TSpec extends SpecType>({ core, spec, logger: defaultLogger }: Options<TSpec>): <TPattern extends string>({ target, settings, logger, }: {
9
+ export declare function makeLocateText<TSpec extends SpecType>({ core, spec, logger: mainLogger }: Options<TSpec>): <TPattern extends string>({ target, settings, logger, }: {
10
10
  target: Target<TSpec>;
11
11
  settings: LocateTextSettings<TPattern, TSpec>;
12
12
  logger?: Logger | undefined;
@@ -6,7 +6,7 @@ type Options<TSpec extends SpecType> = {
6
6
  spec?: SpecDriver<TSpec>;
7
7
  logger: Logger;
8
8
  };
9
- export declare function makeLocate<TSpec extends SpecType>({ spec, core, logger: defaultLogger }: Options<TSpec>): <TLocator extends string>({ settings, target, logger, }: {
9
+ export declare function makeLocate<TSpec extends SpecType>({ spec, core, logger: mainLogger }: Options<TSpec>): <TLocator extends string>({ settings, target, logger, }: {
10
10
  target: Target<TSpec>;
11
11
  settings: LocateSettings<TLocator, TSpec>;
12
12
  logger?: Logger | undefined;
@@ -6,7 +6,7 @@ type Options<TSpec extends SpecType> = {
6
6
  spec: SpecDriver<TSpec>;
7
7
  logger: Logger;
8
8
  };
9
- export declare function makeSetViewportSize<TSpec extends SpecType>({ spec, logger: defaultLogger }: Options<TSpec>): ({ target, size, logger, }: {
9
+ export declare function makeSetViewportSize<TSpec extends SpecType>({ spec, logger: mainLogger }: Options<TSpec>): ({ target, size, logger, }: {
10
10
  target: DriverTarget<TSpec>;
11
11
  size: Size;
12
12
  logger?: Logger | undefined;
@@ -8,7 +8,7 @@ type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
8
8
  spec?: SpecDriver<TSpec>;
9
9
  logger: Logger;
10
10
  };
11
- export declare function makeCheckAndClose<TSpec extends SpecType, TDefaultType extends 'classic' | 'ufg'>({ type: defaultType, eyes, target: defaultTarget, spec, logger: defaultLogger, }: Options<TSpec, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, target, settings, config, logger, }?: {
11
+ export declare function makeCheckAndClose<TSpec extends SpecType, TDefaultType extends 'classic' | 'ufg'>({ type: defaultType, eyes, target: defaultTarget, spec, logger: mainLogger, }: Options<TSpec, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, target, settings, config, logger, }?: {
12
12
  type?: TType | undefined;
13
13
  target?: Target<TSpec, TType> | undefined;
14
14
  settings?: (CheckSettings<TSpec, TDefaultType> & CloseSettings<TDefaultType> & CheckSettings<TSpec, TType> & CloseSettings<TType>) | undefined;
package/types/check.d.ts CHANGED
@@ -8,7 +8,7 @@ type Options<TSpec extends SpecType, TType extends 'classic' | 'ufg'> = {
8
8
  spec?: SpecDriver<TSpec>;
9
9
  logger: Logger;
10
10
  };
11
- export declare function makeCheck<TSpec extends SpecType, TDefaultType extends 'classic' | 'ufg'>({ type: defaultType, eyes, target: defaultTarget, spec, logger: defaultLogger, }: Options<TSpec, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, target, settings, config, logger, }?: {
11
+ export declare function makeCheck<TSpec extends SpecType, TDefaultType extends 'classic' | 'ufg'>({ type: defaultType, eyes, target: defaultTarget, spec, logger: mainLogger, }: Options<TSpec, TDefaultType>): <TType extends "classic" | "ufg" = TDefaultType>({ type, target, settings, config, logger, }?: {
12
12
  type?: TType | undefined;
13
13
  target?: Target<TSpec, TType> | undefined;
14
14
  settings?: CheckSettings<TSpec, TType> | undefined;
@@ -9,7 +9,7 @@ type Options<TSpec extends SpecType> = {
9
9
  spec?: SpecDriver<TSpec>;
10
10
  logger: Logger;
11
11
  };
12
- export declare function makeAbort<TSpec extends SpecType>({ eyes, target, spec, logger: defaultLogger }: Options<TSpec>): ({ settings, logger, }?: {
12
+ export declare function makeAbort<TSpec extends SpecType>({ eyes, target, spec, logger: mainLogger }: Options<TSpec>): ({ settings, logger, }?: {
13
13
  settings?: AbortSettings | undefined;
14
14
  logger?: Logger | undefined;
15
15
  }) => Promise<void>;