@applitools/core 3.5.0 → 3.6.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,72 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [3.6.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.5.1...js/core@3.6.0) (2023-07-10)
6
+
7
+
8
+ ### Features
9
+
10
+ * ability to skip deserialize dom snapshot ([#1703](https://github.com/applitools/eyes.sdk.javascript1/issues/1703)) ([a461af4](https://github.com/applitools/eyes.sdk.javascript1/commit/a461af4fb72b7cba1ae15a5d20376fd02e7d9003))
11
+ * prevent animated gif images from playing in ufg ([#1721](https://github.com/applitools/eyes.sdk.javascript1/issues/1721)) ([30f39cc](https://github.com/applitools/eyes.sdk.javascript1/commit/30f39cc8ef2cdfa1d85bd7a0037b818db1b52e1b))
12
+ * support custom property per renderer ([#1715](https://github.com/applitools/eyes.sdk.javascript1/issues/1715)) ([8cf6b1f](https://github.com/applitools/eyes.sdk.javascript1/commit/8cf6b1fb0563b2485ca18eebc2efd236c2287db8))
13
+
14
+
15
+ ### Dependencies
16
+
17
+ * @applitools/core-base bumped from 1.3.0 to 1.4.0
18
+ #### Features
19
+
20
+ * support custom property per renderer ([#1715](https://github.com/applitools/eyes.sdk.javascript1/issues/1715)) ([8cf6b1f](https://github.com/applitools/eyes.sdk.javascript1/commit/8cf6b1fb0563b2485ca18eebc2efd236c2287db8))
21
+
22
+
23
+
24
+ * @applitools/image bumped from 1.0.36 to 1.1.0
25
+ #### Features
26
+
27
+ * prevent animated gif images from playing in ufg ([#1721](https://github.com/applitools/eyes.sdk.javascript1/issues/1721)) ([30f39cc](https://github.com/applitools/eyes.sdk.javascript1/commit/30f39cc8ef2cdfa1d85bd7a0037b818db1b52e1b))
28
+ * @applitools/ec-client bumped from 1.6.1 to 1.6.2
29
+ #### Bug Fixes
30
+
31
+ * fixed issue that caused creation of unnecessary tunnels ([b38fe37](https://github.com/applitools/eyes.sdk.javascript1/commit/b38fe3754f97c5f312ceffd74406255654466ab7))
32
+ * start tunnels with proper regional server ([2a34ed8](https://github.com/applitools/eyes.sdk.javascript1/commit/2a34ed8cd72dc9ac54957348cbe8ba9e67032340))
33
+
34
+
35
+
36
+ * @applitools/tunnel-client bumped from 1.0.1 to 1.0.2
37
+ #### Bug Fixes
38
+
39
+ * start tunnels with proper regional server ([2a34ed8](https://github.com/applitools/eyes.sdk.javascript1/commit/2a34ed8cd72dc9ac54957348cbe8ba9e67032340))
40
+ * @applitools/ufg-client bumped from 1.3.0 to 1.4.0
41
+ #### Features
42
+
43
+ * ability to skip deserialize dom snapshot ([#1703](https://github.com/applitools/eyes.sdk.javascript1/issues/1703)) ([a461af4](https://github.com/applitools/eyes.sdk.javascript1/commit/a461af4fb72b7cba1ae15a5d20376fd02e7d9003))
44
+ * add support for resource fetching through eg tunnel ([3daa4da](https://github.com/applitools/eyes.sdk.javascript1/commit/3daa4da975cbe23ffb33bb3e9f5f76732ead1075))
45
+ * added new chrome emulation devices - `Galaxy S21`, `Galaxy S21 Ultra`, and `Galaxy S22 Ultra` ([0dac7f7](https://github.com/applitools/eyes.sdk.javascript1/commit/0dac7f7941558a4e9416f70a104b96d125d38fc7))
46
+ * prevent animated gif images from playing in ufg ([#1721](https://github.com/applitools/eyes.sdk.javascript1/issues/1721)) ([30f39cc](https://github.com/applitools/eyes.sdk.javascript1/commit/30f39cc8ef2cdfa1d85bd7a0037b818db1b52e1b))
47
+
48
+
49
+ #### Bug Fixes
50
+
51
+ * add support for resource fetching through eg tunnel ([a0b98e3](https://github.com/applitools/eyes.sdk.javascript1/commit/a0b98e364cf95bf6bed84c1afe3376384d781717))
52
+ * add support for resource fetching through eg tunnel ([3daa4da](https://github.com/applitools/eyes.sdk.javascript1/commit/3daa4da975cbe23ffb33bb3e9f5f76732ead1075))
53
+
54
+
55
+
56
+ * @applitools/screenshoter bumped from 3.8.2 to 3.8.3
57
+
58
+
59
+ ## [3.5.1](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.5.0...js/core@3.5.1) (2023-07-05)
60
+
61
+
62
+ ### Dependencies
63
+
64
+ * @applitools/tunnel-client bumped from 1.0.0 to 1.0.1
65
+ #### Bug Fixes
66
+
67
+ * re-release ([438a9aa](https://github.com/applitools/eyes.sdk.javascript1/commit/438a9aa6331ba76d6bdc7d94e8f27d7ae45730da))
68
+ * @applitools/ec-client bumped from 1.6.0 to 1.6.1
69
+
70
+
5
71
  ## [3.5.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/core@3.4.0...js/core@3.5.0) (2023-07-05)
6
72
 
7
73
 
@@ -50,7 +50,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
50
50
  });
51
51
  const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
52
52
  const ufgClient = await eyes.core.getUFGClient({
53
- config: { ...eyes.test.ufgServer },
53
+ config: { ...eyes.test.ufgServer, eyesServerUrl: eyes.test.server.serverUrl, eyesApiKey: eyes.test.server.apiKey },
54
54
  concurrency: uniqueRenderers.length || 5,
55
55
  logger,
56
56
  });
@@ -152,7 +152,7 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
152
152
  originalSelector: selector,
153
153
  safeSelector: selector,
154
154
  })));
155
- const promises = uniqueRenderers.map(async (renderer, index) => {
155
+ const promises = uniqueRenderers.map(async ({ properties, ...renderer }, index) => {
156
156
  const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
157
157
  if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
158
158
  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.`);
@@ -177,7 +177,10 @@ function makeCheckAndClose({ eyes, target: defaultTarget, spec, signal, logger:
177
177
  },
178
178
  logger: rendererLogger,
179
179
  });
180
- const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger });
180
+ const [baseEyes] = await eyes.getBaseEyes({
181
+ settings: { renderer, type: snapshotType, properties },
182
+ logger,
183
+ });
181
184
  try {
182
185
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
183
186
  rendererLogger.warn('Command "check" was aborted before rendering');
package/dist/ufg/check.js CHANGED
@@ -50,7 +50,7 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: mainLogg
50
50
  });
51
51
  const uniqueRenderers = (0, uniquify_renderers_1.uniquifyRenderers)((_a = settings.renderers) !== null && _a !== void 0 ? _a : []);
52
52
  const ufgClient = await eyes.core.getUFGClient({
53
- config: { ...eyes.test.ufgServer },
53
+ config: { ...eyes.test.ufgServer, eyesServerUrl: eyes.test.server.serverUrl, eyesApiKey: eyes.test.server.apiKey },
54
54
  concurrency: uniqueRenderers.length || 5,
55
55
  logger,
56
56
  });
@@ -153,7 +153,7 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: mainLogg
153
153
  originalSelector: selector,
154
154
  safeSelector: selector,
155
155
  })));
156
- const promises = uniqueRenderers.map(async (renderer, index) => {
156
+ const promises = uniqueRenderers.map(async ({ properties, ...renderer }, index) => {
157
157
  const rendererLogger = logger.extend({ tags: [`renderer-${utils.general.shortid()}`] });
158
158
  if (utils.types.has(renderer, 'name') && renderer.name === 'edge') {
159
159
  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.`);
@@ -178,7 +178,10 @@ function makeCheck({ eyes, target: defaultTarget, spec, signal, logger: mainLogg
178
178
  },
179
179
  logger: rendererLogger,
180
180
  });
181
- const [baseEyes] = await eyes.getBaseEyes({ settings: { renderer, type: snapshotType }, logger: rendererLogger });
181
+ const [baseEyes] = await eyes.getBaseEyes({
182
+ settings: { renderer, type: snapshotType, properties },
183
+ logger: rendererLogger,
184
+ });
182
185
  try {
183
186
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
184
187
  rendererLogger.warn('Command "check" was aborted before rendering');
@@ -32,6 +32,7 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLo
32
32
  }
33
33
  return getBaseEyesWithCache;
34
34
  async function getBaseEyes({ settings, logger = mainLogger, } = {}) {
35
+ var _a, _b;
35
36
  logger = logger.extend(mainLogger);
36
37
  logger.log(`Command "getBaseEyes" is called with settings`, settings);
37
38
  if (!settings)
@@ -41,8 +42,12 @@ function makeGetBaseEyes({ settings: defaultSettings, eyes, base, logger: mainLo
41
42
  logger,
42
43
  });
43
44
  const environment = await ufgClient.bookRenderer({ settings, logger });
45
+ let properties;
46
+ if (defaultSettings.properties || settings.properties) {
47
+ properties = ((_a = defaultSettings.properties) !== null && _a !== void 0 ? _a : []).concat((_b = settings.properties) !== null && _b !== void 0 ? _b : []);
48
+ }
44
49
  const baseEyes = await eyes.core.base.openEyes({
45
- settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment } },
50
+ settings: { ...defaultSettings, environment: { ...defaultSettings.environment, ...environment }, properties },
46
51
  logger,
47
52
  });
48
53
  return [baseEyes];
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.extractCrossFrames = exports.deserializeDomSnapshot = exports.takeDomSnapshot = void 0;
26
+ exports.extractCrossFrames = exports.takeDomSnapshot = void 0;
27
27
  const utils = __importStar(require("@applitools/utils"));
28
28
  const { getProcessPagePoll, getPollResult, getProcessPagePollForIE, getPollResultForIE, } = require('@applitools/dom-snapshot');
29
29
  async function takeDomSnapshot({ context, settings, logger, }) {
@@ -31,7 +31,7 @@ async function takeDomSnapshot({ context, settings, logger, }) {
31
31
  const environment = await driver.getEnvironment();
32
32
  const features = await driver.getFeatures();
33
33
  const cookies = features.allCookies ? await driver.getCookies().catch(() => []) : [];
34
- const snapshot = deserializeDomSnapshot({ snapshot: await takeContextDomSnapshot({ context }) });
34
+ const snapshot = transformRawDomSnapshot(await takeContextDomSnapshot({ context }));
35
35
  snapshot.cookies = cookies;
36
36
  return snapshot;
37
37
  async function takeContextDomSnapshot({ context }) {
@@ -95,21 +95,19 @@ async function takeDomSnapshot({ context, settings, logger, }) {
95
95
  }
96
96
  }
97
97
  exports.takeDomSnapshot = takeDomSnapshot;
98
- function deserializeDomSnapshot({ snapshot }) {
98
+ function transformRawDomSnapshot(snapshot) {
99
99
  const { blobs, selector: _, crossFrames: __, ...rest } = snapshot;
100
- const deserializedSnapshot = {
100
+ return {
101
101
  ...rest,
102
102
  resourceContents: blobs.reduce((resourceContents, blob) => {
103
- if (blob.value === undefined)
104
- return { ...resourceContents, [blob.url]: blob };
105
- else
106
- return { ...resourceContents, [blob.url]: { ...blob, value: Buffer.from(blob.value, 'base64') } };
103
+ return {
104
+ ...resourceContents,
105
+ [blob.url]: blob,
106
+ };
107
107
  }, {}),
108
- frames: snapshot.frames.map(frameSnapshot => deserializeDomSnapshot({ snapshot: frameSnapshot })),
108
+ frames: snapshot.frames.map(frameSnapshot => transformRawDomSnapshot(frameSnapshot)),
109
109
  };
110
- return deserializedSnapshot;
111
110
  }
112
- exports.deserializeDomSnapshot = deserializeDomSnapshot;
113
111
  function extractCrossFrames({ snapshot, parent = null, logger, }) {
114
112
  var _a;
115
113
  const crossFrames = [snapshot, ...((_a = snapshot.frames) !== null && _a !== void 0 ? _a : [])].flatMap((snapshot, index) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -68,19 +68,19 @@
68
68
  ]
69
69
  },
70
70
  "dependencies": {
71
- "@applitools/core-base": "1.3.0",
71
+ "@applitools/core-base": "1.4.0",
72
72
  "@applitools/dom-capture": "11.2.2",
73
73
  "@applitools/dom-snapshot": "4.7.9",
74
74
  "@applitools/driver": "1.13.0",
75
- "@applitools/ec-client": "1.6.0",
75
+ "@applitools/ec-client": "1.6.2",
76
76
  "@applitools/logger": "2.0.5",
77
77
  "@applitools/nml-client": "1.5.1",
78
78
  "@applitools/req": "1.4.0",
79
- "@applitools/screenshoter": "3.8.2",
79
+ "@applitools/screenshoter": "3.8.3",
80
80
  "@applitools/snippets": "2.4.21",
81
81
  "@applitools/socket": "1.1.5",
82
82
  "@applitools/spec-driver-webdriver": "1.0.37",
83
- "@applitools/ufg-client": "1.3.0",
83
+ "@applitools/ufg-client": "1.4.0",
84
84
  "@applitools/utils": "1.5.0",
85
85
  "@types/ws": "8.5.5",
86
86
  "abort-controller": "3.0.0",
@@ -98,6 +98,7 @@
98
98
  "@applitools/spec-driver-webdriverio": "^1.5.6",
99
99
  "@applitools/test-server": "^1.2.2",
100
100
  "@applitools/test-utils": "^1.5.17",
101
+ "@applitools/tunnel-client": "^1.0.2",
101
102
  "@types/node": "^12.20.55",
102
103
  "@types/selenium-webdriver": "^4.1.2",
103
104
  "@types/yargs": "^17.0.22",
@@ -13,7 +13,9 @@ type Options<TSpec extends SpecType> = {
13
13
  export declare function makeCheckAndClose<TSpec extends SpecType>({ eyes, target: defaultTarget, spec, signal, logger: mainLogger, }: Options<TSpec>): ({ target, settings, logger, }: {
14
14
  target?: Target<TSpec> | undefined;
15
15
  settings?: (import("@applitools/core-base").CheckSettings<Region | import("@applitools/driver").ElementReference<TSpec>> & import("./types").ScreenshotSettings<TSpec> & {
16
- renderers?: import("@applitools/ufg-client").Renderer[] | undefined;
16
+ renderers?: (import("@applitools/ufg-client").Renderer & {
17
+ properties?: import("@applitools/core-base/types").CustomProperty[] | undefined;
18
+ })[] | undefined;
17
19
  hooks?: {
18
20
  beforeCaptureScreenshot: string;
19
21
  } | undefined;
@@ -1,8 +1,7 @@
1
- import type { Eyes, OpenSettings } from './types';
1
+ import type { Eyes, GetBaseEyesSettings, OpenSettings } from './types';
2
2
  import type { Eyes as BaseEyes } from '@applitools/core-base';
3
3
  import { type SpecType } from '@applitools/driver';
4
4
  import { type Logger } from '@applitools/logger';
5
- import { type RendererSettings } from '@applitools/ufg-client';
6
5
  type Options<TSpec extends SpecType> = {
7
6
  settings: OpenSettings;
8
7
  eyes: Eyes<TSpec>;
@@ -10,7 +9,7 @@ type Options<TSpec extends SpecType> = {
10
9
  logger: Logger;
11
10
  };
12
11
  export declare function makeGetBaseEyes<TSpec extends SpecType>({ settings: defaultSettings, eyes, base, logger: mainLogger, }: Options<TSpec>): (({ settings, logger, }?: {
13
- settings?: RendererSettings | undefined;
12
+ settings?: GetBaseEyesSettings | undefined;
14
13
  logger?: Logger | undefined;
15
14
  }) => Promise<BaseEyes[]>) & {
16
15
  getCachedValues(): Promise<BaseEyes[]>[];
@@ -4,10 +4,13 @@ import type * as AutomationCore from '../automation/types';
4
4
  import { type SpecType } from '@applitools/driver';
5
5
  import { type Logger } from '@applitools/logger';
6
6
  import { type Proxy } from '@applitools/req';
7
- import { type UFGClient, type UFGRequestsConfig, type Renderer, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot } from '@applitools/ufg-client';
7
+ import { type UFGClient, type UFGRequestsConfig, type Renderer, type DomSnapshot, type AndroidSnapshot, type IOSSnapshot, RendererSettings } from '@applitools/ufg-client';
8
8
  export * from '../automation/types';
9
9
  export type SnapshotTarget = MaybeArray<DomSnapshot> | MaybeArray<AndroidSnapshot> | MaybeArray<IOSSnapshot>;
10
10
  export type Target<TSpec extends SpecType> = SnapshotTarget | AutomationCore.Target<TSpec>;
11
+ export type GetBaseEyesSettings = RendererSettings & {
12
+ properties?: BaseCore.CustomProperty[];
13
+ };
11
14
  export interface Core<TSpec extends SpecType> extends AutomationCore.Core<TSpec> {
12
15
  readonly type: 'ufg';
13
16
  getUFGClient(options?: {
@@ -26,10 +29,7 @@ export interface Eyes<TSpec extends SpecType> extends AutomationCore.Eyes<TSpec>
26
29
  readonly type: 'ufg';
27
30
  readonly core: Core<TSpec>;
28
31
  getBaseEyes(options?: {
29
- settings?: {
30
- type: 'web' | 'native';
31
- renderer: Renderer;
32
- };
32
+ settings?: GetBaseEyesSettings;
33
33
  logger?: Logger;
34
34
  }): Promise<BaseCore.Eyes[]>;
35
35
  check(options?: {
@@ -48,7 +48,9 @@ export interface Eyes<TSpec extends SpecType> extends AutomationCore.Eyes<TSpec>
48
48
  }): Promise<TestResult[]>;
49
49
  }
50
50
  export type CheckSettings<TSpec extends SpecType> = AutomationCore.CheckSettings<TSpec> & {
51
- renderers?: Renderer[];
51
+ renderers?: (Renderer & {
52
+ properties?: BaseCore.CustomProperty[];
53
+ })[];
52
54
  hooks?: {
53
55
  beforeCaptureScreenshot: string;
54
56
  };
@@ -1,7 +1,7 @@
1
1
  import { type Logger } from '@applitools/logger';
2
2
  import { type SpecType, type Context } from '@applitools/driver';
3
3
  import { type DomSnapshot } from '@applitools/ufg-client';
4
- type RawDomSnapshot = {
4
+ export type RawDomSnapshot = {
5
5
  url: string;
6
6
  selector: string;
7
7
  cdt: {
@@ -10,7 +10,7 @@ type RawDomSnapshot = {
10
10
  value: string;
11
11
  }[];
12
12
  }[];
13
- crossFrames: {
13
+ crossFrames?: {
14
14
  selector: string;
15
15
  index: number;
16
16
  }[];
@@ -18,8 +18,10 @@ type RawDomSnapshot = {
18
18
  resourceUrls: string[];
19
19
  blobs: {
20
20
  url: string;
21
- value: string;
21
+ value?: string;
22
22
  }[];
23
+ srcAttr: string | null;
24
+ scriptVersion: string;
23
25
  };
24
26
  export type DomSnapshotSettings = {
25
27
  disableBrowserFetching?: boolean;
@@ -34,9 +36,6 @@ export declare function takeDomSnapshot<TSpec extends SpecType>({ context, setti
34
36
  settings?: DomSnapshotSettings;
35
37
  logger: Logger;
36
38
  }): Promise<DomSnapshot>;
37
- export declare function deserializeDomSnapshot({ snapshot }: {
38
- snapshot: RawDomSnapshot;
39
- }): DomSnapshot;
40
39
  export declare function extractCrossFrames({ snapshot, parent, logger, }: {
41
40
  snapshot: RawDomSnapshot;
42
41
  parent?: any;
@@ -46,4 +45,3 @@ export declare function extractCrossFrames({ snapshot, parent, logger, }: {
46
45
  reference: any;
47
46
  parentSnapshot: RawDomSnapshot;
48
47
  }[];
49
- export {};
@@ -1,2 +1,2 @@
1
1
  import { type Renderer } from '@applitools/ufg-client';
2
- export declare function uniquifyRenderers(renderers: Renderer[]): Renderer[];
2
+ export declare function uniquifyRenderers<TRenderer extends Renderer>(renderers: TRenderer[]): TRenderer[];