@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
package/dist/ufg/check.js CHANGED
@@ -28,241 +28,174 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.makeCheck = void 0;
30
30
  const driver_1 = require("@applitools/driver");
31
- const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
- const take_vhses_1 = require("./utils/take-vhses");
33
- const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
34
- const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
35
- const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
36
- const uniquify_renderers_1 = require("./utils/uniquify-renderers");
31
+ const uniquify_environments_1 = require("../automation/utils/uniquify-environments");
32
+ const to_environment_key_1 = require("../automation/utils/to-environment-key");
37
33
  const abort_error_1 = require("../errors/abort-error");
38
34
  const utils = __importStar(require("@applitools/utils"));
35
+ const lang = __importStar(require("../lang"));
39
36
  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, }) {
42
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
37
+ const take_snapshots_1 = require("./take-snapshots");
38
+ const create_render_target_from_snapshot_1 = require("./create-render-target-from-snapshot");
39
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
40
+ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
41
+ return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
42
+ var _a;
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');
46
47
  throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
47
48
  }
48
- const { elementReferencesToCalculate, elementReferenceToTarget, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
49
- settings,
50
- });
51
- const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
49
+ const uniqueEnvironments = (0, uniquify_environments_1.uniquifyEnvironments)((_a = settings.environments) !== null && _a !== void 0 ? _a : defaultEnvironments);
52
50
  const ufgClient = await eyes.core.getUFGClient({
53
- config: { ...eyes.test.ufgServer },
54
- concurrency: uniqueRenderers.length || 5,
51
+ settings: {
52
+ ...eyes.test.ufgServer,
53
+ eyesServerUrl: eyes.test.eyesServer.eyesServerUrl,
54
+ apiKey: eyes.test.eyesServer.apiKey,
55
+ },
55
56
  logger,
56
57
  });
57
58
  let snapshots;
58
- let snapshotUrl;
59
- let snapshotTitle;
60
- let userAgent;
61
- let regionToTarget;
62
- let scrollRootSelector;
63
- let selectorsToCalculate;
64
- const driver = spec && (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
65
- if (driver) {
66
- const environment = await driver.getEnvironment();
67
- await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
68
- if (uniqueRenderers.length === 0) {
69
- if (environment.isWeb) {
70
- const viewportSize = await driver.getViewportSize();
71
- uniqueRenderers.push({ name: 'chrome', ...viewportSize });
72
- }
73
- else {
74
- // TODO add default nmg renderers
75
- }
76
- }
77
- let cleanupGeneratedSelectors;
78
- if (environment.isWeb) {
79
- userAgent = (_c = (await driver.getUserAgentLegacy())) !== null && _c !== void 0 ? _c : undefined;
80
- const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
81
- context: driver.currentContext,
82
- elementReferences: [
83
- ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
84
- ...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
85
- ...elementReferencesToCalculate,
86
- ],
87
- });
88
- cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
89
- selectorsToCalculate = generated.selectors;
90
- if (elementReferenceToTarget) {
91
- if (!((_d = selectorsToCalculate[0]) === null || _d === void 0 ? void 0 : _d.safeSelector))
92
- throw new Error('Target element not found');
93
- regionToTarget = selectorsToCalculate[0].safeSelector;
94
- selectorsToCalculate = selectorsToCalculate.slice(1);
95
- }
96
- if (settings.scrollRootElement) {
97
- scrollRootSelector = (_e = selectorsToCalculate[0].safeSelector) !== null && _e !== void 0 ? _e : undefined;
98
- selectorsToCalculate = selectorsToCalculate.slice(1);
99
- }
100
- }
101
- else {
102
- regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
103
- ? (_g = (_f = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _f === void 0 ? void 0 : _f.call(spec, settings.scrollRootElement)) !== null && _g !== void 0 ? _g : undefined
104
- : undefined;
105
- scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
106
- ? (_j = (_h = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _h === void 0 ? void 0 : _h.call(spec, settings.scrollRootElement)) !== null && _j !== void 0 ? _j : undefined
107
- : undefined;
108
- }
109
- const currentContext = driver.currentContext;
110
- const snapshotOptions = {
111
- settings: {
112
- ...eyes.test.server,
113
- waitBeforeCapture: settings.waitBeforeCapture,
114
- disableBrowserFetching: settings.disableBrowserFetching,
115
- layoutBreakpoints: settings.layoutBreakpoints,
116
- renderers: uniqueRenderers,
117
- skipResources: ufgClient.getCachedResourceUrls(),
118
- },
119
- hooks: {
120
- async beforeSnapshots() {
121
- if (settings.lazyLoad && environment.isWeb) {
122
- await (0, wait_for_lazy_load_1.waitForLazyLoad)({
123
- context: driver.currentContext,
124
- settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
125
- logger,
126
- });
127
- }
128
- },
129
- },
130
- provides: {
131
- getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
132
- getIOSDevices: ufgClient.getIOSDevices,
133
- },
134
- };
135
- if (environment.isWeb) {
136
- snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, ...snapshotOptions, logger });
137
- }
138
- else {
139
- const nmlClient = await eyes.core.getNMLClient({ config: eyes.test.server, driver, logger });
140
- if (nmlClient) {
141
- snapshots = (await nmlClient.takeSnapshots({ ...snapshotOptions, logger }));
142
- }
143
- else {
144
- snapshots = await (0, take_vhses_1.takeVHSes)({ driver, ...snapshotOptions, logger });
145
- }
146
- }
147
- await currentContext.focus();
148
- snapshotUrl = await driver.getUrl();
149
- snapshotTitle = await driver.getTitle();
150
- await (cleanupGeneratedSelectors === null || cleanupGeneratedSelectors === void 0 ? void 0 : cleanupGeneratedSelectors());
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
+ });
151
69
  }
