import { FSWatcher } from 'chokidar'; import Koa, { Context } from 'koa'; import { Server } from 'net'; import { DevServerCoreConfig } from '../server/DevServerCoreConfig'; import { Logger } from '../logger/Logger'; import { WebSocketsManager } from '../web-sockets/WebSocketsManager'; export type ServeResult = | void | string | { body: string; type?: string; headers?: Record }; export type TransformResult = | void | string | { body?: string; headers?: Record; transformCache?: boolean }; export type ResolveResult = void | string | { id?: string }; export type ResolveMimeTypeResult = void | string | { type?: string }; export interface ServerStartParams { config: DevServerCoreConfig; app: Koa; server: Server; fileWatcher: FSWatcher; logger: Logger; webSockets?: WebSocketsManager; } export interface Plugin { name: string; injectWebSocket?: boolean; serverStart?(args: ServerStartParams): void | Promise; serverStop?(): void | Promise; serve?(context: Context): ServeResult | Promise; transform?(context: Context): TransformResult | Promise; transformCacheKey?(context: Context): string | undefined | Promise | Promise; resolveImport?(args: { source: string; context: Context; code?: string; column?: number; line?: number; }): ResolveResult | Promise; transformImport?(args: { source: string; context: Context; code?: string; column?: number; line?: number; }): ResolveResult | Promise; resolveMimeType?(context: Context): ResolveMimeTypeResult | Promise; fileParsed?(context: Context): void; }