🏡 index : quine-global/webdriverio.git

import type { WriteStream } from 'node:fs'
import type { EventEmitter } from 'node:events'

import type { RequestedStandaloneCapabilities, RequestedMultiremoteCapabilities } from './Capabilities.js'

interface OutputFileFormatOptions {
    cid: string
    capabilities: RequestedStandaloneCapabilities | RequestedMultiremoteCapabilities
}

export interface Options {
    outputDir?: string
    /**
     * Complete path of the reporter log file. If `setLogFile` is defined, it will
     * be used instead of this option.
     */
    logFile?: string
    /**
     * Define the filename format for the reporter log files, using the `cid` and
     * `capabilities`. `setLogFile` and `logFile` take precedence over this
     * option, if defined (in that order).
     *
     * > Note: `options.capabilities` is your capabilities object for that runner, so specifying
     * `${options.capabilities}` in your string will return [Object object]. You must specify which
     * properties of capabilities you want in your filename.
     *
     * @default `wdio-${cid}-${name}-reporter.log`
     *
     * @example
     * outputFileFormat: function (options) {
     *     const { cid, capabilities } = options
     *     const { browserName } = capabilities
     *     return `wdio-${cid}-${browserName}-reporter.log`
     * }
     */
    outputFileFormat?: (options: OutputFileFormatOptions) => string
    /**
     * Set the complete path for the reporter's log output, using `cid` and
     * the reporter's `name`.
     */
    setLogFile?: (cid: string, name: string) => string
    /**
     * No log file will be created if this option is set to `true`.
     */
    stdout?: boolean
    /**
     * Write to `writeStream` instead of a file.
     *
     * Note: `logFile` must not be set, unless `stdout` is set to `true`.
     */
    writeStream?: WriteStream | {
        write: (content: unknown) => boolean
    }
    /**
     * allow random typings from 3rd party reporters
     */
    [key: string]: unknown
}

export interface ReporterInstance extends EventEmitter {
    isSynchronised: boolean
}

export interface ReporterClass {
    new(options: Partial<Options>): ReporterInstance
}

export type ReporterEntry = (
    /**
     * e.g. `services: ['@wdio/allure-reporter']`
     */
    string |
    /**
     * e.g. `services: [CustomReporter]`
     */
    ReporterClass |
    /**
     * e.g. `services: [['@wdio/sauce-service', { ... }]]`
     *
     * Note: we use `WebdriverIO.ServiceOptions` rather than referencing the
     * interface directly to allow other services to extend the service option
     * with theirs
     */
    [string, WebdriverIO.ReporterOption] |
    /**
     * e.g. `services: [[CustomClass, { ... }]]`
     *
     * Note: we use `WebdriverIO.ServiceOptions` rather than referencing the
     * interface directly to allow other services to extend the service option
     * with theirs
     */
    [ReporterClass, WebdriverIO.ReporterOption]
)