import type fs from 'node:fs' import type { downloadFile } from './node/downloadFile.js' import type { savePDF } from './node/savePDF.js' import type { saveRecordingScreen } from './node/saveRecordingScreen.js' import type { uploadFile } from './node/uploadFile.js' import type { saveScreenshot } from './node/saveScreenshot.js' import type { saveElementScreenshot } from './node/saveElementScreenshot.js' /** * @internal */ export const isNode = !!(typeof process !== 'undefined' && process.version) export interface EnvironmentVariables { WDIO_UNIT_TESTS?: string WDIO_WORKER_ID?: string } export interface EnvironmentDependencies { variables: EnvironmentVariables readFileSync: typeof fs.readFileSync downloadFile: typeof downloadFile, savePDF: typeof savePDF, saveRecordingScreen: typeof saveRecordingScreen, uploadFile: typeof uploadFile, saveScreenshot: typeof saveScreenshot, saveElementScreenshot: typeof saveElementScreenshot osType: () => string } /** * Holder for environment dependencies. These dependencies cannot * be used during the module instantiation. */ export const environment: { value: EnvironmentDependencies; } = { value: { get readFileSync(): EnvironmentDependencies['readFileSync'] { throw new Error('Can\'t read files form file system in this environment') }, get downloadFile(): EnvironmentDependencies['downloadFile'] { throw new Error('The `downloadFile` command is not available in this environment') }, get savePDF(): EnvironmentDependencies['savePDF'] { throw new Error('The `savePDF` command is not available in this environment') }, get saveRecordingScreen(): EnvironmentDependencies['saveRecordingScreen'] { throw new Error('The `saveRecordingScreen` command is not available in this environment') }, get uploadFile(): EnvironmentDependencies['uploadFile'] { throw new Error('The `uploadFile` command is not available in this environment') }, get saveScreenshot(): EnvironmentDependencies['saveScreenshot'] { throw new Error('The `saveScreenshot` command for WebdriverIO.Browser is not available in this environment') }, get saveElementScreenshot(): EnvironmentDependencies['saveElementScreenshot'] { throw new Error('The `saveScreenshot` command for WebdriverIO.Element is not available in this environment') }, get osType() { return () => 'browser' }, get variables() { /** * In unit tests we need to use the process.env object to set the environment variables. */ return isNode ? process.env as EnvironmentVariables : {} as EnvironmentVariables } } }