@applitools/core 4.59.0 → 4.59.1-debug.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.
@@ -0,0 +1,67 @@
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.makeRefer = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
28
+ const REF_ID = 'applitools-ref-id';
29
+ function makeRefer() {
30
+ const store = new Map();
31
+ const relation = new Map();
32
+ return { isRef, ref, deref, destroy };
33
+ function isRef(ref) {
34
+ return Boolean(ref[REF_ID]);
35
+ }
36
+ function ref(value, parentRef) {
37
+ const ref = utils.general.guid();
38
+ store.set(ref, value);
39
+ if (parentRef) {
40
+ let childRefs = relation.get(parentRef[REF_ID]);
41
+ if (!childRefs) {
42
+ childRefs = new Set();
43
+ relation.set(parentRef[REF_ID], childRefs);
44
+ }
45
+ childRefs.add({ [REF_ID]: ref });
46
+ }
47
+ return { [REF_ID]: ref };
48
+ }
49
+ function deref(ref) {
50
+ if (isRef(ref)) {
51
+ return store.get(ref[REF_ID]);
52
+ }
53
+ else {
54
+ return ref;
55
+ }
56
+ }
57
+ function destroy(ref) {
58
+ if (!isRef(ref))
59
+ return;
60
+ const childRefs = relation.get(ref[REF_ID]);
61
+ if (childRefs) {
62
+ childRefs.forEach(childRef => destroy(childRef));
63
+ }
64
+ store.delete(ref[REF_ID]);
65
+ }
66
+ }
67
+ exports.makeRefer = makeRefer;
@@ -0,0 +1,189 @@
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.makeSpec = void 0;
27
+ const utils = __importStar(require("@applitools/utils"));
28
+ function makeSpec({ socket, spec, }) {
29
+ const commands = {
30
+ isDriver(driver) {
31
+ return utils.types.has(driver, 'applitools-ref-id');
32
+ },
33
+ isContext(context) {
34
+ return utils.types.has(context, 'applitools-ref-id');
35
+ },
36
+ isElement(element) {
37
+ return utils.types.has(element, ['applitools-ref-id', 'type']) && element.type === 'element';
38
+ },
39
+ isSelector(selector) {
40
+ return ((utils.types.has(selector, ['applitools-ref-id', 'type']) && selector.type === 'selector') ||
41
+ utils.types.isString(selector) ||
42
+ (utils.types.isPlainObject(selector) &&
43
+ utils.types.has(selector, 'selector') &&
44
+ (utils.types.isString(selector.selector) || utils.types.has(selector, 'applitools-ref-id'))));
45
+ },
46
+ async isEqualElements(context, element1, element2) {
47
+ return socket.request('Driver.isEqualElements', { context, element1, element2 });
48
+ },
49
+ isStaleElementError(error) {
50
+ return error === null || error === void 0 ? void 0 : error.isStaleElementError;
51
+ },
52
+ extractContext(driver) {
53
+ return driver.context;
54
+ },
55
+ extractSelector(element) {
56
+ return element.selector;
57
+ },
58
+ async executeScript(context, script, arg) {
59
+ return socket.request('Driver.executeScript', { context, script: script.toString(), arg });
60
+ },
61
+ async findElement(context, selector, parent) {
62
+ return socket.request('Driver.findElement', { context, selector, parent });
63
+ },
64
+ async findElements(context, selector, parent) {
65
+ return socket.request('Driver.findElements', { context, selector, parent });
66
+ },
67
+ async waitForSelector(context, selector, parent, options) {
68
+ return socket.request('Driver.waitForSelector', { context, selector, parent, options });
69
+ },
70
+ async getElementText(context, element) {
71
+ return socket.request('Driver.getElementText', { context, element });
72
+ },
73
+ async setElementText(context, element, text) {
74
+ return socket.request('Driver.setElementText', { context, element, text });
75
+ },
76
+ async getElementRegion(context, element) {
77
+ return socket.request('Driver.getElementRegion', { context, element });
78
+ },
79
+ async getElementAttribute(context, element, attr) {
80
+ return socket.request('Driver.getElementAttribute', { context, element, attr });
81
+ },
82
+ async hover(context, element) {
83
+ return socket.request('Driver.hover', { context, element });
84
+ },
85
+ async click(context, element) {
86
+ return socket.request('Driver.click', { context, element });
87
+ },
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 });
96
+ },
97
+ async getCapabilities(driver) {
98
+ return socket.request('Driver.getCapabilities', { driver });
99
+ },
100
+ async getDriverInfo(driver) {
101
+ return socket.request('Driver.getDriverInfo', { driver });
102
+ },
103
+ async getWindowSize(driver) {
104
+ return socket.request('Driver.getWindowSize', { driver });
105
+ },
106
+ async setWindowSize(driver, size) {
107
+ return socket.request('Driver.setWindowSize', { driver, size });
108
+ },
109
+ async getViewportSize(driver) {
110
+ return socket.request('Driver.getViewportSize', { driver });
111
+ },
112
+ async setViewportSize(driver, size) {
113
+ return socket.request('Driver.setViewportSize', { driver, size });
114
+ },
115
+ async getSystemBars(driver) {
116
+ return socket.request('Driver.getSystemBars', { driver });
117
+ },
118
+ async getOrientation(driver) {
119
+ return socket.request('Driver.getOrientation', { driver });
120
+ },
121
+ async setOrientation(driver, orientation) {
122
+ return socket.request('Driver.setOrientation', { driver, orientation });
123
+ },
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 });
132
+ },
133
+ async takeScreenshot(driver) {
134
+ return socket.request('Driver.takeScreenshot', { driver });
135
+ },
136
+ async performAction(driver, steps) {
137
+ return socket.request('Driver.performAction', { driver, steps });
138
+ },
139
+ async visit(driver, url) {
140
+ return socket.request('Driver.visit', { driver, url });
141
+ },
142
+ async getCurrentWorld(driver) {
143
+ return socket.request('Driver.getCurrentWorld', { driver });
144
+ },
145
+ async getWorlds(driver) {
146
+ return socket.request('Driver.getWorlds', { driver });
147
+ },
148
+ async switchWorld(driver, name) {
149
+ return socket.request('Driver.switchWorld', { driver, name });
150
+ },
151
+ async reload(driver) {
152
+ return socket.request('Driver.reload', { driver });
153
+ },
154
+ async isUserFunction(ref) {
155
+ return utils.types.has(ref, 'applitools-ref-id');
156
+ },
157
+ async executeUserFunction(userFunction) {
158
+ return socket.request('Driver.executeUserFunction', userFunction);
159
+ },
160
+ async executeBrowserCommands(driver, commands) {
161
+ return socket.request('Driver.executeBrowserCommands', { driver, commands });
162
+ },
163
+ async bringToFront(driver) {
164
+ return socket.request('Driver.bringToFront', { driver });
165
+ },
166
+ };
167
+ // add default commands to spec (if not already there) such as `isUserFunction`
168
+ spec = addDefaultCommands(spec);
169
+ return spec.reduce((spec, name) => {
170
+ return Object.assign(spec, { [name]: commands[name] });
171
+ }, {});
172
+ }
173
+ exports.makeSpec = makeSpec;
174
+ // returns a new clone of the spec commands array with additional commands universal can support even if the spec doesn't
175
+ function addDefaultCommands(spec) {
176
+ const defaultCommands = [
177
+ {
178
+ command: 'isUserFunction',
179
+ dependsOn: ['executeUserFunction'],
180
+ },
181
+ ];
182
+ const commands = spec.slice();
183
+ defaultCommands.forEach(({ command, dependsOn }) => {
184
+ if (!commands.includes(command) && dependsOn.every(dep => commands.includes(dep))) {
185
+ commands.push(command);
186
+ }
187
+ });
188
+ return commands;
189
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeServer = void 0;
4
+ const http_1 = require("http");
5
+ const https_1 = require("https");
6
+ const ws_1 = require("ws");
7
+ const { name, version } = require('../../package.json');
8
+ const TOKEN_HEADER = 'x-eyes-universal-token';
9
+ const TOKEN = `${name}@${version}`;
10
+ async function makeServer(options = {}, logger) {
11
+ const { port = 21077, singleton = true, debug = false, portResolutionMode = 'next', cert, key } = options;
12
+ const secure = Boolean(cert && key);
13
+ const http = secure ? new https_1.Server({ cert, key }) : new http_1.Server();
14
+ http.on('request', (request, response) => {
15
+ if (request.url === '/handshake') {
16
+ const token = debug ? request.headers[TOKEN_HEADER] : TOKEN;
17
+ if (request.headers[TOKEN_HEADER] === token) {
18
+ response.writeHead(200, { [TOKEN_HEADER]: token });
19
+ }
20
+ else {
21
+ response.writeHead(400);
22
+ }
23
+ response.end();
24
+ }
25
+ });
26
+ const hostName = process.env.APPLITOOLS_UNIVERSAL_HOST_NAME || 'localhost';
27
+ http.listen(port, hostName);
28
+ return new Promise((resolve, reject) => {
29
+ http.on('listening', () => {
30
+ const ws = new ws_1.Server({ server: http, path: '/eyes', maxPayload: 256 * 1024 * 1024 });
31
+ ws.on('close', () => {
32
+ logger.log('Core universal server is closed');
33
+ http.close();
34
+ });
35
+ ws.on('error', err => {
36
+ logger.log('Core universal server error', err);
37
+ });
38
+ resolve({ server: ws, port: http.address().port });
39
+ });
40
+ http.on('error', async (err) => {
41
+ if (portResolutionMode !== 'lazy' && err.code === 'EADDRINUSE') {
42
+ if (singleton && (await isHandshakable({ port, secure }))) {
43
+ return resolve({ port });
44
+ }
45
+ else {
46
+ return resolve(await makeServer({ ...options, port: portResolutionMode === 'next' ? port + 1 : 0 }, logger));
47
+ }
48
+ }
49
+ reject(err);
50
+ });
51
+ });
52
+ }
53
+ exports.makeServer = makeServer;
54
+ async function isHandshakable({ port, secure }) {
55
+ const request = secure ? https_1.request : http_1.request;
56
+ return new Promise(resolve => {
57
+ const handshake = request(`${secure ? 'https' : 'http'}://localhost:${port}/handshake`, {
58
+ headers: { [TOKEN_HEADER]: TOKEN },
59
+ });
60
+ handshake.on('response', ({ statusCode, headers }) => {
61
+ resolve(statusCode === 200 && headers[TOKEN_HEADER] === TOKEN);
62
+ });
63
+ handshake.on('error', () => resolve(false));
64
+ handshake.end();
65
+ });
66
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.59.0",
3
+ "version": "4.59.1-debug.1",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -61,17 +61,17 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@applitools/core-base": "1.32.4",
64
- "@applitools/dom-capture": "11.6.13",
65
- "@applitools/dom-snapshot": "4.16.2",
64
+ "@applitools/dom-capture": "11.7.0",
65
+ "@applitools/dom-snapshot": "4.16.3",
66
66
  "@applitools/driver": "1.25.4",
67
67
  "@applitools/ec-client": "1.12.24",
68
68
  "@applitools/logger": "2.2.10",
69
- "@applitools/nml-client": "1.11.22",
69
+ "@applitools/nml-client": "1.11.23",
70
70
  "@applitools/req": "1.9.2",
71
71
  "@applitools/screenshoter": "3.12.17",
72
72
  "@applitools/snippets": "2.8.1",
73
73
  "@applitools/socket": "1.3.11",
74
- "@applitools/ufg-client": "1.20.1",
74
+ "@applitools/ufg-client": "1.20.2",
75
75
  "@applitools/utils": "1.14.3",
76
76
  "abort-controller": "3.0.0",
77
77
  "chalk": "4.1.2",
@@ -113,5 +113,6 @@
113
113
  "selenium-webdriver>ws>bufferutil": false,
114
114
  "selenium-webdriver>ws>utf-8-validate": false
115
115
  }
116
- }
116
+ },
117
+ "stableVersion": "4.59.1-debug.0"
117
118
  }
