@applitools/core 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +1 -1
  3. package/dist/automation/extract-text.js +0 -79
  4. package/dist/automation/get-nml-client.js +0 -42
  5. package/dist/automation/get-viewport-size.js +0 -13
  6. package/dist/automation/locate-text.js +0 -58
  7. package/dist/automation/locate.js +0 -60
  8. package/dist/automation/set-viewport-size.js +0 -13
  9. package/dist/automation/types.js +0 -2
  10. package/dist/automation/utils/take-screenshot.js +0 -59
  11. package/dist/automation/utils/to-base-check-settings.js +0 -70
  12. package/dist/automation/utils/wait-for-lazy-load.js +0 -22
  13. package/dist/check-and-close.js +0 -49
  14. package/dist/check.js +0 -78
  15. package/dist/classic/abort.js +0 -23
  16. package/dist/classic/check-and-close.js +0 -104
  17. package/dist/classic/check.js +0 -117
  18. package/dist/classic/close.js +0 -23
  19. package/dist/classic/core.js +0 -55
  20. package/dist/classic/get-base-eyes.js +0 -40
  21. package/dist/classic/open-eyes.js +0 -98
  22. package/dist/classic/types.js +0 -17
  23. package/dist/classic/utils/take-dom-capture.js +0 -121
  24. package/dist/cli/cli.js +0 -139
  25. package/dist/close-batch.js +0 -39
  26. package/dist/close.js +0 -38
  27. package/dist/core.js +0 -64
  28. package/dist/delete-test.js +0 -39
  29. package/dist/errors/abort-error.js +0 -10
  30. package/dist/errors/internal-error.js +0 -11
  31. package/dist/errors/test-error.js +0 -32
  32. package/dist/extract-text.js +0 -46
  33. package/dist/get-account-info.js +0 -37
  34. package/dist/get-ec-client.js +0 -37
  35. package/dist/get-eyes-results.js +0 -43
  36. package/dist/get-manager-results.js +0 -112
  37. package/dist/get-typed-eyes.js +0 -27
  38. package/dist/index.js +0 -38
  39. package/dist/locate-text.js +0 -41
  40. package/dist/locate.js +0 -41
  41. package/dist/log-event.js +0 -39
  42. package/dist/make-manager.js +0 -60
  43. package/dist/open-eyes.js +0 -98
  44. package/dist/troubleshoot/check-network.js +0 -114
  45. package/dist/troubleshoot/eyes.js +0 -85
  46. package/dist/troubleshoot/logs.js +0 -41
  47. package/dist/troubleshoot/ufg.js +0 -131
  48. package/dist/troubleshoot/utils.js +0 -44
  49. package/dist/types.js +0 -17
  50. package/dist/ufg/abort.js +0 -33
  51. package/dist/ufg/check-and-close.js +0 -270
  52. package/dist/ufg/check.js +0 -277
  53. package/dist/ufg/close.js +0 -38
  54. package/dist/ufg/core.js +0 -57
  55. package/dist/ufg/get-base-eyes.js +0 -56
  56. package/dist/ufg/get-results.js +0 -28
  57. package/dist/ufg/get-ufg-client.js +0 -47
  58. package/dist/ufg/open-eyes.js +0 -97
  59. package/dist/ufg/types.js +0 -17
  60. package/dist/ufg/utils/generate-safe-selectors.js +0 -63
  61. package/dist/ufg/utils/take-dom-snapshot.js +0 -134
  62. package/dist/ufg/utils/take-dom-snapshots.js +0 -153
  63. package/dist/ufg/utils/uniquify-renderers.js +0 -27
  64. package/dist/universal/core-server-process.js +0 -31
  65. package/dist/universal/core-server.js +0 -190
  66. package/dist/universal/core.js +0 -158
  67. package/dist/universal/history.js +0 -86
  68. package/dist/universal/refer.js +0 -67
  69. package/dist/universal/spec-driver.js +0 -163
  70. package/dist/universal/types.js +0 -2
  71. package/dist/universal/ws-server.js +0 -59
  72. package/dist/utils/extract-ci-provider.js +0 -31
  73. package/dist/utils/format-results.js +0 -185
  74. package/dist/utils/separate-duplicate-results.js +0 -34
  75. package/types/automation/extract-text.d.ts +0 -15
  76. package/types/automation/get-nml-client.d.ts +0 -17
  77. package/types/automation/get-viewport-size.d.ts +0 -12
  78. package/types/automation/locate-text.d.ts +0 -14
  79. package/types/automation/locate.d.ts +0 -14
  80. package/types/automation/set-viewport-size.d.ts +0 -14
  81. package/types/automation/types.d.ts +0 -90
  82. package/types/automation/utils/take-screenshot.d.ts +0 -22
  83. package/types/automation/utils/to-base-check-settings.d.ts +0 -17
  84. package/types/automation/utils/wait-for-lazy-load.d.ts +0 -14
  85. package/types/check-and-close.d.ts +0 -18
  86. package/types/check.d.ts +0 -18
  87. package/types/classic/abort.d.ts +0 -16
  88. package/types/classic/check-and-close.d.ts +0 -19
  89. package/types/classic/check.d.ts +0 -15
  90. package/types/classic/close.d.ts +0 -16
  91. package/types/classic/core.d.ts +0 -17
  92. package/types/classic/get-base-eyes.d.ts +0 -18
  93. package/types/classic/open-eyes.d.ts +0 -16
  94. package/types/classic/types.d.ts +0 -35
  95. package/types/classic/utils/take-dom-capture.d.ts +0 -16
  96. package/types/cli/cli.d.ts +0 -2
  97. package/types/close-batch.d.ts +0 -12
  98. package/types/close.d.ts +0 -13
  99. package/types/core.d.ts +0 -14
  100. package/types/delete-test.d.ts +0 -12
  101. package/types/errors/abort-error.d.ts +0 -4
  102. package/types/errors/internal-error.d.ts +0 -6
  103. package/types/errors/test-error.d.ts +0 -5
  104. package/types/extract-text.d.ts +0 -16
  105. package/types/get-account-info.d.ts +0 -11
  106. package/types/get-ec-client.d.ts +0 -14
  107. package/types/get-eyes-results.d.ts +0 -12
  108. package/types/get-manager-results.d.ts +0 -13
  109. package/types/get-typed-eyes.d.ts +0 -19
  110. package/types/index.d.ts +0 -9
  111. package/types/locate-text.d.ts +0 -15
  112. package/types/locate.d.ts +0 -16
  113. package/types/log-event.d.ts +0 -12
  114. package/types/make-manager.d.ts +0 -19
  115. package/types/open-eyes.d.ts +0 -22
  116. package/types/troubleshoot/check-network.d.ts +0 -21
  117. package/types/troubleshoot/eyes.d.ts +0 -11
  118. package/types/troubleshoot/logs.d.ts +0 -10
  119. package/types/troubleshoot/ufg.d.ts +0 -10
  120. package/types/troubleshoot/utils.d.ts +0 -2
  121. package/types/types.d.ts +0 -142
  122. package/types/ufg/abort.d.ts +0 -21
  123. package/types/ufg/check-and-close.d.ts +0 -42
  124. package/types/ufg/check.d.ts +0 -23
  125. package/types/ufg/close.d.ts +0 -19
  126. package/types/ufg/core.d.ts +0 -21
  127. package/types/ufg/get-base-eyes.d.ts +0 -19
  128. package/types/ufg/get-results.d.ts +0 -16
  129. package/types/ufg/get-ufg-client.d.ts +0 -16
  130. package/types/ufg/open-eyes.d.ts +0 -16
  131. package/types/ufg/types.d.ts +0 -73
  132. package/types/ufg/utils/generate-safe-selectors.d.ts +0 -16
  133. package/types/ufg/utils/take-dom-snapshot.d.ts +0 -47
  134. package/types/ufg/utils/take-dom-snapshots.d.ts +0 -27
  135. package/types/ufg/utils/uniquify-renderers.d.ts +0 -2
  136. package/types/universal/core-server-process.d.ts +0 -9
  137. package/types/universal/core-server.d.ts +0 -13
  138. package/types/universal/core.d.ts +0 -23
  139. package/types/universal/history.d.ts +0 -2
  140. package/types/universal/refer.d.ts +0 -8
  141. package/types/universal/spec-driver.d.ts +0 -11
  142. package/types/universal/types.d.ts +0 -188
  143. package/types/universal/ws-server.d.ts +0 -14
  144. package/types/utils/extract-ci-provider.d.ts +0 -1
  145. package/types/utils/format-results.d.ts +0 -16
  146. package/types/utils/separate-duplicate-results.d.ts +0 -2
