storybook-addon-playwright 4.8.1 → 4.9.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.
@@ -2,9 +2,8 @@
2
2
  import { DiffImageToScreenShot } from '../../typings';
3
3
  import { MatchImageSnapshotOptions } from 'jest-image-snapshot';
4
4
  import { ImageDiffResult } from '../../typings';
5
- interface SnapshotOptions extends MatchImageSnapshotOptions {
5
+ export interface SnapshotOptions extends MatchImageSnapshotOptions {
6
6
  receivedImageBuffer: Buffer;
7
7
  updateSnapshot?: boolean;
8
8
  }
9
9
  export declare const diffImageToScreenshot: (data: DiffImageToScreenShot, imageBuffer: Buffer, options?: Partial<SnapshotOptions>) => Promise<ImageDiffResult>;
10
- export {};
@@ -4,7 +4,12 @@ const tslib_1 = require("tslib");
4
4
  const utils_1 = require("./utils");
5
5
  const diff_image_to_screenshot_1 = require("./diff-image-to-screenshot");
6
6
  const make_screenshot_1 = require("./make-screenshot");
7
+ const configs_1 = require("../configs");
8
+ const get_screenshot_paths_1 = require("../utils/get-screenshot-paths");
9
+ const fs_1 = tslib_1.__importDefault(require("fs"));
7
10
  exports.testScreenshotService = (data) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
+ const { requestType = 'story-screenshot' } = data;
12
+ const config = configs_1.getConfigs();
8
13
  const screenshotData = yield utils_1.getScreenshotData(data);
9
14
  if (!screenshotData) {
10
15
  throw new Error('Unable to find screenshot data.');
@@ -18,21 +23,40 @@ exports.testScreenshotService = (data) => tslib_1.__awaiter(void 0, void 0, void
18
23
  browserType: screenshotData.browserType,
19
24
  props: screenshotData.props,
20
25
  requestId: data.requestId,
21
- requestType: data.requestType,
26
+ requestType,
22
27
  screenshotOptions: screenshotData.screenshotOptions,
23
28
  storyId: data.storyId,
24
29
  }, true);
25
- result = yield diff_image_to_screenshot_1.diffImageToScreenshot({
26
- browserType: screenshotData.browserType,
27
- fileName: data.fileName,
28
- storyId: data.storyId,
29
- title: screenshotData.title,
30
- }, snapshotData.buffer);
30
+ if (config.compareScreenshot !== undefined) {
31
+ const paths = get_screenshot_paths_1.getScreenshotPaths(Object.assign(Object.assign({}, data), { browserType: screenshotData.browserType, title: screenshotData.title }));
32
+ if (!fs_1.default.existsSync(paths.fileName)) {
33
+ throw new Error(`Unable to find the file for '${paths.screenshotIdentifier}' screenshot in '${paths.screenshotsDir}' directory!`);
34
+ }
35
+ const baseImageInfo = Object.assign(Object.assign({}, paths), { get base64() {
36
+ return fs_1.default.readFileSync(paths.fileName, { encoding: 'base64' });
37
+ },
38
+ get buffer() {
39
+ return fs_1.default.readFileSync(paths.fileName);
40
+ } });
41
+ const customScreenshot = yield config.compareScreenshot(Object.assign(Object.assign(Object.assign({}, data), screenshotData), { baseImage: baseImageInfo, screenshot: snapshotData }));
42
+ if (customScreenshot !== false) {
43
+ const { diffImageString } = customScreenshot, restOfCustomScreenshotResult = tslib_1.__rest(customScreenshot, ["diffImageString"]);
44
+ result = Object.assign(Object.assign({ imgSrcString: diffImageString }, restOfCustomScreenshotResult), { newScreenshot: baseImageInfo.base64 });
45
+ }
46
+ }
47
+ if (Object.keys(result).length === 0) {
48
+ result = yield diff_image_to_screenshot_1.diffImageToScreenshot({
49
+ browserType: screenshotData.browserType,
50
+ fileName: data.fileName,
51
+ storyId: data.storyId,
52
+ title: screenshotData.title,
53
+ }, snapshotData.buffer);
54
+ }
31
55
  result.newScreenshot = snapshotData.base64;
32
56
  }
33
57
  catch (error) {
34
58
  result.pass = false;
35
- result.error = error.message;
59
+ result.error = typeof error === 'string' ? error : error.message;
36
60
  }