@@ -158,6 +158,8 @@ export interface ScreenshotSettings<TSpec extends SpecType> extends BaseCore.Ima
158
158
  sendDom?: boolean;
159
159
  captureStatusBar?: boolean;
160
160
  mobileOptions?: MobileOptions;
161
+ /** @internal */
162
+ skipRootHtmlResource?: boolean;
161
163
  }
162
164
  export type LocateSettings<TLocator extends string, TSpec extends SpecType> = BaseCore.LocateSettings<TLocator, Region | ElementReference<TSpec>> & ScreenshotSettings<TSpec>;
163
165
  export type LocateTextSettings<TPattern extends string, TSpec extends SpecType> = BaseCore.LocateTextSettings<TPattern, Region | ElementReference<TSpec>> & ScreenshotSettings<TSpec>;
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -32,6 +32,7 @@ export declare function makeCheckAndClose<TSpec extends SpecType>({ eyes, target
32
32
  domains?: string[] | undefined;
33
33
  }) | undefined;
34
34
  headers?: Record<string, string> | undefined;
35
+ skipRootHtmlResource?: boolean | undefined;
35
36
  } & import("@applitools/core-base").CloseSettings & {
36
37
  environments?: Environment[] | undefined;
37
38
  }) | undefined;
@@ -67,6 +67,8 @@ export type SnapshotSettings<TSpec extends SpecType> = AutomationCore.CheckSetti
67
67
  domains?: string[];