152
70
  else {
153
- snapshots = !utils.types.isArray(target) ? Array(uniqueRenderers.length).fill(target) : target;
154
- snapshotUrl = utils.types.has(snapshots[0], 'url') ? snapshots[0].url : undefined;
71
+ // TODO (amit)
72
+ snapshots = !utils.types.isArray(target) ? Array(uniqueEnvironments.length).fill(target) : target;
155
73
  }
156
- regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_k = elementReferenceToTarget) !== null && _k !== void 0 ? _k : settings.region);
157
- selectorsToCalculate !== null && selectorsToCalculate !== void 0 ? selectorsToCalculate : (selectorsToCalculate = elementReferencesToCalculate.map(selector => ({
158
- originalSelector: selector,
159
- safeSelector: selector,
160
- })));
161
- const promises = uniqueRenderers.map(async (renderer, index) => {
162
- if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
163
- 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);
74
+ const promises = snapshots.map(async (snapshot, i) => {
75
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
76
+ const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
77
+ const { target } = snapshot;
78
+ const environment = uniqueEnvironments[i];
79
+ if (utils.types.has(environment, 'name') && environment.name === 'edge') {
80
+ environmentLogger.console.log(chalk_1.default.yellow(lang.edgeUfgEnvironmentDeprecatedWarning));
165
81
  }
166
82
  try {
167
83
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
168
- logger.warn('Command "check" was aborted before rendering');
84
+ environmentLogger.warn('Command "check" was aborted before rendering');
169
85
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
170
86
  }
171
- const { cookies, ...snapshot } = snapshots[index];
172
- const snapshotType = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
173
- const renderTargetPromise = ufgClient.createRenderTarget({
174
- snapshot,
175
- settings: {
176
- renderer,
177
- referer: snapshotUrl,
178
- cookies,
179
- proxy: eyes.test.server.proxy,
180
- autProxy: settings.autProxy,
181
- userAgent,
182
- },
183
- });
184
- const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
87
+ if (utils.types.has(environment, 'iosDeviceInfo') || utils.types.has(environment, 'androidDeviceInfo')) {
88
+ environment.type = utils.types.has(target, 'cdt') ? 'web' : 'native';
89
+ }
90
+ const renderTargetPromise = (0, create_render_target_from_snapshot_1.createRenderTargetFromSnapshot)({ ufgClient, snapshot, logger: environmentLogger });
91
+ const baseEyes = await eyes.getBaseEyes({ settings: { environment, driver }, logger: environmentLogger });
185
92
  try {
186
93
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
187
- logger.warn('Command "check" was aborted before rendering');
94
+ environmentLogger.warn('Command "check" was aborted before rendering');
188
95
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
189
96
  }
190
97
  else if (!baseEyes.running) {
191
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
192
- throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
98
+ environmentLogger.warn(`Render on environment with id "${(_a = baseEyes.test.environment) === null || _a === void 0 ? void 0 : _a.environmentId}" was aborted during one of the previous steps`);
99
+ throw new abort_error_1.AbortError(`Render on environment with id "${(_b = baseEyes.test.environment) === null || _b === void 0 ? void 0 : _b.environmentId}" was aborted during one of the previous steps`);
193
100
  }
194
101
  const renderTarget = await renderTargetPromise;
195
102
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
196
- logger.warn('Command "check" was aborted before rendering');
103
+ environmentLogger.warn('Command "check" was aborted before rendering');
197
104
  throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
198
105
  }
199
106
  else if (!baseEyes.running) {
200
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
201
- throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
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`);
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`);
202
109
  }
110
+ const { elementReferences: selectors, getBaseCheckSettings } = (0, to_base_check_settings_1.toBaseCheckSettings)({
111
+ settings: snapshot.settings,
112
+ });
203
113
  const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
204
114
  target: renderTarget,
205
115
  settings: {
206
- ...settings,
207
- region: regionToTarget,
208
- scrollRootElement: scrollRootSelector,
209
- selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
210
- includeFullPageSize: Boolean(settings.pageId),
211
- type: snapshotType,
212
- renderer,
213
- rendererUniqueId: baseEyes.test.rendererUniqueId,
214
- rendererId: baseEyes.test.rendererId,
116
+ ...snapshot.settings,
117
+ region: (_e = selectors.target) !== null && _e !== void 0 ? _e : snapshot.settings.region,
118
+ scrollRootElement: selectors.scrolling,
119
+ selectorsToCalculate: selectors.calculate,
120
+ includeFullPageSize: Boolean(snapshot.settings.pageId),
121
+ environment: { ...environment, environmentId: baseEyes.test.environment.environmentId },
122
+ uploadUrl: baseEyes.test.uploadUrl,
123
+ stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
215
124
  },
216
125
  signal,
126
+ logger: environmentLogger,
217
127
  });
