@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,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toGeneratedSelectors = void 0;
4
+ function toGeneratedSelectors({ elementReferences, logger, transformElementReference, }) {
5
+ var _a, _b, _c;
6
+ const elementReferencesToMark = [
7
+ (_a = elementReferences.target) !== null && _a !== void 0 ? _a : [],
8
+ (_b = elementReferences.scrolling) !== null && _b !== void 0 ? _b : [],
9
+ (_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : [],
10
+ ].flat();
11
+ return { elementReferencesToMark, getGeneratedSelectors };
12
+ function getGeneratedSelectors(generatedSelectors) {
13
+ var _a, _b, _c;
14
+ let target = undefined;
15
+ let scrolling = undefined;
16
+ let calculate = [];
17
+ if (generatedSelectors) {
18
+ let offset = 0;
19
+ if (elementReferences.target) {
20
+ const targetOrError = (_a = generatedSelectors[offset++].safeSelector) !== null && _a !== void 0 ? _a : undefined;
21
+ if (!targetOrError)
22
+ throw new Error('Target element not found');
23
+ if (typeof targetOrError !== 'string' && 'error' in targetOrError)
24
+ throw new Error(`Target element is stale - please make sure the element is not detached from the DOM tree. ${targetOrError.error}`);
25
+ target = targetOrError;
26
+ }
27
+ if (elementReferences.scrolling) {
28
+ const scrollingOrError = (_b = generatedSelectors[offset++].safeSelector) !== null && _b !== void 0 ? _b : undefined;
29
+ const isError = typeof scrollingOrError === 'object' && 'error' in scrollingOrError;
30
+ scrolling = isError ? undefined : scrollingOrError;
31
+ if (isError) {
32
+ logger.log('Error in scrolling element:', scrollingOrError);
33
+ }
34
+ else if (!scrolling) {
35
+ logger.log('Scrolling element not found');
36
+ }
37
+ }
38
+ calculate = generatedSelectors.slice(offset).map(generatedSelector => {
39
+ var _a;
40
+ const safeSelector = generatedSelector.safeSelector;
41
+ const isError = safeSelector && typeof safeSelector === 'object' && 'error' in safeSelector;
42
+ if (isError) {
43
+ logger.log('Error in calculate element:', safeSelector);
44
+ }
45
+ else if (!safeSelector) {
46
+ logger.log('Calculate element not found', (_a = generatedSelector.originalSelector) !== null && _a !== void 0 ? _a : '');
47
+ }
48
+ return {
49
+ ...generatedSelector,
50
+ safeSelector: isError ? null : safeSelector,
51
+ };
52
+ });
53
+ }
54
+ else {
55
+ // the entire else statement should be a dead code that was used for NMG, will be removed later
56
+ target = elementReferences.target && transformElementReference(elementReferences.target);
57
+ scrolling = elementReferences.scrolling && transformElementReference(elementReferences.scrolling);
58
+ calculate = ((_c = elementReferences.calculate) !== null && _c !== void 0 ? _c : []).map(elementReference => {
59
+ var _a;
60
+ const selector = (_a = transformElementReference(elementReference)) !== null && _a !== void 0 ? _a : null;
61
+ return { originalSelector: selector, safeSelector: selector };
62
+ });
63
+ }
64
+ return { target: target, scrolling, calculate };
65
+ }
66
+ }
67
+ exports.toGeneratedSelectors = toGeneratedSelectors;
@@ -0,0 +1,69 @@
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.toSafeCheckSettings = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
28
+ const regionTypes = ['ignore', 'layout', 'strict', 'content', 'floating', 'accessibility'];
29
+ function toSafeCheckSettings({ settings }) {
30
+ const calculate = regionTypes.flatMap(regionType => {
31
+ var _a;
32
+ return ((_a = settings[`${regionType}Regions`]) !== null && _a !== void 0 ? _a : []).reduce((regions, reference) => {
33
+ const { region } = utils.types.has(reference, 'region') ? reference : { region: reference };
34
+ return !isRegion(region) ? regions.concat(region) : regions;
35
+ }, []);
36
+ });
37
+ const target = !isRegion(settings.region) ? settings.region : undefined;
38
+ const scrolling = settings.scrollRootElement;
39
+ return { elementReferences: { target, scrolling, calculate }, getSafeCheckSettings };
40
+ function getSafeCheckSettings({ selectors, }) {
41
+ const transformedSettings = { ...settings };
42
+ regionTypes.forEach(regionType => {
43
+ var _a;
44
+ if (!transformedSettings[`${regionType}Regions`])
45
+ return;
46
+ transformedSettings[`${regionType}Regions`] = (_a = transformedSettings[`${regionType}Regions`]) === null || _a === void 0 ? void 0 : _a.flatMap(reference => {
47
+ const { region, ...options } = utils.types.has(reference, 'region') ? reference : { region: reference };
48
+ if (isRegion(region))
49
+ return reference;
50
+ const { originalSelector, safeSelector } = selectors.calculate.shift();
51
+ if (!safeSelector)
52
+ return [];
53
+ return {
54
+ region: safeSelector,
55
+ regionId: utils.types.isString(originalSelector) ? originalSelector : originalSelector === null || originalSelector === void 0 ? void 0 : originalSelector.selector,
56
+ ...options,
57
+ };
58
+ });
59
+ });
60
+ if (!isRegion(transformedSettings.region))
61
+ transformedSettings.region = selectors.target;
62
+ transformedSettings.scrollRootElement = selectors.scrolling;
63
+ return transformedSettings;
64
+ }
65
+ function isRegion(region) {
66
+ return utils.types.has(region, ['x', 'y', 'width', 'height']);
67
+ }
68
+ }
69
+ exports.toSafeCheckSettings = toSafeCheckSettings;
@@ -14,27 +14,30 @@ const refer_1 = require("./refer");
14
14
  const history_1 = require("./history");
15
15
  const os_1 = __importDefault(require("os"));
16
16
  const path_1 = __importDefault(require("path"));
17
- async function makeCoreServer({ debug = false, shutdownMode = 'lazy', idleTimeout = 900000, // 15min
18
- printStdout = false, ...handlerOptions } = {}) {
17
+ async function makeCoreServer({ environment: defaultEnvironment, agentIdPrefix = `eyes-universal/${require('../../package.json').version}`, debug = false, shutdownMode = 'lazy', idleTimeout = 900000, // 15min
18
+ printStdout = false, isProcess = false, maskLog = false, ...handlerOptions } = {}) {
19
19
  var _a, _b;
20
20
  const logDirname = (_a = process.env.APPLITOOLS_LOG_DIR) !== null && _a !== void 0 ? _a : path_1.default.resolve(os_1.default.tmpdir(), `applitools-logs`);
21
21
  const baseLogger = (0, logger_1.makeLogger)({
22
22
  handler: { type: 'rolling file', name: 'universal', dirname: logDirname },
23
- label: 'core-universal',
24
23
  level: 'info',
25
- colors: false,
24
+ format: { label: 'core-universal', colors: false },
25
+ maskLog,
26
26
  });
27
27
  baseLogger.log('Core universal is going to be initialized with options', {
28
28
  debug,
29
29
  shutdownMode,
30
30
  idleTimeout,
31
31
  printStdout,
32
+ defaultEnvironment,
32
33
  ...handlerOptions,
33
34
  });
34
35
  const { server, port } = await (0, ws_server_1.makeServer)({ ...handlerOptions, debug });
35
- // eslint-disable-next-line no-console
36
- console.log(port); // NOTE: this is a part of the generic protocol
37
- (_b = process.send) === null || _b === void 0 ? void 0 : _b.call(process, { name: 'port', payload: { port } }); // NOTE: this is a part of the js specific protocol
36
+ if (isProcess) {
37
+ // eslint-disable-next-line no-console
38
+ console.log(port.toString()); // NOTE: this is a part of the generic protocol
39
+ (_b = process.send) === null || _b === void 0 ? void 0 : _b.call(process, { name: 'port', payload: { port } }); // NOTE: this is a part of the js specific protocol
40
+ }
38
41
  if (!server) {
39
42
  baseLogger.console.log(`You are trying to spawn a duplicated server, use the server on port ${port} instead`);
40
43
  return { port };
@@ -81,14 +84,22 @@ printStdout = false, ...handlerOptions } = {}) {
81
84
  error: (message) => socket.emit('Logger.log', { level: 'error', message }),
82
85
  fatal: (message) => socket.emit('Logger.log', { level: 'fatal', message }),
83
86
  },
87
+ maskLog,
84
88
  });
