@wopee-io/wopee.wdio 4.7.0 → 5.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/build/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.d.ts +2 -2
- package/build/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.d.ts.map +1 -1
- package/build/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.js +18 -20
- package/build/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.js.map +1 -1
- package/build/desktopBrowser/commands/trackElement.js +2 -2
- package/build/desktopBrowser/commands/trackElement.js.map +1 -1
- package/build/desktopBrowser/commands/trackScreen.js +2 -2
- package/build/desktopBrowser/commands/trackScreen.js.map +1 -1
- package/build/desktopBrowser/methods/images.d.ts +1 -1
- package/build/desktopBrowser/methods/images.d.ts.map +1 -1
- package/build/desktopBrowser/methods/images.interfaces.d.ts +2 -2
- package/build/desktopBrowser/methods/images.interfaces.d.ts.map +1 -1
- package/build/desktopBrowser/methods/images.interfaces.js.map +1 -1
- package/build/desktopBrowser/methods/images.js +5 -5
- package/build/desktopBrowser/methods/images.js.map +1 -1
- package/build/domain/model/config.interface.d.ts +82 -13
- package/build/domain/model/config.interface.d.ts.map +1 -1
- package/build/domain/model/config.interface.js +16 -1
- package/build/domain/model/config.interface.js.map +1 -1
- package/build/domain/model/service.interface.d.ts +3 -3
- package/build/domain/model/service.interface.d.ts.map +1 -1
- package/build/domain/model/service.interface.js.map +1 -1
- package/build/domain/service/configurationService.d.ts +5 -0
- package/build/domain/service/configurationService.d.ts.map +1 -0
- package/build/domain/service/configurationService.js +65 -0
- package/build/domain/service/configurationService.js.map +1 -0
- package/build/domain/service/wopeeService.d.ts.map +1 -1
- package/build/domain/service/wopeeService.js +2 -2
- package/build/domain/service/wopeeService.js.map +1 -1
- package/build/utils/versionMetadata.js +2 -2
- package/docs/configuration.md +9 -18
- package/node_modules/@autonomous-testing/sdk/.github/workflows/ci_cd.yaml +3 -1
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/createIntegrationStepPayload.interface.d.ts +6 -0
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/createIntegrationStepPayload.interface.js +2 -0
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/index.d.ts +9 -13
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/index.js +5 -1
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/visualAssert.interface.d.ts +22 -0
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/visualAssert.interface.js +18 -0
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/visualAssertPayload.interface.d.ts +17 -0
- package/node_modules/@autonomous-testing/sdk/build/core/domain/entities/visualAssertPayload.interface.js +11 -0
- package/node_modules/@autonomous-testing/sdk/build/core/ports/api.d.ts +2 -1
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/adapter.d.ts +2 -1
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/adapter.js +10 -0
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/factories.d.ts +5 -3
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/factories.js +23 -0
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/interface.d.ts +63 -4
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/interface.js +21 -2
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/mutations.d.ts +1 -0
- package/node_modules/@autonomous-testing/sdk/build/infrastructure/adapters/apolloAdapter/mutations.js +8 -1
- package/node_modules/@autonomous-testing/sdk/build/shared/metadata/versionMetadata.js +2 -2
- package/node_modules/@autonomous-testing/sdk/package.json +7 -5
- package/node_modules/axios/CHANGELOG.md +157 -61
- package/node_modules/axios/README.md +271 -80
- package/node_modules/axios/SECURITY.md +3 -3
- package/node_modules/axios/UPGRADE_GUIDE.md +37 -15
- package/node_modules/axios/bin/check-build-version.js +19 -0
- package/node_modules/axios/bin/ssl_hotfix.js +22 -0
- package/node_modules/axios/dist/axios.js +2014 -2222
- package/node_modules/axios/dist/axios.js.map +1 -0
- package/node_modules/axios/dist/axios.min.js +2 -3
- package/node_modules/axios/dist/axios.min.js.map +1 -0
- package/node_modules/axios/dist/esm/axios.js +2379 -0
- package/node_modules/axios/dist/esm/axios.js.map +1 -0
- package/node_modules/axios/dist/esm/axios.min.js +2 -0
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -0
- package/node_modules/axios/index.d.ts +106 -19
- package/node_modules/axios/lib/adapters/http.js +155 -116
- package/node_modules/axios/lib/adapters/xhr.js +15 -11
- package/node_modules/axios/lib/axios.js +5 -1
- package/node_modules/axios/lib/cancel/CancelToken.js +4 -5
- package/node_modules/axios/lib/cancel/CanceledError.js +4 -2
- package/node_modules/axios/lib/core/Axios.js +18 -2
- package/node_modules/axios/lib/core/AxiosError.js +12 -1
- package/node_modules/axios/lib/core/InterceptorManager.js +9 -0
- package/node_modules/axios/lib/core/buildFullPath.js +5 -2
- package/node_modules/axios/lib/core/dispatchRequest.js +7 -0
- package/node_modules/axios/lib/core/mergeConfig.js +3 -0
- package/node_modules/axios/lib/core/transformData.js +3 -2
- package/node_modules/axios/lib/defaults/index.js +42 -13
- package/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +42 -0
- package/node_modules/axios/lib/helpers/bind.js +1 -5
- package/node_modules/axios/lib/helpers/buildURL.js +18 -33
- package/node_modules/axios/lib/helpers/combineURLs.js +1 -1
- package/node_modules/axios/lib/helpers/formDataToJSON.js +74 -0
- package/node_modules/axios/lib/helpers/fromDataURI.js +51 -0
- package/node_modules/axios/lib/helpers/isURLSameOrigin.js +12 -12
- package/node_modules/axios/lib/helpers/parseHeaders.js +2 -2
- package/node_modules/axios/lib/helpers/toFormData.js +141 -34
- package/node_modules/axios/lib/helpers/toURLEncodedForm.js +18 -0
- package/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
- package/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +5 -0
- package/node_modules/axios/lib/platform/browser/index.js +11 -0
- package/node_modules/axios/lib/platform/index.js +3 -0
- package/node_modules/axios/lib/platform/node/classes/FormData.js +3 -0
- package/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +5 -0
- package/node_modules/axios/lib/platform/node/index.js +11 -0
- package/node_modules/axios/lib/utils.js +68 -16
- package/node_modules/axios/package.json +20 -7
- package/node_modules/axios/rollup.config.js +60 -0
- package/node_modules/proxy-from-env/.eslintrc +29 -0
- package/node_modules/proxy-from-env/.travis.yml +10 -0
- package/node_modules/proxy-from-env/LICENSE +20 -0
- package/node_modules/proxy-from-env/README.md +131 -0
- package/node_modules/proxy-from-env/index.js +108 -0
- package/node_modules/proxy-from-env/package.json +34 -0
- package/node_modules/proxy-from-env/test.js +483 -0
- package/package.json +4 -4
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.d.ts +0 -10
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.d.ts.map +0 -1
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.interface.d.ts +0 -28
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.interface.d.ts.map +0 -1
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.interface.js +0 -12
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.interface.js.map +0 -1
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.js +0 -57
- package/build/adapter/wdioConfigAdapter/wdioConfigAdapter.js.map +0 -1
- package/build/domain/model/croppingOptions.interface.d.ts +0 -8
- package/build/domain/model/croppingOptions.interface.d.ts.map +0 -1
- package/build/domain/model/croppingOptions.interface.js +0 -12
- package/build/domain/model/croppingOptions.interface.js.map +0 -1
- package/build/port/driven/configDrivingPort/configDrivingPort.d.ts +0 -9
- package/build/port/driven/configDrivingPort/configDrivingPort.d.ts.map +0 -1
- package/build/port/driven/configDrivingPort/configDrivingPort.js +0 -15
- package/build/port/driven/configDrivingPort/configDrivingPort.js.map +0 -1
- package/build/port/driven/configDrivingPort/configDrivingPortDefaults.d.ts +0 -6
- package/build/port/driven/configDrivingPort/configDrivingPortDefaults.d.ts.map +0 -1
- package/build/port/driven/configDrivingPort/configDrivingPortDefaults.js +0 -36
- package/build/port/driven/configDrivingPort/configDrivingPortDefaults.js.map +0 -1
- package/node_modules/axios/dist/axios.map +0 -1
- package/node_modules/axios/dist/axios.min.map +0 -1
- /package/node_modules/axios/lib/{defaults/env → env/classes}/FormData.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TrackFullPageMobileNativeOptions } from '../../core/domain/valueObjects/track.interface.js';
|
|
2
2
|
import { FullPageScreenshotsData } from '../../desktopBrowser/methods/screenshots.interfaces.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ImageProcessingOptions } from '../../domain/model/config.interface.js';
|
|
4
4
|
import { Methods } from '../../domain/model/methods.interface.js';
|
|
5
5
|
import { ScreenshotOutput } from '../../domain/model/screenshotOutput.interface.js';
|
|
6
6
|
import { WopeeService } from '../../domain/service/wopeeService.js';
|
|
@@ -18,6 +18,6 @@ export declare function fullPageScreenshot(methods: Methods, options: FullPageSc
|
|
|
18
18
|
screenshot: string;
|
|
19
19
|
}[];
|
|
20
20
|
}>;
|
|
21
|
-
export declare function makeFullPageBase64Image(screenshotsData: FullPageScreenshotsData, isLandscape: boolean,
|
|
21
|
+
export declare function makeFullPageBase64Image(screenshotsData: FullPageScreenshotsData, isLandscape: boolean, imageProcessingOptions: ImageProcessingOptions): Promise<string>;
|
|
22
22
|
export declare function trackFullPageMobileNative(methods: Methods, wopeeService: WopeeService, options: TrackFullPageMobileNativeOptions): Promise<ScreenshotOutput>;
|
|
23
23
|
//# sourceMappingURL=fullPageScreenshotAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullPageScreenshotAdapter.d.ts","sourceRoot":"","sources":["../../../lib/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mDAAmD,CAAC;AAIrG,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"fullPageScreenshotAdapter.d.ts","sourceRoot":"","sources":["../../../lib/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mDAAmD,CAAC;AAIrG,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AAGjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAGpF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,yCAAyC,EAAgB,MAAM,0CAA0C,CAAC;AAInH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,yCAAyC;;;;;;;;;;;;GAkC5G;AA2DD,wBAAsB,uBAAuB,CAC3C,eAAe,EAAE,uBAAuB,EACxC,WAAW,EAAE,OAAO,EACpB,sBAAsB,EAAE,sBAAsB,GAC7C,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,gBAAgB,CAAC,CAkD3B"}
|
|
@@ -35,7 +35,7 @@ export async function fullPageScreenshot(methods, options) {
|
|
|
35
35
|
data: viewportScreenshots,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
async function createImageCanvas(screenshotData,
|
|
38
|
+
async function createImageCanvas(screenshotData, imageProcessingOptions, isLandscape) {
|
|
39
39
|
const imageBase64 = isLandscape
|
|
40
40
|
? await rotateBase64Image({
|
|
41
41
|
base64Image: screenshotData.screenshot,
|
|
@@ -49,38 +49,36 @@ async function createImageCanvas(screenshotData, croppingOptions, isLandscape) {
|
|
|
49
49
|
const canvasHeight = image.height;
|
|
50
50
|
const canvas = createCanvas(canvasWidth, canvasHeight);
|
|
51
51
|
const ctx = canvas.getContext('2d');
|
|
52
|
-
ctx.fillStyle = 'black';
|
|
53
|
-
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
54
52
|
let sourceXStart = screenshotData.imageXPosition;
|
|
55
53
|
let sourceYStart = 0;
|
|
56
54
|
let sourceCanvasWidth = canvasWidth;
|
|
57
55
|
let sourceCanvasHeight = canvasHeight;
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
if (imageProcessingOptions?.mode === 'masking') {
|
|
57
|
+
ctx.fillStyle = imageProcessingOptions.maskColor;
|
|
58
|
+
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
59
|
+
sourceXStart = sourceXStart + imageProcessingOptions.xLeft;
|
|
60
|
+
sourceYStart = sourceYStart + imageProcessingOptions.yTop;
|
|
61
|
+
sourceCanvasWidth = sourceCanvasWidth - imageProcessingOptions.xLeft - imageProcessingOptions.xRight;
|
|
62
|
+
sourceCanvasHeight = sourceCanvasHeight - imageProcessingOptions.yTop - imageProcessingOptions.yBottom;
|
|
63
|
+
}
|
|
64
|
+
if (imageProcessingOptions?.mode === 'cropping') {
|
|
65
|
+
sourceXStart += imageProcessingOptions.xLeft || 0;
|
|
66
|
+
sourceYStart += imageProcessingOptions.yTop || 0;
|
|
67
|
+
sourceCanvasWidth -= (imageProcessingOptions.xLeft || 0) + (imageProcessingOptions.xRight || 0);
|
|
68
|
+
sourceCanvasHeight -= (imageProcessingOptions.yTop || 0) + (imageProcessingOptions.yBottom || 0);
|
|
63
69
|
}
|
|
64
70
|
ctx.drawImage(image, sourceXStart, sourceYStart, sourceCanvasWidth, sourceCanvasHeight, sourceXStart, sourceYStart, sourceCanvasWidth, sourceCanvasHeight);
|
|
65
71
|
return await loadImage(canvas.toDataURL());
|
|
66
72
|
}
|
|
67
|
-
export async function makeFullPageBase64Image(screenshotsData, isLandscape,
|
|
73
|
+
export async function makeFullPageBase64Image(screenshotsData, isLandscape, imageProcessingOptions) {
|
|
68
74
|
const canvasWidth = screenshotsData.fullPageWidth;
|
|
69
75
|
const canvasHeight = screenshotsData.fullPageHeight;
|
|
70
76
|
const canvas = createCanvas(canvasWidth, canvasHeight);
|
|
71
77
|
const ctx = canvas.getContext('2d');
|
|
72
78
|
for (let i = 0; i < screenshotsData.data.length; i++) {
|
|
73
79
|
const screenshotData = screenshotsData.data[i];
|
|
74
|
-
const image = await createImageCanvas(screenshotData,
|
|
75
|
-
ctx.drawImage(image,
|
|
76
|
-
0, // sx
|
|
77
|
-
screenshotData.imageYPosition, // sy
|
|
78
|
-
image.width, // sw
|
|
79
|
-
image.height, // sh
|
|
80
|
-
0, // dx
|
|
81
|
-
screenshotData.canvasYPosition, // dy
|
|
82
|
-
image.width, // dw
|
|
83
|
-
image.height);
|
|
80
|
+
const image = await createImageCanvas(screenshotData, imageProcessingOptions, isLandscape);
|
|
81
|
+
ctx.drawImage(image, 0, screenshotData.imageYPosition, image.width, image.height, 0, screenshotData.canvasYPosition, image.width, image.height);
|
|
84
82
|
}
|
|
85
83
|
const base64Image = canvas.toDataURL().replace(/^data:image\/png;base64,/, '');
|
|
86
84
|
return base64Image;
|
|
@@ -100,7 +98,7 @@ export async function trackFullPageMobileNative(methods, wopeeService, options)
|
|
|
100
98
|
swipeStartDuration: options.swipeStartDuration,
|
|
101
99
|
};
|
|
102
100
|
const screenshotsData = await fullPageScreenshot(methods, fullPageScreenshotDataNativeMobileOptions);
|
|
103
|
-
const fullPageBase64Image = await makeFullPageBase64Image(screenshotsData, wopeeService.config.isLandscape, wopeeService.config.
|
|
101
|
+
const fullPageBase64Image = await makeFullPageBase64Image(screenshotsData, wopeeService.config.isLandscape, wopeeService.config.imageProcessing);
|
|
104
102
|
const afterOptions = {
|
|
105
103
|
imageBase64: fullPageBase64Image,
|
|
106
104
|
saveBase64ImageOptions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullPageScreenshotAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { TrackFullPageMobileNativeOptions } from '../../core/domain/valueObjects/track.interface.js';\nimport { waitFor } from '../../desktopBrowser/helpers/utils.js';\nimport { getScreenshotSize } from '../../desktopBrowser/helpers/utils.js';\nimport { rotateBase64Image } from '../../desktopBrowser/methods/images.js';\nimport { FullPageScreenshotsData } from '../../desktopBrowser/methods/screenshots.interfaces.js';\nimport { ScreenshotData } from '../../desktopBrowser/methods/screenshots.interfaces.js';\nimport { takeBase64Screenshot } from '../../desktopBrowser/methods/screenshots.js';\nimport { AfterScreenshotOptions } from '../../domain/model/afterScreenshotOptions.interface.js';\nimport { CroppingOptions } from '../../domain/model/config.interface.js';\nimport { Methods } from '../../domain/model/methods.interface.js';\nimport { ScreenshotOutput } from '../../domain/model/screenshotOutput.interface.js';\nimport { ScreenshotSize } from '../../domain/model/screenshotSize.interface.js';\nimport { afterScreenshot } from '../../domain/service/afterScreenshot.js';\nimport { WopeeService } from '../../domain/service/wopeeService.js';\nimport { setSwipeOptions } from './default.js';\nimport { FullPageScreenshotDataNativeMobileOptions, SwipeOptions } from './fullPageScreenshotAdapter.interface.js';\nimport { swipe } from './swipe.js';\nimport { Image, createCanvas, loadImage } from 'canvas';\n\nexport async function fullPageScreenshot(methods: Methods, options: FullPageScreenshotDataNativeMobileOptions) {\n const viewportScreenshots = [];\n const numberOfSwipes: number = options.numberOfSwipes;\n const fullPageScrollTimeout: number = options.fullPageScrollTimeout;\n const swipeOptions: SwipeOptions = setSwipeOptions(options);\n\n let screenshotSize: ScreenshotSize;\n\n for (let i = 0; i <= numberOfSwipes; i++) {\n await waitFor(fullPageScrollTimeout);\n\n const rawScreenshot = await takeBase64Screenshot(methods.screenShot);\n screenshotSize = getScreenshotSize(rawScreenshot);\n\n viewportScreenshots.push({\n canvasWidth: screenshotSize.width,\n canvasYPosition: i * screenshotSize.height,\n imageHeight: screenshotSize.height,\n imageWidth: screenshotSize.width,\n imageXPosition: 0,\n imageYPosition: i * screenshotSize.height,\n screenshot: rawScreenshot,\n });\n\n if (i !== numberOfSwipes) {\n await swipe(methods, swipeOptions);\n }\n }\n\n return {\n fullPageHeight: screenshotSize.height * viewportScreenshots.length,\n fullPageWidth: screenshotSize.width,\n data: viewportScreenshots,\n };\n}\n\nasync function createImageCanvas(\n screenshotData: ScreenshotData,\n croppingOptions: CroppingOptions,\n isLandscape: boolean,\n): Promise<Image> {\n const imageBase64 = isLandscape\n ? await rotateBase64Image({\n base64Image: screenshotData.screenshot,\n degrees: -90,\n newHeight: screenshotData.imageWidth,\n newWidth: screenshotData.imageHeight,\n })\n : screenshotData.screenshot;\n\n const image = await loadImage(`data:image/png;base64,${imageBase64}`);\n\n const canvasWidth = image.width;\n const canvasHeight = image.height;\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const ctx = canvas.getContext('2d');\n ctx.fillStyle = 'black';\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n\n let sourceXStart = screenshotData.imageXPosition;\n let sourceYStart = 0;\n let sourceCanvasWidth = canvasWidth;\n let sourceCanvasHeight = canvasHeight;\n\n if (croppingOptions.croppingEnabled === true) {\n sourceXStart = sourceXStart + croppingOptions.xCropLeft;\n sourceYStart = sourceYStart + croppingOptions.yCropTop;\n sourceCanvasWidth = sourceCanvasWidth - croppingOptions.xCropLeft - croppingOptions.xCropRight;\n sourceCanvasHeight = sourceCanvasHeight - croppingOptions.yCropTop - croppingOptions.yCropBottom;\n }\n\n ctx.drawImage(\n image,\n sourceXStart,\n sourceYStart,\n sourceCanvasWidth,\n sourceCanvasHeight,\n sourceXStart,\n sourceYStart,\n sourceCanvasWidth,\n sourceCanvasHeight,\n );\n\n return await loadImage(canvas.toDataURL());\n}\n\nexport async function makeFullPageBase64Image(\n screenshotsData: FullPageScreenshotsData,\n isLandscape: boolean,\n croppingOptions: CroppingOptions,\n): Promise<string> {\n const canvasWidth = screenshotsData.fullPageWidth;\n const canvasHeight = screenshotsData.fullPageHeight;\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const ctx = canvas.getContext('2d');\n\n for (let i = 0; i < screenshotsData.data.length; i++) {\n const screenshotData: ScreenshotData = screenshotsData.data[i];\n const image = await createImageCanvas(screenshotData, croppingOptions, isLandscape);\n\n ctx.drawImage(\n image, // image\n 0, // sx\n screenshotData.imageYPosition, // sy\n image.width, // sw\n image.height, // sh\n 0, // dx\n screenshotData.canvasYPosition, // dy\n image.width, // dw\n image.height, // dh\n );\n }\n\n const base64Image = canvas.toDataURL().replace(/^data:image\\/png;base64,/, '');\n return base64Image;\n}\n\nexport async function trackFullPageMobileNative(\n methods: Methods,\n wopeeService: WopeeService,\n options: TrackFullPageMobileNativeOptions,\n): Promise<ScreenshotOutput> {\n const fullPageScrollTimeout = options?.fullPageScrollTimeout;\n\n const fullPageScreenshotDataNativeMobileOptions: FullPageScreenshotDataNativeMobileOptions = {\n fullPageScrollTimeout: fullPageScrollTimeout !== undefined ? fullPageScrollTimeout : 1500,\n numberOfSwipes: options.numberOfSwipes,\n swipeStartX: options.swipeStartX,\n swipeStartY: options.swipeStartY,\n swipeStopX: options.swipeStopX,\n swipeStopY: options.swipeStopY,\n swipeMoveDuration: options.swipeMoveDuration,\n swipePauseAfterMove: options.swipePauseAfterMove,\n swipePauseBeforeMove: options.swipePauseBeforeMove,\n swipeStartDuration: options.swipeStartDuration,\n };\n const screenshotsData: FullPageScreenshotsData = await fullPageScreenshot(\n methods,\n fullPageScreenshotDataNativeMobileOptions,\n );\n\n const fullPageBase64Image: string = await makeFullPageBase64Image(\n screenshotsData,\n wopeeService.config.isLandscape,\n wopeeService.config.cropping,\n );\n\n const afterOptions: AfterScreenshotOptions = {\n imageBase64: fullPageBase64Image,\n saveBase64ImageOptions: {\n screenshotFilePathOptions: {\n browserName: 'mobile',\n },\n screenshotFileNameOptions: {\n browserName: 'mobile',\n browserVersion: 'mobile',\n devicePixelRatio: 1,\n name: options.stepName,\n outerHeight: 1,\n outerWidth: 1,\n screenHeight: 1,\n screenWidth: 1,\n },\n },\n screenshotValidationOptions: {\n ...options,\n imageBase64: fullPageBase64Image,\n },\n };\n\n return afterScreenshot(wopeeService, afterOptions);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fullPageScreenshotAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/fullPageScreenshotAdapter/fullPageScreenshotAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { TrackFullPageMobileNativeOptions } from '../../core/domain/valueObjects/track.interface.js';\nimport { waitFor } from '../../desktopBrowser/helpers/utils.js';\nimport { getScreenshotSize } from '../../desktopBrowser/helpers/utils.js';\nimport { rotateBase64Image } from '../../desktopBrowser/methods/images.js';\nimport { FullPageScreenshotsData } from '../../desktopBrowser/methods/screenshots.interfaces.js';\nimport { ScreenshotData } from '../../desktopBrowser/methods/screenshots.interfaces.js';\nimport { takeBase64Screenshot } from '../../desktopBrowser/methods/screenshots.js';\nimport { ImageProcessingOptions } from '../../domain/model/config.interface.js';\nimport { Methods } from '../../domain/model/methods.interface.js';\nimport { ScreenshotOutput } from '../../domain/model/screenshotOutput.interface.js';\nimport { ScreenshotSize } from '../../domain/model/screenshotSize.interface.js';\nimport { afterScreenshot } from '../../domain/service/afterScreenshot.js';\nimport { WopeeService } from '../../domain/service/wopeeService.js';\nimport { setSwipeOptions } from './default.js';\nimport { FullPageScreenshotDataNativeMobileOptions, SwipeOptions } from './fullPageScreenshotAdapter.interface.js';\nimport { swipe } from './swipe.js';\nimport { Image, createCanvas, loadImage } from 'canvas';\n\nexport async function fullPageScreenshot(methods: Methods, options: FullPageScreenshotDataNativeMobileOptions) {\n const viewportScreenshots = [];\n const numberOfSwipes: number = options.numberOfSwipes;\n const fullPageScrollTimeout: number = options.fullPageScrollTimeout;\n const swipeOptions: SwipeOptions = setSwipeOptions(options);\n\n let screenshotSize: ScreenshotSize;\n\n for (let i = 0; i <= numberOfSwipes; i++) {\n await waitFor(fullPageScrollTimeout);\n\n const rawScreenshot = await takeBase64Screenshot(methods.screenShot);\n screenshotSize = getScreenshotSize(rawScreenshot);\n\n viewportScreenshots.push({\n canvasWidth: screenshotSize.width,\n canvasYPosition: i * screenshotSize.height,\n imageHeight: screenshotSize.height,\n imageWidth: screenshotSize.width,\n imageXPosition: 0,\n imageYPosition: i * screenshotSize.height,\n screenshot: rawScreenshot,\n });\n\n if (i !== numberOfSwipes) {\n await swipe(methods, swipeOptions);\n }\n }\n\n return {\n fullPageHeight: screenshotSize.height * viewportScreenshots.length,\n fullPageWidth: screenshotSize.width,\n data: viewportScreenshots,\n };\n}\n\nasync function createImageCanvas(\n screenshotData: ScreenshotData,\n imageProcessingOptions: ImageProcessingOptions,\n isLandscape: boolean,\n): Promise<Image> {\n const imageBase64 = isLandscape\n ? await rotateBase64Image({\n base64Image: screenshotData.screenshot,\n degrees: -90,\n newHeight: screenshotData.imageWidth,\n newWidth: screenshotData.imageHeight,\n })\n : screenshotData.screenshot;\n\n const image = await loadImage(`data:image/png;base64,${imageBase64}`);\n\n const canvasWidth = image.width;\n const canvasHeight = image.height;\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const ctx = canvas.getContext('2d');\n\n let sourceXStart = screenshotData.imageXPosition;\n let sourceYStart = 0;\n let sourceCanvasWidth = canvasWidth;\n let sourceCanvasHeight = canvasHeight;\n\n if (imageProcessingOptions?.mode === 'masking') {\n ctx.fillStyle = imageProcessingOptions.maskColor;\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n sourceXStart = sourceXStart + imageProcessingOptions.xLeft;\n sourceYStart = sourceYStart + imageProcessingOptions.yTop;\n sourceCanvasWidth = sourceCanvasWidth - imageProcessingOptions.xLeft - imageProcessingOptions.xRight;\n sourceCanvasHeight = sourceCanvasHeight - imageProcessingOptions.yTop - imageProcessingOptions.yBottom;\n }\n\n if (imageProcessingOptions?.mode === 'cropping') {\n sourceXStart += imageProcessingOptions.xLeft || 0;\n sourceYStart += imageProcessingOptions.yTop || 0;\n sourceCanvasWidth -= (imageProcessingOptions.xLeft || 0) + (imageProcessingOptions.xRight || 0);\n sourceCanvasHeight -= (imageProcessingOptions.yTop || 0) + (imageProcessingOptions.yBottom || 0);\n }\n\n ctx.drawImage(\n image,\n sourceXStart,\n sourceYStart,\n sourceCanvasWidth,\n sourceCanvasHeight,\n sourceXStart,\n sourceYStart,\n sourceCanvasWidth,\n sourceCanvasHeight,\n );\n\n return await loadImage(canvas.toDataURL());\n}\n\nexport async function makeFullPageBase64Image(\n screenshotsData: FullPageScreenshotsData,\n isLandscape: boolean,\n imageProcessingOptions: ImageProcessingOptions,\n): Promise<string> {\n const canvasWidth = screenshotsData.fullPageWidth;\n const canvasHeight = screenshotsData.fullPageHeight;\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const ctx = canvas.getContext('2d');\n\n for (let i = 0; i < screenshotsData.data.length; i++) {\n const screenshotData = screenshotsData.data[i];\n const image = await createImageCanvas(screenshotData, imageProcessingOptions, isLandscape);\n\n ctx.drawImage(\n image,\n 0,\n screenshotData.imageYPosition,\n image.width,\n image.height,\n 0,\n screenshotData.canvasYPosition,\n image.width,\n image.height,\n );\n }\n\n const base64Image = canvas.toDataURL().replace(/^data:image\\/png;base64,/, '');\n return base64Image;\n}\n\nexport async function trackFullPageMobileNative(\n methods: Methods,\n wopeeService: WopeeService,\n options: TrackFullPageMobileNativeOptions,\n): Promise<ScreenshotOutput> {\n const fullPageScrollTimeout = options?.fullPageScrollTimeout;\n\n const fullPageScreenshotDataNativeMobileOptions = {\n fullPageScrollTimeout: fullPageScrollTimeout !== undefined ? fullPageScrollTimeout : 1500,\n numberOfSwipes: options.numberOfSwipes,\n swipeStartX: options.swipeStartX,\n swipeStartY: options.swipeStartY,\n swipeStopX: options.swipeStopX,\n swipeStopY: options.swipeStopY,\n swipeMoveDuration: options.swipeMoveDuration,\n swipePauseAfterMove: options.swipePauseAfterMove,\n swipePauseBeforeMove: options.swipePauseBeforeMove,\n swipeStartDuration: options.swipeStartDuration,\n };\n const screenshotsData: FullPageScreenshotsData = await fullPageScreenshot(\n methods,\n fullPageScreenshotDataNativeMobileOptions,\n );\n\n const fullPageBase64Image: string = await makeFullPageBase64Image(\n screenshotsData,\n wopeeService.config.isLandscape,\n wopeeService.config.imageProcessing,\n );\n\n const afterOptions = {\n imageBase64: fullPageBase64Image,\n saveBase64ImageOptions: {\n screenshotFilePathOptions: {\n browserName: 'mobile',\n },\n screenshotFileNameOptions: {\n browserName: 'mobile',\n browserVersion: 'mobile',\n devicePixelRatio: 1,\n name: options.stepName,\n outerHeight: 1,\n outerWidth: 1,\n screenHeight: 1,\n screenWidth: 1,\n },\n },\n screenshotValidationOptions: {\n ...options,\n imageBase64: fullPageBase64Image,\n },\n };\n\n return afterScreenshot(wopeeService, afterOptions);\n}\n"]}
|
|
@@ -27,14 +27,14 @@ export default async function trackElement(methods, wopeeService, instanceData,
|
|
|
27
27
|
if (autoElementScroll) {
|
|
28
28
|
await wopeeService.clientSideScript.scrollToPosition(executor, currentPosition);
|
|
29
29
|
}
|
|
30
|
-
const
|
|
30
|
+
const imageProcessingOptions = wopeeService.config.imageProcessing;
|
|
31
31
|
const croppedBase64Image = await makeCroppedBase64Image({
|
|
32
32
|
base64Image,
|
|
33
33
|
devicePixelRatio,
|
|
34
34
|
isLandscape: wopeeService.config.isLandscape,
|
|
35
35
|
rectangles,
|
|
36
36
|
instanceData,
|
|
37
|
-
|
|
37
|
+
imageProcessingOptions,
|
|
38
38
|
});
|
|
39
39
|
const afterOptions = {
|
|
40
40
|
imageBase64: croppedBase64Image,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackElement.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/commands/trackElement.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CACxC,OAAgB,EAChB,YAA0B,EAC1B,YAA0B,EAC1B,OAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,aAAa,GAA4B;QAC7C,YAAY;KACb,CAAC;IACF,MAAM,oBAAoB,GAA2B,MAAM,gBAAgB,CACzE,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,CACd,CAAC;IACF,MAAM,EACJ,WAAW,EACX,cAAc,EACd,UAAU,EAAE,EACV,MAAM,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAC9F,GACF,GAAG,oBAAoB,CAAC;IAEzB,IAAI,eAAuB,CAAC;IAC5B,IAAI,iBAAiB,EAAE,CAAC;QACtB,eAAe,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/F,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAW,MAAM,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3E,MAAM,uBAAuB,GAA6B;QACxD,gBAAgB,EAAE,gBAAgB;QAClC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;KAC7C,CAAC;IACF,MAAM,UAAU,GAAqB,MAAM,0BAA0B,CACnE,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,uBAAuB,EACvB,OAAO,CACR,CAAC;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,YAAY,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"trackElement.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/commands/trackElement.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CACxC,OAAgB,EAChB,YAA0B,EAC1B,YAA0B,EAC1B,OAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,aAAa,GAA4B;QAC7C,YAAY;KACb,CAAC;IACF,MAAM,oBAAoB,GAA2B,MAAM,gBAAgB,CACzE,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,CACd,CAAC;IACF,MAAM,EACJ,WAAW,EACX,cAAc,EACd,UAAU,EAAE,EACV,MAAM,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAC9F,GACF,GAAG,oBAAoB,CAAC;IAEzB,IAAI,eAAuB,CAAC;IAC5B,IAAI,iBAAiB,EAAE,CAAC;QACtB,eAAe,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/F,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAW,MAAM,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3E,MAAM,uBAAuB,GAA6B;QACxD,gBAAgB,EAAE,gBAAgB;QAClC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;KAC7C,CAAC;IACF,MAAM,UAAU,GAAqB,MAAM,0BAA0B,CACnE,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,uBAAuB,EACvB,OAAO,CACR,CAAC;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,YAAY,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,sBAAsB,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC;IACnE,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC;QACtD,WAAW;QACX,gBAAgB;QAChB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;QAC5C,UAAU;QACV,YAAY;QACZ,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,YAAY,GAA2B;QAC3C,WAAW,EAAE,kBAAkB;QAC/B,sBAAsB,EAAE;YACtB,yBAAyB,EAAE;gBACzB,WAAW,EAAE,WAAW;aACzB;YACD,yBAAyB,EAAE;gBACzB,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,cAAc;gBAC9B,gBAAgB,EAAE,gBAAgB;gBAClC,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,YAAY,EAAE,YAAY;gBAC1B,WAAW,EAAE,WAAW;aACzB;SACF;QACD,2BAA2B,EAAE;YAC3B,GAAG,OAAO;YACV,WAAW,EAAE,kBAAkB;SAChC;KACF,CAAC;IAEF,OAAO,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC","sourcesContent":["// import { TrackElementOptions } from './element.interfaces.js';\nimport { TrackElementOptions } from '../../core/domain/valueObjects/track.interface.js';\nimport { AfterScreenshotOptions } from '../../domain/model/afterScreenshotOptions.interface.js';\nimport {\n BeforeScreenshotOptions,\n BeforeScreenshotResult,\n} from '../../domain/model/beforeScreenshotOptions.interface.js';\nimport { Methods } from '../../domain/model/methods.interface.js';\nimport { ScreenshotOutput } from '../../domain/model/screenshotOutput.interface.js';\nimport { afterScreenshot } from '../../domain/service/afterScreenshot.js';\nimport { beforeScreenshot } from '../../domain/service/beforeScreenshot.js';\nimport { WopeeService } from '../../domain/service/wopeeService.js';\nimport { waitFor } from '../helpers/utils.js';\nimport { makeCroppedBase64Image } from '../methods/images.js';\nimport { InstanceData } from '../methods/instanceData.interfaces.js';\nimport { ElementRectanglesOptions, RectanglesOutput } from '../methods/rectangles.interfaces.js';\nimport { determineElementRectangles } from '../methods/rectangles.js';\nimport { takeBase64Screenshot } from '../methods/screenshots.js';\n\nexport default async function trackElement(\n methods: Methods,\n wopeeService: WopeeService,\n instanceData: InstanceData,\n options: TrackElementOptions,\n): Promise<ScreenshotOutput> {\n const { stepName, autoElementScroll, element } = options;\n const { executor } = methods;\n\n const beforeOptions: BeforeScreenshotOptions = {\n instanceData,\n };\n const enrichedInstanceData: BeforeScreenshotResult = await beforeScreenshot(\n executor,\n wopeeService,\n methods,\n beforeOptions,\n );\n const {\n browserName,\n browserVersion,\n dimensions: {\n window: { devicePixelRatio, innerHeight, outerHeight, outerWidth, screenHeight, screenWidth },\n },\n } = enrichedInstanceData;\n\n let currentPosition: number;\n if (autoElementScroll) {\n currentPosition = await wopeeService.clientSideScript.scrollElementIntoView(executor, element);\n await waitFor(500);\n }\n\n const base64Image: string = await takeBase64Screenshot(methods.screenShot);\n\n const elementRectangleOptions: ElementRectanglesOptions = {\n devicePixelRatio: devicePixelRatio,\n innerHeight: innerHeight,\n isLandscape: wopeeService.config.isLandscape,\n };\n const rectangles: RectanglesOutput = await determineElementRectangles(\n wopeeService,\n executor,\n base64Image,\n elementRectangleOptions,\n element,\n );\n\n if (autoElementScroll) {\n await wopeeService.clientSideScript.scrollToPosition(executor, currentPosition);\n }\n\n const imageProcessingOptions = wopeeService.config.imageProcessing;\n const croppedBase64Image = await makeCroppedBase64Image({\n base64Image,\n devicePixelRatio,\n isLandscape: wopeeService.config.isLandscape,\n rectangles,\n instanceData,\n imageProcessingOptions,\n });\n\n const afterOptions: AfterScreenshotOptions = {\n imageBase64: croppedBase64Image,\n saveBase64ImageOptions: {\n screenshotFilePathOptions: {\n browserName: browserName,\n },\n screenshotFileNameOptions: {\n browserName: browserName,\n browserVersion: browserVersion,\n devicePixelRatio: devicePixelRatio,\n name: stepName,\n outerHeight: outerHeight,\n outerWidth: outerWidth,\n screenHeight: screenHeight,\n screenWidth: screenWidth,\n },\n },\n screenshotValidationOptions: {\n ...options,\n imageBase64: croppedBase64Image,\n },\n };\n\n return afterScreenshot(wopeeService, afterOptions);\n}\n"]}
|
|
@@ -16,14 +16,14 @@ export default async function trackScreen(methods, wopeeService, instanceData, o
|
|
|
16
16
|
innerWidth,
|
|
17
17
|
};
|
|
18
18
|
const rectangles = determineScreenRectangles(base64Image, screenRectangleOptions);
|
|
19
|
-
const
|
|
19
|
+
const imageProcessingOptions = wopeeService.config.imageProcessing;
|
|
20
20
|
const croppedBase64Image = await makeCroppedBase64Image({
|
|
21
21
|
base64Image,
|
|
22
22
|
devicePixelRatio,
|
|
23
23
|
isLandscape: wopeeService.config.isLandscape,
|
|
24
24
|
rectangles,
|
|
25
25
|
instanceData,
|
|
26
|
-
|
|
26
|
+
imageProcessingOptions,
|
|
27
27
|
});
|
|
28
28
|
const afterOptions = {
|
|
29
29
|
imageBase64: croppedBase64Image,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackScreen.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/commands/trackScreen.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CACvC,OAAgB,EAChB,YAA0B,EAC1B,YAA0B,EAC1B,OAA6B;IAE7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,aAAa,GAAG,EAAE,YAAY,EAAE,CAAC;IACvC,MAAM,oBAAoB,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpG,MAAM,EACJ,WAAW,EACX,cAAc,EACd,UAAU,EAAE,EACV,MAAM,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAC1G,GACF,GAAG,oBAAoB,CAAC;IAEzB,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnE,MAAM,sBAAsB,GAAG;QAC7B,gBAAgB;QAChB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;QAC5C,WAAW;QACX,UAAU;KACX,CAAC;IACF,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAElF,MAAM,
|
|
1
|
+
{"version":3,"file":"trackScreen.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/commands/trackScreen.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CACvC,OAAgB,EAChB,YAA0B,EAC1B,YAA0B,EAC1B,OAA6B;IAE7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,aAAa,GAAG,EAAE,YAAY,EAAE,CAAC;IACvC,MAAM,oBAAoB,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpG,MAAM,EACJ,WAAW,EACX,cAAc,EACd,UAAU,EAAE,EACV,MAAM,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAC1G,GACF,GAAG,oBAAoB,CAAC;IAEzB,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnE,MAAM,sBAAsB,GAAG;QAC7B,gBAAgB;QAChB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;QAC5C,WAAW;QACX,UAAU;KACX,CAAC;IACF,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAElF,MAAM,sBAAsB,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC;IACnE,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC;QACtD,WAAW;QACX,gBAAgB;QAChB,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,WAAW;QAC5C,UAAU;QACV,YAAY;QACZ,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,YAAY,GAA2B;QAC3C,WAAW,EAAE,kBAAkB;QAC/B,sBAAsB,EAAE;YACtB,yBAAyB,EAAE;gBACzB,WAAW,EAAE,WAAW;aACzB;YACD,yBAAyB,EAAE;gBACzB,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,cAAc;gBAC9B,gBAAgB,EAAE,gBAAgB;gBAClC,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,YAAY,EAAE,YAAY;gBAC1B,WAAW,EAAE,WAAW;aACzB;SACF;QACD,2BAA2B,EAAE;YAC3B,GAAG,OAAO;YACV,WAAW,EAAE,kBAAkB;SAChC;KACF,CAAC;IAEF,OAAO,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACrD,CAAC","sourcesContent":["import { TrackViewportOptions } from '../../core/domain/valueObjects/track.interface.js';\nimport { AfterScreenshotOptions } from '../../domain/model/afterScreenshotOptions.interface.js';\nimport { Methods } from '../../domain/model/methods.interface.js';\nimport { ScreenshotOutput } from '../../domain/model/screenshotOutput.interface.js';\nimport { afterScreenshot } from '../../domain/service/afterScreenshot.js';\nimport { beforeScreenshot } from '../../domain/service/beforeScreenshot.js';\nimport { WopeeService } from '../../domain/service/wopeeService.js';\nimport { makeCroppedBase64Image } from '../methods/images.js';\nimport { InstanceData } from '../methods/instanceData.interfaces.js';\nimport { determineScreenRectangles } from '../methods/rectangles.js';\nimport { takeBase64Screenshot } from '../methods/screenshots.js';\n\nexport default async function trackScreen(\n methods: Methods,\n wopeeService: WopeeService,\n instanceData: InstanceData,\n options: TrackViewportOptions,\n): Promise<ScreenshotOutput> {\n const { executor } = methods;\n\n const beforeOptions = { instanceData };\n const enrichedInstanceData = await beforeScreenshot(executor, wopeeService, methods, beforeOptions);\n const {\n browserName,\n browserVersion,\n dimensions: {\n window: { devicePixelRatio, innerHeight, innerWidth, outerHeight, outerWidth, screenHeight, screenWidth },\n },\n } = enrichedInstanceData;\n\n const base64Image = await takeBase64Screenshot(methods.screenShot);\n\n const screenRectangleOptions = {\n devicePixelRatio,\n isLandscape: wopeeService.config.isLandscape,\n innerHeight,\n innerWidth,\n };\n const rectangles = determineScreenRectangles(base64Image, screenRectangleOptions);\n\n const imageProcessingOptions = wopeeService.config.imageProcessing;\n const croppedBase64Image = await makeCroppedBase64Image({\n base64Image,\n devicePixelRatio,\n isLandscape: wopeeService.config.isLandscape,\n rectangles,\n instanceData,\n imageProcessingOptions,\n });\n\n const afterOptions: AfterScreenshotOptions = {\n imageBase64: croppedBase64Image,\n saveBase64ImageOptions: {\n screenshotFilePathOptions: {\n browserName: browserName,\n },\n screenshotFileNameOptions: {\n browserName: browserName,\n browserVersion: browserVersion,\n devicePixelRatio: devicePixelRatio,\n name: options.stepName,\n outerHeight: outerHeight,\n outerWidth: outerWidth,\n screenHeight: screenHeight,\n screenWidth: screenWidth,\n },\n },\n screenshotValidationOptions: {\n ...options,\n imageBase64: croppedBase64Image,\n },\n };\n\n return afterScreenshot(wopeeService, afterOptions);\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import { FullPageScreenshotsData } from './screenshots.interfaces.js';
|
|
|
6
6
|
* @param {CroppedBase64Image} params - Parameters for creating the cropped image.
|
|
7
7
|
* @returns {Promise<string>} - A Promise that resolves to the base64 representation of the cropped image.
|
|
8
8
|
*/
|
|
9
|
-
export declare function makeCroppedBase64Image({ base64Image, devicePixelRatio, isLandscape, rectangles, instanceData,
|
|
9
|
+
export declare function makeCroppedBase64Image({ base64Image, devicePixelRatio, isLandscape, rectangles, instanceData, imageProcessingOptions, }: CroppedBase64Image): Promise<string>;
|
|
10
10
|
/**
|
|
11
11
|
* Create a full-page image from a series of screenshots and return it as a base64-encoded string.
|
|
12
12
|
* @param screenshotsData - Information about the screenshots and their placement.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,sBAAsB,GACvB,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CtC;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,eAAe,EAAE,uBAAuB,EACxC,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GACpF,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAO,EACP,SAAS,EACT,QAAQ,GACT,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB5C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ImageProcessingOptions } from '../../domain/model/config.interface.js';
|
|
2
2
|
import { InstanceData } from './instanceData.interfaces.js';
|
|
3
3
|
import { RectanglesOutput } from './rectangles.interfaces.js';
|
|
4
4
|
/**
|
|
@@ -13,7 +13,7 @@ export interface CroppedBase64Image {
|
|
|
13
13
|
/** Output rectangles information. */
|
|
14
14
|
rectangles: RectanglesOutput;
|
|
15
15
|
instanceData: InstanceData;
|
|
16
|
-
|
|
16
|
+
imageProcessingOptions: ImageProcessingOptions;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Represents options for rotating a base64 encoded image.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.interfaces.d.ts","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"images.interfaces.d.ts","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,sBAAsB,EAAE,sBAAsB,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.interfaces.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.interfaces.ts"],"names":[],"mappings":"","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"images.interfaces.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.interfaces.ts"],"names":[],"mappings":"","sourcesContent":["import { ImageProcessingOptions } from '../../domain/model/config.interface.js';\nimport { InstanceData } from './instanceData.interfaces.js';\nimport { RectanglesOutput } from './rectangles.interfaces.js';\n\n/**\n * Represents a cropped image in base64 format with associated metadata.\n */\nexport interface CroppedBase64Image {\n /** The base64 encoded image. */\n base64Image: string;\n /** The device pixel ratio. */\n devicePixelRatio: number;\n isLandscape: boolean;\n /** Output rectangles information. */\n rectangles: RectanglesOutput;\n instanceData: InstanceData;\n imageProcessingOptions: ImageProcessingOptions;\n}\n\n/**\n * Represents options for rotating a base64 encoded image.\n */\nexport interface RotateBase64ImageOptions {\n /** The base64 encoded image. */\n base64Image: string;\n /** The degrees to rotate the image by. */\n degrees: number;\n /** The new height of the rotated image. */\n newHeight: number;\n /** The new width of the rotated image. */\n newWidth: number;\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import { createCanvas, loadImage } from 'canvas';
|
|
|
6
6
|
* @param {CroppedBase64Image} params - Parameters for creating the cropped image.
|
|
7
7
|
* @returns {Promise<string>} - A Promise that resolves to the base64 representation of the cropped image.
|
|
8
8
|
*/
|
|
9
|
-
export async function makeCroppedBase64Image({ base64Image, devicePixelRatio, isLandscape, rectangles, instanceData,
|
|
9
|
+
export async function makeCroppedBase64Image({ base64Image, devicePixelRatio, isLandscape, rectangles, instanceData, imageProcessingOptions, }) {
|
|
10
10
|
// Determine if the image is rotated
|
|
11
11
|
const { height: screenshotHeight, width: screenshotWidth } = getScreenshotSize(base64Image, devicePixelRatio);
|
|
12
12
|
const isRotated = isLandscape && screenshotHeight > screenshotWidth;
|
|
@@ -34,10 +34,10 @@ export async function makeCroppedBase64Image({ base64Image, devicePixelRatio, is
|
|
|
34
34
|
const canvas = createCanvas(canvasWidth, canvasHeight);
|
|
35
35
|
const image = await loadImage(`data:image/png;base64,${newBase64Image}`);
|
|
36
36
|
const ctx = canvas.getContext('2d');
|
|
37
|
-
const xCropLeft =
|
|
38
|
-
const xCropRight =
|
|
39
|
-
const yCropTop =
|
|
40
|
-
const yCropBottom =
|
|
37
|
+
const xCropLeft = imageProcessingOptions.xLeft;
|
|
38
|
+
const xCropRight = imageProcessingOptions.xRight;
|
|
39
|
+
const yCropTop = imageProcessingOptions.yTop;
|
|
40
|
+
const yCropBottom = imageProcessingOptions.yBottom;
|
|
41
41
|
const sourceXStart = xCropLeft;
|
|
42
42
|
const sourceYStart = yCropTop;
|
|
43
43
|
canvasHeight = canvasHeight - yCropTop - yCropBottom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../lib/desktopBrowser/methods/images.ts"],"names":[],"mappings":"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","sourcesContent":["import { getScreenshotSize } from '../helpers/utils.js';\nimport { CroppedBase64Image, RotateBase64ImageOptions } from './images.interfaces.js';\nimport { FullPageScreenshotsData } from './screenshots.interfaces.js';\nimport { createCanvas, loadImage } from 'canvas';\n\n/**\n * Create a cropped base64 image using Canvas.\n *\n * @param {CroppedBase64Image} params - Parameters for creating the cropped image.\n * @returns {Promise<string>} - A Promise that resolves to the base64 representation of the cropped image.\n */\nexport async function makeCroppedBase64Image({\n base64Image,\n devicePixelRatio,\n isLandscape,\n rectangles,\n instanceData,\n imageProcessingOptions,\n}: CroppedBase64Image): Promise<string> {\n // Determine if the image is rotated\n const { height: screenshotHeight, width: screenshotWidth } = getScreenshotSize(base64Image, devicePixelRatio);\n const isRotated = isLandscape && screenshotHeight > screenshotWidth;\n\n // Rotate the image if necessary\n const newBase64Image = isRotated\n ? await rotateBase64Image({\n base64Image,\n degrees: -90,\n newHeight: screenshotWidth,\n newWidth: screenshotHeight,\n })\n : base64Image;\n\n const { height, width } = rectangles;\n let canvasWidth = null;\n let canvasHeight = null;\n if (instanceData.isMobile) {\n canvasWidth = screenshotWidth;\n canvasHeight = screenshotHeight;\n } else {\n canvasHeight = height;\n canvasWidth = width;\n }\n\n // Create a canvas and load the image\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const image = await loadImage(`data:image/png;base64,${newBase64Image}`);\n const ctx = canvas.getContext('2d');\n\n const xCropLeft = imageProcessingOptions.xLeft;\n const xCropRight = imageProcessingOptions.xRight;\n const yCropTop = imageProcessingOptions.yTop;\n const yCropBottom = imageProcessingOptions.yBottom;\n\n const sourceXStart = xCropLeft;\n const sourceYStart = yCropTop;\n canvasHeight = canvasHeight - yCropTop - yCropBottom;\n canvasWidth = canvasWidth - xCropLeft - xCropRight;\n\n // Draw the cropped portion of the image onto the canvas\n ctx.drawImage(image, sourceXStart, sourceYStart, canvasWidth, canvasHeight, 0, 0, canvasWidth, canvasHeight);\n\n // Convert the canvas to a base64 data URL and return it\n return canvas.toDataURL().replace(/^data:image\\/png;base64,/, '');\n}\n\n/**\n * Create a full-page image from a series of screenshots and return it as a base64-encoded string.\n * @param screenshotsData - Information about the screenshots and their placement.\n * @param devicePixelRatio - The device's pixel ratio for rendering.\n * @returns A base64-encoded string representing the full-page image.\n */\nexport async function makeFullPageBase64Image(\n screenshotsData: FullPageScreenshotsData,\n { devicePixelRatio, isLandscape }: { devicePixelRatio: number; isLandscape: boolean },\n): Promise<string> {\n // Calculate the canvas dimensions\n const canvasWidth = screenshotsData.fullPageWidth;\n const canvasHeight = screenshotsData.fullPageHeight;\n\n // Create a canvas element and get its 2D rendering context\n const canvas = createCanvas(canvasWidth, canvasHeight);\n const ctx = canvas.getContext('2d');\n\n // Iterate through the screenshots and render them onto the canvas\n for (let i = 0; i < screenshotsData.data.length; i++) {\n const screenshotData = screenshotsData.data[i];\n const currentScreenshot = screenshotData.screenshot;\n\n // Determine if the image needs to be rotated\n const { height: screenshotHeight, width: screenshotWidth } = getScreenshotSize(currentScreenshot, devicePixelRatio);\n const isRotated = isLandscape && screenshotHeight > screenshotWidth;\n\n // Rotate the image if necessary\n const newBase64Image = isRotated\n ? await rotateBase64Image({\n base64Image: currentScreenshot,\n degrees: -90,\n newHeight: screenshotWidth,\n newWidth: screenshotHeight,\n })\n : currentScreenshot;\n\n // Load the rotated image\n const image = await loadImage(`data:image/png;base64,${newBase64Image}`);\n\n // Draw the image onto the canvas\n ctx.drawImage(\n image,\n screenshotData.imageXPosition,\n screenshotData.imageYPosition,\n screenshotData.imageWidth,\n screenshotData.imageHeight,\n 0,\n screenshotData.canvasYPosition,\n screenshotData.imageWidth,\n screenshotData.imageHeight,\n );\n }\n\n // Convert the canvas to a base64-encoded PNG\n const base64Image = canvas.toDataURL().replace(/^data:image\\/png;base64,/, '');\n\n return base64Image;\n}\n\n/**\n * Rotate a base64 image by the specified number of degrees.\n *\n * @param {RotateBase64ImageOptions} options - Options for rotating the base64 image.\n * @returns {Promise<string>} - A Promise that resolves to the base64 representation of the rotated image.\n */\nexport async function rotateBase64Image({\n base64Image,\n degrees,\n newHeight,\n newWidth,\n}: RotateBase64ImageOptions): Promise<string> {\n // Create a canvas and load the image\n const canvas = createCanvas(newWidth, newHeight);\n const ctx = canvas.getContext('2d');\n const image = await loadImage(`data:image/png;base64,${base64Image}`);\n\n // Set canvas dimensions based on rotation angle\n canvas.width = degrees % 180 === 0 ? image.width : image.height;\n canvas.height = degrees % 180 === 0 ? image.height : image.width;\n\n // Translate and rotate the image on the canvas\n ctx.translate(canvas.width / 2, canvas.height / 2);\n ctx.rotate((degrees * Math.PI) / 180);\n ctx.drawImage(image, image.width / -2, image.height / -2);\n\n // Return the rotated image as base64\n return canvas.toDataURL().replace(/^data:image\\/png;base64,/, '');\n}\n"]}
|
|
@@ -1,19 +1,88 @@
|
|
|
1
1
|
import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';
|
|
2
|
-
import {
|
|
3
|
-
export
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const ScreenshotValidationOptionsSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
4
|
+
apiKey: z.ZodString;
|
|
5
|
+
apiUrl: z.ZodDefault<z.ZodString>;
|
|
6
|
+
branchName: z.ZodDefault<z.ZodString>;
|
|
7
|
+
browser: z.ZodOptional<z.ZodString>;
|
|
8
|
+
comment: z.ZodOptional<z.ZodString>;
|
|
9
|
+
customTags: z.ZodOptional<z.ZodString>;
|
|
10
|
+
device: z.ZodOptional<z.ZodString>;
|
|
11
|
+
enableSoftAssert: z.ZodDefault<z.ZodType<boolean, z.ZodTypeDef, boolean>>;
|
|
12
|
+
os: z.ZodOptional<z.ZodString>;
|
|
13
|
+
pixelToPixelDiffTolerance: z.ZodOptional<z.ZodType<number, z.ZodTypeDef, number>>;
|
|
14
|
+
projectUuid: z.ZodString;
|
|
15
|
+
viewport: z.ZodOptional<z.ZodString>;
|
|
16
|
+
baselineBranchName: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, {
|
|
18
|
+
screenshotValidationEnabled: z.ZodDefault<z.ZodType<boolean, z.ZodTypeDef, boolean>>;
|
|
19
|
+
}>, "strip", z.ZodTypeAny, {
|
|
20
|
+
browser?: string;
|
|
21
|
+
comment?: string;
|
|
22
|
+
customTags?: string;
|
|
23
|
+
pixelToPixelDiffTolerance?: number;
|
|
24
|
+
viewport?: string;
|
|
25
|
+
baselineBranchName?: string;
|
|
26
|
+
apiKey?: string;
|
|
27
|
+
apiUrl?: string;
|
|
28
|
+
branchName?: string;
|
|
29
|
+
device?: string;
|
|
30
|
+
enableSoftAssert?: boolean;
|
|
31
|
+
os?: string;
|
|
32
|
+
projectUuid?: string;
|
|
4
33
|
screenshotValidationEnabled?: boolean;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
34
|
+
}, {
|
|
35
|
+
browser?: string;
|
|
36
|
+
comment?: string;
|
|
37
|
+
customTags?: string;
|
|
38
|
+
pixelToPixelDiffTolerance?: number;
|
|
39
|
+
viewport?: string;
|
|
40
|
+
baselineBranchName?: string;
|
|
41
|
+
apiKey?: string;
|
|
42
|
+
apiUrl?: string;
|
|
43
|
+
branchName?: string;
|
|
44
|
+
device?: string;
|
|
45
|
+
enableSoftAssert?: boolean;
|
|
46
|
+
os?: string;
|
|
47
|
+
projectUuid?: string;
|
|
48
|
+
screenshotValidationEnabled?: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
export type ScreenshotValidationOptions = z.infer<typeof ScreenshotValidationOptionsSchema>;
|
|
51
|
+
export declare const GeneralWopeeServiceOptionsSchema: z.ZodObject<{
|
|
52
|
+
isLandscape: z.ZodDefault<z.ZodType<boolean, z.ZodTypeDef, boolean>>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
isLandscape?: boolean;
|
|
55
|
+
}, {
|
|
56
|
+
isLandscape?: boolean;
|
|
57
|
+
}>;
|
|
58
|
+
export type GeneralWopeeServiceOptions = z.infer<typeof GeneralWopeeServiceOptionsSchema>;
|
|
59
|
+
export declare const ImageProcessingOptionsSchema: z.ZodObject<{
|
|
60
|
+
maskColor: z.ZodDefault<z.ZodString>;
|
|
61
|
+
mode: z.ZodDefault<z.ZodEnum<["masking", "cropping", "none"]>>;
|
|
62
|
+
xLeft: z.ZodDefault<z.ZodNumber>;
|
|
63
|
+
xRight: z.ZodDefault<z.ZodNumber>;
|
|
64
|
+
yBottom: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
yTop: z.ZodDefault<z.ZodNumber>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
maskColor?: string;
|
|
68
|
+
mode?: "none" | "masking" | "cropping";
|
|
69
|
+
xLeft?: number;
|
|
70
|
+
xRight?: number;
|
|
71
|
+
yBottom?: number;
|
|
72
|
+
yTop?: number;
|
|
73
|
+
}, {
|
|
74
|
+
maskColor?: string;
|
|
75
|
+
mode?: "none" | "masking" | "cropping";
|
|
76
|
+
xLeft?: number;
|
|
77
|
+
xRight?: number;
|
|
78
|
+
yBottom?: number;
|
|
79
|
+
yTop?: number;
|
|
80
|
+
}>;
|
|
81
|
+
export type ImageProcessingOptions = z.infer<typeof ImageProcessingOptionsSchema>;
|
|
13
82
|
export interface WopeeServiceOptions {
|
|
14
|
-
|
|
15
|
-
permanentStorage?: LocalSaveScreenshotAdapterOptions;
|
|
16
|
-
cropping?: CroppingOptions;
|
|
83
|
+
imageProcessing?: ImageProcessingOptions;
|
|
17
84
|
isLandscape?: boolean;
|
|
85
|
+
permanentStorage?: LocalSaveScreenshotAdapterOptions;
|
|
86
|
+
screenshotValidation?: ScreenshotValidationOptions;
|
|
18
87
|
}
|
|
19
88
|
//# sourceMappingURL=config.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.interface.d.ts","sourceRoot":"","sources":["../../../lib/domain/model/config.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,2EAA2E,CAAC;
|
|
1
|
+
{"version":3,"file":"config.interface.d.ts","sourceRoot":"","sources":["../../../lib/domain/model/config.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,2EAA2E,CAAC;AAE9H,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE5C,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,gCAAgC;;;;;;EAE3C,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,iCAAiC,CAAC;IACrD,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;CACpD"}
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import { ApolloAdapterConfigSchema, ZodHelper } from '@autonomous-testing/sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const ScreenshotValidationOptionsSchema = ApolloAdapterConfigSchema.extend({
|
|
4
|
+
screenshotValidationEnabled: ZodHelper.parseStringToBoolean().default(true),
|
|
5
|
+
});
|
|
6
|
+
export const GeneralWopeeServiceOptionsSchema = z.object({
|
|
7
|
+
isLandscape: ZodHelper.parseStringToBoolean().default(true),
|
|
8
|
+
});
|
|
9
|
+
export const ImageProcessingOptionsSchema = z.object({
|
|
10
|
+
maskColor: z.string().default('black'),
|
|
11
|
+
mode: z.enum(['masking', 'cropping', 'none']).default('none'),
|
|
12
|
+
xLeft: z.number().default(0),
|
|
13
|
+
xRight: z.number().default(0),
|
|
14
|
+
yBottom: z.number().default(0),
|
|
15
|
+
yTop: z.number().default(0),
|
|
16
|
+
});
|
|
2
17
|
//# sourceMappingURL=config.interface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.interface.js","sourceRoot":"","sources":["../../../lib/domain/model/config.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';\nimport {
|
|
1
|
+
{"version":3,"file":"config.interface.js","sourceRoot":"","sources":["../../../lib/domain/model/config.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iCAAiC,GAAG,yBAAyB,CAAC,MAAM,CAAC;IAChF,2BAA2B,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,WAAW,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC","sourcesContent":["import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';\nimport { ApolloAdapterConfigSchema, ZodHelper } from '@autonomous-testing/sdk';\nimport { z } from 'zod';\n\nexport const ScreenshotValidationOptionsSchema = ApolloAdapterConfigSchema.extend({\n screenshotValidationEnabled: ZodHelper.parseStringToBoolean().default(true),\n});\n\nexport type ScreenshotValidationOptions = z.infer<typeof ScreenshotValidationOptionsSchema>;\n\nexport const GeneralWopeeServiceOptionsSchema = z.object({\n isLandscape: ZodHelper.parseStringToBoolean().default(true),\n});\n\nexport type GeneralWopeeServiceOptions = z.infer<typeof GeneralWopeeServiceOptionsSchema>;\n\nexport const ImageProcessingOptionsSchema = z.object({\n maskColor: z.string().default('black'),\n mode: z.enum(['masking', 'cropping', 'none']).default('none'),\n xLeft: z.number().default(0),\n xRight: z.number().default(0),\n yBottom: z.number().default(0),\n yTop: z.number().default(0),\n});\n\nexport type ImageProcessingOptions = z.infer<typeof ImageProcessingOptionsSchema>;\n\nexport interface WopeeServiceOptions {\n imageProcessing?: ImageProcessingOptions;\n isLandscape?: boolean;\n permanentStorage?: LocalSaveScreenshotAdapterOptions;\n screenshotValidation?: ScreenshotValidationOptions;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ImageProcessingOptions } from './config.interface.js';
|
|
3
3
|
import { ApolloAdapterConfig } from '@autonomous-testing/sdk';
|
|
4
4
|
/**
|
|
5
5
|
* Options for configuring the Wopee Service.
|
|
@@ -14,9 +14,9 @@ export interface WopeeServiceOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
screenshotValidation?: ApolloAdapterConfig;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Image processing options.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
imageProcessing?: ImageProcessingOptions;
|
|
20
20
|
/**
|
|
21
21
|
* Landscape or portrait.
|
|
22
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.interface.d.ts","sourceRoot":"","sources":["../../../lib/domain/model/service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,2EAA2E,CAAC;AAC9H,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"service.interface.d.ts","sourceRoot":"","sources":["../../../lib/domain/model/service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,2EAA2E,CAAC;AAC9H,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,gBAAgB,CAAC,EAAE,iCAAiC,CAAC;IAErD;;OAEG;IACH,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAE3C;;OAEG;IACH,eAAe,CAAC,EAAE,sBAAsB,CAAC;IAEzC;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;CAC7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.interface.js","sourceRoot":"","sources":["../../../lib/domain/model/service.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';\nimport {
|
|
1
|
+
{"version":3,"file":"service.interface.js","sourceRoot":"","sources":["../../../lib/domain/model/service.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { LocalSaveScreenshotAdapterOptions } from '../../adapter/driven/localSaveScreenshot/localSaveScreenshot.interface.js';\nimport { ImageProcessingOptions } from './config.interface.js';\nimport { ApolloAdapterConfig } from '@autonomous-testing/sdk';\n\n/**\n * Options for configuring the Wopee Service.\n */\nexport interface WopeeServiceOptions {\n /**\n * Options for permanent storage of screenshots.\n */\n permanentStorage?: LocalSaveScreenshotAdapterOptions;\n\n /**\n * Options for screenshot validation using VRT (Visual Regression Testing).\n */\n screenshotValidation?: ApolloAdapterConfig;\n\n /**\n * Image processing options.\n */\n imageProcessing?: ImageProcessingOptions;\n\n /**\n * Landscape or portrait.\n */\n isLandscape: boolean;\n\n /**\n * Save or not screenshot locally.\n */\n saveScreenshot: boolean;\n\n /**\n * Track or not screenshot to Wopee platform.\n */\n validateScreenshot: boolean;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../../lib/domain/service/configurationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,mBAAmB,EACpB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,eAAe,CAAC;AAiDvB,iBAAS,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CASrE;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|