68
68
  };
69
69
  headers?: Record<string, string>;
70
+ /** @internal */
71
+ skipRootHtmlResource?: boolean;
70
72
  };
71
73
  export type CheckSettings<TSpec extends SpecType> = SnapshotSettings<TSpec>;
72
74
  export type SafeCheckSettings = CheckSettings<SpecType<never, never, UFGSelector, never, never>>;
@@ -31,6 +31,8 @@ export type RawDomSnapshot = {
31
31
  export type DomSnapshotSettings<TSpec extends SpecType> = {
32
32
  disableBrowserFetching?: boolean;
33
33
  skipResources?: string[];
34
+ /** @internal */
35
+ skipRootHtmlResource?: boolean;
34
36
  fetchConcurrency?: number;
35
37
  chunkByteLength?: number;
36
38
  executionTimeout?: number;
@@ -1,13 +1,14 @@
1
1
  import { type SpecType, type ElementReference } from '@applitools/driver';
2
2
  import type { Logger } from '@applitools/logger';
3
3
  import { type Selector as UFGSelector } from '@applitools/ufg-client';
4
- export declare function toGeneratedSelectors<TSpec extends SpecType>({ elementReferences, logger, }: {
4
+ export declare function toGeneratedSelectors<TSpec extends SpecType>({ elementReferences, logger, logDeprecations, }: {
5
5
  elementReferences: {
6
6
  target?: ElementReference<TSpec>;
7
7
  scrolling?: ElementReference<TSpec>;
8
8
  calculate?: ElementReference<TSpec>[];
9
9
  };
10
10
  logger: Logger;
11
+ logDeprecations: (...args: string[]) => void;
11
12
  }): {
12
13
  elementReferencesToMark: (string | TSpec["element"] | TSpec["secondary"]["element"] | TSpec["selector"] | TSpec["secondary"]["selector"] | {
13
14
  selector: string | TSpec["selector"] | TSpec["secondary"]["selector"];
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import { type Options } from './core-server';
3
+ import { type ForkOptions } from 'child_process';
4
+ export declare function makeCoreServerProcess(options: Options & {
5
+ forkOptions?: ForkOptions;
6
+ }): Promise<{
7
+ port: number;
8
+ close: () => void;
9
+ }>;
@@ -0,0 +1,18 @@
1
+ import { type ServerOptions } from './ws-server';
2
+ import { type Logger } from '@applitools/logger';
3
+ export type Options = ServerOptions & {
4
+ environment?: Record<string, any>;
5
+ agentIdPrefix?: string;
6
+ debug?: boolean;
7
+ shutdownMode?: 'lazy' | 'stdin';
8
+ idleTimeout?: number;
9
+ printStdout?: boolean;
10
+ isProcess?: boolean;
11
+ maskLog?: boolean;
12
+ logger?: Logger;
13
+ };
14
+ export declare function makeCoreServer({ environment: defaultEnvironment, agentIdPrefix, debug, shutdownMode, idleTimeout, // 15min
15
+ printStdout, isProcess, maskLog, logger, ...handlerOptions }?: Options): Promise<{
16
+ port: number;
17
+ close?: () => void;
18
+ }>;
@@ -0,0 +1,2 @@
1
+ import { type Socket } from '@applitools/socket';
2
+ export declare function withHistory<TSocket extends Socket>(socket: TSocket): () => Record<string, any>;
@@ -0,0 +1,8 @@
1
+ import type { Ref } from './types';
2
+ export interface Refer {
3
+ isRef<TValue = any>(ref: any): ref is Ref<TValue>;
4
+ ref<TValue>(value: TValue, parentRef?: Ref<unknown>): Ref<TValue>;
5
+ deref<TValue>(ref: Ref<TValue>): TValue;
6
+ destroy(ref: Ref<any>): void;
7
+ }
8
+ export declare function makeRefer(): Refer;
@@ -0,0 +1,15 @@
1
+ import type { Ref, ServerSocket, UniversalSpecDriver } from './types';
2
+ import type { SpecType, SpecDriver as BaseSpecDriver, CommonSelector } from '@applitools/driver';
3
+ export type Driver = Ref;
4
+ export type Context = Ref;
5
+ export type Element = Ref;
6
+ export type Selector = string | CommonSelector | Ref;
7
+ export type UserFunction = Ref;
8
+ export type PrimarySpecType = SpecType<Driver, Context, Element, Selector, never, UserFunction>;
9
+ export type SpecDriver = BaseSpecDriver<PrimarySpecType>;
10
+ type CommandName = keyof UniversalSpecDriver<PrimarySpecType>;
11
+ export declare function makeSpec({ socket, spec, }: {
12
+ socket: ServerSocket<PrimarySpecType, any>;
13
+ spec: CommandName[];
14
+ }): SpecDriver;
15
+ export {};