diff --git a/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts b/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts deleted file mode 100644 index ff43c67d27a..00000000000 --- a/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare namespace WebdriverIO { - interface Browser { - getAccessibilityResultsSummary: () => Promise>, - getAccessibilityResults: () => Promise>>, - performScan: () => Promise | undefined>, - startA11yScanning: () => Promise, - stopA11yScanning: () => Promise - } - - interface MultiRemoteBrowser { - getAccessibilityResultsSummary: () => Promise>, - getAccessibilityResults: () => Promise>>, - performScan: () => Promise | undefined>, - startA11yScanning: () => Promise, - stopA11yScanning: () => Promise - } -} diff --git a/packages/wdio-browserstack-service/src/accessibility-handler.ts b/packages/wdio-browserstack-service/src/accessibility-handler.ts index 76ae8329cc0..ff1ef903935 100644 --- a/packages/wdio-browserstack-service/src/accessibility-handler.ts +++ b/packages/wdio-browserstack-service/src/accessibility-handler.ts @@ -1,4 +1,3 @@ -/// import util from 'node:util' import type { Capabilities, Frameworks, Options } from '@wdio/types' diff --git a/packages/wdio-browserstack-service/src/cli/modules/accessibilityModule.ts b/packages/wdio-browserstack-service/src/cli/modules/accessibilityModule.ts index d71be0fe25c..1ad0d37159e 100644 --- a/packages/wdio-browserstack-service/src/cli/modules/accessibilityModule.ts +++ b/packages/wdio-browserstack-service/src/cli/modules/accessibilityModule.ts @@ -1,4 +1,3 @@ -/// import BaseModule from './baseModule.js' import { BrowserstackCLI } from '../index.js' import { BStackLogger } from '../cliLogger.js' diff --git a/packages/wdio-browserstack-service/src/index.ts b/packages/wdio-browserstack-service/src/index.ts index 32b65e41f1a..1c9ca3e1fef 100644 --- a/packages/wdio-browserstack-service/src/index.ts +++ b/packages/wdio-browserstack-service/src/index.ts @@ -20,6 +20,14 @@ export * from './types.js' declare global { namespace WebdriverIO { interface ServiceOption extends BrowserstackConfig {} + + interface Browser { + getAccessibilityResultsSummary: () => Promise>, + getAccessibilityResults: () => Promise>>, + performScan: () => Promise | undefined>, + startA11yScanning: () => Promise, + stopA11yScanning: () => Promise + } } interface State { value: number, diff --git a/tests/typings/webdriverio/browserstackService.ts b/tests/typings/webdriverio/browserstackService.ts new file mode 100644 index 00000000000..2657f017ac0 --- /dev/null +++ b/tests/typings/webdriverio/browserstackService.ts @@ -0,0 +1,30 @@ +import { expectType } from 'tsd' +import { browser } from '@wdio/globals' + +/** + * Regression guard for the @wdio/browserstack-service accessibility + * augmentation of WebdriverIO.Browser. + * + * These five methods are declared inside + * declare global { namespace WebdriverIO { interface Browser { ... } } } + * in packages/wdio-browserstack-service/src/index.ts. They previously lived + * in an un-emitted ambient .d.ts file and silently never reached the published + * build/index.d.ts, so consumers lost the typings. This file pulls in the + * published @wdio/browserstack-service types (it is listed in this suite's + * tsconfig.json `types` array) and fails `test:typings:webdriverio` if any of + * the five methods ever stops being typed on WebdriverIO.Browser again. + */ +;(async () => { + expectType<() => Promise>>(browser.getAccessibilityResultsSummary) + expectType<() => Promise>>>(browser.getAccessibilityResults) + expectType<() => Promise | undefined>>(browser.performScan) + expectType<() => Promise>(browser.startA11yScanning) + expectType<() => Promise>(browser.stopA11yScanning) + + // also assert the call-site return types resolve as declared + expectType>(await browser.getAccessibilityResultsSummary()) + expectType>>(await browser.getAccessibilityResults()) + expectType | undefined>(await browser.performScan()) + expectType(await browser.startA11yScanning()) + expectType(await browser.stopA11yScanning()) +})