@applitools/core 2.5.2 → 2.5.3-legacy

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 (190) hide show
  1. package/dist/abort.js +40 -0
  2. package/dist/automation/abort.js +47 -0
  3. package/dist/automation/close.js +52 -0
  4. package/dist/automation/extract-text.js +3 -2
  5. package/dist/automation/get-nml-client.js +36 -0
  6. package/dist/automation/get-results.js +21 -0
  7. package/dist/automation/get-viewport-size.js +3 -2
  8. package/dist/automation/locate-text.js +3 -2
  9. package/dist/automation/locate.js +3 -2
  10. package/dist/automation/set-viewport-size.js +3 -2
  11. package/dist/automation/types.js +0 -15
  12. package/dist/automation/utils/report-kobiton.js +21 -0
  13. package/dist/automation/utils/take-screenshot.js +4 -2
  14. package/dist/automation/utils/to-base-check-settings.js +69 -7
  15. package/dist/automation/utils/to-environment-key.js +31 -0
  16. package/dist/automation/utils/uniquify-environments.js +27 -0
  17. package/dist/automation/utils/wait-for-lazy-load.js +9 -8
  18. package/dist/autonomous/core.js +25 -0
  19. package/dist/autonomous/create-render-results.js +49 -0
  20. package/dist/autonomous/create-render-target.js +19 -0
  21. package/dist/autonomous/get-render-results.js +55 -0
  22. package/dist/autonomous/open-eyes.js +13 -0
  23. package/dist/autonomous/start-renders.js +67 -0
  24. package/dist/autonomous/take-snapshots.js +16 -0
  25. package/dist/autonomous/types.js +17 -0
  26. package/dist/check-and-close.js +32 -15
  27. package/dist/check.js +33 -30
  28. package/dist/classic/check-and-close.js +189 -46
  29. package/dist/classic/check.js +319 -60
  30. package/dist/classic/core.js +6 -5
  31. package/dist/classic/get-base-eyes.js +27 -7
  32. package/dist/classic/open-eyes.js +47 -57
  33. package/dist/classic/utils/extract-default-environments.js +73 -0
  34. package/dist/classic/utils/take-dom-capture.js +2 -1
  35. package/dist/classic/utils/take-screenshots.js +63 -0
  36. package/dist/cli/cli.js +99 -3
  37. package/dist/close-batch.js +8 -7
  38. package/dist/close.js +32 -4
  39. package/dist/core.js +43 -9
  40. package/dist/delete-test.js +9 -7
  41. package/dist/extract-text.js +9 -5
  42. package/dist/get-account-info.js +36 -0
  43. package/dist/get-ec-client.js +3 -2
  44. package/dist/get-eyes-results.js +29 -3
  45. package/dist/get-manager-results.js +52 -18
  46. package/dist/get-typed-eyes.js +5 -6
  47. package/dist/index.js +3 -3
  48. package/dist/lang.js +31 -0
  49. package/dist/locate-text.js +7 -5
  50. package/dist/locate.js +7 -5
  51. package/dist/make-manager.js +34 -11
  52. package/dist/offline/merge-configs.js +42 -0
  53. package/dist/offline/run-offline-snapshots.js +341 -0
  54. package/dist/open-eyes.js +192 -48
  55. package/dist/run-offline-snapshots.js +336 -0
  56. package/dist/troubleshoot/check-network.js +5 -1
  57. package/dist/troubleshoot/eyes.js +3 -3
  58. package/dist/troubleshoot/logs.js +76 -0
  59. package/dist/troubleshoot/ufg.js +23 -16
  60. package/dist/ufg/check-and-close.js +109 -174
  61. package/dist/ufg/check.js +111 -178
  62. package/dist/ufg/core.js +10 -8
  63. package/dist/ufg/create-render-target-from-snapshot.js +21 -0
  64. package/dist/ufg/get-base-eyes.js +40 -12
  65. package/dist/ufg/get-ufg-client.js +13 -4
  66. package/dist/ufg/open-eyes.js +33 -57
  67. package/dist/ufg/take-snapshots.js +92 -0
  68. package/dist/ufg/utils/extract-default-environment.js +22 -0
  69. package/dist/ufg/utils/generate-safe-selectors.js +9 -32
  70. package/dist/ufg/utils/take-dom-snapshot.js +61 -26
  71. package/dist/ufg/utils/take-dom-snapshots.js +99 -68
  72. package/dist/ufg/utils/to-generated-selectors.js +67 -0
  73. package/dist/ufg/utils/to-safe-check-settings.js +69 -0
  74. package/dist/universal/core-server.js +53 -22
  75. package/dist/universal/core.js +23 -6
  76. package/dist/universal/history.js +9 -0
  77. package/dist/universal/spec-driver.js +46 -50
  78. package/dist/{ufg/get-nml-client.js → utils/ensure-offline-folder.js} +14 -13
  79. package/dist/utils/extract-branching-timestamp.js +56 -0
  80. package/dist/utils/extract-current-commit.js +72 -0
  81. package/dist/utils/extract-git-info.js +168 -0
  82. package/dist/utils/extract-start-info.js +100 -0
  83. package/dist/utils/extract-test-environment.js +70 -0
  84. package/dist/utils/memory-usage-logging.js +46 -0
  85. package/dist/utils/populate-eyes-server-settings.js +41 -0
  86. package/dist/utils/validate-sdk-version.js +89 -0
  87. package/package.json +3 -3
  88. package/types/abort.d.ts +13 -0
  89. package/types/automation/abort.d.ts +16 -0
  90. package/types/automation/close.d.ts +14 -0
  91. package/types/automation/extract-text.d.ts +1 -1
  92. package/types/automation/get-nml-client.d.ts +16 -0
  93. package/types/automation/get-results.d.ts +11 -0
  94. package/types/automation/get-viewport-size.d.ts +1 -1
  95. package/types/automation/locate-text.d.ts +1 -1
  96. package/types/automation/locate.d.ts +1 -1
  97. package/types/automation/set-viewport-size.d.ts +1 -1
  98. package/types/automation/types.d.ts +107 -16
  99. package/types/automation/utils/report-kobiton.d.ts +12 -0
  100. package/types/automation/utils/take-screenshot.d.ts +5 -2
  101. package/types/automation/utils/to-base-check-settings.d.ts +13 -3
  102. package/types/automation/utils/to-environment-key.d.ts +2 -0
  103. package/types/automation/utils/uniquify-environments.d.ts +2 -0
  104. package/types/automation/utils/wait-for-lazy-load.d.ts +4 -8
  105. package/types/autonomous/core.d.ts +19 -0
  106. package/types/autonomous/create-render-results.d.ts +10 -0
  107. package/types/autonomous/create-render-target.d.ts +12 -0
  108. package/types/autonomous/get-render-results.d.ts +12 -0
  109. package/types/autonomous/open-eyes.d.ts +13 -0
  110. package/types/autonomous/start-renders.d.ts +12 -0
  111. package/types/autonomous/take-snapshots.d.ts +15 -0
  112. package/types/autonomous/types.d.ts +57 -0
  113. package/types/check-and-close.d.ts +3 -3
  114. package/types/check.d.ts +3 -3
  115. package/types/classic/check-and-close.d.ts +12 -5
  116. package/types/classic/check.d.ts +6 -3
  117. package/types/classic/core.d.ts +8 -2
  118. package/types/classic/get-base-eyes.d.ts +4 -8
  119. package/types/classic/open-eyes.d.ts +3 -4
  120. package/types/classic/types.d.ts +4 -5
  121. package/types/classic/utils/extract-default-environments.d.ts +9 -0
  122. package/types/classic/utils/take-dom-capture.d.ts +8 -0
  123. package/types/classic/utils/take-screenshots.d.ts +18 -0
  124. package/types/close-batch.d.ts +1 -1
  125. package/types/close.d.ts +3 -2
  126. package/types/core.d.ts +11 -2
  127. package/types/delete-test.d.ts +1 -1
  128. package/types/extract-text.d.ts +1 -1
  129. package/types/get-account-info.d.ts +11 -0
  130. package/types/get-ec-client.d.ts +1 -1
  131. package/types/get-eyes-results.d.ts +1 -1
  132. package/types/get-manager-results.d.ts +1 -1
  133. package/types/get-typed-eyes.d.ts +2 -4
  134. package/types/index.d.ts +2 -1
  135. package/types/lang.d.ts +32 -0
  136. package/types/locate-text.d.ts +1 -1
  137. package/types/locate.d.ts +1 -1
  138. package/types/make-manager.d.ts +11 -2
  139. package/types/offline/merge-configs.d.ts +1 -0
  140. package/types/offline/run-offline-snapshots.d.ts +11 -0
  141. package/types/open-eyes.d.ts +11 -2
  142. package/types/run-offline-snapshots.d.ts +6 -0
  143. package/types/troubleshoot/logs.d.ts +25 -0
  144. package/types/types.d.ts +19 -11
  145. package/types/ufg/check-and-close.d.ts +18 -10
  146. package/types/ufg/check.d.ts +5 -4
  147. package/types/ufg/core.d.ts +8 -5
  148. package/types/ufg/create-render-target-from-snapshot.d.ts +8 -0
  149. package/types/ufg/get-base-eyes.d.ts +4 -9
  150. package/types/ufg/get-ufg-client.d.ts +6 -3
  151. package/types/ufg/open-eyes.d.ts +3 -4
  152. package/types/ufg/take-snapshots.d.ts +17 -0
  153. package/types/ufg/types.d.ts +39 -39
  154. package/types/ufg/utils/extract-default-environment.d.ts +5 -0
  155. package/types/ufg/utils/generate-safe-selectors.d.ts +3 -12
  156. package/types/ufg/utils/take-dom-snapshot.d.ts +16 -21
  157. package/types/ufg/utils/take-dom-snapshots.d.ts +14 -10
  158. package/types/ufg/utils/to-generated-selectors.d.ts +34 -0
  159. package/types/ufg/utils/to-safe-check-settings.d.ts +22 -0
  160. package/types/universal/core-server.d.ts +6 -2
  161. package/types/universal/core.d.ts +6 -2
  162. package/types/universal/spec-driver.d.ts +6 -5
  163. package/types/universal/types.d.ts +59 -51
  164. package/types/utils/ensure-offline-folder.d.ts +1 -0
  165. package/types/utils/extract-branching-timestamp.d.ts +16 -0
  166. package/types/utils/extract-current-commit.d.ts +24 -0
  167. package/types/utils/extract-git-info.d.ts +59 -0
  168. package/types/utils/extract-start-info.d.ts +29 -0
  169. package/types/utils/extract-test-environment.d.ts +2 -0
  170. package/types/utils/memory-usage-logging.d.ts +7 -0
  171. package/types/utils/populate-eyes-server-settings.d.ts +2 -0
  172. package/types/utils/validate-sdk-version.d.ts +42 -0
  173. package/CHANGELOG.md +0 -222
  174. package/dist/classic/abort.js +0 -22
  175. package/dist/classic/close.js +0 -22
  176. package/dist/ufg/abort.js +0 -32
  177. package/dist/ufg/close.js +0 -37
  178. package/dist/ufg/get-results.js +0 -27
  179. package/dist/ufg/utils/take-vhses.js +0 -153
  180. package/dist/ufg/utils/uniquify-renderers.js +0 -27
  181. package/dist/utils/extract-ci-provider.js +0 -31
  182. package/types/classic/abort.d.ts +0 -16
  183. package/types/classic/close.d.ts +0 -16
  184. package/types/ufg/abort.d.ts +0 -21
  185. package/types/ufg/close.d.ts +0 -19
  186. package/types/ufg/get-nml-client.d.ts +0 -17
  187. package/types/ufg/get-results.d.ts +0 -16
  188. package/types/ufg/utils/take-vhses.d.ts +0 -17
  189. package/types/ufg/utils/uniquify-renderers.d.ts +0 -2
  190. package/types/utils/extract-ci-provider.d.ts +0 -1
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGetRenderResults = void 0;
4
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
5
+ function makeGetRenderResults({ core, logger: defaultLogger }) {
6
+ return async function getRenderResults({ renders, logger = defaultLogger, }) {
7
+ const clients = await renders.reduce(async (promise, render) => {
8
+ const ufgClient = await core.getUFGClient({
9
+ settings: {
10
+ ...render.account.ufgServer,
11
+ eyesServerUrl: render.account.eyesServer.eyesServerUrl,
12
+ apiKey: render.account.eyesServer.apiKey,
13
+ },
14
+ logger,
15
+ });
16
+ return promise.then(clients => {
17
+ const targets = clients.get(ufgClient);
18
+ if (targets) {
19
+ targets.push(render);
20
+ }
21
+ else {
22
+ clients.set(ufgClient, [render]);
23
+ }
24
+ return clients;
25
+ });
26
+ }, Promise.resolve(new Map()));
27
+ const results = await Promise.all(Array.from(clients.entries(), async ([ufgClient, renders]) => {
28
+ const results = await ufgClient.getRenderResults({ renders: renders.map(render => render.render), logger });
29
+ return results.map(({ selectorRegions, renderId, status, error, ...baseTarget }, index) => {
30
+ const { elementReferences: selectors, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
31
+ settings: renders[index].settings,
32
+ });
33
+ const baseSettings = getBaseCheckSettings({
34
+ calculatedRegions: selectors.calculate.map((_, index) => {
35
+ var _a;
36
+ return ({
37
+ regions: (_a = selectorRegions === null || selectorRegions === void 0 ? void 0 : selectorRegions[index]) !== null && _a !== void 0 ? _a : [],
38
+ });
39
+ }),
40
+ });
41
+ baseSettings.renderId = renderId;
42
+ return {
43
+ status,
44
+ error,
45
+ target: { ...baseTarget, isTransformed: true },
46
+ settings: baseSettings,
47
+ environment: renders[index].environment,
48
+ account: renders[index].account,
49
+ };
50
+ });
51
+ }));
52
+ return results.flat();
53
+ };
54
+ }
55
+ exports.makeGetRenderResults = makeGetRenderResults;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeOpenEyes = void 0;
4
+ const populate_eyes_server_settings_1 = require("../utils/populate-eyes-server-settings");
5
+ function makeOpenEyes({ core, logger: defaultLogger }) {
6
+ return async function openEyes({ settings, logger = defaultLogger, }) {
7
+ (0, populate_eyes_server_settings_1.populateEyesServerSettings)(settings);
8
+ logger.mask(settings.apiKey);
9
+ logger.mask(settings.eyesServerUrl);
10
+ return core.base.openEyes({ settings, logger });
11
+ };
12
+ }
13
+ exports.makeOpenEyes = makeOpenEyes;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeStartRenders = void 0;
4
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
5
+ function makeStartRenders({ core, logger: defaultLogger }) {
6
+ return async function startRenders({ targets, logger = defaultLogger, }) {
7
+ const clients = await targets.reduce(async (promise, target) => {
8
+ const ufgClient = await core.getUFGClient({
9
+ settings: {
10
+ ...target.account.ufgServer,
11
+ eyesServerUrl: target.account.eyesServer.eyesServerUrl,
12
+ apiKey: target.account.eyesServer.apiKey,
13
+ },
14
+ logger,
15
+ });
16
+ return promise.then(clients => {
17
+ const targets = clients.get(ufgClient);
18
+ if (targets) {
19
+ targets.push(target);
20
+ }
21
+ else {
22
+ clients.set(ufgClient, [target]);
23
+ }
24
+ return clients;
25
+ });
26
+ }, Promise.resolve(new Map()));
27
+ const renders = await Promise.all(Array.from(clients.entries(), async ([ufgClient, targets]) => {
28
+ const [renders, ...environments] = await Promise.all([
29
+ ufgClient.startRenders({
30
+ renders: targets.map(target => {
31
+ var _a;
32
+ const { elementReferences: selectors } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings: target.settings });
33
+ return {
34
+ target: target.target,
35
+ settings: {
36
+ ...target.settings,
37
+ region: (_a = selectors.target) !== null && _a !== void 0 ? _a : target.settings.region,
38
+ scrollRootElement: selectors.scrolling,
39
+ selectorsToCalculate: selectors.calculate,
40
+ includeFullPageSize: Boolean(target.settings.pageId),
41
+ environment: target.environment,
42
+ uploadUrl: target.account.uploadUrl,
43
+ stitchingServiceUrl: target.account.stitchingServiceUrl,
44
+ },
45
+ };
46
+ }),
47
+ logger,
48
+ }),
49
+ ...targets.map(async (target) => {
50
+ const environment = await ufgClient.getActualEnvironment({
51
+ settings: { environment: target.environment },
52
+ logger,
53
+ });
54
+ return { ...environment, properties: target.environment.properties };
55
+ }),
56
+ ]);
57
+ return renders.map((render, index) => ({
58
+ render,
59
+ settings: targets[index].settings,
60
+ environment: environments[index],
61
+ account: targets[index].account,
62
+ }));
63
+ }));
64
+ return renders.flat();
65
+ };
66
+ }
67
+ exports.makeStartRenders = makeStartRenders;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeTakeSnapshots = void 0;
4
+ const driver_1 = require("@applitools/driver");
5
+ const populate_eyes_server_settings_1 = require("../utils/populate-eyes-server-settings");
6
+ const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
7
+ function makeTakeSnapshots({ core, spec, logger: defaultLogger }) {
8
+ return async function takeSnapshots({ target, settings, logger = defaultLogger, }) {
9
+ (0, populate_eyes_server_settings_1.populateEyesServerSettings)(settings);
10
+ const account = await core.base.getAccountInfo({ settings: settings, logger });
11
+ settings.environments = (0, uniquify_environments_1.uniquifyEnvironments)(settings.environments);
12
+ const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
13
+ return core.takeSnapshots({ driver, settings, account, logger });
14
+ };
15
+ }
16
+ exports.makeTakeSnapshots = makeTakeSnapshots;
@@ -0,0 +1,17 @@
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
+ __exportStar(require("../ufg/types"), exports);
@@ -1,23 +1,40 @@
1
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
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.makeCheckAndClose = void 0;
4
27
  const driver_1 = require("@applitools/driver");