85
89
  logger.console.log(`Logs saved in: ${logDirname}`);
86
- const corePromise = socket.wait('Core.makeCore', ({ agentId, cwd, spec }) => {
90
+ const corePromise = socket.wait('Core.makeCore', ({ spec, agentId, environment, cwd }) => {
87
91
  return (0, core_1.makeCore)({
88
- agentId: `eyes-universal/${require('../../package.json').version}/${agentId}`,
89
92
  spec: spec === 'webdriver' ? spec_driver_webdriver_1.default : (0, spec_driver_1.makeSpec)({ socket, spec }),
93
+ agentId: `${agentIdPrefix}/${agentId}`,
90
94
  cwd,
95
+ environment: {
96
+ ...defaultEnvironment,
97
+ ...environment,
98
+ versions: { ...defaultEnvironment === null || defaultEnvironment === void 0 ? void 0 : defaultEnvironment.versions, ...environment === null || environment === void 0 ? void 0 : environment.versions },
99
+ universal: true,
100
+ },
91
101
  logger,
102
+ maskLog,
92
103
  });
93
104
  });
94
105
  socket.command('Core.getAccountInfo', async (options) => {
@@ -113,6 +124,10 @@ printStdout = false, ...handlerOptions } = {}) {
113
124
  const core = await corePromise;
114
125
  return core.deleteTest(options);
115
126
  });
127
+ socket.command('Core.logEvent', async ({ settings }) => {
128
+ const core = await corePromise;
129
+ return core.logEvent({ settings });
130
+ });
116
131
  socket.command('Core.locate', async (options) => {
117
132
  const core = await corePromise;
118
133
  return core.locate(options);
@@ -130,20 +145,12 @@ printStdout = false, ...handlerOptions } = {}) {
130
145
  const client = await core.getECClient(options);
131
146
  return { url: client.url };
132
147
  });
