@applitools/core 3.8.0 → 3.8.1

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 (146) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/automation/extract-text.js +79 -0
  3. package/dist/automation/get-nml-client.js +42 -0
  4. package/dist/automation/get-viewport-size.js +13 -0
  5. package/dist/automation/locate-text.js +58 -0
  6. package/dist/automation/locate.js +60 -0
  7. package/dist/automation/set-viewport-size.js +13 -0
  8. package/dist/automation/types.js +2 -0
  9. package/dist/automation/utils/take-screenshot.js +59 -0
  10. package/dist/automation/utils/to-base-check-settings.js +70 -0
  11. package/dist/automation/utils/wait-for-lazy-load.js +22 -0
  12. package/dist/check-and-close.js +49 -0
  13. package/dist/check.js +78 -0
  14. package/dist/classic/abort.js +23 -0
  15. package/dist/classic/check-and-close.js +104 -0
  16. package/dist/classic/check.js +117 -0
  17. package/dist/classic/close.js +23 -0
  18. package/dist/classic/core.js +55 -0
  19. package/dist/classic/get-base-eyes.js +40 -0
  20. package/dist/classic/open-eyes.js +98 -0
  21. package/dist/classic/types.js +17 -0
  22. package/dist/classic/utils/take-dom-capture.js +121 -0
  23. package/dist/cli/cli.js +139 -0
  24. package/dist/close-batch.js +39 -0
  25. package/dist/close.js +38 -0
  26. package/dist/core.js +66 -0
  27. package/dist/delete-test.js +39 -0
  28. package/dist/errors/abort-error.js +10 -0
  29. package/dist/errors/internal-error.js +11 -0
  30. package/dist/errors/test-error.js +32 -0
  31. package/dist/extract-text.js +46 -0
  32. package/dist/get-account-info.js +37 -0
  33. package/dist/get-ec-client.js +37 -0
  34. package/dist/get-eyes-results.js +43 -0
  35. package/dist/get-manager-results.js +112 -0
  36. package/dist/get-typed-eyes.js +27 -0
  37. package/dist/index.js +38 -0
  38. package/dist/locate-text.js +41 -0
  39. package/dist/locate.js +41 -0
  40. package/dist/log-event.js +39 -0
  41. package/dist/make-manager.js +60 -0
  42. package/dist/open-eyes.js +91 -0
  43. package/dist/troubleshoot/check-network.js +114 -0
  44. package/dist/troubleshoot/eyes.js +85 -0
  45. package/dist/troubleshoot/logs.js +41 -0
  46. package/dist/troubleshoot/ufg.js +131 -0
  47. package/dist/troubleshoot/utils.js +44 -0
  48. package/dist/types.js +17 -0
  49. package/dist/ufg/abort.js +33 -0
  50. package/dist/ufg/check-and-close.js +270 -0
  51. package/dist/ufg/check.js +277 -0
  52. package/dist/ufg/close.js +38 -0
  53. package/dist/ufg/core.js +57 -0
  54. package/dist/ufg/get-base-eyes.js +56 -0
  55. package/dist/ufg/get-results.js +28 -0
  56. package/dist/ufg/get-ufg-client.js +47 -0
  57. package/dist/ufg/open-eyes.js +97 -0
  58. package/dist/ufg/types.js +17 -0
  59. package/dist/ufg/utils/generate-safe-selectors.js +63 -0
  60. package/dist/ufg/utils/take-dom-snapshot.js +134 -0
  61. package/dist/ufg/utils/take-dom-snapshots.js +153 -0
  62. package/dist/ufg/utils/uniquify-renderers.js +27 -0
  63. package/dist/universal/core-server-process.js +31 -0
  64. package/dist/universal/core-server.js +197 -0
  65. package/dist/universal/core.js +159 -0
  66. package/dist/universal/history.js +86 -0
  67. package/dist/universal/refer.js +67 -0
  68. package/dist/universal/spec-driver.js +163 -0
  69. package/dist/universal/types.js +2 -0
  70. package/dist/universal/ws-server.js +59 -0
  71. package/dist/utils/extract-environment.js +70 -0
  72. package/dist/utils/format-results.js +185 -0
  73. package/dist/utils/separate-duplicate-results.js +34 -0
  74. package/package.json +1 -1
  75. package/types/automation/extract-text.d.ts +15 -0
  76. package/types/automation/get-nml-client.d.ts +17 -0
  77. package/types/automation/get-viewport-size.d.ts +12 -0
  78. package/types/automation/locate-text.d.ts +14 -0
  79. package/types/automation/locate.d.ts +14 -0
  80. package/types/automation/set-viewport-size.d.ts +14 -0
  81. package/types/automation/types.d.ts +90 -0
  82. package/types/automation/utils/take-screenshot.d.ts +22 -0
  83. package/types/automation/utils/to-base-check-settings.d.ts +17 -0
  84. package/types/automation/utils/wait-for-lazy-load.d.ts +14 -0
  85. package/types/check-and-close.d.ts +18 -0
  86. package/types/check.d.ts +18 -0
  87. package/types/classic/abort.d.ts +16 -0
  88. package/types/classic/check-and-close.d.ts +19 -0
  89. package/types/classic/check.d.ts +15 -0
  90. package/types/classic/close.d.ts +16 -0
  91. package/types/classic/core.d.ts +17 -0
  92. package/types/classic/get-base-eyes.d.ts +18 -0
  93. package/types/classic/open-eyes.d.ts +16 -0
  94. package/types/classic/types.d.ts +35 -0
  95. package/types/classic/utils/take-dom-capture.d.ts +16 -0
  96. package/types/cli/cli.d.ts +2 -0
  97. package/types/close-batch.d.ts +12 -0
  98. package/types/close.d.ts +13 -0
  99. package/types/core.d.ts +15 -0
  100. package/types/delete-test.d.ts +12 -0
  101. package/types/errors/abort-error.d.ts +4 -0
  102. package/types/errors/internal-error.d.ts +6 -0
  103. package/types/errors/test-error.d.ts +5 -0
  104. package/types/extract-text.d.ts +16 -0
  105. package/types/get-account-info.d.ts +11 -0
  106. package/types/get-ec-client.d.ts +14 -0
  107. package/types/get-eyes-results.d.ts +12 -0
  108. package/types/get-manager-results.d.ts +13 -0
  109. package/types/get-typed-eyes.d.ts +19 -0
  110. package/types/index.d.ts +9 -0
  111. package/types/locate-text.d.ts +15 -0
  112. package/types/locate.d.ts +16 -0
  113. package/types/log-event.d.ts +12 -0
  114. package/types/make-manager.d.ts +20 -0
  115. package/types/open-eyes.d.ts +23 -0
  116. package/types/troubleshoot/check-network.d.ts +21 -0
  117. package/types/troubleshoot/eyes.d.ts +11 -0
  118. package/types/troubleshoot/logs.d.ts +10 -0
  119. package/types/troubleshoot/ufg.d.ts +10 -0
  120. package/types/troubleshoot/utils.d.ts +2 -0
  121. package/types/types.d.ts +142 -0
  122. package/types/ufg/abort.d.ts +21 -0
  123. package/types/ufg/check-and-close.d.ts +42 -0
  124. package/types/ufg/check.d.ts +23 -0
  125. package/types/ufg/close.d.ts +19 -0
  126. package/types/ufg/core.d.ts +21 -0
  127. package/types/ufg/get-base-eyes.d.ts +19 -0
  128. package/types/ufg/get-results.d.ts +16 -0
  129. package/types/ufg/get-ufg-client.d.ts +16 -0
  130. package/types/ufg/open-eyes.d.ts +16 -0
  131. package/types/ufg/types.d.ts +73 -0
  132. package/types/ufg/utils/generate-safe-selectors.d.ts +16 -0
  133. package/types/ufg/utils/take-dom-snapshot.d.ts +47 -0
  134. package/types/ufg/utils/take-dom-snapshots.d.ts +27 -0
  135. package/types/ufg/utils/uniquify-renderers.d.ts +2 -0
  136. package/types/universal/core-server-process.d.ts +9 -0
  137. package/types/universal/core-server.d.ts +14 -0
  138. package/types/universal/core.d.ts +25 -0
  139. package/types/universal/history.d.ts +2 -0
  140. package/types/universal/refer.d.ts +8 -0
  141. package/types/universal/spec-driver.d.ts +11 -0
  142. package/types/universal/types.d.ts +189 -0
  143. package/types/universal/ws-server.d.ts +14 -0
  144. package/types/utils/extract-environment.d.ts +2 -0
  145. package/types/utils/format-results.d.ts +16 -0
  146. package/types/utils/separate-duplicate-results.d.ts +2 -0
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.makeCheck = void 0;
30
+ const driver_1 = require("@applitools/driver");
31
+ const take_dom_snapshots_1 = require("./utils/take-dom-snapshots");
32
+ const wait_for_lazy_load_1 = require("../automation/utils/wait-for-lazy-load");
33
+ const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
34
+ const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
35
+ const uniquify_renderers_1 = require("./utils/uniquify-renderers");
36
+ const abort_error_1 = require("../errors/abort-error");
37
+ const utils = __importStar(require("@applitools/utils"));
38
+ const chalk_1 = __importDefault(require("chalk"));
39
+ function makeCheck({ eyes, storage, target: defaultTarget, spec, signal, logger: mainLogger, }) {
40
+ return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
41
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
42
+ logger = logger.extend(mainLogger);
43
+ logger.log('Command "check" is called with settings', settings);
44
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
45
+ logger.warn('Command "check" was called after test was already aborted');
46
+ throw new abort_error_1.AbortError('Command "check" was called after test was already aborted');
47
+ }
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 : []);
52
+ const ufgClient = await eyes.core.getUFGClient({
53
+ settings: {
54
+ ...eyes.test.ufgServer,
55
+ eyesServerUrl: eyes.test.eyesServer.eyesServerUrl,
56
+ apiKey: eyes.test.eyesServer.apiKey,
57
+ },
58
+ logger,
59
+ });
60
+ let snapshots;
61
+ let snapshotUrl;
62
+ let snapshotTitle;
63
+ let userAgent;
64
+ let regionToTarget;
65
+ let scrollRootSelector;
66
+ let selectorsToCalculate;
67
+ const driver = spec && (0, driver_1.isDriver)(target, spec)
68
+ ? await (0, driver_1.makeDriver)({ spec, driver: target, reset: target === defaultTarget, logger })
69
+ : null;
70
+ if (driver) {
71
+ const environment = await driver.getEnvironment();
72
+ await driver.currentContext.setScrollingElement((_b = settings.scrollRootElement) !== null && _b !== void 0 ? _b : null);
73
+ if (uniqueRenderers.length === 0) {
74
+ if (environment.isWeb) {
75
+ const viewportSize = await driver.getViewportSize();
76
+ uniqueRenderers.push({ name: 'chrome', ...viewportSize });
77
+ }
78
+ else {
79
+ // TODO add default nmg renderers
80
+ }
81
+ }
82
+ let cleanupGeneratedSelectors;
83
+ if (environment.isWeb) {
84
+ userAgent = await driver.getUserAgentLegacy();
85
+ const generated = await (0, generate_safe_selectors_1.generateSafeSelectors)({
86
+ context: driver.currentContext,
87
+ elementReferences: [
88
+ ...(elementReferenceToTarget ? [elementReferenceToTarget] : []),
89
+ ...(settings.scrollRootElement ? [settings.scrollRootElement] : []),
90
+ ...elementReferencesToCalculate,
91
+ ],
92
+ });
93
+ cleanupGeneratedSelectors = generated.cleanupGeneratedSelectors;
94
+ selectorsToCalculate = generated.selectors;
95
+ if (elementReferenceToTarget) {
96
+ if (!((_c = selectorsToCalculate[0]) === null || _c === void 0 ? void 0 : _c.safeSelector))
97
+ throw new Error('Target element not found');
98
+ regionToTarget = selectorsToCalculate[0].safeSelector;
99
+ selectorsToCalculate = selectorsToCalculate.slice(1);
100
+ }
101
+ if (settings.scrollRootElement) {
102
+ scrollRootSelector = (_d = selectorsToCalculate[0].safeSelector) !== null && _d !== void 0 ? _d : undefined;
103
+ selectorsToCalculate = selectorsToCalculate.slice(1);
104
+ }
105
+ }
106
+ else {
107
+ regionToTarget = (0, driver_1.isSelector)(elementReferenceToTarget)
108
+ ? (_f = (_e = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _e === void 0 ? void 0 : _e.call(spec, settings.scrollRootElement)) !== null && _f !== void 0 ? _f : undefined
109
+ : undefined;
110
+ scrollRootSelector = (0, driver_1.isSelector)(settings.scrollRootElement)
111
+ ? (_h = (_g = spec === null || spec === void 0 ? void 0 : spec.untransformSelector) === null || _g === void 0 ? void 0 : _g.call(spec, settings.scrollRootElement)) !== null && _h !== void 0 ? _h : undefined
112
+ : undefined;
113
+ }
114
+ const currentContext = driver.currentContext;
115
+ const snapshotOptions = {
116
+ settings: {
117
+ ...eyes.test.eyesServer,
118
+ waitBeforeCapture: settings.waitBeforeCapture,
119
+ disableBrowserFetching: settings.disableBrowserFetching,
120
+ layoutBreakpoints: settings.layoutBreakpoints,
121
+ renderers: uniqueRenderers,
122
+ skipResources: ufgClient.getCachedResourceUrls(),
123
+ },
124
+ hooks: {
125
+ async beforeSnapshots() {
126
+ if (settings.lazyLoad && environment.isWeb) {
127
+ await (0, wait_for_lazy_load_1.waitForLazyLoad)({
128
+ context: driver.currentContext,
129
+ settings: settings.lazyLoad !== true ? settings.lazyLoad : {},
130
+ logger,
131
+ });
132
+ }
133
+ },
134
+ },
135
+ provides: {
136
+ getChromeEmulationDevices: ufgClient.getChromeEmulationDevices,
137
+ getIOSDevices: ufgClient.getIOSDevices,
138
+ },
139
+ };
140
+ if (environment.isWeb) {
141
+ snapshots = await (0, take_dom_snapshots_1.takeDomSnapshots)({ driver, ...snapshotOptions, logger });
142
+ }
143
+ else {
144
+ const nmlClient = await eyes.core.getNMLClient({ config: eyes.test.eyesServer, driver, logger });
145
+ snapshots = (await nmlClient.takeSnapshots({ ...snapshotOptions, logger }));
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());
151
+ }
152
+ 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;
155
+ }
156
+ regionToTarget !== null && regionToTarget !== void 0 ? regionToTarget : (regionToTarget = (_j = elementReferenceToTarget) !== null && _j !== void 0 ? _j : 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 ({ properties, ...renderer }, index) => {
162
+ const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
163
+ if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
164
+ const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
165
+ rendererLogger.console.log(message);
166
+ }
167
+ try {
168
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
169
+ rendererLogger.warn('Command "check" was aborted before rendering');
170
+ throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
171
+ }
172
+ const { cookies, ...snapshot } = snapshots[index];
173
+ if (utils.types.has(renderer, 'iosDeviceInfo') || utils.types.has(renderer, 'androidDeviceInfo')) {
174
+ renderer.type = utils.types.has(snapshot, 'cdt') ? 'web' : 'native';
175
+ }
176
+ const renderTargetPromise = ufgClient.createRenderTarget({
177
+ snapshot,
178
+ settings: {
179
+ renderer,
180
+ cookies,
181
+ headers: {
182
+ Referer: snapshotUrl,
183
+ 'User-Agent': userAgent,
184
+ ...settings.headers,
185
+ },
186
+ proxy: eyes.test.eyesServer.proxy,
187
+ autProxy: settings.autProxy,
188
+ },
189
+ logger: rendererLogger,
190
+ });
191
+ const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, properties }, logger: rendererLogger });
192
+ try {
193
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
194
+ rendererLogger.warn('Command "check" was aborted before rendering');
195
+ throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
196
+ }
197
+ else if (!baseEyes.running) {
198
+ rendererLogger.warn(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
199
+ throw new abort_error_1.AbortError(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
200
+ }
201
+ const renderTarget = await renderTargetPromise;
202
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
203
+ rendererLogger.warn('Command "check" was aborted before rendering');
204
+ throw new abort_error_1.AbortError('Command "check" was aborted before rendering');
205
+ }
206
+ else if (!baseEyes.running) {
207
+ rendererLogger.warn(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
208
+ throw new abort_error_1.AbortError(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
209
+ }
210
+ const { renderId, selectorRegions, ...baseTarget } = await ufgClient.render({
211
+ target: renderTarget,
212
+ settings: {
213
+ ...settings,
214
+ region: regionToTarget,
215
+ scrollRootElement: scrollRootSelector,
216
+ selectorsToCalculate: selectorsToCalculate.flatMap(({ safeSelector }) => safeSelector !== null && safeSelector !== void 0 ? safeSelector : []),
217
+ includeFullPageSize: Boolean(settings.pageId),
218
+ renderer,
219
+ renderEnvironmentId: baseEyes.test.renderEnvironmentId,
220
+ uploadUrl: baseEyes.test.uploadUrl,
221
+ stitchingServiceUrl: baseEyes.test.stitchingServiceUrl,
222
+ },
223
+ signal,
224
+ logger: rendererLogger,
225
+ });
226
+ let offset = 0;
227
+ const baseSettings = getBaseCheckSettings({
228
+ calculatedRegions: selectorsToCalculate.map(({ originalSelector, safeSelector }) => ({
229
+ selector: originalSelector !== null && originalSelector !== void 0 ? originalSelector : undefined,
230
+ regions: safeSelector ? selectorRegions[offset++] : [],
231
+ })),
232
+ });
233
+ baseSettings.renderId = renderId;
234
+ baseTarget.source = snapshotUrl;
235
+ baseTarget.name = snapshotTitle;
236
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
237
+ rendererLogger.warn('Command "check" was aborted after rendering');
238
+ throw new abort_error_1.AbortError('Command "check" was aborted after rendering');
239
+ }
240
+ else if (!baseEyes.running) {
241
+ rendererLogger.warn(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
242
+ throw new abort_error_1.AbortError(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
243
+ }
244
+ await baseEyes.check({
245
+ target: { ...baseTarget, isTransformed: true },
246
+ settings: baseSettings,
247
+ logger: rendererLogger,
248
+ });
249
+ if (!baseEyes.running) {
250
+ rendererLogger.warn(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
251
+ throw new abort_error_1.AbortError(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" was aborted during one of the previous steps`);
252
+ }
253
+ return { eyes: baseEyes, renderer };
254
+ }
255
+ catch (error) {
256
+ rendererLogger.error(`Render on environment with id "${baseEyes.test.renderEnvironmentId}" failed due to an error`, error);
257
+ if (baseEyes.running && !(signal === null || signal === void 0 ? void 0 : signal.aborted))
258
+ await baseEyes.abort({ logger: rendererLogger });
259
+ error.info = { eyes: baseEyes };
260
+ throw error;
261
+ }
262
+ }
263
+ catch (error) {
264
+ rendererLogger.error(`Renderer with id ${renderer.id} failed before rendering started due to an error`, error);
265
+ error.info = { ...error.info, userTestId: eyes.test.userTestId, renderer };
266
+ throw error;
267
+ }
268
+ });
269
+ return uniqueRenderers.map((renderer, index) => {
270
+ var _a;
271
+ const key = JSON.stringify(renderer);
272
+ storage.set(key, [...((_a = storage.get(key)) !== null && _a !== void 0 ? _a : []), promises[index]]);
273
+ return { asExpected: true, userTestId: eyes.test.userTestId, renderer };
274
+ });
275
+ };
276
+ }
277
+ exports.makeCheck = makeCheck;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeClose = void 0;
4
+ const driver_1 = require("@applitools/driver");
5
+ function makeClose({ storage, target, spec, logger: mainLogger }) {
6
+ return async function close({ settings, logger = mainLogger, } = {}) {
7
+ logger = logger.extend(mainLogger);
8
+ logger.log('Command "close" is called with settings', settings);
9
+ settings !== null && settings !== void 0 ? settings : (settings = {});
10
+ if (!settings.testMetadata) {
11
+ try {
12
+ const driver = (0, driver_1.isDriver)(target, spec) ? await (0, driver_1.makeDriver)({ spec, driver: target, logger }) : null;
13
+ settings.testMetadata = await (driver === null || driver === void 0 ? void 0 : driver.getSessionMetadata());
14
+ }
15
+ catch (error) {
16
+ logger.warn('Command "close" received an error during extracting driver metadata', error);
17
+ }
18
+ }
19
+ storage.forEach(async (promises) => {
20
+ var _a, _b;
21
+ try {
22
+ const [{ eyes }] = await Promise.all(promises);
23
+ try {
24
+ await eyes.close({ settings, logger });
25
+ }
26
+ catch (error) {
27
+ logger.warn('Command "close" received an error during performing, trying to perform abort instead', error);
28
+ await eyes.abort({ settings, logger });
29
+ }
30
+ }
31
+ catch (error) {
32
+ logger.warn('Command "close" received an error during waiting for eyes instances in background', error);
33
+ await ((_b = (_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes) === null || _b === void 0 ? void 0 : _b.abort({ settings, logger }));
34
+ }
35
+ });
36
+ };
37
+ }
38
+ exports.makeClose = makeClose;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeCore = void 0;
27
+ const logger_1 = require("@applitools/logger");
28
+ const core_base_1 = require("@applitools/core-base");
29
+ const get_viewport_size_1 = require("../automation/get-viewport-size");
30
+ const set_viewport_size_1 = require("../automation/set-viewport-size");
31
+ const locate_1 = require("../automation/locate");
32
+ const locate_text_1 = require("../automation/locate-text");
33
+ const extract_text_1 = require("../automation/extract-text");
34
+ const get_nml_client_1 = require("../automation/get-nml-client");
35
+ const get_ufg_client_1 = require("./get-ufg-client");
36
+ const open_eyes_1 = require("./open-eyes");
37
+ const utils = __importStar(require("@applitools/utils"));
38
+ function makeCore({ concurrency, spec, clients, base, fetchConcurrency, agentId = 'core-ufg', cwd = process.cwd(), logger: defaultLogger, }) {
39
+ const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'core-ufg' } });
40
+ logger.log(`Core ufg is initialized ${base ? 'with' : 'without'} custom base core`);
41
+ base !== null && base !== void 0 ? base : (base = (0, core_base_1.makeCore)({ agentId, concurrency, cwd, logger }));
42
+ return utils.general.extend(base, core => {
43
+ return {
44
+ type: 'ufg',
45
+ base: base,
46
+ getViewportSize: spec && (0, get_viewport_size_1.makeGetViewportSize)({ spec, logger }),
47
+ setViewportSize: spec && (0, set_viewport_size_1.makeSetViewportSize)({ spec, logger }),
48
+ locate: (0, locate_1.makeLocate)({ spec, core, logger }),
49
+ locateText: (0, locate_text_1.makeLocateText)({ spec, core, logger }),
50
+ extractText: (0, extract_text_1.makeExtractText)({ spec, core, logger }),
51
+ getUFGClient: (0, get_ufg_client_1.makeGetUFGClient)({ client: clients === null || clients === void 0 ? void 0 : clients.ufg, fetchConcurrency, logger }),
52
+ getNMLClient: (0, get_nml_client_1.makeGetNMLClient)({ client: clients === null || clients === void 0 ? void 0 : clients.nml, logger }),
53
+ openEyes: (0, open_eyes_1.makeOpenEyes)({ spec, core, logger }),
54
+ };
55
+ });
56
+ }
57
+ exports.makeCore = makeCore;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeGetBaseEyes = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
28
+ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLogger, }) {
29
+ const getBaseEyesWithCache = utils.general.cachify(getBaseEyes, ([options]) => { var _a; return (_a = options === null || options === void 0 ? void 0 : options.settings) === null || _a === void 0 ? void 0 : _a.renderer; });
30
+ if (base) {
31
+ base.forEach(baseEyes => getBaseEyesWithCache.setCachedValue(baseEyes.test.renderer, Promise.resolve([baseEyes])));
32
+ }
33
+ return getBaseEyesWithCache;
34
+ async function getBaseEyes({ settings, logger = mainLogger, } = {}) {
35
+ logger = logger.extend(mainLogger);
36
+ logger.log(`Command "getBaseEyes" is called with settings`, settings);
37
+ if (!settings)
38
+ throw new Error('');
39
+ const ufgClient = await eyes.core.getUFGClient({
40
+ settings: {
41
+ ...eyes.test.ufgServer,
42
+ eyesServerUrl: eyes.test.eyesServer.eyesServerUrl,
43
+ apiKey: eyes.test.eyesServer.apiKey,
44
+ },
45
+ logger,
46
+ });
47
+ const environment = await ufgClient.getRenderEnvironment({ settings, logger });
48
+ environment.properties = settings.properties;
49
+ const baseEyes = await eyes.core.base.openEyes({
50
+ settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
51
+ logger,
52
+ });
53
+ return [baseEyes];
54
+ }
55
+ }
56
+ exports.makeGetBaseEyes = makeGetBaseEyes;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGetResults = void 0;
4
+ const abort_error_1 = require("../errors/abort-error");
5
+ function makeGetResults({ storage, logger: mainLogger }) {
6
+ return async function getResults({ settings, logger = mainLogger, } = {}) {
7
+ logger = logger.extend(mainLogger);
8
+ logger.log('Command "getResults" is called with settings', settings);
9
+ return Promise.all(Array.from(storage.values(), async (promises) => {
10
+ var _a;
11
+ try {
12
+ const [{ eyes, renderer }] = await Promise.all(promises);
13
+ const [result] = await eyes.getResults({ settings, logger });
14
+ return { ...result, renderer };
15
+ }
16
+ catch (error) {
17
+ if (error instanceof abort_error_1.AbortError && ((_a = error.info) === null || _a === void 0 ? void 0 : _a.eyes)) {
18
+ logger.warn('Command "getResults" received an abort error during performing', settings);
19
+ const [result] = await error.info.eyes.getResults({ settings, logger });
20
+ return { ...result, renderer: error.info.renderer };
21
+ }
22
+ logger.fatal('Command "getResults" received an error during performing', settings);
23
+ throw error;
24
+ }
25
+ }));
26
+ };
27
+ }
28
+ exports.makeGetResults = makeGetResults;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeGetUFGClient = void 0;
27
+ const ufg_client_1 = require("@applitools/ufg-client");
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ function makeGetUFGClient({ client, fetchConcurrency, logger: mainLogger }) {
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 }]);
33
+ if (client)
34
+ getUFGClientWithCache.setCachedValue('default', Promise.resolve(client));
35
+ return getUFGClientWithCache;
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, tunnelIds },
43
+ logger,
44
+ });
45
+ }
46
+ }
47
+ exports.makeGetUFGClient = makeGetUFGClient;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.makeOpenEyes = void 0;
27
+ const driver_1 = require("@applitools/driver");
28
+ const get_base_eyes_1 = require("./get-base-eyes");
29
+ const check_1 = require("./check");
30
+ const check_and_close_1 = require("./check-and-close");
31
+ const close_1 = require("./close");
32
+ const abort_1 = require("./abort");
33
+ const get_results_1 = require("./get-results");
34
+ const abort_controller_1 = require("abort-controller");
35
+ const utils = __importStar(require("@applitools/utils"));
36
+ function makeOpenEyes({ core, spec, logger: mainLogger }) {
37
+ return async function openEyes({ target, settings, base, logger = mainLogger, }) {
38
+ var _a, _b;
39
+ logger = logger.extend(mainLogger);
40
+ logger.log(`Command "openEyes" is called with ${target ? 'default driver and' : ''}`, ...(settings ? ['settings', settings] : []), base ? 'predefined eyes' : '');
41
+ const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger }));
42
+ if (driver && !base) {
43
+ const environment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
44
+ const currentContext = driver.currentContext;
45
+ (_a = settings.environment) !== null && _a !== void 0 ? _a : (settings.environment = {});
46
+ if (environment.isEC) {
47
+ settings.environment.ecSessionId = (_b = (await driver.getSessionId())) !== null && _b !== void 0 ? _b : undefined;
48
+ }
49
+ if (settings.environment.viewportSize) {
50
+ await driver.setViewportSize(settings.environment.viewportSize);
51
+ }
52
+ await currentContext.focus();
53
+ }
54
+ const controller = new abort_controller_1.AbortController();
55
+ const account = await core.getAccountInfo({ settings, logger });
56
+ return utils.general.extend({}, eyes => {
57
+ var _a;
58
+ const storage = new Map();
59
+ let running = true;
60
+ return {
61
+ type: 'ufg',
62
+ core,
63
+ test: {
64
+ userTestId: settings.userTestId,
65
+ batchId: (_a = settings.batch) === null || _a === void 0 ? void 0 : _a.id,
66
+ keepBatchOpen: settings.keepBatchOpen,
67
+ eyesServer: account.eyesServer,
68
+ ufgServer: account.ufgServer,
69
+ uploadUrl: account.uploadUrl,
70
+ stitchingServiceUrl: account.stitchingServiceUrl,
71
+ account,
72
+ },
73
+ get running() {
74
+ return running;
75
+ },
76
+ getBaseEyes: (0, get_base_eyes_1.makeGetBaseEyes)({ settings, eyes, base, logger }),
77
+ // check with indexing and storage
78
+ check: (0, check_1.makeCheck)({ eyes, storage, target: driver, spec, signal: controller.signal, logger }),
79
+ checkAndClose: (0, check_and_close_1.makeCheckAndClose)({ eyes, storage, target: driver, spec, signal: controller.signal, logger }),
80
+ close: utils.general.wrap((0, close_1.makeClose)({ storage, target: driver, logger }), async (close, options) => {
81
+ if (!running)
82
+ return;
83
+ running = false;
84
+ return close(options);
85
+ }),
86
+ abort: utils.general.wrap((0, abort_1.makeAbort)({ storage, target: driver, spec, controller, logger }), async (abort, options) => {
87
+ if (!running)
88
+ return;
89
+ running = false;
90
+ return abort(options);
91
+ }),
92
+ getResults: (0, get_results_1.makeGetResults)({ storage, logger }),
93
+ };
94
+ });
95
+ };
96
+ }
97
+ exports.makeOpenEyes = makeOpenEyes;
@@ -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("../automation/types"), exports);