@@ -1,63 +0,0 @@
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.generateSafeSelectors = void 0;
27
- const utils = __importStar(require("@applitools/utils"));
28
- const { addElementIds, cleanupElementIds } = require('@applitools/snippets');
29
- async function generateSafeSelectors({ context, elementReferences, }) {
30
- const mapping = {
31
- elements: [],
32
- ids: [],
33
- };
34
- for (const elementReference of elementReferences) {
35
- const elements = await context.elements(elementReference);
36
- mapping.elements.push(elements);
37
- mapping.ids.push(Array(elements.length).fill(utils.general.guid()));
38
- }
39
- const generatedSelectors = await context.execute(addElementIds, [
40
- mapping.elements.flat(),
41
- mapping.ids.flat(),
42
- ]);
43
- let offset = 0;
44
- const selectors = mapping.elements.map((elements, index) => {
45
- if (elements.length === 0)
46
- return { safeSelector: null, originalSelector: null, elementReference: elementReferences[index] };
47
- const safeSelector = generatedSelectors[offset].reduceRight((selector, value) => {
48
- return selector ? { type: 'css', selector: value, shadow: selector } : { type: 'css', selector: value };
49
- }, undefined);
50
- offset += elements.length;
51
- return { safeSelector, originalSelector: elements[0].commonSelector, elementReference: elementReferences[index] };
52
- });
53
- return {
54
- selectors,
55
- cleanupGeneratedSelectors,
56
- };
57
- async function cleanupGeneratedSelectors() {
58
- if (!mapping.elements.length)
59
- return;
60
- await context.execute(cleanupElementIds, [mapping.elements.flat()]);
61
- }
62
- }
63
- exports.generateSafeSelectors = generateSafeSelectors;
@@ -1,134 +0,0 @@
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.extractCrossFrames = exports.takeDomSnapshot = void 0;
27
- const utils = __importStar(require("@applitools/utils"));
28
- const { getProcessPagePoll, getPollResult, getProcessPagePollForIE, getPollResultForIE, } = require('@applitools/dom-snapshot');
29
- async function takeDomSnapshot({ context, settings, logger, }) {
30
- const driver = context.driver;
31
- const environment = await driver.getEnvironment();
32
- const features = await driver.getFeatures();
33
- const cookies = features.allCookies ? await driver.getCookies().catch(() => []) : [];
34
- const snapshot = transformRawDomSnapshot(await takeContextDomSnapshot({ context }));
35
- snapshot.cookies = cookies;
36
- return snapshot;
37
- async function takeContextDomSnapshot({ context }) {
38
- // logger.log(`taking dom snapshot. ${context._reference ? `context referece: ${JSON.stringify(context._reference)}` : ''}`)
39
- var _a, _b, _c;
40
- if (!features.allCookies) {
41
- cookies.push(...(await context.getCookies()));
42
- }
43
- const isLegacyBrowser = environment.isIE || environment.isEdgeLegacy;
44
- const arg = {
45
- dontFetchResources: settings === null || settings === void 0 ? void 0 : settings.disableBrowserFetching,
46
- skipResources: settings === null || settings === void 0 ? void 0 : settings.skipResources,
47
- removeReverseProxyURLPrefixes: Boolean(process.env.APPLITOOLS_SCRIPT_REMOVE_REVERSE_PROXY_URL_PREFIXES),
48
- chunkByteLength: (_a = settings === null || settings === void 0 ? void 0 : settings.chunkByteLength) !== null && _a !== void 0 ? _a : (Number(process.env.APPLITOOLS_SCRIPT_RESULT_MAX_BYTE_LENGTH) ||
49
- (environment.isIOS ? 100000 : 250 * 1024 * 1024)),
50
- serializeResources: true,
51
- compressResources: false,
52
- showLogs: settings === null || settings === void 0 ? void 0 : settings.showLogs,
53
- };
54
- const scripts = {
55
- main: features.canExecuteOnlyFunctionScripts
56
- ? require('@applitools/dom-snapshot').processPagePoll
57
- : `return (${isLegacyBrowser ? await getProcessPagePollForIE() : await getProcessPagePoll()}).apply(null, arguments);`,
58
- poll: features.canExecuteOnlyFunctionScripts
59
- ? require('@applitools/dom-snapshot').pollResult
60
- : `return (${isLegacyBrowser ? await getPollResultForIE() : await getPollResult()}).apply(null, arguments);`,
61
- };
62
- const snapshot = await context.executePoll(scripts, {
63
- main: arg,
64
- poll: arg,
65
- executionTimeout: (_b = settings === null || settings === void 0 ? void 0 : settings.executionTimeout) !== null && _b !== void 0 ? _b : 5 * 60 * 1000,
66
- pollTimeout: (_c = settings === null || settings === void 0 ? void 0 : settings.pollTimeout) !== null && _c !== void 0 ? _c : 200,
67
- });
68
- const crossFrames = extractCrossFrames({ snapshot, logger });
69
- for (const { reference, parentSnapshot, cdtNode } of crossFrames) {
70
- const frameContext = await context
71
- .context(reference)
72
- .then(context => context.focus())
73
- .catch(err => {
74
- const srcAttr = cdtNode.attributes.find(attr => attr.name === 'src');
75
- if (srcAttr)
76
- srcAttr.value = '';
77
- logger.log(`could not switch to frame during takeDomSnapshot. Path to frame: ${JSON.stringify(reference)}`, err);
78
- });
79
- if (frameContext) {
80
- const frameSnapshot = await takeContextDomSnapshot({ context: frameContext });
81
- let url = new URL(frameSnapshot.url);
82
- if (url.protocol === 'data:')
83
- url = new URL(`http://data-url-frame${url.search}`);
84
- if (!url.searchParams.has('applitools-iframe'))
85
- url.searchParams.set('applitools-iframe', utils.general.guid());
86
- frameSnapshot.url = url.href;
87
- parentSnapshot.frames.push(frameSnapshot);
88
- cdtNode.attributes.push({ name: 'data-applitools-src', value: frameSnapshot.url });
89
- }
90
- }
91
- logger.log(`dom snapshot cdt length: ${snapshot.cdt.length}`);
92
- logger.log(`blobs urls (${snapshot.blobs.length}):`, JSON.stringify(snapshot.blobs.map(({ url }) => url)));
93
- logger.log(`resource urls (${snapshot.resourceUrls.length}):`, JSON.stringify(snapshot.resourceUrls));
94
- return snapshot;
95
- }
96
- }
97
- exports.takeDomSnapshot = takeDomSnapshot;
98
- function transformRawDomSnapshot(snapshot) {
99
- const { blobs, selector: _, crossFrames: __, ...rest } = snapshot;
100
- return {
101
- ...rest,
102
- resourceContents: blobs.reduce((resourceContents, blob) => {
103
- return {
104
- ...resourceContents,
105
- [blob.url]: blob,
106
- };
107
- }, {}),
108
- frames: snapshot.frames.map(frameSnapshot => transformRawDomSnapshot(frameSnapshot)),
109
- };
110
- }
111
- function extractCrossFrames({ snapshot, parent = null, logger, }) {
112
- var _a;
113
- const crossFrames = [snapshot, ...((_a = snapshot.frames) !== null && _a !== void 0 ? _a : [])].flatMap((snapshot, index) => {
114
- var _a;
115
- const crossFrames = ((_a = snapshot.crossFrames) !== null && _a !== void 0 ? _a : []).map(({ selector, index }) => ({
116
- reference: { reference: { type: 'css', selector }, parent },
117
- parentSnapshot: snapshot,
118
- cdtNode: snapshot.cdt[index],
119
- }));
120
- return [
121
- ...crossFrames,
122
- ...(index > 0
123
- ? extractCrossFrames({
124
- snapshot,
125
- parent: { reference: { type: 'css', selector: snapshot.selector }, parent },
126
- logger,
127
- })
128
- : []),
129
- ];
130
- });
131
- logger.log(`frames paths for ${snapshot.crossFrames}`, crossFrames.map(selector => JSON.stringify(selector)).join(' , '));
132
- return crossFrames;
133
- }
134
- exports.extractCrossFrames = extractCrossFrames;
@@ -1,153 +0,0 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
26
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
- };
28
- var __importDefault = (this && this.__importDefault) || function (mod) {
29
- return (mod && mod.__esModule) ? mod : { "default": mod };
30
- };
31
- Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.takeDomSnapshots = void 0;
33
- const take_dom_snapshot_1 = require("./take-dom-snapshot");
34
- const utils = __importStar(require("@applitools/utils"));
35
- const chalk_1 = __importDefault(require("chalk"));
36
- __exportStar(require("./take-dom-snapshot"), exports);
37
- async function takeDomSnapshots({ driver, settings, hooks, provides, logger, }) {
38
- var _a, _b, _c, _d, _e;
39
- const currentContext = driver.currentContext;
40
- const waitBeforeCapture = async () => {
41
- if (utils.types.isFunction(settings.waitBeforeCapture)) {
42
- await settings.waitBeforeCapture();
43
- }
44
- else if (settings.waitBeforeCapture) {
45
- await utils.general.sleep(settings.waitBeforeCapture);
46
- }
47
- };
48
- await ((_a = hooks === null || hooks === void 0 ? void 0 : hooks.beforeSnapshots) === null || _a === void 0 ? void 0 : _a.call(hooks));
49
- if (!settings.layoutBreakpoints) {
50
- logger.log(`taking single dom snapshot`);
51
- await ((_b = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _b === void 0 ? void 0 : _b.call(hooks));
52
- await waitBeforeCapture();
53
- const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
54
- return Array(settings.renderers.length).fill(snapshot);
55
- }
56
- const isStrictBreakpoints = utils.types.isArray((_c = settings.layoutBreakpoints) === null || _c === void 0 ? void 0 : _c.breakpoints);
57
- const requiredWidths = await settings.renderers.reduce(async (prev, renderer, index) => {
58
- const { name, width } = (await extractRendererInfo({ renderer }));
59
- const requiredWidths = await prev;
60
- const requiredWidth = isStrictBreakpoints
61
- ? calculateBreakpoint({ breakpoints: settings.layoutBreakpoints.breakpoints, value: width })
62
- : width;
63
- let renderers = requiredWidths.get(requiredWidth);
64
- if (!renderers)
65
- requiredWidths.set(requiredWidth, (renderers = []));
66
- renderers.push({ name, width, index });
67
- return requiredWidths;
68
- }, Promise.resolve(new Map()));
69
- const smallestBreakpoint = Math.min(...(isStrictBreakpoints ? settings.layoutBreakpoints.breakpoints : []));
70
- if (isStrictBreakpoints && requiredWidths.has(smallestBreakpoint - 1)) {
71
- const smallestBrowsers = requiredWidths
72
- .get(smallestBreakpoint - 1)
73
- .map(({ name, width }) => `(${name}, ${width})`)
74
- .join(', ');
75
- const message = chalk_1.default.yellow(`The following configuration's viewport-widths are smaller than the smallest configured layout breakpoint (${smallestBreakpoint} pixels): [${smallestBrowsers}]. As a fallback, the resources that will be used for these configurations have been captured on a viewport-width of ${smallestBreakpoint} - 1 pixels. If an additional layout breakpoint is needed for you to achieve better results - please add it to your configuration.`);
76
- logger.console.log(message);
77
- }
78
- logger.log(`taking multiple dom snapshots for breakpoints:`, settings.layoutBreakpoints.breakpoints);
79
- logger.log(`required widths: ${[...requiredWidths.keys()].join(', ')}`);
80
- const viewportSize = await driver.getViewportSize();
81
- const snapshots = Array(settings.renderers.length);
82
- if (requiredWidths.has(viewportSize.width)) {
83
- logger.log(`taking dom snapshot for existing width ${viewportSize.width}`);
84
- await ((_d = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _d === void 0 ? void 0 : _d.call(hooks));
85
- await waitBeforeCapture();
86
- const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
87
- requiredWidths.get(viewportSize.width).forEach(({ index }) => (snapshots[index] = snapshot));
88
- }
89
- for (const [requiredWidth, browsersInfo] of requiredWidths.entries()) {
90
- logger.log(`taking dom snapshot for width ${requiredWidth}`);
91
- try {
92
- await driver.setViewportSize({ width: requiredWidth, height: viewportSize.height });
93
- if (settings.layoutBreakpoints.reload) {
94
- await driver.reloadPage();
95
- await waitBeforeCapture();
96
- }
97
- }
98
- catch (err) {
99
- logger.error(err);
100
- const actualViewportSize = await driver.getViewportSize();
101
- if (isStrictBreakpoints) {
102
- const failedBrowsers = browsersInfo.map(({ name, width }) => `(${name}, ${width})`).join(', ');
103
- const message = chalk_1.default.yellow(`One of the configured layout breakpoints is ${requiredWidth} pixels, while your local browser has a limit of ${actualViewportSize.width}, so the SDK couldn't resize it to the desired size. As a fallback, the resources that will be used for the following configurations: [${failedBrowsers}] have been captured on the browser's limit (${actualViewportSize.width} pixels). To resolve this, you may use a headless browser as it can be resized to any size.`);
104
- logger.console.log(message);
105
- logger.log(message);
106
- }
107
- else {
108
- const failedBrowsers = browsersInfo.map(({ name }) => `(${name})`).join(', ');
109
- const message = chalk_1.default.yellow(`The following configurations [${failedBrowsers}] have a viewport-width of ${requiredWidth} pixels, while your local browser has a limit of ${actualViewportSize.width} pixels, so the SDK couldn't resize it to the desired size. As a fallback, the resources that will be used for these checkpoints have been captured on the browser's limit (${actualViewportSize.width} pixels). To resolve this, you may use a headless browser as it can be resized to any size.`);
110
- logger.console.log(message);
111
- logger.log(message);
112
- }
113
- }
114
- await ((_e = hooks === null || hooks === void 0 ? void 0 : hooks.beforeEachSnapshot) === null || _e === void 0 ? void 0 : _e.call(hooks));
115
- await waitBeforeCapture();
116
- const snapshot = await (0, take_dom_snapshot_1.takeDomSnapshot)({ context: currentContext, settings, logger });
117
- browsersInfo.forEach(({ index }) => (snapshots[index] = snapshot));
118
- }
119
- await driver.setViewportSize(viewportSize);
120
- if (settings.layoutBreakpoints.reload) {
121
- await driver.reloadPage();
122
- await waitBeforeCapture();
123
- }
124
- return snapshots;
125
- function calculateBreakpoint({ breakpoints, value }) {
126
- const nextBreakpointIndex = breakpoints
127
- .sort((item1, item2) => (item1 > item2 ? 1 : -1))
128
- .findIndex(breakpoint => breakpoint > value);
129
- if (nextBreakpointIndex === -1)
130
- return breakpoints[breakpoints.length - 1];
131
- else if (nextBreakpointIndex === 0)
132
- return breakpoints[0] - 1;
133
- else
134
- return breakpoints[nextBreakpointIndex - 1];
135
- }
136
- async function extractRendererInfo({ renderer }) {
137
- if (utils.types.has(renderer, ['width', 'height'])) {
138
- const { name, width, height } = renderer;
139
- return { name: name !== null && name !== void 0 ? name : 'default', width, height };
140
- }
141
- else if (utils.types.has(renderer, 'chromeEmulationInfo')) {
142
- const devices = await provides.getChromeEmulationDevices();
143
- const { deviceName, screenOrientation = 'portrait' } = renderer.chromeEmulationInfo;
144
- return { name: deviceName, screenOrientation, ...devices[deviceName][screenOrientation] };
145
- }
146
- else if (utils.types.has(renderer, 'iosDeviceInfo')) {
147
- const devices = await provides.getIOSDevices();
148
- const { deviceName, screenOrientation = 'portrait' } = renderer.iosDeviceInfo;
149
- return { name: deviceName, screenOrientation, ...devices[deviceName][screenOrientation] };
150
- }
151
- }
152
- }
153
- exports.takeDomSnapshots = takeDomSnapshots;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uniquifyRenderers = void 0;
4
- function uniquifyRenderers(renderers) {
5
- const duplications = new Map(renderers.map(renderer => [JSON.stringify(renderer), 0]));
6
- return renderers.reduce((uniqueRenderers, renderer) => {
7
- const key = JSON.stringify(renderer);
8
- let index = duplications.get(key);
9
- if (index > 0) {
10
- if (!renderer.id) {
11
- let uniqueRenderer;
12
- do {
13
- uniqueRenderer = { ...renderer, id: `${index}` };
14
- index += 1;
15
- } while (duplications.has(JSON.stringify(uniqueRenderer)));
16
- uniqueRenderers.push(uniqueRenderer);
17
- }
18
- }
19
- else {
20
- index += 1;
21
- uniqueRenderers.push(renderer);
22
- }
23
- duplications.set(key, index);
24
- return uniqueRenderers;
25
- }, []);
26
- }
27
- exports.uniquifyRenderers = uniquifyRenderers;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.makeCoreServerProcess = void 0;
7
- const child_process_1 = require("child_process");
8
- const path_1 = __importDefault(require("path"));
9
- function makeCoreServerProcess(options) {
10
- return new Promise((resolve, reject) => {
11
- const server = (0, child_process_1.fork)(path_1.default.resolve(__dirname, '../../dist/cli/cli.js'), ['universal', `--config=${JSON.stringify(options)}`], {
12
- stdio: [options.shutdownMode === 'stdin' ? 'inherit' : 'ignore', 'ignore', 'ignore', 'ipc'],
13
- ...options.forkOptions,
14
- });
15
- const timeout = setTimeout(() => {
16
- reject(new Error(`Server didn't respond for 10s after being started`));
17
- server.kill();
18
- }, 60000);
19
- server.on('error', reject);
20
- server.once('message', ({ name, payload }) => {
21
- var _a;
22
- if (name === 'port') {
23
- resolve({ port: payload.port, close: () => server.kill() });
24
- clearTimeout(timeout);
25
- (_a = server.channel) === null || _a === void 0 ? void 0 : _a.unref();
26
- }
27
- });
28
- server.unref();
29
- });
30
- }
31
- exports.makeCoreServerProcess = makeCoreServerProcess;
@@ -1,190 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.makeCoreServer = void 0;
7
- const socket_1 = require("@applitools/socket");
8
- const spec_driver_webdriver_1 = __importDefault(require("@applitools/spec-driver-webdriver"));
9
- const spec_driver_1 = require("./spec-driver");
10
- const ws_server_1 = require("./ws-server");
11
- const logger_1 = require("@applitools/logger");
12
- const core_1 = require("../core");
13
- const refer_1 = require("./refer");
14
- const history_1 = require("./history");
15
- const os_1 = __importDefault(require("os"));
16
- const path_1 = __importDefault(require("path"));
17
- async function makeCoreServer({ debug = false, shutdownMode = 'lazy', idleTimeout = 900000, // 15min
18
- printStdout = false, isProcess = false, ...handlerOptions } = {}) {
19
- var _a, _b;
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
- const baseLogger = (0, logger_1.makeLogger)({
22
- handler: { type: 'rolling file', name: 'universal', dirname: logDirname },
23
- level: 'info',
24
- format: { label: 'core-universal', colors: false },
25
- });
26
- baseLogger.log('Core universal is going to be initialized with options', {
27
- debug,
28
- shutdownMode,
29
- idleTimeout,
30
- printStdout,
31
- ...handlerOptions,
32
- });
33
- const { server, port } = await (0, ws_server_1.makeServer)({ ...handlerOptions, debug });
34
- if (isProcess) {
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
38
- }
39
- if (!server) {
40
- baseLogger.console.log(`You are trying to spawn a duplicated server, use the server on port ${port} instead`);
41
- return { port };
42
- }
43
- if (!printStdout)
44
- process.stdout.write = () => true; // NOTE: prevent any write to stdout
45
- baseLogger.log('Core universal is started on port', port);
46
- let idle;
47
- let serverClosed = false;
48
- if (shutdownMode === 'stdin') {
49
- process.stdin.resume();
50
- process.stdin.on('end', () => {
51
- server.close();
52
- });
53
- }
54
- else if (shutdownMode === 'lazy') {
55
- if (idleTimeout) {
56
- idle = setTimeout(() => server.close(), idleTimeout);
57
- }
58
- }
59
- server.on('close', () => {
60
- clearTimeout(idle);
61
- serverClosed = true;
62
- });
63
- server.on('connection', async (client) => {
64
- const refer = (0, refer_1.makeRefer)();
65
- const socket = (0, socket_1.makeSocket)(client, {
66
- transport: 'ws',
67
- logger: baseLogger,
68
- });
69
- const getHistory = debug ? (0, history_1.withHistory)(socket) : () => null;
70
- if (shutdownMode === 'lazy' && idleTimeout) {
71
- clearTimeout(idle);
72
- socket.on('close', () => {
73
- if (server.clients.size > 0 || serverClosed)
74
- return;
75
- idle = setTimeout(() => server.close(), idleTimeout);
76
- });
77
- }
78
- const logger = baseLogger.extend({
79
- console: {
80
- log: (message) => socket.emit('Logger.log', { level: 'info', message }),
81
- warn: (message) => socket.emit('Logger.log', { level: 'warn', message }),
82
- error: (message) => socket.emit('Logger.log', { level: 'error', message }),
83
- fatal: (message) => socket.emit('Logger.log', { level: 'fatal', message }),
84
- },
85
- });
86
- logger.console.log(`Logs saved in: ${logDirname}`);
87
- const corePromise = socket.wait('Core.makeCore', ({ agentId, cwd, spec }) => {
88
- return (0, core_1.makeCore)({
89
- agentId: `eyes-universal/${require('../../package.json').version}/${agentId}`,
90
- spec: spec === 'webdriver' ? spec_driver_webdriver_1.default : (0, spec_driver_1.makeSpec)({ socket, spec }),
91
- cwd,
92
- logger,
93
- });
94
- });
95
- socket.command('Core.getAccountInfo', async (options) => {
96
- const core = await corePromise;
97
- return core.getAccountInfo(options);
98
- });
99
- socket.command('Core.getViewportSize', async (options) => {
100
- var _a;
101
- const core = await corePromise;
102
- return (_a = core.getViewportSize) === null || _a === void 0 ? void 0 : _a.call(core, options);
103
- });
104
- socket.command('Core.setViewportSize', async (options) => {
105
- var _a;
106
- const core = await corePromise;
107
- return (_a = core.setViewportSize) === null || _a === void 0 ? void 0 : _a.call(core, options);
108
- });
109
- socket.command('Core.closeBatch', async (options) => {
110
- const core = await corePromise;
111
- return core.closeBatch(options);
112
- });
113
- socket.command('Core.deleteTest', async (options) => {
114
- const core = await corePromise;
115
- return core.deleteTest(options);
116
- });
117
- socket.command('Core.logEvent', async ({ settings }) => {
118
- const core = await corePromise;
119
- return core.logEvent({ settings });
120
- });
121
- socket.command('Core.locate', async (options) => {
122
- const core = await corePromise;
123
- return core.locate(options);
124
- });
125
- socket.command('Core.locateText', async (options) => {
126
- const core = await corePromise;
127
- return core.locateText(options);
128
- });
129
- socket.command('Core.extractText', async (options) => {
130
- const core = await corePromise;
131
- return core.extractText(options);
132
- });
133
- socket.command('Core.getECClient', async (options) => {
134
- const core = await corePromise;
135
- const client = await core.getECClient(options);
136
- return { url: client.url };
137
- });
138
- // TODO remove
139
- socket.command('Core.makeECClient', async (options) => {
140
- const core = await corePromise;
141
- const client = await core.getECClient(options);
142
- return { url: client.url };
143
- });
144
- socket.command('Core.makeManager', async (options) => {
145
- var _a, _b, _c, _d;
146
- var _e, _f, _g;
147
- const core = await corePromise;
148
- (_a = options.settings) !== null && _a !== void 0 ? _a : (options.settings = {});
149
- (_b = (_e = options.settings).concurrency) !== null && _b !== void 0 ? _b : (_e.concurrency = options.concurrency);
150
- (_c = (_f = options.settings).legacyConcurrency) !== null && _c !== void 0 ? _c : (_f.legacyConcurrency = options.legacyConcurrency);
151
- (_d = (_g = options.settings).agentId) !== null && _d !== void 0 ? _d : (_g.agentId = options.agentId);
152
- return refer.ref(await core.makeManager(options));
153
- });
154
- socket.command('EyesManager.openEyes', async ({ manager, ...options }) => {
155
- var _a;
156
- const eyes = await ((_a = refer.deref(manager)) === null || _a === void 0 ? void 0 : _a.openEyes(options));
157
- const eyesRef = refer.ref(eyes, manager);
158
- return eyesRef;
159
- });
160
- socket.command('EyesManager.getResults', async ({ manager, ...options }) => {
161
- var _a;
162
- return (_a = refer.deref(manager)) === null || _a === void 0 ? void 0 : _a.getResults(options);
163
- });
164
- socket.command('Eyes.check', async ({ eyes, ...options }) => {
165
- var _a;
166
- return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.check(options);
167
- });
168
- socket.command('Eyes.checkAndClose', async ({ eyes, ...options }) => {
169
- var _a;
170
- return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.checkAndClose(options);
171
- });
172
- socket.command('Eyes.close', async ({ eyes, ...options }) => {
173
- var _a;
174
- return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.close(options);
175
- });
176
- socket.command('Eyes.abort', async ({ eyes, ...options }) => {
177
- var _a;
178
- return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.abort(options);
179
- });
180
- socket.command('Eyes.getResults', async ({ eyes, ...options }) => {
181
- var _a;
182
- return (_a = refer.deref(eyes)) === null || _a === void 0 ? void 0 : _a.getResults(options);
183
- });
184
- socket.command('Debug.getHistory', async () => {
185
- return getHistory();
186
- });
187
- });
188
- return { port, close: () => server.close() };
189
- }
190
- exports.makeCoreServer = makeCoreServer;