218
- let offset = 0;
219
128
  const baseSettings = getBaseCheckSettings({
220
- calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
221
- selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
222
- regions: safeSelector ? selectorRegions[offset++] : [],
223
- })),
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
+ }),
224
135
  });
225
136
  baseSettings.renderId = renderId;
226
- baseTarget.source = snapshotUrl;
227
- baseTarget.name = snapshotTitle;
137
+ baseTarget.source = snapshot.url;
138
+ baseTarget.name = snapshot.title;
228
139
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
229
- logger.warn('Command "check" was aborted after rendering');
140
+ environmentLogger.warn('Command "check" was aborted after rendering');
230
141
  throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
231
142
  }
232
143
  else if (!baseEyes.running) {
233
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
234
- throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
144
+ environmentLogger.warn(`Render on environment with id "${(_f = baseEyes.test.environment) === null || _f === void 0 ? void 0 : _f.environmentId}" was aborted during one of the previous steps`);
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`);
235
146
  }
236
- const [result] = await baseEyes.check({
147
+ if (settings.assumesMutability) {
148
+ void eyes.core.logEvent({
149
+ settings: {
150
+ level: 'Notice',
151
+ event: {
152
+ type: 'eyes.check',
153
+ message: 'Assuming mutability for check Target',
154
+ test: {
155
+ checkName: settings.name,
156
+ batchId: baseEyes.test.batchId,
157
+ sessionId: baseEyes.test.sessionId,
158
+ testName: baseEyes.test.testName,
159
+ testId: baseEyes.test.testId,
160
+ userTestId: baseEyes.test.userTestId,
161
+ appId: baseEyes.test.appId,
162
+ baselineId: baseEyes.test.baselineId,
163
+ environmentId: (_h = baseEyes.test.environment) === null || _h === void 0 ? void 0 : _h.environmentId,
164
+ },
165
+ isNew: baseEyes.test.isNew,
166
+ resultsUrl: baseEyes.test.resultsUrl,
167
+ },
168
+ ...eyes.test.eyesServer,
169
+ },
170
+ });
171
+ }
172
+ await baseEyes.check({
237
173
  target: { ...baseTarget, isTransformed: true },
238
174
  settings: baseSettings,
239
- logger,
175
+ logger: environmentLogger,
240
176
  });
241
- if (!baseEyes.running) {
242
- logger.warn(`Renderer with id ${baseEyes.test.rendererId} was aborted during one of the previous steps`);
243
- throw new abort_error_1.AbortError(`Renderer with id "${baseEyes.test.rendererId}" was aborted during one of the previous steps`);
244
- }
245
- return { ...result, eyes: baseEyes, renderer };
246
177
  }
247
178
  catch (error) {
248
- if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted)) {
249
- await baseEyes.abort({ settings: { testMetadata: await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata()) } });
250
- }
251
- error.info = { eyes: baseEyes };
252
- throw error;
179
+ environmentLogger.error(`Render on environment with id "${(_j = baseEyes.test.environment) === null || _j === void 0 ? void 0 : _j.environmentId}" failed due to an error`, error);
180
+ if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
181
+ await baseEyes.abort({ logger: environmentLogger, settings: { reason: error } });
253
182
  }
254
183
  }
255
184
  catch (error) {
256
- error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
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 };
257
187
  throw error;
258
188
  }
259
189
  });
260
- return uniqueRenderers.map((renderer, index) => ({
261
- asExpected: true,
262
- userTestId: eyes.test.userTestId,
263
- renderer,
264
- promise: promises[index],
265
- }));
190
+ uniqueEnvironments.forEach((environment, index) => {
191
+ const key = (0, to_environment_key_1.toEnvironmentKey)(environment);
192
+ let item = eyes.storage.get(key);
193
+ if (!item) {
194
+ item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
195
+ eyes.storage.set(key, item);
196
+ }
197
+ item.jobs.push(promises[index]);
198
+ });
266
199
  };
267
200
  }
268
201
  exports.makeCheck = makeCheck;
package/dist/ufg/core.js CHANGED
@@ -31,26 +31,28 @@ const set_viewport_size_1 = require("../automation/set-viewport-size");
31
31
  const locate_1 = require("../automation/locate");
32
32
  const locate_text_1 = require("../automation/locate-text");
33
33
  const extract_text_1 = require("../automation/extract-text");
34
+ const get_nml_client_1 = require("../automation/get-nml-client");
35
+ const take_snapshots_1 = require("./take-snapshots");
34
36
  const get_ufg_client_1 = require("./get-ufg-client");
35
- const get_nml_client_1 = require("./get-nml-client");
36
37
  const open_eyes_1 = require("./open-eyes");
37
38
  const utils = __importStar(require("@applitools/utils"));
38
- function makeCore({ concurrency, spec, clients, base, 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' });
41
- logger.log(`Core ufg is initialized ${base ? 'with' : 'without'} custom base core`);
42
- base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ agentId, concurrency, cwd, logger }));
39
+ function makeCore({ spec, clients, base: defaultBase, asyncCache, concurrency, offlineLocationPath, fetchConcurrency, agentId = 'core-ufg', logger: defaultLogger, maskLog, }) {
40
+ const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core-ufg' }, maskLog });
41
+ logger.log(`Core ufg is initialized ${defaultBase ? 'with' : 'without'} custom base core`);
42
+ const base = defaultBase !== null && defaultBase !== void 0 ? defaultBase : (0, core_base_1.makeCore)({ agentId, concurrency, logger, offlineLocationPath, maskLog });
43
+ const ufgClient = clients === null || clients === void 0 ? void 0 : clients.ufg;
43
44
  return utils.general.extend(base, core => {
44
45
  return {
45
46
  type: 'ufg',
46
47
  base: base,
47
48
  getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
48
49
  setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
50
+ takeSnapshots: spec && (0, take_snapshots_1.makeTakeSnapshots)({ spec, core, logger }),
49
51
  locate: (0, locate_1.makeLocate)({ spec, core, logger }),
50
52
  locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
51
53
  extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
52
- getUFGClient: (0, get_ufg_client_1.makeGetUFGClient)({ client: clients === null || clients === void 0 ? void 0 : clients.ufg, logger }),
53
- getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
54
+ getUFGClient: (0, get_ufg_client_1.makeGetUFGClient)({ client: ufgClient, fetchConcurrency, asyncCache, offlineLocationPath, logger }),
55
+ ...(0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
54
56
  openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, logger }),
55
57
  };
56
58
  });
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRenderTargetFromSnapshot = void 0;
4
+ async function createRenderTargetFromSnapshot({ ufgClient, snapshot, logger, }) {
5
+ return await ufgClient.createRenderTarget({
6
+ snapshot: snapshot.target,
7
+ settings: {
8
+ environment: snapshot.environment,
9
+ cookies: snapshot.target.cookies,
10
+ headers: {
11
+ Referer: snapshot.url,
12
+ 'User-Agent': snapshot.userAgent,
13
+ ...snapshot.settings.headers,
14
+ },
15
+ proxy: snapshot.account.eyesServer.proxy,
16
+ autProxy: snapshot.settings.autProxy,
17
+ },
18
+ logger,
19
+ });
20
+ }
21
+ exports.createRenderTargetFromSnapshot = createRenderTargetFromSnapshot;
@@ -25,26 +25,54 @@ 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, }) {
29
- const getBaseEyesWithCache = utils.general.cachify(getBaseEyes, ([options]) => options === null || options === void 0 ? void 0 : options.settings);
30
- if (base) {
31
- base.forEach(baseEyes => getBaseEyesWithCache.setCachedValue(baseEyes.test.rendererInfo, Promise.resolve([baseEyes])));
32
- }
28
+ const report_kobiton_1 = require("../automation/utils/report-kobiton");
29
+ function makeGetBaseEyes({ settings: defaultSettings, eyes, logger: mainLogger, }) {
30
+ const getBaseEyesWithCache = utils.general.wrap(getBaseEyes, (getBaseEyes, options) => {
31
+ const key = JSON.stringify(options.settings.environment);
32
+ let item = eyes.storage.get(key);
33
+ if (!item) {
34
+ item = { eyes: utils.promises.makeControlledPromise(), jobs: [] };
35
+ eyes.storage.set(key, item);
36
+ }
37
+ if (!item.eyes.settled)
38
+ item.eyes.resolve(getBaseEyes(options));
39
+ return item.eyes;
40
+ });
33
41
  return getBaseEyesWithCache;
34
- async function getBaseEyes({ settings, logger = defaultLogger, } = {}) {
42
+ async function getBaseEyes({ settings, logger = mainLogger, }) {
43
+ var _a;
44
+ logger = logger.extend(mainLogger);
35
45
  logger.log(`Command "getBaseEyes" is called with settings`, settings);
36
- if (!settings)
37
- throw new Error('');
38
46
  const ufgClient = await eyes.core.getUFGClient({
39
- config: { ...eyes.test.ufgServer },
47
+ settings: {
48
+ ...eyes.test.ufgServer,
49
+ eyesServerUrl: eyes.test.eyesServer.eyesServerUrl,
50
+ apiKey: eyes.test.eyesServer.apiKey,
51
+ },
52
+ logger,
53
+ });
54
+ const environment = await ufgClient.getActualEnvironment({
55
+ settings: { environment: settings.environment },
40
56
  logger,
41
57
  });
42
- const environment = await ufgClient.bookRenderer({ settings });
43
58
  const baseEyes = await eyes.core.base.openEyes({
44
- settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
59
+ settings: {
60
+ ...defaultSettings,
61
+ fallbackBaselineId: (_a = settings.environment) === null || _a === void 0 ? void 0 : _a.fallbackBaselineId,
62
+ environment: {
63
+ ...defaultSettings.environment,
64
+ ...environment,
65
+ os: settings.environment.os,
66
+ displayOs: settings.environment.displayOs,
67
+ hostingApp: settings.environment.hostingApp,
68
+ displayHostingApp: settings.environment.displayHostingApp,
69
+ properties: settings.environment.properties,
70
+ },
71
+ },
45
72
  logger,
46
73
  });
47
- return [baseEyes];
74
+ void (0, report_kobiton_1.reportKobiton)({ driver: settings.driver, settings: baseEyes.test, logger });
75
+ return baseEyes;
48
76
  }
49
77
  }
50
78
  exports.makeGetBaseEyes = makeGetBaseEyes;
@@ -26,13 +26,22 @@ 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, logger: defaultLogger }) {
30
- const getUFGClientWithCache = utils.general.cachify(getUFGClient, ([options]) => client ? 'default' : [options.config]);
29
+ function makeGetUFGClient({ client, fetchConcurrency, offlineLocationPath, logger: mainLogger, asyncCache, }) {
30
+ // we are caching by the server config, therefor if the user creates another Runner / manager with the same server config but different
31
+ // fetchConcurrency, it will not take any affect.
32
+ const getUFGClientWithCache = utils.general.cachify(getUFGClient, ([options]) => client ? 'default' : [{ ...options.settings, fetchConcurrency: undefined, offlineLocationPath }]);
31
33
  if (client)
32
34
  getUFGClientWithCache.setCachedValue('default', Promise.resolve(client));
33
35
  return getUFGClientWithCache;
34
- async function getUFGClient({ config, logger = defaultLogger }) {
35
- return (0, ufg_client_1.makeUFGClient)({ config, logger });
36
+ async function getUFGClient({ settings, logger = mainLogger }) {
37
+ logger = logger.extend(mainLogger);
38
+ const tunnelIds = utils.general.getEnvValue('FETCH_RESOURCE_FROM_TUNNEL', 'boolean')
39
+ ? utils.general.getEnvValue('TUNNEL_IDS')
40
+ : undefined;
41
+ return (0, ufg_client_1.makeUFGClient)({
42
+ settings: { ...settings, fetchConcurrency, offlineLocationPath, tunnelIds, asyncCache },
43
+ logger,
44
+ });
36
45
  }
37
46
  }
38
47
  exports.makeGetUFGClient = makeGetUFGClient;