@applitools/core 4.22.0 → 4.23.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,173 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.23.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.22.1...js/core@4.23.0) (2024-11-07)
4
+
5
+
6
+ ### Features
7
+
8
+ * offline storybook ([#2596](https://github.com/Applitools-Dev/sdk/issues/2596)) ([c8edf80](https://github.com/Applitools-Dev/sdk/commit/c8edf80bc379d0cf5d94d798314bdad405d2f2b4))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * handle missing commits in parent and current branch ([#2586](https://github.com/Applitools-Dev/sdk/issues/2586)) ([3b40be5](https://github.com/Applitools-Dev/sdk/commit/3b40be544c36235b43121af82485bfc2e71d9e27))
14
+
15
+
16
+ ### Code Refactoring
17
+
18
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
19
+
20
+
21
+ ### Dependencies
22
+
23
+ * @applitools/utils bumped to 1.7.5
24
+ #### Code Refactoring
25
+
26
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
27
+ * @applitools/dom-snapshot bumped to 4.11.7
28
+ #### Code Refactoring
29
+
30
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
31
+
32
+
33
+
34
+ * @applitools/snippets bumped to 2.6.2
35
+ #### Bug Fixes
36
+
37
+ * provide a clear "stale element" exception message when passing detached regions to `check` ([#2590](https://github.com/Applitools-Dev/sdk/issues/2590)) ([1e5b49e](https://github.com/Applitools-Dev/sdk/commit/1e5b49e9aec6b8caf89f2cdb1f8e81a237d52896))
38
+ * @applitools/dom-capture bumped to 11.5.1
39
+ #### Code Refactoring
40
+
41
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
42
+ * @applitools/spec-driver-webdriver bumped to 1.1.19
43
+ #### Code Refactoring
44
+
45
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
46
+
47
+
48
+
49
+ * @applitools/tunnel-client bumped to 1.5.9
50
+ #### Code Refactoring
51
+
52
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
53
+
54
+
55
+
56
+ * @applitools/ufg-client bumped to 1.14.0
57
+ #### Features
58
+
59
+ * offline storybook ([#2596](https://github.com/Applitools-Dev/sdk/issues/2596)) ([c8edf80](https://github.com/Applitools-Dev/sdk/commit/c8edf80bc379d0cf5d94d798314bdad405d2f2b4))
60
+
61
+
62
+
63
+ * @applitools/ec-client bumped to 1.9.13
64
+ #### Code Refactoring
65
+
66
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
67
+
68
+
69
+
70
+ * @applitools/logger bumped to 2.0.19
71
+
72
+ * @applitools/socket bumped to 1.1.19
73
+
74
+ * @applitools/req bumped to 1.7.3
75
+
76
+ * @applitools/image bumped to 1.1.14
77
+
78
+ * @applitools/driver bumped to 1.19.7
79
+
80
+ * @applitools/spec-driver-selenium bumped to 1.5.90
81
+
82
+ * @applitools/spec-driver-puppeteer bumped to 1.4.19
83
+
84
+ * @applitools/screenshoter bumped to 3.9.5
85
+
86
+ * @applitools/nml-client bumped to 1.8.17
87
+
88
+ * @applitools/core-base bumped to 1.19.2
89
+ #### Code Refactoring
90
+
91
+ * start linting "no-floating-promises" (wip) ([#2539](https://github.com/Applitools-Dev/sdk/issues/2539)) ([51b91cb](https://github.com/Applitools-Dev/sdk/commit/51b91cb15603f7d68e4bd6a16eb0f80e3f380295))
92
+
93
+
94
+
95
+
96
+ ## [4.22.1](https://github.com/Applitools-Dev/sdk/compare/js/core@4.22.0...js/core@4.22.1) (2024-10-31)
97
+
98
+
99
+ ### Bug Fixes
100
+
101
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
102
+
103
+
104
+ ### Dependencies
105
+
106
+ * @applitools/dom-snapshot bumped to 4.11.6
107
+ #### Bug Fixes
108
+
109
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
110
+
111
+
112
+
113
+ * @applitools/snippets bumped to 2.6.1
114
+ #### Bug Fixes
115
+
116
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
117
+ * @applitools/driver bumped to 1.19.6
118
+ #### Bug Fixes
119
+
120
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
121
+
122
+
123
+
124
+ * @applitools/spec-driver-webdriver bumped to 1.1.18
125
+ #### Bug Fixes
126
+
127
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
128
+
129
+
130
+
131
+ * @applitools/spec-driver-selenium bumped to 1.5.89
132
+ #### Bug Fixes
133
+
134
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
135
+
136
+
137
+
138
+ * @applitools/spec-driver-puppeteer bumped to 1.4.18
139
+ #### Bug Fixes
140
+
141
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
142
+
143
+
144
+
145
+ * @applitools/screenshoter bumped to 3.9.4
146
+ #### Bug Fixes
147
+
148
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
149
+
150
+
151
+
152
+ * @applitools/nml-client bumped to 1.8.16
153
+ #### Bug Fixes
154
+
155
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
156
+
157
+
158
+
159
+ * @applitools/core-base bumped to 1.19.1
160
+ #### Bug Fixes
161
+
162
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
163
+ * @applitools/ec-client bumped to 1.9.12
164
+ #### Bug Fixes
165
+
166
+ * trigger release ([c97dbfc](https://github.com/Applitools-Dev/sdk/commit/c97dbfc89245f374917702a867b87f2794155e54))
167
+
168
+
169
+
170
+
3
171
  ## [4.22.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.21.2...js/core@4.22.0) (2024-10-31)
4
172
 
5
173
 
@@ -173,7 +173,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
173
173
  throw new abort_error_1.AbortError(`Check on environment with id "${(_b = baseEyes.test.environment) === null || _b === void 0 ? void 0 : _b.environmentId}" was aborted during one of the previous steps`);
174
174
  }
175
175
  if (settings.assumesMutability) {
176
- eyes.core.logEvent({
176
+ void eyes.core.logEvent({
177
177
  settings: {
178
178
  level: 'Notice',
179
179
  event: {
@@ -191,7 +191,7 @@ async function checkEnvironment({ eyes, driver, target, environment, signal, log
191
191
  catch (error) {
192
192
  environmentLogger.error(`Check on environment with id "${(_b = baseEyes.test.environment) === null || _b === void 0 ? void 0 : _b.environmentId}" failed due to an error`, error);
193
193
  if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
194
- baseEyes.abort({ logger: environmentLogger, settings: { reason: error } });
194
+ void baseEyes.abort({ logger: environmentLogger, settings: { reason: error } });
195
195
  }
196
196
  }
197
197
  catch (error) {
@@ -52,7 +52,7 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, logger: mainLogger,
52
52
  },
53
53
  logger,
54
54
  });
55
- (0, report_kobiton_1.reportKobiton)({ driver: settings.driver, settings: baseEyes.test, logger });
55
+ void (0, report_kobiton_1.reportKobiton)({ driver: settings.driver, settings: baseEyes.test, logger });
56
56
  return baseEyes;
57
57
  }
58
58
  }
package/dist/cli/cli.js CHANGED
@@ -36,7 +36,7 @@ const run_offline_snapshots_1 = require("../run-offline-snapshots");
36
36
  const yargs_1 = __importDefault(require("yargs"));
37
37
  const utils = __importStar(require("@applitools/utils"));
38
38
  const fs_1 = __importDefault(require("fs"));
39
- yargs_1.default
39
+ void yargs_1.default
40
40
  .example([
41
41
  ['eyes universal', 'Run Eyes Universal server on default port (21077)'],
42
42
  ['eyes universal --fork', 'Run Eyes Universal server in a forked process'],
@@ -112,7 +112,7 @@ yargs_1.default
112
112
  console.log(port); // NOTE: this is a part of the generic protocol
113
113
  }
114
114
  else {
115
- (0, core_server_1.makeCoreServer)({ ...args, ...args.config, isProcess: true });
115
+ void (0, core_server_1.makeCoreServer)({ ...args, ...args.config, isProcess: true });
116
116
  }
117
117
  },
118
118
  })
package/dist/core.js CHANGED
@@ -24,6 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.makeCore = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
27
28
  const logger_1 = require("@applitools/logger");
28
29
  const core_base_1 = require("@applitools/core-base");
29
30
  const core_1 = require("./classic/core");
@@ -44,7 +45,7 @@ const extract_test_environment_1 = require("./utils/extract-test-environment");
44
45
  const ensure_offline_folder_1 = require("./utils/ensure-offline-folder");
45
46
  const validate_sdk_version_1 = require("./utils/validate-sdk-version");
46
47
  const memory_usage_logging_1 = require("./utils/memory-usage-logging");
47
- const utils = __importStar(require("@applitools/utils"));
48
+ const take_snapshots_1 = require("./ufg/take-snapshots");
48
49
  function makeCore({ spec, clients, base: defaultBase, concurrency = utils.general.getEnvValue('CONCURRENCY', 'number'), environment: defaultEnvironment, agentId = 'core', cwd = process.cwd(), logger: defaultLogger, asyncCache, } = {}) {
49
50
  const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core' } });
50
51
  (0, memory_usage_logging_1.startMemoryUsageLogging)({ logger });
@@ -52,7 +53,7 @@ function makeCore({ spec, clients, base: defaultBase, concurrency = utils.genera
52
53
  const offlineLocationPath = (0, ensure_offline_folder_1.ensureOfflineFolder)();
53
54
  logger.log(`[pid=${process.pid} Core is initialized ${defaultBase ? 'with' : 'without'} custom base core ${offlineLocationPath ? `and offline location ${offlineLocationPath} ` : ''}and environment `, environment);
54
55
  if (environment.sdk)
55
- (0, validate_sdk_version_1.validateSdkVersion)(environment.sdk, { logger });
56
+ void (0, validate_sdk_version_1.validateSdkVersion)(environment.sdk, { logger });
56
57
  const base = defaultBase !== null && defaultBase !== void 0 ? defaultBase : (0, core_base_1.makeCore)({ agentId, concurrency, logger, offlineLocationPath });
57
58
  const cores = {
58
59
  ufg: (0, core_2.makeCore)({ spec, clients, base, asyncCache, logger, offlineLocationPath }),
@@ -86,6 +87,7 @@ function makeCore({ spec, clients, base: defaultBase, concurrency = utils.genera
86
87
  openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, clients, core, cores, environment, asyncCache, cwd, logger }),
87
88
  closeBatch: (0, close_batch_1.makeCloseBatch)({ core, logger }),
88
89
  deleteTest: (0, delete_test_1.makeDeleteTest)({ core, logger }),
90
+ takeSnapshots: spec && (0, take_snapshots_1.makeTakeSnapshots)({ spec, core: cores.ufg, logger }),
89
91
  };
90
92
  });
91
93
  }
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.takeDomSnapshots = exports.logs = exports.formatters = void 0;
29
+ exports.logs = exports.formatters = void 0;
30
30
  __exportStar(require("./types"), exports);
31
31
  __exportStar(require("./core"), exports);
32
32
  __exportStar(require("./universal/core-server"), exports);
@@ -35,6 +35,3 @@ __exportStar(require("./autonomous/core"), exports);
35
35
  __exportStar(require("@applitools/driver/dist/debug"), exports);
36
36
  exports.formatters = __importStar(require("./utils/format-results"));
37
37
  exports.logs = __importStar(require("./troubleshoot/logs"));
38
- // TODO remove export after every dependency migrated to new distributed ufg submodule
39
- var take_dom_snapshots_1 = require("./ufg/utils/take-dom-snapshots");
40
- Object.defineProperty(exports, "takeDomSnapshots", { enumerable: true, get: function () { return take_dom_snapshots_1.takeDomSnapshots; } });
package/dist/open-eyes.js CHANGED
@@ -39,18 +39,18 @@ const core_base_1 = require("@applitools/core-base");
39
39
  const extract_git_info_1 = require("./utils/extract-git-info");
40
40
  function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDuplicateTests, core, cores, spec, environment, logger: mainLogger, asyncCache, cwd = process.cwd(), }) {
41
41
  return async function openEyes({ type = defaultType, settings: openSettings, config, target, logger = mainLogger, }) {
42
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
43
- var _x, _y, _z, _0, _1;
42
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
43
+ var _w, _x, _y, _z, _0;
44
44
  logger = logger.extend(mainLogger, { tags: [`eyes-${type}-${utils.general.shortid()}`] });
45
45
  const settings = { ...config === null || config === void 0 ? void 0 : config.open, ...openSettings };
46
46
  const eyesServerSettings = (0, populate_eyes_server_settings_1.populateEyesServerSettings)(settings);
47
47
  (_a = settings.userTestId) !== null && _a !== void 0 ? _a : (settings.userTestId = `${settings.testName}--${utils.general.guid()}`);
48
48
  settings.batch = { ...batch, ...settings.batch };
49
- (_b = (_x = settings.batch).id) !== null && _b !== void 0 ? _b : (_x.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`);
50
- (_d = (_y = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_y.buildId = utils.general.getEnvValue('BATCH_BUILD_ID'));
51
- (_e = (_z = settings.batch).name) !== null && _e !== void 0 ? _e : (_z.name = utils.general.getEnvValue('BATCH_NAME'));
52
- (_f = (_0 = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_0.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
53
- (_g = (_1 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_1.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
49
+ (_b = (_w = settings.batch).id) !== null && _b !== void 0 ? _b : (_w.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`);
50
+ (_d = (_x = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_x.buildId = utils.general.getEnvValue('BATCH_BUILD_ID'));
51
+ (_e = (_y = settings.batch).name) !== null && _e !== void 0 ? _e : (_y.name = utils.general.getEnvValue('BATCH_NAME'));
52
+ (_f = (_z = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_z.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
53
+ (_g = (_0 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_0.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
54
54
  (_h = settings.keepBatchOpen) !== null && _h !== void 0 ? _h : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean'));
55
55
  (_j = settings.branchName) !== null && _j !== void 0 ? _j : (settings.branchName = utils.general.getEnvValue('BRANCH'));
56
56
  (_k = settings.parentBranchName) !== null && _k !== void 0 ? _k : (settings.parentBranchName = utils.general.getEnvValue('PARENT_BRANCH'));
@@ -66,9 +66,8 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
66
66
  logger.warn(`latestCommitInfo.timestamp is an invalid ISO date string: ${settings.latestCommitInfo.timestamp}`);
67
67
  settings.latestCommitInfo = undefined;
68
68
  }
69
- const isRealBatchId = !!settings.batch.id && !((_u = settings.batch) === null || _u === void 0 ? void 0 : _u.id.startsWith('generated'));
70
- if (process.env.CI && (isRealBatchId || settings.latestCommitInfo)) {
71
- await populateAutoScmInfo(settings.batch.id || settings.latestCommitInfo.sha);
69
+ if (process.env.CI && (isRealBatchId(settings.batch.id) || settings.latestCommitInfo)) {
70
+ await populateAutoScmInfo(isRealBatchId(settings.batch.id) ? settings.batch.id : settings.latestCommitInfo.sha);
72
71
  }
73
72
  if (settings.ignoreGitBranching) {
74
73
  settings.gitBranchingTimestamp = undefined;
@@ -91,14 +90,14 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
91
90
  const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: settings }));
92
91
  const driverEnvironment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
93
92
  const driverUrl = await (driver === null || driver === void 0 ? void 0 : driver.getDriverUrl());
94
- core.logEvent({
93
+ void core.logEvent({
95
94
  settings: {
96
95
  ...settings,
97
96
  level: 'Notice',
98
97
  event: {
99
98
  type: 'openEyes',
100
99
  userTestId: settings.userTestId,
101
- concurrency: (_v = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _v !== void 0 ? _v : core.concurrency,
100
+ concurrency: (_u = cores === null || cores === void 0 ? void 0 : cores[type].concurrency) !== null && _u !== void 0 ? _u : core.concurrency,
102
101
  environment,
103
102
  driver: {
104
103
  deviceName: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.deviceName,
@@ -106,7 +105,7 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
106
105
  browserVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.browserVersion,
107
106
  platformName: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformName,
108
107
  platformVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformVersion,
109
- isApplitoolsLib: (_w = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _w === void 0 ? void 0 : _w.instrumented,
108
+ isApplitoolsLib: (_v = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _v === void 0 ? void 0 : _v.instrumented,
110
109
  isEC: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.isEC,
111
110
  },
112
111
  driverUrl,
@@ -143,8 +142,8 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
143
142
  }); // TODO solve the types issue
144
143
  /////// END FUNCTION BODY ///////////////////
145
144
  async function populateAutoScmInfo(batchId) {
146
- var _a, _b, _c, _d, _e;
147
- var _f, _g;
145
+ var _a, _b, _c, _d;
146
+ var _e;
148
147
  const branchName = await (0, extract_git_info_1.extractGitBranch)({ execOptions: { cwd }, logger });
149
148
  const { owner: repoOwner, name: repoName } = await (0, extract_git_info_1.extractGitRepo)({ execOptions: { cwd }, logger });
150
149
  const buildId = await (0, extract_git_info_1.extractBuildIdFromCI)();
@@ -159,10 +158,10 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
159
158
  });
160
159
  if (scmInfo) {
161
160
  (_a = settings.batch) !== null && _a !== void 0 ? _a : (settings.batch = {});
162
- (_b = (_f = settings.batch).id) !== null && _b !== void 0 ? _b : (_f.id = batchId);
163
- (_c = (_g = settings.batch).buildId) !== null && _c !== void 0 ? _c : (_g.buildId = buildId);
164
- (_d = settings.branchName) !== null && _d !== void 0 ? _d : (settings.branchName = branchName);
165
- (_e = settings.parentBranchName) !== null && _e !== void 0 ? _e : (settings.parentBranchName = scmInfo.scmTargetBranch);
161
+ settings.batch.id = isRealBatchId(settings.batch.id) ? settings.batch.id : batchId;
162
+ (_b = (_e = settings.batch).buildId) !== null && _b !== void 0 ? _b : (_e.buildId = buildId);
163
+ (_c = settings.branchName) !== null && _c !== void 0 ? _c : (settings.branchName = branchName);
164
+ (_d = settings.parentBranchName) !== null && _d !== void 0 ? _d : (settings.parentBranchName = scmInfo.scmTargetBranch);
166
165
  }
167
166
  }
168
167
  else {
@@ -243,3 +242,6 @@ function getLatestCommitInfoFromEnvVars(logger) {
243
242
  logger.warn(`APPLITOOLS_GIT_LATEST_COMMIT_SHA was provided without APPLITOOLS_GIT_LATEST_COMMIT_TIMESTAMP. Not populating latestCommitInfo with the provided sha ${sha}.`);
244
243
  }
245
244
  }
245
+ function isRealBatchId(batchId) {
246
+ return !!batchId && !batchId.startsWith('generated');
247
+ }
@@ -114,5 +114,5 @@ async function checkNetwork({ stream = process.stdout, eyes = eyes_1.default, uf
114
114
  }
115
115
  exports.checkNetwork = checkNetwork;
116
116
  if (require.main === module) {
117
- checkNetwork();
117
+ void checkNetwork();
118
118
  }
@@ -28,29 +28,24 @@ 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_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
31
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
33
- const to_generated_selectors_1 = require("./utils/to-generated-selectors");
34
32
  const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
35
33
  const to_environment_key_1 = require("../automation/utils/to-environment-key");
36
34
  const abort_error_1 = require("../errors/abort-error");
37
35
  const utils = __importStar(require("@applitools/utils"));
38
36
  const lang = __importStar(require("../lang"));
39
37
  const chalk_1 = __importDefault(require("chalk"));
38
+ const take_snapshots_1 = require("./take-snapshots");
39
+ const create_render_target_from_snapshot_1 = require("./create-render-target-from-snapshot");
40
40
  function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
41
41
  return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
42
- var _a, _b;
42
+ var _a;
43
43
  logger = logger.extend(mainLogger);
44
44
  logger.log('Command "checkAndClose" is called with settings', settings);
45
45
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
46
46
  logger.warn('Command "checkAndClose" was called after test was already aborted');
47
47
  throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
48
48
  }
49
- const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
50
- const { elementReferencesToMark, getGeneratedSelectors } = (0, to_generated_selectors_1.toGeneratedSelectors)({
51
- elementReferences,
52
- transformElementReference: elementReference => { var _a; return ((0, driver_1.isSelector)(elementReference) && ((_a = spec === null || spec === void 0 ? void 0 : spec.toSimpleCommonSelector) === null || _a === void 0 ? void 0 : _a.call(spec, elementReference))) || undefined; },
53
- });
54
49
  const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
55
50
  const ufgClient = await eyes.core.getUFGClient({
56
51
  settings: {
@@ -61,66 +56,27 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
61
56
  logger,
62
57
  });
63
58
  let snapshots;
64
- let snapshotUrl;
65
- let snapshotTitle;
66
- let userAgent;
67
- const driver = spec && (0, driver_1.isDriver)(target, spec)
68
- ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
69
- : undefined;
70
- if (driver) {
71
- const environment = await driver.getEnvironment();
72
- const currentContext = driver.currentContext;
73
- await currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
74
- if (environment.isWeb) {
75
- userAgent = await driver.getUserAgentLegacy();
76
- snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({
77
- driver,
78
- settings: {
79
- ...eyes.test.eyesServer,
80
- waitBeforeCapture: settings.waitBeforeCapture,
81
- disableBrowserFetching: settings.disableBrowserFetching,
82
- layoutBreakpoints: settings.layoutBreakpoints,
83
- environments: uniqueEnvironments,
84
- skipResources: ufgClient.getCachedResourceUrls(),
85
- lazyLoad: settings.lazyLoad,
86
- elementReferences: elementReferencesToMark,
87
- },
88
- provides: {
89
- getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
90
- getIOSDevices: ufgClient.getIOSDevices,
91
- },
92
- logger,
93
- });
94
- }
95
- else {
96
- const nmlClient = await eyes.core.getNMLClient({
97
- driver,
98
- settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
99
- logger,
100
- });
101
- snapshots = (await nmlClient.takeSnapshots({
102
- settings: {
103
- ...eyes.test.eyesServer,
104
- waitBeforeCapture: settings.waitBeforeCapture,
105
- environments: uniqueEnvironments,
106
- },
107
- logger,
108
- }));
109
- }
110
- await currentContext.focus();
111
- snapshotUrl = await driver.getUrl();
112
- snapshotTitle = await driver.getTitle();
59
+ let driver;
60
+ if (spec && (0, driver_1.isDriver)(target, spec)) {
61
+ const takeSnapshots = (0, take_snapshots_1.makeTakeSnapshots)({ core: eyes.core, spec, signal, logger });
62
+ driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
63
+ snapshots = await takeSnapshots({
64
+ driver,
65
+ account: eyes.test.account,
66
+ settings: { ...settings, environments: uniqueEnvironments },
67
+ logger,
68
+ });
113
69
  }
114
70
  else {
71
+ // TODO (amit)
115
72
  snapshots = !utils.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
116
- snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
117
73
  }
118
- const generatedSelectors = snapshots.map(snapshot => getGeneratedSelectors(utils.types.has(snapshot, 'generatedSelectors') ? snapshot.generatedSelectors : undefined));
119
- const promises = uniqueEnvironments.map(async (environment, index) => {
74
+ const promises = snapshots.map(async (snapshot, i) => {
120
75
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
121
76
  const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
122
- const ufgEnvironment = environment;
123
- if (utils.types.has(ufgEnvironment, 'name') && ufgEnvironment.name === 'edge') {
77
+ const { target } = snapshot;
78
+ const environment = uniqueEnvironments[i];
79
+ if (utils.types.has(environment, 'name') && environment.name === 'edge') {
124
80
  environmentLogger.console.log(chalk_1.default.yellow(lang.edgeUfgEnvironmentDeprecatedWarning));
125
81
  }
126
82
  try {
@@ -128,26 +84,10 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
128
84
  environmentLogger.warn('Command "check" was aborted before rendering');
129
85
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
130
86
  }
131
- const { cookies, ...snapshot } = snapshots[index];
132
- const selectors = generatedSelectors[index];
133
- if (utils.types.has(ufgEnvironment, 'iosDeviceInfo') || utils.types.has(ufgEnvironment, 'androidDeviceInfo')) {
134
- ufgEnvironment.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
87
+ if (utils.types.has(environment, 'iosDeviceInfo') || utils.types.has(environment, 'androidDeviceInfo')) {
88
+ environment.type = utils.types.has(target, 'cdt') ? 'web' : 'native';
135
89
  }
136
- const renderTargetPromise = ufgClient.createRenderTarget({
137
- snapshot,
138
- settings: {
139
- environment: ufgEnvironment,
140
- cookies,
141
- headers: {
142
- Referer: snapshotUrl,
143
- 'User-Agent': userAgent,
144
- ...settings.headers,
145
- },
146
- proxy: eyes.test.eyesServer.proxy,
147
- autProxy: settings.autProxy,
148
- },
149
- logger: environmentLogger,
150
- });
90
+ const renderTargetPromise = (0, create_render_target_from_snapshot_1.createRenderTargetFromSnapshot)({ ufgClient, snapshot, logger: environmentLogger });
151
91
  const baseEyes = await eyes.getBaseEyes({ settings: { environment, driver }, logger });
152
92
  try {
153
93
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
@@ -167,31 +107,35 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
167
107
  environmentLogger.warn(`Render on environment with id "${(_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId}" was aborted during one of the previous steps`);
168
108
  throw new abort_error_1.AbortError(`Render on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" was aborted during one of the previous steps`);
169
109
  }
110
+ const { elementReferences: selectors, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
111
+ settings: snapshot.settings,
112
+ });
170
113
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
171
114
  target: renderTarget,
172
115
  settings: {
173
- ...settings,
174
- region: (_e = selectors.target) !== null && _e !== void 0 ? _e : settings.region,
116
+ ...snapshot.settings,
117
+ region: (_e = selectors.target) !== null && _e !== void 0 ? _e : snapshot.settings.region,
175
118
  scrollRootElement: selectors.scrolling,
176
- selectorsToCalculate: selectors.calculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
177
- includeFullPageSize: !!settings.pageId,
178
- environment: { ...ufgEnvironment, environmentId: baseEyes.test.environment.environmentId },
119
+ selectorsToCalculate: selectors.calculate,
120
+ includeFullPageSize: Boolean(snapshot.settings.pageId),
121
+ environment: { ...environment, environmentId: baseEyes.test.environment.environmentId },
179
122
  uploadUrl: baseEyes.test.uploadUrl,
180
123
  stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
181
124
  },
182
125
  signal,
183
126
  logger: environmentLogger,
184
127
  });
185
- let offset = 0;
186
128
  const baseSettings = getBaseCheckSettings({
187
- calculatedRegions: selectors.calculate.map(({ originalSelector, safeSelector }) => ({
188
- selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
189
- regions: safeSelector ? selectorRegions[offset++] : [],
190
- })),
129
+ calculatedRegions: selectors.calculate.map((_, index) => {
130
+ var _a;
131
+ return ({
132
+ regions: (_a = selectorRegions === null || selectorRegions === void 0 ? void 0 : selectorRegions[index]) !== null && _a !== void 0 ? _a : [],
133
+ });
134
+ }),
191
135
  });
192
136
  baseSettings.renderId = renderId;
193
- baseTarget.source = snapshotUrl;
194
- baseTarget.name = snapshotTitle;
137
+ baseTarget.source = snapshot.url;
138
+ baseTarget.name = snapshot.title;
195
139
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
196
140
  environmentLogger.warn('Command "check" was aborted after rendering');
197
141
  throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
@@ -201,7 +145,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
201
145
  throw new abort_error_1.AbortError(`Render on environment with id "${(_g = baseEyes.test.environment) === null || _g === void 0 ? void 0 : _g.environmentId}" was aborted during one of the previous steps`);
202
146
  }
203
147
  if (settings.assumesMutability) {
204
- eyes.core.logEvent({
148
+ void eyes.core.logEvent({
205
149
  settings: {
206
150
  level: 'Notice',
207
151
  event: {
@@ -238,8 +182,8 @@ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultE
238
182
  }
239
183
  }
240
184
  catch (error) {
241
- environmentLogger.error(`Environment with id ${ufgEnvironment.environmentId} failed before rendering started due to an error`, error);
242
- error.info = { ...error.info, userTestId: eyes.test.userTestId, environment: ufgEnvironment };
185
+ environmentLogger.error(`Environment with id ${environment.environmentId} failed before rendering started due to an error`, error);
186
+ error.info = { ...error.info, userTestId: eyes.test.userTestId, environment };
243
187
  throw error;
244
188
  }
245
189
  });
package/dist/ufg/check.js CHANGED
@@ -145,7 +145,7 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
145
145
  throw new abort_error_1.AbortError(`Render on environment with id "${(_g = baseEyes.test.environment) === null || _g === void 0 ? void 0 : _g.environmentId}" was aborted during one of the previous steps`);
146
146
  }
147
147
  if (settings.assumesMutability) {
148
- eyes.core.logEvent({
148
+ void eyes.core.logEvent({
149
149
  settings: {
150
150
  level: 'Notice',
151
151
  event: {
@@ -71,7 +71,7 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, logger: mainLogger,
71
71
  },
72
72
  logger,
73
73
  });
74
- (0, report_kobiton_1.reportKobiton)({ driver: settings.driver, settings: baseEyes.test, logger });
74
+ void (0, report_kobiton_1.reportKobiton)({ driver: settings.driver, settings: baseEyes.test, logger });
75
75
  return baseEyes;
76
76
  }
77
77
  }
@@ -162,6 +162,7 @@ function logSnapshot(logger, snapshot) {
162
162
  logger.log(`blobs urls (${snapshot.blobs.length}):`, JSON.stringify(snapshot.blobs.map(({ url }) => url)));
163
163
  logger.log(`resource urls (${snapshot.resourceUrls.length}):`, JSON.stringify(snapshot.resourceUrls));
164
164
  logger.log(`cdt nodes with data-applitools-selector: ${JSON.stringify(snapshot.cdt.filter(node => { var _a; return (_a = node.attributes) === null || _a === void 0 ? void 0 : _a.some(attr => attr.name === 'data-applitools-selector'); }))}`);
165
+ logger.log('safeSelectors:', snapshot.safeSelectors);
165
166
  }
166
167
  catch (err) {
167
168
  logger.error(`error while logging cdt`, err);
@@ -127,13 +127,16 @@ exports.extractBranchingTimestamp = utils.general.cachify(async function ({ bran
127
127
  logger = logger.extend({ tags: [`extract-branching-timestamp-${utils.general.shortid()}`] });
128
128
  const command = `HASH=$(git merge-base ${branchName} ${parentBranchName}) && git show -q --format=%aI $HASH`;
129
129
  let result = await executeWithLog(command, { execOptions, logger });
130
- if (result.stderr) {
131
- const [, missingBranch] = (_a = result.stderr.match(/Not a valid object name ([^\s]+)/)) !== null && _a !== void 0 ? _a : [];
132
- if (missingBranch) {
133
- result = await executeWithLog(`git fetch origin ${missingBranch}:${missingBranch} && ${command}`, {
134
- execOptions,
135
- logger,
136
- });
130
+ // both parent and current branches could be missing, that's why we have to iterate the missing branches check check twice
131
+ for (let i = 0; i < 2; i++) {
132
+ if (result.stderr) {
133
+ const [, missingBranch] = (_a = result.stderr.match(/Not a valid object name ([^\s]+)/)) !== null && _a !== void 0 ? _a : [];
134
+ if (missingBranch) {
135
+ result = await executeWithLog(`git fetch origin ${missingBranch}:${missingBranch} && ${command}`, {
136
+ execOptions,
137
+ logger,
138
+ });
139
+ }
137
140
  }
138
141
  }
139
142
  if (!result.stdout) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.22.0",
3
+ "version": "4.23.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -74,20 +74,20 @@
74
74
  }
75
75
  },
76
76
  "dependencies": {
77
- "@applitools/core-base": "1.19.0",
78
- "@applitools/dom-capture": "11.5.0",
79
- "@applitools/dom-snapshot": "4.11.5",
80
- "@applitools/driver": "1.19.5",
81
- "@applitools/ec-client": "1.9.11",
82
- "@applitools/logger": "2.0.18",
83
- "@applitools/nml-client": "1.8.15",
84
- "@applitools/req": "1.7.2",
85
- "@applitools/screenshoter": "3.9.3",
86
- "@applitools/snippets": "2.6.0",
87
- "@applitools/socket": "1.1.18",
88
- "@applitools/spec-driver-webdriver": "1.1.17",
89
- "@applitools/ufg-client": "1.13.1",
90
- "@applitools/utils": "1.7.4",
77
+ "@applitools/core-base": "1.19.2",
78
+ "@applitools/dom-capture": "11.5.1",
79
+ "@applitools/dom-snapshot": "4.11.7",
80
+ "@applitools/driver": "1.19.7",
81
+ "@applitools/ec-client": "1.9.13",
82
+ "@applitools/logger": "2.0.19",
83
+ "@applitools/nml-client": "1.8.17",
84
+ "@applitools/req": "1.7.3",
85
+ "@applitools/screenshoter": "3.9.5",
86
+ "@applitools/snippets": "2.6.2",
87
+ "@applitools/socket": "1.1.19",
88
+ "@applitools/spec-driver-webdriver": "1.1.19",
89
+ "@applitools/ufg-client": "1.14.0",
90
+ "@applitools/utils": "1.7.5",
91
91
  "@types/ws": "8.5.5",
92
92
  "abort-controller": "3.0.0",
93
93
  "chalk": "4.1.2",
@@ -100,11 +100,11 @@
100
100
  "devDependencies": {
101
101
  "@applitools/bongo": "^5.10.0",
102
102
  "@applitools/sea": "^1.0.0",
103
- "@applitools/spec-driver-puppeteer": "^1.4.17",
104
- "@applitools/spec-driver-selenium": "^1.5.88",
103
+ "@applitools/spec-driver-puppeteer": "^1.4.19",
104
+ "@applitools/spec-driver-selenium": "^1.5.90",
105
105
  "@applitools/test-server": "^1.2.2",
106
106
  "@applitools/test-utils": "^1.5.17",
107
- "@applitools/tunnel-client": "^1.5.8",
107
+ "@applitools/tunnel-client": "^1.5.9",
108
108
  "@types/node": "^12.20.55",
109
109
  "@types/selenium-webdriver": "^4.1.2",
110
110
  "@types/semver": "^7.5.8",
package/types/index.d.ts CHANGED
@@ -7,4 +7,3 @@ export { type SpecType, type SpecDriver, type Selector } from '@applitools/drive
7
7
  export * from '@applitools/driver/dist/debug';
8
8
  export * as formatters from './utils/format-results';
9
9
  export * as logs from './troubleshoot/logs';
10
- export { takeDomSnapshots } from './ufg/utils/take-dom-snapshots';
package/types/types.d.ts CHANGED
@@ -46,6 +46,12 @@ export interface Core<TSpec extends SpecType, TDefaultType extends 'classic' | '
46
46
  config?: Config<TSpec, TDefaultType>;
47
47
  logger?: Logger;
48
48
  }): Promise<string[]>;
49
+ takeSnapshots?(options: {
50
+ driver: AutomationCore.DriverTarget<TSpec>;
51
+ settings?: UFGCore.SnapshotSettings<TSpec>;
52
+ account: BaseCore.Account;
53
+ logger?: Logger;
54
+ }): Promise<UFGCore.Snapshot[]>;
49
55
  }
50
56
  export interface EyesManager<TSpec extends SpecType, TDefaultType extends 'classic' | 'ufg' = 'classic' | 'ufg'> {
51
57
  readonly concurrency: number | undefined;
@@ -1,8 +1,8 @@
1
- import type { Region } from '@applitools/utils';
2
1
  import type { DriverTarget, Target, Eyes, CheckSettings, CloseSettings, Environment } from './types';
3
2
  import { type AbortSignal } from 'abort-controller';
4
3
  import { type Logger } from '@applitools/logger';
5
4
  import { type SpecType, type SpecDriver } from '@applitools/driver';
5
+ import * as utils from '@applitools/utils';
6
6
  type Options<TSpec extends SpecType> = {
7
7
  eyes: Eyes<TSpec>;
8
8
  target?: DriverTarget<TSpec>;
@@ -13,7 +13,7 @@ type Options<TSpec extends SpecType> = {
13
13
  };
14
14
  export declare function makeCheckAndClose<TSpec extends SpecType>({ eyes, target: defaultTarget, environments: defaultEnvironments, spec, signal, logger: mainLogger, }: Options<TSpec>): ({ target, settings, logger, }?: {
15
15
  target?: Target<TSpec> | undefined;
16
- settings?: (import("@applitools/core-base").CheckSettings<Region | import("@applitools/driver").ElementReference<TSpec>> & import("./types").ScreenshotSettings<TSpec> & {
16
+ settings?: (import("@applitools/core-base").CheckSettings<utils.Region | import("@applitools/driver").ElementReference<TSpec>> & import("./types").ScreenshotSettings<TSpec> & {
17
17
  environments?: Environment[] | undefined;
18
18
  } & {
19
19
  disableBrowserFetching?: boolean | undefined;