133
- // TODO remove
134
- socket.command('Core.makeECClient', async (options) => {
135
- const core = await corePromise;
136
- const client = await core.getECClient(options);
137
- return { url: client.url };
138
- });
139
148
  socket.command('Core.makeManager', async (options) => {
140
- var _a, _b, _c, _d;
141
- var _e, _f, _g;
149
+ var _a;
142
150
  const core = await corePromise;
143
- (_a = options.settings) !== null && _a !== void 0 ? _a : (options.settings = {});
144
- (_b = (_e = options.settings).concurrency) !== null && _b !== void 0 ? _b : (_e.concurrency = options.concurrency);
145
- (_c = (_f = options.settings).legacyConcurrency) !== null && _c !== void 0 ? _c : (_f.legacyConcurrency = options.legacyConcurrency);
146
- (_d = (_g = options.settings).agentId) !== null && _d !== void 0 ? _d : (_g.agentId = options.agentId);
151
+ if ((_a = options.settings) === null || _a === void 0 ? void 0 : _a.agentId) {
152
+ options.settings.agentId = `${agentIdPrefix}/${options.settings.agentId}`;
153
+ }
147
154
  return refer.ref(await core.makeManager(options));
148
155
  });
149
156
  socket.command('EyesManager.openEyes', async ({ manager, ...options }) => {
@@ -177,9 +184,33 @@ printStdout = false, ...handlerOptions } = {}) {
177
184
  return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.getResults(options);
178
185
  });
