Skip to content

Commit 90d6fb8

Browse files
authored
chore: improve executor type (#781)
1 parent c4b0319 commit 90d6fb8

File tree

6 files changed

+31
-25
lines changed

6 files changed

+31
-25
lines changed

packages/visual-service/src/service.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,11 @@ export default class WdioImageComparisonService extends BaseClass {
207207

208208
return command(
209209
{
210-
methods:{
211-
executor: <T>(script: string | ((...innerArgs: any[]) => unknown), ...varArgs: any[]): Promise<T> => {
212-
return this.execute.bind(browser)(script, ...varArgs) as Promise<T>
210+
methods: {
211+
executor: <ReturnValue, InnerArguments extends unknown[]>(
212+
fn: string | ((...args: InnerArguments) => ReturnValue),
213+
...args: InnerArguments): Promise<ReturnValue> => {
214+
return this.execute.bind(browser)(fn, ...args) as Promise<ReturnValue>
213215
},
214216
getElementRect: this.getElementRect.bind(browser),
215217
screenShot: this.takeScreenshot.bind(browser),
@@ -257,8 +259,10 @@ export default class WdioImageComparisonService extends BaseClass {
257259
return command(
258260
{
259261
methods: {
260-
executor: <T>(script: string | ((...innerArgs: any[]) => unknown), ...varArgs: any[]): Promise<T> => {
261-
return this.execute.bind(browser)(script, ...varArgs) as Promise<T>
262+
executor: <ReturnValue, InnerArguments extends unknown[]>(
263+
fn: string | ((...args: InnerArguments) => ReturnValue),
264+
...args: InnerArguments): Promise<ReturnValue> => {
265+
return this.execute.bind(browser)(fn, ...args) as Promise<ReturnValue>
262266
},
263267
getElementRect: this.getElementRect.bind(browser),
264268
screenShot: this.takeScreenshot.bind(browser),
@@ -309,9 +313,11 @@ export default class WdioImageComparisonService extends BaseClass {
309313

310314
returnData[browserName] = await command(
311315
{
312-
methods:{
313-
executor: <T>(script: string | ((...innerArgs: any[]) => unknown), ...varArgs: any[]): Promise<T> => {
314-
return browserInstance.execute.bind(browserInstance)(script, ...varArgs) as Promise<T>
316+
methods: {
317+
executor: <ReturnValue, InnerArguments extends unknown[]>(
318+
fn: string | ((...args: InnerArguments) => ReturnValue),
319+
...args: InnerArguments): Promise<ReturnValue> => {
320+
return this.execute.bind(browser)(fn, ...args) as Promise<ReturnValue>
315321
},
316322
getElementRect: browserInstance.getElementRect.bind(browserInstance),
317323
screenShot: browserInstance.takeScreenshot.bind(browserInstance),
@@ -368,8 +374,10 @@ export default class WdioImageComparisonService extends BaseClass {
368374
returnData[browserName] = await command(
369375
{
370376
methods: {
371-
executor: <T>(script: string | ((...innerArgs: any[]) => unknown), ...varArgs: any[]): Promise<T> => {
372-
return browserInstance.execute.bind(browserInstance)(script, ...varArgs) as Promise<T>
377+
executor: <ReturnValue, InnerArguments extends unknown[]>(
378+
fn: string | ((...args: InnerArguments) => ReturnValue),
379+
...args: InnerArguments): Promise<ReturnValue> => {
380+
return this.execute.bind(browser)(fn, ...args) as Promise<ReturnValue>
373381
},
374382
getElementRect: browserInstance.getElementRect.bind(browserInstance),
375383
screenShot: browserInstance.takeScreenshot.bind(browserInstance),

packages/webdriver-image-comparison/src/clientSideScripts/hideRemoveElements.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default function hideRemoveElements(
77
remove: (HTMLElement | HTMLElement[])[];
88
},
99
hideRemove: boolean,
10-
): any {
10+
) {
1111
const visitedSelectors: Record<string, boolean> = {}
1212
hideRemoveElements.hide.forEach((element) => {
1313
if (Array.isArray(element)) {

packages/webdriver-image-comparison/src/methods/elementPosition.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import type { Executor } from './methods.interfaces.js'
66
import type { ElementPosition } from '../clientSideScripts/elementPosition.interfaces.js'
77
import getAndroidStatusAddressToolBarOffsets from '../clientSideScripts/getAndroidStatusAddressToolBarOffsets.js'
88
import getIosStatusAddressToolBarOffsets from '../clientSideScripts/getIosStatusAddressToolBarOffsets.js'
9-
import type { StatusAddressToolBarOffsets } from '../clientSideScripts/statusAddressToolBarOffsets.interfaces.js'
109

1110
/**
1211
* Get the element position on a Android device
@@ -24,9 +23,7 @@ export async function getElementPositionAndroid(
2423
screenWidth,
2524
sideBar: { width: sideBarWidth },
2625
statusAddressBar: { height },
27-
} = <StatusAddressToolBarOffsets>(
28-
await executor(getAndroidStatusAddressToolBarOffsets, ANDROID_OFFSETS, { isHybridApp: false, isLandscape })
29-
)
26+
} = await executor(getAndroidStatusAddressToolBarOffsets, ANDROID_OFFSETS, { isHybridApp: false, isLandscape })
3027

3128
return executor(getElementPositionTopScreenNativeMobile, element, {
3229
isLandscape,
@@ -84,7 +81,7 @@ export async function getElementPositionIos(
8481
screenWidth,
8582
sideBar: { width: sideBarWidth },
8683
statusAddressBar: { height },
87-
} = <StatusAddressToolBarOffsets> await executor(getIosStatusAddressToolBarOffsets, IOS_OFFSETS, isLandscape)
84+
} = await executor(getIosStatusAddressToolBarOffsets, IOS_OFFSETS, isLandscape)
8885

8986
return executor(getElementPositionTopScreenNativeMobile, element, {
9087
isLandscape,

packages/webdriver-image-comparison/src/methods/instanceData.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
import getScreenDimensions from '../clientSideScripts/getScreenDimensions.js'
1313
import type { Executor } from './methods.interfaces.js'
1414
import type { EnrichedInstanceData, InstanceOptions } from './instanceData.interfaces.js'
15-
import type { ScreenDimensions } from '../clientSideScripts/screenDimensions.interfaces.js'
1615

1716
/**
1817
* Enrich the instance data with more data
@@ -23,7 +22,7 @@ export default async function getEnrichedInstanceData(
2322
addShadowPadding: boolean,
2423
): Promise<EnrichedInstanceData> {
2524
// Get the current browser data
26-
const browserData: ScreenDimensions = await executor(getScreenDimensions)
25+
const browserData = await executor(getScreenDimensions)
2726
const { addressBarShadowPadding, toolBarShadowPadding, browserName, nativeWebScreenshot, platformName } = instanceOptions
2827

2928
// Determine some constants

packages/webdriver-image-comparison/src/methods/methods.interfaces.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import type { RectanglesOutput } from './rectangles.interfaces.js'
22

3-
export type Executor = <T>(script: string | Function, ...varArgs: any[]) => Promise<T>;
4-
export type GetElementRect = (elementId:string) => Promise<RectanglesOutput>
3+
/** Binding to the `await browser.execute()` method */
4+
export type Executor = <ReturnValue, InnerArguments extends unknown[]>(
5+
fn: string | ((...args: InnerArguments) => ReturnValue),
6+
...args: InnerArguments
7+
) => Promise<ReturnValue>;
8+
export type GetElementRect = (elementId: string) => Promise<RectanglesOutput>
59
export type TakeScreenShot = () => Promise<string>;
610
export type TakeElementScreenshot = (elementId: string) => Promise<string>;
711

packages/webdriver-image-comparison/src/methods/screenshots.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import type {
1414
TakeWebElementScreenshot,
1515
TakeWebElementScreenshotData,
1616
} from './screenshots.interfaces.js'
17-
import type { StatusAddressToolBarOffsets } from '../clientSideScripts/statusAddressToolBarOffsets.interfaces.js'
1817
import hideRemoveElements from '../clientSideScripts/hideRemoveElements.js'
1918
import hideScrollBars from '../clientSideScripts/hideScrollbars.js'
2019
import type { ElementRectanglesOptions } from './rectangles.interfaces.js'
@@ -68,9 +67,7 @@ export async function getBase64FullPageScreenshotsData(
6867
screenWidth,
6968
sideBar: { width: sideBarWidth },
7069
statusAddressBar: { height: statusAddressBarHeight },
71-
} = <StatusAddressToolBarOffsets>(
72-
await executor(getAndroidStatusAddressToolBarOffsets, ANDROID_OFFSETS, { isHybridApp, isLandscape })
73-
)
70+
} = await executor(getAndroidStatusAddressToolBarOffsets, ANDROID_OFFSETS, { isHybridApp, isLandscape })
7471

7572
const androidNativeMobileOptions = {
7673
...nativeMobileOptions,
@@ -97,7 +94,8 @@ export async function getBase64FullPageScreenshotsData(
9794
sideBar: { width: sideBarWidth },
9895
statusAddressBar: { height: statusAddressBarHeight },
9996
toolBar: { y: iosHomeBarY },
100-
} = <StatusAddressToolBarOffsets> await executor(getIosStatusAddressToolBarOffsets, IOS_OFFSETS, isLandscape)
97+
} = await executor(getIosStatusAddressToolBarOffsets, IOS_OFFSETS, isLandscape)
98+
10199
const iosNativeMobileOptions = {
102100
...nativeMobileOptions,
103101
iosHomeBarY,

0 commit comments

Comments
 (0)