@applitools/core 1.0.0 → 1.0.2

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.
package/dist/check.js CHANGED
@@ -31,15 +31,15 @@ function makeCheck({ eyes, logger: defaultLogger, }) {
31
31
  var _r, _s, _t, _u;
32
32
  settings = { ...config === null || config === void 0 ? void 0 : config.screenshot, ...config === null || config === void 0 ? void 0 : config.check, ...settings };
33
33
  (_a = settings.fully) !== null && _a !== void 0 ? _a : (settings.fully = !settings.region && (!settings.frames || settings.frames.length === 0));
34
- (_b = settings.sendDom) !== null && _b !== void 0 ? _b : (settings.sendDom = true);
35
- (_c = settings.waitBeforeCapture) !== null && _c !== void 0 ? _c : (settings.waitBeforeCapture = 100);
36
- (_d = settings.stitchMode) !== null && _d !== void 0 ? _d : (settings.stitchMode = 'Scroll');
37
- (_e = settings.hideScrollbars) !== null && _e !== void 0 ? _e : (settings.hideScrollbars = true);
38
- (_f = settings.hideCaret) !== null && _f !== void 0 ? _f : (settings.hideCaret = true);
39
- (_g = settings.overlap) !== null && _g !== void 0 ? _g : (settings.overlap = { top: 10, bottom: 50 });
40
- (_h = settings.matchLevel) !== null && _h !== void 0 ? _h : (settings.matchLevel = 'Strict');
41
- (_j = settings.ignoreCaret) !== null && _j !== void 0 ? _j : (settings.ignoreCaret = true);
42
- (_k = settings.useDom) !== null && _k !== void 0 ? _k : false;
34
+ (_b = settings.waitBeforeCapture) !== null && _b !== void 0 ? _b : (settings.waitBeforeCapture = 100);
35
+ (_c = settings.stitchMode) !== null && _c !== void 0 ? _c : (settings.stitchMode = 'Scroll');
36
+ (_d = settings.hideScrollbars) !== null && _d !== void 0 ? _d : (settings.hideScrollbars = true);
37
+ (_e = settings.hideCaret) !== null && _e !== void 0 ? _e : (settings.hideCaret = true);
38
+ (_f = settings.overlap) !== null && _f !== void 0 ? _f : (settings.overlap = { top: 10, bottom: 50 });
39
+ (_g = settings.matchLevel) !== null && _g !== void 0 ? _g : (settings.matchLevel = 'Strict');
40
+ (_h = settings.ignoreCaret) !== null && _h !== void 0 ? _h : (settings.ignoreCaret = true);
41
+ (_j = settings.sendDom) !== null && _j !== void 0 ? _j : (settings.sendDom = true);
42
+ (_k = settings.useDom) !== null && _k !== void 0 ? _k : (settings.useDom = false);
43
43
  (_l = (_r = settings).retryTimeout) !== null && _l !== void 0 ? _l : (_r.retryTimeout = 2000);
44
44
  settings.lazyLoad = settings.lazyLoad === true ? {} : settings.lazyLoad;
45
45
  if (settings.lazyLoad) {
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeLocate = void 0;
4
+ const driver_1 = require("@applitools/driver");
5
+ const take_screenshot_1 = require("./utils/take-screenshot");
6
+ function makeLocate({ spec, eyes, target: defaultTarget, logger: defaultLogger, }) {
7
+ return async function locate({ target = defaultTarget, settings, logger = defaultLogger, } = {}) {
8
+ logger.log('Command "check" is called with settings', settings);
9
+ if (!spec.isDriver(target)) {
10
+ return eyes.locate({ target, settings: settings, logger });
11
+ }
12
+ // TODO driver custom config
13
+ const driver = await (0, driver_1.makeDriver)({ spec, driver: target, logger });
14
+ const screenshot = await (0, take_screenshot_1.takeScreenshot)({ driver, settings, logger });
15
+ const baseTarget = {
16
+ image: await screenshot.image.toPng(),
17
+ };
18
+ const results = await eyes.locate({ target: baseTarget, settings: settings, logger });
19
+ return results;
20
+ };
21
+ }
22
+ exports.makeLocate = makeLocate;
@@ -0,0 +1,54 @@
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.takeScreenshot = void 0;
27
+ const screenshoter_1 = require("@applitools/screenshoter");
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ async function takeScreenshot({ driver, settings, logger, }) {
30
+ return (0, screenshoter_1.takeScreenshot)({
31
+ driver,
32
+ frames: settings.frames?.map(frame => {
33
+ return utils.types.has(frame, 'frame')
34
+ ? { reference: frame.frame, scrollingElement: frame.scrollRootElement }
35
+ : { reference: frame };
36
+ }),
37
+ region: settings.region,
38
+ fully: settings.fully,
39
+ hideScrollbars: settings.hideScrollbars,
40
+ hideCaret: settings.hideCaret,
41
+ scrollingMode: settings.stitchMode?.toLowerCase(),
42
+ overlap: settings.overlap,
43
+ wait: settings.waitBeforeCapture,
44
+ framed: driver.isNative,
45
+ stabilization: settings.normalization && {
46
+ crop: settings.normalization.cut,
47
+ scale: settings.normalization.scaleRatio,
48
+ rotation: settings.normalization.rotation,
49
+ },
50
+ debug: settings.debugImages,
51
+ logger,
52
+ });
53
+ }
54
+ exports.takeScreenshot = takeScreenshot;
package/dist/core.js CHANGED
@@ -28,7 +28,7 @@ const logger_1 = require("@applitools/logger");
28
28
  const core_base_1 = require("@applitools/core-base");
29
29
  const get_viewport_size_1 = require("./automation/get-viewport-size");
30
30
  const set_viewport_size_1 = require("./automation/set-viewport-size");
31
- const locate_1 = require("./automation/locate");
31
+ const locate_1 = require("./locate");
32
32
  const open_eyes_1 = require("./open-eyes");
33
33
  const make_manager_1 = require("./make-manager");
34
34
  const utils = __importStar(require("@applitools/utils"));
package/dist/locate.js CHANGED
@@ -1,10 +1,39 @@
1
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
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.makeLocate = void 0;
4
- function makeLocate({ core, logger: defaultLogger, }) {
27
+ const core_1 = require("./classic/core");
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ function makeLocate({ spec, core, logger: defaultLogger, }) {
5
30
  return async function locate({ target, settings, config, logger = defaultLogger, }) {
31
+ var _a, _b, _c;
6
32
  settings = { ...config === null || config === void 0 ? void 0 : config.open, ...config === null || config === void 0 ? void 0 : config.screenshot, ...settings };
7
- const results = await core.locate({ target: target, settings, logger });
33
+ (_a = settings.serverUrl) !== null && _a !== void 0 ? _a : (settings.serverUrl = (_b = utils.general.getEnvValue('SERVER_URL')) !== null && _b !== void 0 ? _b : 'https://eyesapi.applitools.com');
34
+ (_c = settings.apiKey) !== null && _c !== void 0 ? _c : (settings.apiKey = utils.general.getEnvValue('API_KEY'));
35
+ const classicCore = (0, core_1.makeCore)({ spec, core, logger });
36
+ const results = await classicCore.locate({ target, settings, logger });
8
37
  return results;
9
38
  };
10
39
  }
package/dist/ufg/check.js CHANGED
@@ -22,6 +22,9 @@ 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
29
  exports.makeCheck = void 0;
27
30
  const driver_1 = require("@applitools/driver");
@@ -30,6 +33,7 @@ const wait_for_lazy_load_1 = require("../utils/wait-for-lazy-load");
30
33
  const to_base_check_settings_1 = require("../utils/to-base-check-settings");
31
34
  const generate_safe_selectors_1 = require("./utils/generate-safe-selectors");
32
35
  const utils = __importStar(require("@applitools/utils"));
36
+ const chalk_1 = __importDefault(require("chalk"));
33
37
  function makeCheck({ spec, getEyes, client, test, signal, target: defaultTarget, logger: defaultLogger, }) {
34
38
  return async function check({ target = defaultTarget, settings = {}, logger = defaultLogger, }) {
35
39
  var _a, _b;
@@ -101,6 +105,10 @@ function makeCheck({ spec, getEyes, client, test, signal, target: defaultTarget,
101
105
  safeSelector: selector,
102
106
  })));
103
107
  const promises = settings.renderers.map(async (renderer, index) => {
108
+ if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
109
+ const message = chalk_1.default.yellow(`The 'edge' option that is being used in your browsers' configuration will soon be deprecated. Please change it to either 'edgelegacy' for the legacy version or to 'edgechromium' for the new Chromium-based version. Please note, when using the built-in BrowserType enum, then the values are BrowserType.EDGE_LEGACY and BrowserType.EDGE_CHROMIUM, respectively.`);
110
+ logger.console.log(message);
111
+ }
104
112
  try {
105
113
  if (signal.aborted) {
106
114
  logger.warn('Command "check" was aborted before rendering');
@@ -0,0 +1,60 @@
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.generateSelectors = void 0;
27
+ const snippets = __importStar(require("@applitools/snippets"));
28
+ const utils = __importStar(require("@applitools/utils"));
29
+ async function generateSelectors({ 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(snippets.addElementIds, [mapping.elements.flat(), mapping.ids.flat()]);
40
+ let offset = 0;
41
+ const selectors = mapping.elements.map(elements => {
42
+ if (elements.length === 0)
43
+ return null;
44
+ const generatedSelector = generatedSelectors[offset].reduce((selector, value) => {
45
+ return selector ? { ...selector, shadow: { type: 'css', selector: value } } : { type: 'css', selector: value };
46
+ }, null);
47
+ offset += elements.length;
48
+ return { generatedSelector, originalSelector: elements[0].commonSelector };
49
+ });
50
+ return {
51
+ selectors,
52
+ cleanupGeneratedSelectors,
53
+ };
54
+ async function cleanupGeneratedSelectors() {
55
+ if (!mapping.elements.length)
56
+ return;
57
+ await context.execute(snippets.cleanupElementIds, [mapping.elements]);
58
+ }
59
+ }
60
+ exports.generateSelectors = generateSelectors;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -57,17 +57,17 @@
57
57
  }
58
58
  },
59
59
  "dependencies": {
60
- "@applitools/core-base": "1.0.1",
60
+ "@applitools/core-base": "1.0.3",
61
61
  "@applitools/dom-capture": "11.1.2",
62
62
  "@applitools/dom-snapshot": "4.6.2",
63
- "@applitools/driver": "1.9.28",
64
- "@applitools/logger": "1.1.20",
65
- "@applitools/nml-client": "1.2.1",
66
- "@applitools/req": "1.1.4",
67
- "@applitools/screenshoter": "3.5.2",
63
+ "@applitools/driver": "1.9.31",
64
+ "@applitools/logger": "1.1.21",
65
+ "@applitools/nml-client": "1.2.2",
66
+ "@applitools/req": "1.1.5",
67
+ "@applitools/screenshoter": "3.5.3",
68
68
  "@applitools/snippets": "2.4.5",
69
- "@applitools/types": "1.5.13",
70
- "@applitools/ufg-client": "1.0.1",
69
+ "@applitools/types": "1.5.14",
70
+ "@applitools/ufg-client": "1.0.3",
71
71
  "@applitools/utils": "1.3.12",
72
72
  "abort-controller": "3.0.0",
73
73
  "throat": "6.0.1"
@@ -0,0 +1,16 @@
1
+ import type { SpecDriver, Region } from '@applitools/types';
2
+ import type { Eyes as BaseEyes } from '@applitools/types/base';
3
+ import type { Target, LocateSettings } from '@applitools/types/classic';
4
+ import { type Logger } from '@applitools/logger';
5
+ declare type Options<TDriver, TContext, TElement, TSelector> = {
6
+ spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
7
+ eyes: BaseEyes;
8
+ target: Target<TDriver>;
9
+ logger: Logger;
10
+ };
11
+ export declare function makeLocate<TDriver, TContext, TElement, TSelector>({ spec, eyes, target: defaultTarget, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): <TLocator extends string>({ target, settings, logger, }?: {
12
+ target?: Target<TDriver>;
13
+ settings?: LocateSettings<TLocator, TElement, TSelector>;
14
+ logger?: Logger;
15
+ }) => Promise<Record<TLocator, Region[]>>;
16
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { Region } from '@applitools/types';
2
+ import { ScreenshotSettings } from '@applitools/types/classic';
3
+ import { type Logger } from '@applitools/logger';
4
+ import { type Driver, type Element } from '@applitools/driver';
5
+ export declare type Screenshot = {
6
+ image: any;
7
+ region: Region;
8
+ scrollingElement: Element<unknown, unknown, unknown, unknown>;
9
+ restoreState(): Promise<void>;
10
+ };
11
+ export declare function takeScreenshot<TDriver, TContext, TElement, TSelector>({ driver, settings, logger, }: {
12
+ driver: Driver<TDriver, TContext, TElement, TSelector>;
13
+ settings: ScreenshotSettings<TElement, TSelector>;
14
+ logger: Logger;
15
+ }): Promise<Screenshot>;
@@ -0,0 +1 @@
1
+ export {};
package/types/locate.d.ts CHANGED
@@ -1,13 +1,14 @@
1
- import type { Region, Target, Config, LocateSettings } from '@applitools/types';
2
- import type { Core as ClassicCore } from '@applitools/types/classic';
3
- import type { Core as UFGCore } from '@applitools/types/ufg';
1
+ import type { Region, SpecDriver, Config, LocateSettings } from '@applitools/types';
2
+ import type { Core as BaseCore } from '@applitools/types/base';
3
+ import type { Screenshot } from '@applitools/types/classic';
4
4
  import { type Logger } from '@applitools/logger';
5
- declare type Options<TDriver, TElement, TSelector> = {
6
- core: ClassicCore<TDriver, TElement, TSelector> | UFGCore<TDriver, TElement, TSelector>;
5
+ declare type Options<TDriver, TContext, TElement, TSelector> = {
6
+ spec: SpecDriver<TDriver, TContext, TElement, TSelector>;
7
+ core: BaseCore;
7
8
  logger: Logger;
8
9
  };
9
- export declare function makeLocate<TDriver, TElement, TSelector, TType extends 'classic' | 'ufg'>({ core, logger: defaultLogger, }: Options<TDriver, TElement, TSelector>): <TLocator extends string>({ target, settings, config, logger, }: {
10
- target?: Target<TDriver, TType>;
10
+ export declare function makeLocate<TDriver, TContext, TElement, TSelector, TType extends 'classic' | 'ufg'>({ spec, core, logger: defaultLogger, }: Options<TDriver, TContext, TElement, TSelector>): <TLocator extends string>({ target, settings, config, logger, }: {
11
+ target?: TDriver | Screenshot;
11
12
  settings: LocateSettings<TLocator, TElement, TSelector>;
12
13
  config?: Config<TElement, TSelector, TType>;
13
14
  logger?: Logger;
@@ -0,0 +1,22 @@
1
+ /// <reference types="node" />
2
+ import { Proxy } from '@applitools/types';
3
+ import { Request } from 'node-fetch';
4
+ import { Req, Options } from './req';
5
+ import { Logger } from '@applitools/logger';
6
+ export declare type ReqEyesConfig = {
7
+ serverUrl: string;
8
+ apiKey: string;
9
+ proxy?: Proxy;
10
+ agentId?: string;
11
+ connectionTimeout?: number;
12
+ removeSession?: boolean;
13
+ };
14
+ export declare type ReqEyesOptions = Options & {
15
+ name: string;
16
+ expected?: number | number[];
17
+ };
18
+ export declare type ReqEyes = Req & ((input: string | URL | Request, options?: ReqEyesOptions) => ReturnType<Req>);
19
+ export declare function makeReqEyes({ config, logger }: {
20
+ config: ReqEyesConfig;
21
+ logger?: Logger;
22
+ }): ReqEyes;
@@ -0,0 +1,172 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import globalFetch, { Request, Response } from 'node-fetch';
4
+ declare const stop: unique symbol;
5
+ export declare type Options = {
6
+ /**
7
+ * Providing this value will allow usage of relative urls for input
8
+ * @example 'http://localhost:2107/api/'
9
+ */
10
+ baseUrl?: string;
11
+ /**
12
+ * Uppercase method name. This will override method provided in `Request` object
13
+ * @example 'GET'
14
+ */
15
+ method?: string;
16
+ /**
17
+ * Query parameters to add to the url, all undefined params won't be added.
18
+ * It won't override the whole `search` part of the url, but instead merge with it
19
+ * @example {string: 'value', number: 21, boolean: true, noop: undefined}
20
+ */
21
+ query?: Record<string, string | boolean | number | undefined>;
22
+ /**
23
+ * Headers to send in the request, all undefined headers won't be sent.
24
+ * This will merge with headers provided in `Request` object
25
+ * @example {'x-my-header': 'value', 'x-noop-header': undefined}
26
+ */
27
+ headers?: Record<string, string | undefined>;
28
+ /**
29
+ * Body of the request, plain objects will be transformed to JSON strings
30
+ * @example {data: true}
31
+ * @example Buffer.from('S3lyeWxv', 'base64')
32
+ */
33
+ body?: NodeJS.ReadableStream | ArrayBufferView | string | Record<string, any>;
34
+ /**
35
+ * Proxy settings for the request. Auth credentials specified in the object will override ones specified in url
36
+ * @example {url: 'http://localhost:2107', username: 'kyrylo', password: 'pass'}
37
+ */
38
+ proxy?: {
39
+ url: string;
40
+ username: string;
41
+ password: string;
42
+ };
43
+ /**
44
+ * Connection timeout in ms
45
+ * @example 7000
46
+ */
47
+ timeout?: number;
48
+ /**
49
+ * Retry settings for the request. If specified as an array the retries are applied in the order
50
+ * @see Retry
51
+ * @example {limit: 5, statuses: [500, 501], codes: ['ECONRESET'], timeout: 1000}
52
+ */
53
+ retry?: Retry | Retry[];
54
+ /**
55
+ * Hooks of the request
56
+ * @see Hooks
57
+ */
58
+ hooks?: Hooks | Hooks[];
59
+ fetch?: typeof globalFetch;
60
+ };
61
+ export declare type Retry = {
62
+ /**
63
+ * Max number of attempts for specified condition
64
+ */
65
+ limit?: number;
66
+ /**
67
+ * Timeout before retrying the request. If specified as an array each element specifies the timeout for specific attempt,
68
+ * and the last one will be default for all next attempts
69
+ * @example [1000, 1000, 5000, 10_000]
70
+ */
71
+ timeout?: number | number[];
72
+ /**
73
+ * Status codes of the response to retry on.
74
+ * @example [500]
75
+ */
76
+ statuses?: number[];
77
+ /**
78
+ * Error codes of the request to retry on.
79
+ * @example ['ECONRESET']
80
+ */
81
+ codes?: string[];
82
+ /**
83
+ * Number of the current attempt for specified condition
84
+ * @internal
85
+ */
86
+ attempt?: number;
87
+ };
88
+ export declare type Hooks = {
89
+ /**
90
+ * Hook that will be executed before sending the request, after all, modifications of the `Request` object are already passed
91
+ * @example
92
+ * ```
93
+ * {
94
+ * beforeRequest({request}) {
95
+ * request.headers.set('Expires', 'Tue, 24 Aug 2022 00:00:00 GMT')
96
+ * }
97
+ * }
98
+ * ```
99
+ */
100
+ beforeRequest?(options: {
101
+ request: Request;
102
+ options: Options;
103
+ }): Request | void | Promise<Request | void>;
104
+ /**
105
+ * Hook that will be executed before retrying the request. If this hook will return {@link req.stop}
106
+ * it will prevent request from retrying and execution of other hooks
107
+ * @example
108
+ * ```
109
+ * {
110
+ * async beforeRetry({request, response, attempt}) {
111
+ * const data = await response?.json()
112
+ * if (data.error) return req.stop
113
+ * request.headers.set('x-attempt', attempt)
114
+ * }
115
+ * }
116
+ * ```
117
+ */
118
+ beforeRetry?(options: {
119
+ request: Request;
120
+ attempt: number;
121
+ response?: Response;
122
+ error?: Error;
123
+ options: Options;
124
+ }): Request | typeof stop | void | Promise<Request | void | typeof stop>;
125
+ /**
126
+ * Hook that will be executed after getting the final response of the request (after all of the retries)
127
+ * @example
128
+ * ```
129
+ * {
130
+ * async afterResponse({request, response, options}) {
131
+ * if (!response.ok) return req(request, options)
132
+ * }
133
+ * }
134
+ * ```
135
+ */
136
+ afterResponse?(options: {
137
+ request: Request;
138
+ response: Response;
139
+ options: Options;
140
+ }): Response | void | Promise<Response | void>;
141
+ /**
142
+ * Hook that will be executed after request will throw an error
143
+ * @example
144
+ * ```
145
+ * {
146
+ * async afterError({request, error}) {
147
+ * error.request = request
148
+ * }
149
+ * }
150
+ * ```
151
+ */
152
+ afterError?(options: {
153
+ request: Request;
154
+ error: Error;
155
+ options: Options;
156
+ }): Error | void | Promise<Error | void>;
157
+ };
158
+ /**
159
+ * Helper function that will properly merge two {@link Options} objects
160
+ */
161
+ export declare function mergeOptions(baseOption: Options, options: Options): Options;
162
+ /**
163
+ * Helper function that will create {@link req} function with predefined options
164
+ * @example const req = makeReq({baseUrl: 'http://localhost:2107'})
165
+ */
166
+ export declare function makeReq(baseOption?: Options): typeof req;
167
+ export declare function req(input: string | URL | Request, options?: Options): Promise<Response>;
168
+ export declare namespace req {
169
+ var stop: unique symbol;
170
+ }
171
+ export declare type Req = typeof req;
172
+ export default req;
@@ -0,0 +1,73 @@
1
+ import type { Region, TextRegion, Batch } from '@applitools/types';
2
+ import type { Target, Core, Eyes, ServerSettings, CheckSettings, LocateSettings, LocateTextSettings, ExtractTextSettings, CloseSettings, DeleteTestSettings, CloseBatchSettings, CheckResult, TestResult, OpenSettings } from '@applitools/types/types/core-base';
3
+ import { type Logger } from '@applitools/logger';
4
+ import { type ReqEyes } from './req-eyes';
5
+ interface AccountInfo {
6
+ renderUrl: string;
7
+ renderToken: string;
8
+ uploadUrl: string;
9
+ maxImageHeight: number;
10
+ maxImageArea: number;
11
+ }
12
+ interface Test {
13
+ testId: string;
14
+ batchId: string;
15
+ baselineId: string;
16
+ sessionId: string;
17
+ resultsUrl: string;
18
+ isNew: boolean;
19
+ }
20
+ export interface CoreRequests extends Core {
21
+ openEyes(options: {
22
+ settings: OpenSettings;
23
+ }): Promise<EyesRequests>;
24
+ getAccountInfo(options: {
25
+ settings: ServerSettings;
26
+ }): Promise<AccountInfo>;
27
+ getBatch(options: {
28
+ settings: ServerSettings & {
29
+ batchId: string;
30
+ };
31
+ }): Promise<Batch>;
32
+ closeBatch(options: {
33
+ settings: CloseBatchSettings;
34
+ }): Promise<void>;
35
+ deleteTest(options: {
36
+ settings: DeleteTestSettings;
37
+ }): Promise<void>;
38
+ }
39
+ export interface EyesRequests extends Eyes {
40
+ check(options: {
41
+ target: Target;
42
+ settings?: CheckSettings;
43
+ }): Promise<CheckResult[]>;
44
+ checkAndClose(options: {
45
+ target: Target;
46
+ settings?: CheckSettings;
47
+ }): Promise<TestResult[]>;
48
+ locate<TLocator extends string>(options: {
49
+ target: Target;
50
+ settings: LocateSettings<TLocator>;
51
+ }): Promise<Record<TLocator, Region[]>>;
52
+ locateText<TPattern extends string>(options: {
53
+ target: Target;
54
+ settings: LocateTextSettings<TPattern>;
55
+ }): Promise<Record<TPattern, TextRegion[]>>;
56
+ extractText(options: {
57
+ target: Target;
58
+ settings: ExtractTextSettings;
59
+ }): Promise<string[]>;
60
+ close(options: {
61
+ settings: CloseSettings;
62
+ }): Promise<TestResult[]>;
63
+ abort(): Promise<TestResult[]>;
64
+ }
65
+ export declare function makeCoreCommands({ logger }: {
66
+ logger?: Logger;
67
+ }): CoreRequests;
68
+ export declare function makeEyesCommands({ test, req, logger }: {
69
+ test: Test;
70
+ req: ReqEyes;
71
+ logger?: Logger;
72
+ }): EyesRequests;
73
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { Selector } from '@applitools/types';
2
+ import { type Context } from '@applitools/driver';
3
+ export declare function generateSelectors<TElement, TSelector>({ context, elementReferences, }: {
4
+ context: Context<unknown, unknown, TElement, TSelector>;
5
+ elementReferences: (TElement | Selector<TSelector>)[];
6
+ }): Promise<{
7
+ selectors: {
8
+ generatedSelector: Selector;
9
+ originalSelector: Selector;
10
+ }[];
11
+ cleanupGeneratedSelectors(): Promise<void>;
12
+ }>;