37
61
  result.screenshotId = data.screenshotId;
38
62
  result.storyId = data.storyId;
@@ -1 +1 @@
1
- {"version":3,"file":"test-screenshot-service.js","sourceRoot":"","sources":["../../../../src/api/server/services/test-screenshot-service.ts"],"names":[],"mappings":";;;AACA,mCAA4C;AAC5C,yEAAmE;AACnE,uDAAmD;AAItC,QAAA,qBAAqB,GAAG,CACnC,IAAkC,EACR,EAAE;IAC5B,MAAM,cAAc,GAAG,MAAM,yBAAiB,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;IAED,IAAI,MAAM,GAAoB,EAAE,CAAC;IACjC,IAAI,YAAiC,CAAC;IAEtC,IAAI;QACF,YAAY,GAAG,MAAM,gCAAc,CACjC;YACE,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,cAAc,EAAE,cAAc,CAAC,cAAc;YAC7C,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;YACnD,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,EACD,IAAI,CACL,CAAC;QAEF,MAAM,GAAG,MAAM,gDAAqB,CAClC;YACE,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,cAAc,CAAC,KAAK;SAC5B,EACD,YAAY,CAAC,MAAM,CACpB,CAAC;QACF,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC;KAC5C;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;KAC9B;IAED,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IAEvC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA,CAAC"}
1
+ {"version":3,"file":"test-screenshot-service.js","sourceRoot":"","sources":["../../../../src/api/server/services/test-screenshot-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import { ScreenshotPathInfo } from '../api/server/utils/get-screenshot-paths';
3
+ import { ImageDiffResult } from '../api/typings';
4
+ import { RequestData } from './request';
5
+ import { BrowserTypes, ScreenshotImageData, ScreenshotInfo } from './screenshot';
6
+ export interface BaseImageInfo extends ScreenshotPathInfo {
7
+ buffer: Buffer;
8
+ base64: string;
9
+ }
10
+ export interface CompareScreenshotParams extends ScreenshotInfo, RequestData {
11
+ screenshot: ScreenshotImageData;
12
+ browserType: BrowserTypes;
13
+ baseImage: BaseImageInfo;
14
+ }
15
+ export interface CompareScreenshotReturnType extends Required<Pick<ImageDiffResult, 'pass'>>, Omit<ImageDiffResult, 'pass' | 'added'> {
16
+ diffImageString?: string;
17
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=compare-screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-screenshot.js","sourceRoot":"","sources":["../../src/typings/compare-screenshot.ts"],"names":[],"mappings":""}
@@ -6,6 +6,7 @@ import { RequestData } from './request';
6
6
  import { StoryInfo } from './story-info';
7
7
  import { TestFileScreenshots } from '../api/server/services/test-file-screenshots';
8
8
  import { Theme } from '@material-ui/core';
9
+ import { CompareScreenshotParams, CompareScreenshotReturnType } from './compare-screenshot';
9
10
  declare type PageGotoOptions = Parameters<Page['goto']>[1];
10
11
  export interface Config<T extends unknown = Page> {
11
12
  storybookEndpoint: string;
@@ -30,6 +31,7 @@ export interface Config<T extends unknown = Page> {
30
31
  story?: number;
31
32
  };
32
33
  screenshotOptions?: TakeScreenshotOptionsParams;
34
+ compareScreenshot?: (data: CompareScreenshotParams) => Promise<CompareScreenshotReturnType | false>;
33
35
  theme?: Theme;
34
36
  }
35
37
  export {};
@@ -44,5 +44,5 @@ export interface ScreenshotData extends ScreenshotSetting {
44
44
  export declare type ScreenshotProp = {
45
45
  [prop: string]: any;
46
46
  };
47
- export declare type ScreenshotTestTargetType = 'file' | 'story' | 'all';
47
+ export declare type ScreenshotTestTargetType = 'file' | 'story' | 'all' | 'story-screenshot';
48
48
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storybook-addon-playwright",
3
- "version": "4.8.1",
3
+ "version": "4.9.0",
4
4
  "description": "An addon to visually test the stories in the multiple browsers within storybook environment",
5
5
  "author": "m.doaie <mdoaie@yahoo.co.uk>",
6
6
  "engines": {