/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /// import type {AggregatedResult} from '@jest/test-result'; import type {Config} from '@jest/types'; import Emittery = require('emittery'); export declare type AllowedConfigOptions = Partial< Pick< Config.GlobalConfig, | 'bail' | 'changedSince' | 'collectCoverage' | 'collectCoverageFrom' | 'coverageDirectory' | 'coverageReporters' | 'findRelatedTests' | 'nonFlagArgs' | 'notify' | 'notifyMode' | 'onlyFailures' | 'reporters' | 'testNamePattern' | 'testPathPattern' | 'updateSnapshot' | 'verbose' > & { mode: 'watch' | 'watchAll'; } >; declare type AvailableHooks = | 'onFileChange' | 'onTestRunComplete' | 'shouldRunTestSuite'; export declare abstract class BaseWatchPlugin implements WatchPlugin { protected _stdin: NodeJS.ReadStream; protected _stdout: NodeJS.WriteStream; constructor({ stdin, stdout, }: { stdin: NodeJS.ReadStream; stdout: NodeJS.WriteStream; }); apply(_hooks: JestHookSubscriber): void; getUsageInfo(_globalConfig: Config.GlobalConfig): UsageData | null; onKey(_key: string): void; run( _globalConfig: Config.GlobalConfig, _updateConfigAndRun: UpdateConfigCallback, ): Promise; } declare type FileChange = (fs: JestHookExposedFS) => void; export declare class JestHook { private readonly _listeners; private readonly _subscriber; private readonly _emitter; constructor(); isUsed(hook: AvailableHooks): boolean; getSubscriber(): Readonly; getEmitter(): Readonly; } export declare type JestHookEmitter = { onFileChange: (fs: JestHookExposedFS) => void; onTestRunComplete: (results: AggregatedResult) => void; shouldRunTestSuite: ( testSuiteInfo: TestSuiteInfo, ) => Promise | boolean; }; declare type JestHookExposedFS = { projects: Array<{ config: Config.ProjectConfig; testPaths: Array; }>; }; export declare type JestHookSubscriber = { onFileChange: (fn: FileChange) => void; onTestRunComplete: (fn: TestRunComplete) => void; shouldRunTestSuite: (fn: ShouldRunTestSuite) => void; }; export declare const KEYS: { ARROW_DOWN: string; ARROW_LEFT: string; ARROW_RIGHT: string; ARROW_UP: string; BACKSPACE: string; CONTROL_C: string; CONTROL_D: string; CONTROL_U: string; ENTER: string; ESCAPE: string; }; export declare abstract class PatternPrompt { protected _pipe: NodeJS.WritableStream; protected _prompt: Prompt; protected _entityName: string; protected _currentUsageRows: number; constructor( _pipe: NodeJS.WritableStream, _prompt: Prompt, _entityName?: string, ); run( onSuccess: (value: string) => void, onCancel: () => void, options?: { header: string; }, ): void; protected _onChange(_pattern: string, _options: ScrollOptions_2): void; } export declare function printPatternCaret( pattern: string, pipe: NodeJS.WritableStream, ): void; export declare function printRestoredPatternCaret( pattern: string, currentUsageRows: number, pipe: NodeJS.WritableStream, ): void; export declare class Prompt { private _entering; private _value; private _onChange; private _onSuccess; private _onCancel; private _offset; private _promptLength; private _selection; constructor(); private readonly _onResize; enter( onChange: (pattern: string, options: ScrollOptions_2) => void, onSuccess: (pattern: string) => void, onCancel: () => void, ): void; setPromptLength(length: number): void; setPromptSelection(selected: string): void; put(key: string): void; abort(): void; isEntering(): boolean; } declare type ScrollOptions_2 = { offset: number; max: number; }; export {ScrollOptions_2 as ScrollOptions}; declare type ShouldRunTestSuite = ( testSuiteInfo: TestSuiteInfo, ) => Promise; declare type State = { interrupted: boolean; }; declare type TestRunComplete = (results: AggregatedResult) => void; declare type TestSuiteInfo = { config: Config.ProjectConfig; duration?: number; testPath: string; }; export declare class TestWatcher extends Emittery<{ change: State; }> { state: State; private readonly _isWatchMode; constructor({isWatchMode}: {isWatchMode: boolean}); setState(state: State): Promise; isInterrupted(): boolean; isWatchMode(): boolean; } export declare type UpdateConfigCallback = ( config?: AllowedConfigOptions, ) => void; export declare type UsageData = { key: string; prompt: string; }; export declare interface WatchPlugin { isInternal?: boolean; apply?: (hooks: JestHookSubscriber) => void; getUsageInfo?: (globalConfig: Config.GlobalConfig) => UsageData | null; onKey?: (value: string) => void; run?: ( globalConfig: Config.GlobalConfig, updateConfigAndRun: UpdateConfigCallback, ) => Promise; } export declare interface WatchPluginClass { new (options: { config: Record; stdin: NodeJS.ReadStream; stdout: NodeJS.WriteStream; }): WatchPlugin; } export {};