5
- function makeCheckAndClose({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
6
- return async function checkAndClose({ type = defaultType, target = defaultTarget, settings = {}, config, logger = defaultLogger, } = {}) {
7
- var _a;
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ function makeCheckAndClose({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: mainLogger, }) {
30
+ return async function checkAndClose({ type = defaultType, target = defaultTarget, settings = {}, config, logger = mainLogger, } = {}) {
31
+ logger = logger.extend(mainLogger, { tags: [`check-and-close-${type}-${utils.general.shortid()}`] });
8
32
  settings = { ...config === null || config === void 0 ? void 0 : config.screenshot, ...config === null || config === void 0 ? void 0 : config.check, ...config === null || config === void 0 ? void 0 : config.close, ...settings };
9
- const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
10
- const environment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
11
- const typedEyes = await eyes.getTypedEyes({
12
- type,
13
- settings: (_a = settings.renderers) === null || _a === void 0 ? void 0 : _a.map(renderer => ({
14
- type: (environment === null || environment === void 0 ? void 0 : environment.isNative) ? 'native' : 'web',
15
- renderer,
16
- })),
17
- logger,
18
- });
19
- const results = await typedEyes.checkAndClose({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
20
- return results;
33
+ const driver = (0, driver_1.isDriver)(target, spec)
34
+ ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
35
+ : null;
36
+ const typedEyes = await eyes.getTypedEyes({ type, logger });
37
+ await typedEyes.checkAndClose({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
21
38
  };
22
39
  }
23
40
  exports.makeCheckAndClose = makeCheckAndClose;
package/dist/check.js CHANGED
@@ -29,48 +29,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheck = void 0;
30
30
  const driver_1 = require("@applitools/driver");
31
31
  const utils = __importStar(require("@applitools/utils"));
32
+ const lang = __importStar(require("./lang"));
32
33
  const chalk_1 = __importDefault(require("chalk"));
33
- function makeCheck({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
34
+ function makeCheck({ type: defaultType = 'classic', eyes, target: defaultTarget, spec, logger: mainLogger, }) {
34
35
  let stepIndex = 0;
35
- return async function check({ type = defaultType, target = defaultTarget, settings, config, logger = defaultLogger, } = {}) {
36
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
37
- var _s, _t, _u, _v;
36
+ return async function check({ type = defaultType, target = defaultTarget, settings, config, logger = mainLogger, } = {}) {
37
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
38
+ var _r, _s, _t, _u, _v;
39
+ logger = logger.extend(mainLogger, { tags: [`check-${type}-${utils.general.shortid()}`] });
38
40
  settings = { ...config === null || config === void 0 ? void 0 : config.screenshot, ...config === null || config === void 0 ? void 0 : config.check, ...settings };
39
41
  (_a = settings.fully) !== null && _a !== void 0 ? _a : (settings.fully = !settings.region && (!settings.frames || settings.frames.length === 0));
40
42
  (_b = settings.waitBeforeCapture) !== null && _b !== void 0 ? _b : (settings.waitBeforeCapture = 100);
41
- (_c = settings.stitchMode) !== null && _c !== void 0 ? _c : (settings.stitchMode = 'Scroll');
42
- (_d = settings.hideScrollbars) !== null && _d !== void 0 ? _d : (settings.hideScrollbars = true);
43
- (_e = settings.hideCaret) !== null && _e !== void 0 ? _e : (settings.hideCaret = true);
43
+ (_c = settings.hideScrollbars) !== null && _c !== void 0 ? _c : (settings.hideScrollbars = true);
44
+ (_d = settings.hideCaret) !== null && _d !== void 0 ? _d : (settings.hideCaret = true);
44
45
  settings.overlap = { top: 10, bottom: 50, ...settings === null || settings === void 0 ? void 0 : settings.overlap };
45
- (_f = settings.matchLevel) !== null && _f !== void 0 ? _f : (settings.matchLevel = 'Strict');
46
- (_g = settings.ignoreCaret) !== null && _g !== void 0 ? _g : (settings.ignoreCaret = true);
47
- (_h = settings.sendDom) !== null && _h !== void 0 ? _h : (settings.sendDom = eyes.test.account.rcaEnabled || settings.matchLevel === 'Layout' || settings.enablePatterns || settings.useDom);
48
- (_j = settings.autProxy) !== null && _j !== void 0 ? _j : (settings.autProxy = eyes.test.server.proxy);
49
- (_k = settings.useDom) !== null && _k !== void 0 ? _k : (settings.useDom = false);
50
- (_l = (_s = settings).retryTimeout) !== null && _l !== void 0 ? _l : (_s.retryTimeout = 2000);
46
+ (_e = settings.matchLevel) !== null && _e !== void 0 ? _e : (settings.matchLevel = 'Strict');
47
+ (_f = settings.ignoreCaret) !== null && _f !== void 0 ? _f : (settings.ignoreCaret = true);
48
+ (_g = settings.sendDom) !== null && _g !== void 0 ? _g : (settings.sendDom = eyes.test.account.rcaEnabled ||
49
+ settings.matchLevel === 'Layout' ||
50
+ settings.matchLevel === 'Dynamic' ||
51
+ settings.enablePatterns ||
52
+ settings.useDom ||
53
+ !utils.types.isEmpty(settings.dynamicRegions) ||
54
+ !utils.types.isEmpty(settings.layoutRegions));
55
+ (_h = settings.autProxy) !== null && _h !== void 0 ? _h : (settings.autProxy = eyes.test.eyesServer.proxy);
56
+ (_j = settings.useDom) !== null && _j !== void 0 ? _j : (settings.useDom = false);
57
+ (_k = (_r = settings).retryTimeout) !== null && _k !== void 0 ? _k : (_r.retryTimeout = 0);
51
58
  settings.lazyLoad = settings.lazyLoad === true ? {} : settings.lazyLoad;
52
59
  if (settings.lazyLoad) {
53
- (_m = (_t = settings.lazyLoad).scrollLength) !== null && _m !== void 0 ? _m : (_t.scrollLength = 300);
54
- (_o = (_u = settings.lazyLoad).waitingTime) !== null && _o !== void 0 ? _o : (_u.waitingTime = 2000);
55
- (_p = (_v = settings.lazyLoad).maxAmountToScroll) !== null && _p !== void 0 ? _p : (_v.maxAmountToScroll = 15000);
60
+ (_l = (_s = settings.lazyLoad).scrollLength) !== null && _l !== void 0 ? _l : (_s.scrollLength = 300);
61
+ (_m = (_t = settings.lazyLoad).waitingTime) !== null && _m !== void 0 ? _m : (_t.waitingTime = 2000);
62
+ (_o = (_u = settings.lazyLoad).maxAmountToScroll) !== null && _o !== void 0 ? _o : (_u.maxAmountToScroll = 15000);
56
63
  }
57
64
  settings.stepIndex = stepIndex++;
58
- (_q = settings.waitBetweenStitches) !== null && _q !== void 0 ? _q : (settings.waitBetweenStitches = utils.types.isObject(settings.lazyLoad) ? settings.lazyLoad.waitingTime : 100);
65
+ (_p = settings.waitBetweenStitches) !== null && _p !== void 0 ? _p : (settings.waitBetweenStitches = utils.types.isObject(settings.lazyLoad) ? settings.lazyLoad.waitingTime : 100);
66
+ if (settings.mobileOptions) {
67
+ (_q = (_v = settings.mobileOptions).keepNavigationBar) !== null && _q !== void 0 ? _q : (_v.keepNavigationBar = false);
68
+ }
59
69
  if (settings.matchLevel === 'Content') {
60
- logger.console.log(chalk_1.default.yellow(`The "Content" match level value has been deprecated, use "IgnoreColors" instead.`));
70
+ logger.console.log(chalk_1.default.yellow(lang.matchLevelContentDeprecatedWarning));
61
71
  }
62
- const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
63
- const environment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
64
- const typedEyes = await eyes.getTypedEyes({
65
- type,
66
- settings: (_r = settings.renderers) === null || _r === void 0 ? void 0 : _r.map(renderer => ({
67
- type: (environment === null || environment === void 0 ? void 0 : environment.isNative) ? 'native' : 'web',
68
- renderer,
69
- })),
70
- logger,
71
- });
72
- const results = await typedEyes.check({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
73
- return results;
72
+ const driver = (0, driver_1.isDriver)(target, spec)
73
+ ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
74
+ : null;
75
+ const typedEyes = await eyes.getTypedEyes({ type, logger });
76
+ return typedEyes.check({ target: driver !== null && driver !== void 0 ? driver : target, settings, logger });
74
77
  };
75
78
  }
76
79
  exports.makeCheck = makeCheck;
@@ -22,65 +22,208 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  exports.makeCheckAndClose = void 0;
30
+ const nml_client_1 = require("@applitools/nml-client");
27
31
  const driver_1 = require("@applitools/driver");
28
- const take_screenshot_1 = require("../automation/utils/take-screenshot");
29
- const take_dom_capture_1 = require("./utils/take-dom-capture");
32
+ const take_screenshots_1 = require("./utils/take-screenshots");
30
33
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
31
34
  const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
35
+ const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
36
+ const to_environment_key_1 = require("../automation/utils/to-environment-key");
37
+ const abort_error_1 = require("../errors/abort-error");
38
+ const chalk_1 = __importDefault(require("chalk"));
32
39
  const utils = __importStar(require("@applitools/utils"));
33
- function makeCheckAndClose({ eyes, target: defaultTarget, spec, logger: defaultLogger, }) {
34
- return async function checkAndClose({ target = defaultTarget, settings = {}, logger = defaultLogger, } = {}) {
35
- var _a;
40
+ const lang = __importStar(require("../lang"));
41
+ function makeCheckAndClose({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
42
+ return async function checkAndClose({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
43
+ var _a, _b, _c;
44
+ logger = logger.extend(mainLogger);
36
45
  logger.log('Command "checkAndClose" is called with settings', settings);
37
46
  if (!target)
38
47
  throw new Error('Method was called with no target');
39
- const baseEyes = await eyes.getBaseEyes({ logger });
40
- if (!(0, driver_1.isDriver)(target, spec)) {
41
- const baseSettings = settings;
42
- return (await Promise.all(baseEyes.map(baseEyes => baseEyes.checkAndClose({ target, settings: baseSettings, logger })))).flat();
48
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
49
+ logger.warn('Command "checkAndClose" was called after test was already aborted');
50
+ throw new abort_error_1.AbortError('Command "checkAndClose" was called after test was already aborted');
43
51
  }
44
- const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
45
- const environment = await driver.getEnvironment();
46
- if (settings.lazyLoad && environment.isWeb) {
47
- await (0, wait_for_lazy_load_1.waitForLazyLoad)({
48
- context: driver.currentContext,
49
- settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
50
- logger,
52
+ const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
53
+ const baseTargets = [];
54
+ const baseSettings = [];
55
+ const exactEnvironments = [];
56
+ let driver;
57
+ if ((0, driver_1.isDriver)(target, spec)) {
58
+ driver = await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger });
59
+ await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
60
+ const driverEnvironment = await driver.getEnvironment();
61
+ uniqueEnvironments.forEach(environment => {
62
+ var _a, _b;
63
+ var _c, _d;
64
+ if (utils.types.has(environment, 'iosDeviceInfo')) {
65
+ (_a = (_c = environment.iosDeviceInfo).version) !== null && _a !== void 0 ? _a : (_c.version = driverEnvironment.platformVersion);
66
+ }
67
+ else if (utils.types.has(environment, 'androidDeviceInfo')) {
68
+ (_b = (_d = environment.androidDeviceInfo).version) !== null && _b !== void 0 ? _b : (_d.version = driverEnvironment.platformVersion);
69
+ }
70
+ return environment;
51
71
  });
72
+ if (settings.lazyLoad && driverEnvironment.isWeb) {
73
+ await (0, wait_for_lazy_load_1.waitForLazyLoad)({
74
+ context: driver.currentContext,
75
+ settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
76
+ logger,
77
+ });
78
+ }
79
+ const { elementReferences, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
80
+ if (driverEnvironment.isWeb ||
81
+ !((_c = driverEnvironment.applitoolsLib) === null || _c === void 0 ? void 0 : _c.instrumented) ||
82
+ settings.screenshotMode === 'default') {
83
+ let actualEnvironments;
84
+ if (settings.screenshotMode === 'default') {
85
+ if (!uniqueEnvironments.every(environment => {
86
+ return (!utils.types.has(environment, 'iosDeviceInfo') && !utils.types.has(environment, 'androidDeviceInfo'));
87
+ })) {
88
+ const nmlEnvironmentsInfo = await (0, nml_client_1.getNMLEnvironmentsInfo)({
89
+ environments: uniqueEnvironments,
90
+ supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl,
91
+ proxy: eyes.test.eyesServer.proxy,
92
+ logger,
93
+ });
94
+ actualEnvironments = nmlEnvironmentsInfo.renderEnvironments;
95
+ }
96
+ }
97
+ const screenshots = await (0, take_screenshots_1.takeScreenshots)({
98
+ driver,
99
+ settings: {
100
+ ...settings,
101
+ environments: actualEnvironments !== null && actualEnvironments !== void 0 ? actualEnvironments : uniqueEnvironments,
102
+ regionsToCalculate: elementReferences.calculate,
103
+ calculateView: !!settings.pageId,
104
+ domSettings: settings.sendDom ? { proxy: eyes.test.eyesServer.proxy } : undefined,
105
+ },
106
+ logger,
107
+ });
108
+ if (actualEnvironments)
109
+ exactEnvironments.push(...actualEnvironments);
110
+ else
111
+ exactEnvironments.push(...uniqueEnvironments);
112
+ screenshots.forEach(({ calculatedRegions, ...baseTarget }) => {
113
+ baseTargets.push(baseTarget);
114
+ baseSettings.push(getBaseCheckSettings({ calculatedRegions }));
115
+ });
116
+ }
117
+ else {
118
+ if (driverEnvironment.applitoolsLib.conflictingCapabilities) {
119
+ const message = lang.applitoolsLibConflictingCapabilitiesWarning({
120
+ conflictingCapabilities: driverEnvironment.applitoolsLib.conflictingCapabilities,
121
+ });
122
+ logger.console.log(chalk_1.default.yellow(message));
123
+ logger.log(message);
124
+ }
125
+ const nmlClient = await eyes.core.getNMLClient({
126
+ driver,
127
+ settings: { ...eyes.test.eyesServer, supportedEnvironmentsUrl: eyes.test.supportedEnvironmentsUrl },
128
+ logger,
129
+ });
130
+ const screenshots = await nmlClient.takeScreenshots({
131
+ settings: {
132
+ environments: uniqueEnvironments,
133
+ fully: settings.fully,
134
+ stitchMode: settings.stitchMode,
135
+ hideScrollbars: settings.hideScrollbars,
136
+ hideCaret: settings.hideScrollbars,
137
+ overlap: settings.overlap,
138
+ waitBeforeCapture: settings.waitBeforeCapture,
139
+ waitBetweenStitches: settings.waitBetweenStitches,
140
+ lazyLoad: settings.lazyLoad,
141
+ name: settings.name,
142
+ },
143
+ logger,
144
+ });
145
+ screenshots.forEach(({ environment, ...baseTarget }) => {
146
+ exactEnvironments.push(environment);
147
+ baseTargets.push({ ...baseTarget, isTransformed: true });
148
+ baseSettings.push(getBaseCheckSettings({ calculatedRegions: [] }));
149
+ });
150
+ }
52
151
  }
53
- const { elementReferencesToCalculate, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({ settings });
54
- const screenshot = await (0, take_screenshot_1.takeScreenshot)({
55
- driver,
56
- settings: { ...settings, regionsToCalculate: elementReferencesToCalculate },
57
- logger,
58
- });
59
- const baseTarget = {
60
- name: await driver.getTitle(),
61
- source: await driver.getUrl(),
62
- image: await screenshot.image.toPng(),
63
- locationInViewport: utils.geometry.location(screenshot.region),
64
- isTransformed: true,
65
- };
66
- const baseSettings = getBaseCheckSettings({ calculatedRegions: screenshot.calculatedRegions });
67
- if (environment.isWeb && settings.sendDom) {
68
- if (settings.fully)
69
- await screenshot.scrollingElement.setAttribute('data-applitools-scroll', 'true');
70
- else
71
- await ((_a = screenshot.element) === null || _a === void 0 ? void 0 : _a.setAttribute('data-applitools-scroll', 'true'));
72
- baseTarget.dom = await (0, take_dom_capture_1.takeDomCapture)({ driver, settings: { proxy: eyes.test.server.proxy }, logger }).catch(() => undefined);
73
- }
74
- if (settings.pageId) {
75
- const scrollingElement = await driver.mainContext.getScrollingElement();
76
- const scrollingOffset = !scrollingElement || environment.isNative ? { x: 0, y: 0 } : await scrollingElement.getScrollOffset();
77
- baseTarget.locationInView = utils.geometry.offset(scrollingOffset, screenshot.region);
78
- baseTarget.fullViewSize = scrollingElement
79
- ? await scrollingElement.getContentSize()
80
- : await driver.getViewportSize();
152
+ else {
153
+ exactEnvironments.push(...uniqueEnvironments);
154
+ baseTargets.push(target);
155
+ baseSettings.push(settings);
81
156
  }
82
- await screenshot.restoreState();
83
- return (await Promise.all(baseEyes.map(baseEyes => baseEyes.checkAndClose({ target: baseTarget, settings: baseSettings, logger })))).flat();
157
+ const promises = exactEnvironments.map(async (environment, index) => {
158
+ var _a, _b, _c, _d;
159
+ const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
160
+ try {
161
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
162
+ environmentLogger.warn('Command "checkAndClose" was aborted before checking');
163
+ throw new abort_error_1.AbortError('Command "checkAndClose" was aborted before checking');
164
+ }
165
+ const baseEyes = await eyes.getBaseEyes({ settings: { environment, driver }, logger: environmentLogger });
166
+ try {
167
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
168
+ environmentLogger.warn('Command "checkAndClose" was aborted before checking');
169
+ throw new abort_error_1.AbortError('Command "checkAndClose" was aborted before checking');
170
+ }
171
+ else if (!baseEyes.running) {
172
+ environmentLogger.warn(`Check on environment with id "${(_a = baseEyes.test.environment) === null || _a === void 0 ? void 0 : _a.environmentId}" was aborted during one of the previous steps`);
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
+ }
175
+ if (settings.assumesMutability) {
176
+ void eyes.core.logEvent({
177
+ settings: {
178
+ level: 'Notice',
179
+ event: {
180
+ type: 'eyes.check',
181
+ message: 'Assuming mutability for check Target',
182
+ test: {
183
+ checkName: settings.name,
184
+ batchId: baseEyes.test.batchId,
185
+ sessionId: baseEyes.test.sessionId,
186
+ testName: baseEyes.test.testName,
187
+ testId: baseEyes.test.testId,
188
+ userTestId: baseEyes.test.userTestId,
189
+ appId: baseEyes.test.appId,
190
+ baselineId: baseEyes.test.baselineId,
191
+ environmentId: (_c = baseEyes.test.environment) === null || _c === void 0 ? void 0 : _c.environmentId,
192
+ },
193
+ isNew: baseEyes.test.isNew,
194
+ resultsUrl: baseEyes.test.resultsUrl,
195
+ },
196
+ ...eyes.test.eyesServer,
197
+ },
198
+ });
199
+ }
200
+ await baseEyes.checkAndClose({
201
+ target: baseTargets[index],
202
+ settings: baseSettings[index],
203
+ logger: environmentLogger,
204
+ });
205
+ }
206
+ catch (error) {
207
+ environmentLogger.error(`Check on environment with id "${(_d = baseEyes.test.environment) === null || _d === void 0 ? void 0 : _d.environmentId}" failed due to an error`, error);
208
+ if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
209
+ await baseEyes.abort({ logger: environmentLogger, settings: { reason: error } });
210
+ }
211
+ }
212
+ catch (error) {
213
+ environmentLogger.error(`Environment with id ${environment.environmentId} failed before checking started due to an error`, error);
214
+ error.info = { ...error.info, userTestId: eyes.test.userTestId, environment: environment };
215
+ throw error;
216
+ }
217
+ });
218
+ exactEnvironments.forEach((environment, index) => {
219
+ const key = (0, to_environment_key_1.toEnvironmentKey)(environment);
220
+ let item = eyes.storage.get(key);
221
+ if (!item) {
222
+ item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
223
+ eyes.storage.set(key, item);
224
+ }
225
+ item.jobs.push(promises[index]);
226
+ });
84
227
  };
85
228
  }
86
229
  exports.makeCheckAndClose = makeCheckAndClose;