179
186
  socket.command('Debug.getHistory', async () => {
180
- return getHistory();
187
+ return {
188
+ ...getHistory(),
189
+ initialArgs: {
190
+ environment: defaultEnvironment,
191
+ agentIdPrefix,
192
+ debug,
193
+ shutdownMode,
194
+ idleTimeout,
195
+ printStdout,
196
+ isProcess,
197
+ maskLog,
198
+ ...handlerOptions,
199
+ },
200
+ };
181
201
  });
182
202
  });
203
+ process.on('unhandledRejection', error => {
204
+ baseLogger.error('Unhandled promise rejection', error);
205
+ /* eslint-disable-next-line no-console */
206
+ console.error('Unhandled promise rejection', error);
207
+ });
208
+ process.on('uncaughtException', error => {
209
+ baseLogger.error('Uncaught error terminating the process', error);
210
+ /* eslint-disable-next-line no-console */
211
+ console.error('Uncaught error terminating the process', error);
212
+ process.exit(1);
213
+ });
183
214
  return { port, close: () => server.close() };
184
215
  }
185
216
  exports.makeCoreServer = makeCoreServer;
@@ -32,6 +32,7 @@ const utils = __importStar(require("@applitools/utils"));
32
32
  function makeCore(options) {
33
33
  const socketPromise = makeClientSocket(options);
34
34
  const core = {
35
+ concurrency: undefined,
35
36
  base: null,
36
37
  async getAccountInfo(options) {
37
38
  const socket = await socketPromise;
@@ -45,6 +46,17 @@ function makeCore(options) {
45
46
  const socket = await socketPromise;
46
47
  return socket.request('Core.setViewportSize', options);
47
48
  },
49
+ async getNMLClient(_options) {
50
+ // TODO
51
+ return null;
52
+ },
53
+ async clearNMLClientCache(_driver) {
54
+ return null;
55
+ },
56
+ async getECClient(options) {
57
+ const socket = await socketPromise;
58
+ return socket.request('Core.makeECClient', options);
59
+ },
48
60
  async locate(options) {
49
61
  const socket = await socketPromise;
50
62
  return socket.request('Core.locate', options);
@@ -71,10 +83,6 @@ function makeCore(options) {
71
83
  const managerRef = await socket.request('Core.makeManager', options);
72
84
  return makeManager({ socket, core, managerRef });
73
85
  },
74
- async getECClient(options) {
75
- const socket = await socketPromise;
76
- return socket.request('Core.makeECClient', options);
77
- },
78
86
  async closeBatch(options) {
79
87
  const socket = await socketPromise;
80
88
  return socket.request('Core.closeBatch', options);
@@ -87,12 +95,18 @@ function makeCore(options) {
87
95
  const socket = await socketPromise;
88
96
  return socket.request('Core.logEvent', options);
89
97
  },
98
+ async updateIfScm() {
99
+ // TODO
100
+ return null;
101
+ },
90
102
  };
91
103
  return core;
92
104
  }
93
105
  exports.makeCore = makeCore;
94
106
  function makeManager({ socket, core, managerRef, }) {
95
107
  const manager = {
108
+ concurrency: undefined,
109
+ base: null,
96
110
  async openEyes(options) {
97
111
  const eyesRef = await socket.request('EyesManager.openEyes', { ...options, manager: managerRef });
98
112
  return makeEyes({ socket, core, eyesRef });
@@ -108,6 +122,7 @@ function makeEyes({ socket, core, eyesRef, }) {
108
122
  const eyes = {
109
123
  test: null,
110
124
  running: null,
125
+ storage: null,
111
126
  core,
112
127
  getBaseEyes() {
113
128
  return null;
@@ -134,15 +149,17 @@ function makeEyes({ socket, core, eyesRef, }) {
134
149
  return eyes;
135
150
  }
136
151
  exports.makeEyes = makeEyes;
137
- async function makeClientSocket({ agentId, spec, }) {
152
+ async function makeClientSocket({ agentId, environment, spec, maskLog, }) {
138
153
  const { port } = await (0, core_server_1.makeCoreServer)();
139
154
  const socket = (0, socket_1.makeSocket)(new ws_1.WebSocket(`ws://localhost:${port}/eyes`), {
140
155
  transport: 'ws',
141
156
  });
142
157
  socket.emit('Core.makeCore', {
158
+ spec: utils.types.isString(spec) ? spec : Object.keys(spec),
143
159
  agentId,
160
+ environment,
144
161
  cwd: process.cwd(),
145
- spec: utils.types.isString(spec) ? spec : Object.keys(spec),
162
+ maskLog,
146
163
  });
147
164
  if (!utils.types.isString(spec)) {
148
165
  Object.entries(spec).forEach(([name, command]) => {
@@ -7,6 +7,8 @@ function withHistory(socket) {
7
7
  managers: new Map(),
8
8
  eyes: new Map(),
9
9
  startedAt: new Date().toISOString(),
10
+ coreArgs: [{}],
11
+ unknownEvents: [],
10
12
  };
11
13
  const originalCommand = socket.command;
12
14
  socket.command = function command(name, fn) {
@@ -21,6 +23,7 @@ function withHistory(socket) {
21
23
  throw error;
22
24
  }
23
25
  finally {
26
+ console.log('@@@', name, payload);
24
27
  if (name === 'Core.makeManager') {
25
28
  const managerRef = result;
26
29
  history.managers.set(extractRefId(managerRef), { ...payload, manager: result, eyes: [] });
@@ -64,6 +67,12 @@ function withHistory(socket) {
64
67
  }
65
68
  }
66
69
  }
70
+ else if (name === 'Core.makeCore') {
71
+ history.coreArgs.push(payload);
72
+ }
73
+ else {
74
+ history.unknownEvents.push({ name, payload });
75
+ }
67
76
  }
68
77
  });
69
78
  };
@@ -27,7 +27,6 @@ exports.makeSpec = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
28
  function makeSpec({ socket, spec, }) {
29
29
  const commands = {
30
- // #region UTILITY
31
30
  isDriver(driver) {
32
31
  return utils.types.has(driver, 'applitools-ref-id');
33
32
  },
@@ -44,32 +43,17 @@ function makeSpec({ socket, spec, }) {
44
43
  utils.types.has(selector, 'selector') &&
45
44
  (utils.types.isString(selector.selector) || utils.types.has(selector, 'applitools-ref-id'))));
46
45
  },
47
- extractContext(driver) {
48
- return driver.context;
49
- },
50
- extractSelector(element) {
51
- return element.selector;
52
- },
53
- extractHostName(driver) {
54
- var _a;
55
- return (_a = driver.hostname) !== null && _a !== void 0 ? _a : null;
56
- },
57
- isStaleElementError(error) {
58
- return error === null || error === void 0 ? void 0 : error.isStaleElementError;
59
- },
60
46
  async isEqualElements(context, element1, element2) {
61
47
  return socket.request('Driver.isEqualElements', { context, element1, element2 });
62
48
  },
63
- // #endregion
64
- // #region COMMANDS
65
- async mainContext(context) {
66
- return socket.request('Driver.mainContext', { context });
49
+ isStaleElementError(error) {
50
+ return error === null || error === void 0 ? void 0 : error.isStaleElementError;
67
51
  },
68
- async parentContext(context) {
69
- return socket.request('Driver.parentContext', { context });
52
+ extractContext(driver) {
53
+ return driver.context;
70
54
  },
71
- async childContext(context, element) {
72
- return socket.request('Driver.childContext', { context, element });
55
+ extractSelector(element) {
56
+ return element.selector;
73
57
  },
74
58
  async executeScript(context, script, arg) {
75
59
  return socket.request('Driver.executeScript', { context, script: script.toString(), arg });
@@ -89,20 +73,26 @@ function makeSpec({ socket, spec, }) {
89
73
  async setElementText(context, element, text) {
90
74
  return socket.request('Driver.setElementText', { context, element, text });
91
75
  },
92
- async getWindowSize(driver) {
93
- return socket.request('Driver.getWindowSize', { driver });
76
+ async getElementRegion(context, element) {
77
+ return socket.request('Driver.getElementRegion', { context, element });
94
78
  },
95
- async setWindowSize(driver, size) {
96
- return socket.request('Driver.setWindowSize', { driver, size });
79
+ async getElementAttribute(context, element, attr) {
80
+ return socket.request('Driver.getElementAttribute', { context, element, attr });
97
81
  },
98
- async getViewportSize(driver) {
99
- return socket.request('Driver.getViewportSize', { driver });
82
+ async hover(context, element) {
83
+ return socket.request('Driver.hover', { context, element });
100
84
  },
101
- async setViewportSize(driver, size) {
102
- return socket.request('Driver.setViewportSize', { driver, size });
85
+ async click(context, element) {
86
+ return socket.request('Driver.click', { context, element });
103
87
  },
104
- async getCookies(driver, context) {
105
- return socket.request('Driver.getCookies', { driver, context });
88
+ async mainContext(context) {
89
+ return socket.request('Driver.mainContext', { context });
90
+ },
91
+ async parentContext(context) {
92
+ return socket.request('Driver.parentContext', { context });
93
+ },
94
+ async childContext(context, element) {
95
+ return socket.request('Driver.childContext', { context, element });
106
96
  },
107
97
  async getCapabilities(driver) {
108
98
  return socket.request('Driver.getCapabilities', { driver });
@@ -110,23 +100,18 @@ function makeSpec({ socket, spec, }) {
110
100
  async getDriverInfo(driver) {
111
101
  return socket.request('Driver.getDriverInfo', { driver });
112
102
  },
113
- async getTitle(driver) {
114
- return socket.request('Driver.getTitle', { driver });
115
- },
116
- async getUrl(driver) {
117
- return socket.request('Driver.getUrl', { driver });
103
+ async getWindowSize(driver) {
104
+ return socket.request('Driver.getWindowSize', { driver });
118
105
  },
119
- async takeScreenshot(driver) {
120
- return socket.request('Driver.takeScreenshot', { driver });
106
+ async setWindowSize(driver, size) {
107
+ return socket.request('Driver.setWindowSize', { driver, size });
121
108
  },
122
- async click(context, element) {
123
- return socket.request('Driver.click', { context, element });
109
+ async getViewportSize(driver) {
110
+ return socket.request('Driver.getViewportSize', { driver });
124
111
  },
125
- async visit(driver, url) {
126
- return socket.request('Driver.visit', { driver, url });
112
+ async setViewportSize(driver, size) {
113
+ return socket.request('Driver.setViewportSize', { driver, size });
127
114
  },
128
- // #endregion
129
- // #region NATIVE COMMANDS
130
115
  async getSystemBars(driver) {
131
116
  return socket.request('Driver.getSystemBars', { driver });
132
117
  },
@@ -136,15 +121,24 @@ function makeSpec({ socket, spec, }) {
136
121
  async setOrientation(driver, orientation) {
137
122
  return socket.request('Driver.setOrientation', { driver, orientation });
138
123
  },
139
- async getElementRegion(driver, element) {
140
- return socket.request('Driver.getElementRegion', { driver, element });
124
+ async getCookies(driver, context) {
125
+ return socket.request('Driver.getCookies', { driver, context });
126
+ },
127
+ async getTitle(driver) {
128
+ return socket.request('Driver.getTitle', { driver });
129
+ },
130
+ async getUrl(driver) {
131
+ return socket.request('Driver.getUrl', { driver });
141
132
  },
142
- async getElementAttribute(driver, element, attr) {
143
- return socket.request('Driver.getElementAttribute', { driver, element, attr });
133
+ async takeScreenshot(driver) {
134
+ return socket.request('Driver.takeScreenshot', { driver });
144
135
  },
145
136
  async performAction(driver, steps) {
146
137
  return socket.request('Driver.performAction', { driver, steps });
147
138
  },
139
+ async visit(driver, url) {
140
+ return socket.request('Driver.visit', { driver, url });
141
+ },
148
142
  async getCurrentWorld(driver) {
149
143
  return socket.request('Driver.getCurrentWorld', { driver });
150
144
  },
@@ -154,7 +148,9 @@ function makeSpec({ socket, spec, }) {
154
148
  async switchWorld(driver, name) {
155
149
  return socket.request('Driver.switchWorld', { driver, name });
156
150
  },
157
- // #endregion
151
+ async reload(driver) {
152
+ return socket.request('Driver.reload', { driver });
153
+ },
158
154
  };
159
155
  return spec.reduce((spec, name) => {
160
156
  return Object.assign(spec, { [name]: commands[name] });
@@ -22,20 +22,21 @@ 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
- exports.makeGetNMLClient = void 0;
27
- const nml_client_1 = require("@applitools/nml-client");
29
+ exports.ensureOfflineFolder = void 0;
30
+ const fs_1 = __importDefault(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
28
32
  const utils = __importStar(require("@applitools/utils"));
29
- function makeGetNMLClient({ client, logger: defaultLogger }) {
30
- const getNMLClientWithCache = utils.general.cachify(getNMLClient, ([options]) => client ? 'default' : [options.driver.guid, options.config]);
31
- if (client)
32
- getNMLClientWithCache.setCachedValue('default', Promise.resolve(client));
33
- return getNMLClientWithCache;
34
- async function getNMLClient({ driver, config, logger = defaultLogger, }) {
35
- const brokerUrl = await driver.extractBrokerUrl();
36
- if (!brokerUrl)
37
- return null;
38
- return (0, nml_client_1.makeNMLClient)({ config: { brokerUrl, ...config }, logger });
33
+ function ensureOfflineFolder() {
34
+ const offlineLocationPath = utils.general.getEnvValue('OFFLINE_LOCATION_PATH')
35
+ ? path_1.default.resolve(utils.general.getEnvValue('OFFLINE_LOCATION_PATH'), `execution-${Date.now()}`)
36
+ : undefined;
37
+ if (offlineLocationPath) {
38
+ fs_1.default.mkdirSync(offlineLocationPath, { recursive: true });
39
39
  }
40
+ return offlineLocationPath;
40
41
  }
41
- exports.makeGetNMLClient = makeGetNMLClient;
42
+ exports.ensureOfflineFolder = ensureOfflineFolder;
@@ -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.extractBranchingTimestamp = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
28
+ const logger_1 = require("@applitools/logger");
29
+ exports.extractBranchingTimestamp = utils.general.cachify(extractGitBranchingTimestamp);
30
+ async function extractGitBranchingTimestamp({ branchName, parentBranchName, execOptions, logger = (0, logger_1.makeLogger)(), }) {
31
+ var _a;
32
+ logger = logger.extend({ tags: [`extract-branching-timestamp-${utils.general.shortid()}`] });
33
+ const command = `HASH=$(git merge-base ${branchName} ${parentBranchName}) && git show -q --format=%aI $HASH`;
34
+ let result = await executeWithLog(command);
35
+ if (result.stderr) {
36
+ const [, missingBranch] = (_a = result.stderr.match(/Not a valid object name ([^\s]+)/)) !== null && _a !== void 0 ? _a : [];
37
+ if (missingBranch) {
38
+ result = await executeWithLog(`git fetch origin ${missingBranch}:${missingBranch} && ${command}`);
39
+ }
40
+ }
41
+ if (!result.stdout) {
42
+ result = await executeWithLog(`git fetch origin --unshallow && ${command}`);
43
+ }
44
+ const timestamp = result.stdout.replace(/\s/g, '');
45
+ if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}/.test(timestamp)) {
46
+ throw new Error(`stderr: ${result.stderr}, stdout: ${result.stdout}`);
47
+ }
48
+ return timestamp;
49
+ async function executeWithLog(command) {
50
+ logger.log(`executing command: ${command}`);
51
+ const result = await utils.process.execute(command, execOptions);
52
+ if (result.stderr && result.code)
53
+ logger.log(`exit code: ${result.code}, stderr: ${result.stderr}`);
54
+ return result;
55
+ }
56
+ }