/** * ServiceWorker Mock System Type Definitions */ export interface SwMockConfig { enabled: boolean; debug: boolean; defaultDelay: number; interceptPatterns: string[]; excludePatterns: string[]; endpoints: Record; globalDelay: number | null; errorRate: number; networkFailure: NetworkFailureConfig; mockDataPath: string; includeInterceptPrefix: boolean; } export interface NetworkFailureConfig { enabled: boolean; scenarios: { httpErrors: HttpErrorScenario; timeout: TimeoutScenario; connectionFailure: ConnectionFailureScenario; responseDelay: ResponseDelayScenario; intermittentFailure: IntermittentFailureScenario; }; } export interface HttpErrorScenario { enabled: boolean; statusCodes: number[]; rate: number; distribution: 'random' | 'sequential' | 'weighted'; } export interface TimeoutScenario { enabled: boolean; duration: number; rate: number; } export interface ConnectionFailureScenario { enabled: boolean; rate: number; } export interface ResponseDelayScenario { enabled: boolean; minDelay: number; maxDelay: number; rate: number; } export interface IntermittentFailureScenario { enabled: boolean; failureDuration: number; recoveryDuration: number; rate: number; } export interface MockEndpointConfig { delay?: number; status?: number; errorRate?: number; errorStatus?: number; data?: any; headers?: Record; } // 多响应配置相关类型定义 export interface MultiResponseConfig { // 默认响应(当没有匹配的条件时使用) default: MockResponseData; // 条件响应列表 responses: ConditionalResponse[]; // 全局配置 global?: { delay?: number | [number, number]; errorRate?: number; headers?: Record; }; } export interface ConditionalResponse { // 响应名称(用于调试和日志) name?: string; // 匹配条件 conditions: MatchCondition[]; // 响应数据 response: MockResponseData; // 权重(用于多个条件都匹配时的优先级,数值越大优先级越高) weight?: number; } export interface MatchCondition { // 匹配类型 type: 'query' | 'body' | 'header' | 'method' | 'path'; // 匹配规则 rule: MatchRule; // 匹配目标(字段名或路径) target: string; // 期望值 value: any; // 是否必须匹配(默认为 true) required?: boolean; } export interface MatchRule { // 匹配模式 mode: 'exact' | 'contains' | 'startsWith' | 'endsWith' | 'regex' | 'range' | 'exists'; // 是否忽略大小写(仅对字符串匹配有效) ignoreCase?: boolean; // 正则表达式标志(仅对 regex 模式有效) regexFlags?: string; } export interface MockResponseData { // 响应状态码 status?: number; // 响应数据 data: any; // 响应头 headers?: Record; // 延迟配置 delay?: number | [number, number]; // 错误率 errorRate?: number; // 错误状态码 errorStatus?: number | number[]; // 描述信息 description?: string; } export interface SwMockInitOptions extends Partial { workerUrl?: string; mockDataPath?: string; autoRegister?: boolean; scope?: string; } export interface SwMockStatus { enabled: boolean; debug: boolean; defaultDelay: number; globalDelay: number | null; interceptPatterns: string[]; excludePatterns: string[]; endpointsCount: number; serviceWorkerReady: boolean; mockDataPath: string; scope: string; networkFailure: { enabled: boolean; httpErrors: boolean; timeout: boolean; connectionFailure: boolean; responseDelay: boolean; intermittentFailure: boolean; }; } export interface CapturedRequest { method: string; url: string; timestamp: string; headers: Record; body?: any; } export interface MockResponse { status: number; statusText: string; headers: Record; data: any; } export interface NetworkFailureInfo { type: 'httpError' | 'timeout' | 'connectionFailure' | 'responseDelay'; statusCode?: number; duration?: number; delay?: number; } export interface SwMockPlugin { name: string; install: (swMock: SwMockInstance) => void; } export interface SwMockInstance { init(options?: SwMockInitOptions): Promise; enable(): Promise; disable(): Promise; toggle(): Promise; getStatus(): Promise; getConfig(): Promise; updateConfig(config: Partial): Promise; resetConfig(): Promise; // Network Failure Methods enableNetworkFailure(): Promise; disableNetworkFailure(): Promise; configureNetworkFailure(config: Partial): Promise; resetNetworkFailureState(): Promise; // Scenario Methods enableHttpErrors(options?: Partial): Promise; enableTimeouts(options?: Partial): Promise; enableConnectionFailures(options?: Partial): Promise; enableResponseDelays(options?: Partial): Promise; enableIntermittentFailures(options?: Partial): Promise; // Preset Modes enableDevelopmentMode(): Promise; enableTestingMode(): Promise; enableStressTestMode(): Promise; // Debug and Monitoring enableDebug(): Promise; disableDebug(): Promise; startCapture(): Promise; stopCapture(): Promise; exportCapturedRequests(): void; // Endpoint Management addMockEndpoint(endpoint: string, config: MockEndpointConfig): Promise; removeMockEndpoint(endpoint: string): Promise; setGlobalDelay(delay: number): Promise; // Pattern Management addInterceptPattern(pattern: string): Promise; removeInterceptPattern(pattern: string): Promise; addExcludePattern(pattern: string): Promise; removeExcludePattern(pattern: string): Promise; // Utility Methods clearDatabase(): Promise; use(plugin: SwMockPlugin): void; // Events on(event: string, callback: Function): void; off(event: string, callback: Function): void; emit(event: string, ...args: any[]): void; } export type SwMockEventType = | 'init' | 'enable' | 'disable' | 'config-update' | 'network-failure-trigger' | 'request-intercepted' | 'mock-response-sent' | 'error'; export interface SwMockEvent { type: SwMockEventType; timestamp: number; data?: any; } // 请求上下文信息 export interface RequestContext { method: string; url: string; pathname: string; query: Record; headers: Record; body?: any; timestamp: number; } // 匹配结果 export interface MatchResult { matched: boolean; response?: MockResponseData; matchedConditions?: string[]; weight?: number; responseName?: string; } // Global type augmentation for window object declare global { interface Window { SwMock?: SwMockInstance; swMock?: SwMockInstance; swMockUtils?: SwMockInstance; } }