{"version":3,"sources":["../src/plugins/logger.ts","../src/plugins/retry.ts","../src/plugins/queue-manager.ts"],"names":[],"mappings":"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","file":"chunk-JI2PIO5G.mjs","sourcesContent":["/**\n * 为 iframe-connect 提供详细的日志记录功能\n * 日志插件\n */\n\nimport type { IframeBridge } from \"../base-bridge\";\nimport type { MessageType } from \"../types\";\n\nexport interface LoggerOptions {\n  prefix?: string;\n  timestamp?: boolean;\n  colors?: boolean;\n  level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n}\n\nexport class Logger {\n  private options: Required<LoggerOptions>;\n  private bridge: IframeBridge;\n\n  constructor(bridge: IframeBridge, options: LoggerOptions = {}) {\n    this.bridge = bridge;\n    this.options = {\n      prefix: \"[CrossFrame]\",\n      timestamp: true,\n      colors: true,\n      level: \"debug\",\n      ...options,\n    };\n\n    this.setupLogging();\n  }\n\n  private setupLogging() {\n    // 重写 bridge 的 send 方法\n    const originalSend = this.bridge.send.bind(this.bridge);\n    this.bridge.send = <T>(type: MessageType, payload: T) => {\n      this.log(\"info\", \"发送消息:\", { type, payload });\n      return originalSend(type, payload);\n    };\n\n    // 重写 bridge 的 request 方法\n    const originalRequest = this.bridge.request.bind(this.bridge);\n    this.bridge.request = async <T, R>(\n      type: MessageType,\n      payload: T\n    ): Promise<R> => {\n      this.log(\"info\", \"发送请求:\", { type, payload });\n      try {\n        const result = await originalRequest(type, payload);\n        this.log(\"info\", \"请求成功:\", { type, result });\n        return result;\n      } catch (error) {\n        const errorMessage =\n          error instanceof Error ? error.message : String(error);\n        this.log(\"error\", \"请求失败:\", { type, error: errorMessage });\n        throw error;\n      }\n    };\n  }\n\n  private log(level: string, message: string, data?: any) {\n    if (!this.shouldLog(level)) return;\n\n    const timestamp = this.options.timestamp\n      ? `[${new Date().toISOString()}]`\n      : \"\";\n    const prefix = this.options.prefix;\n    const coloredMessage = this.options.colors\n      ? this.colorize(level, message)\n      : message;\n\n    console.log(`${timestamp} ${prefix} ${coloredMessage}`, data || \"\");\n  }\n\n  private shouldLog(level: string): boolean {\n    const levels = [\"debug\", \"info\", \"warn\", \"error\"];\n    const currentLevelIndex = levels.indexOf(this.options.level);\n    const messageLevelIndex = levels.indexOf(level);\n    return messageLevelIndex >= currentLevelIndex;\n  }\n\n  private colorize(level: string, message: string): string {\n    if (!this.options.colors) return message;\n\n    const colors = {\n      debug: \"\\x1b[36m\", // cyan\n      info: \"\\x1b[32m\", // green\n      warn: \"\\x1b[33m\", // yellow\n      error: \"\\x1b[31m\", // red\n      reset: \"\\x1b[0m\",\n    };\n\n    return `${colors[level as keyof typeof colors] || \"\"}${message}${\n      colors.reset\n    }`;\n  }\n}\n\n// 工厂函数\nexport function createLogger(\n  bridge: IframeBridge,\n  options?: LoggerOptions\n): Logger {\n  return new Logger(bridge, options);\n}\n","/**\n * 重试插件\n * 为 iframe-connect 提供自动重试功能\n */\n\nimport type { IframeBridge } from \"../base-bridge\";\nimport type { MessageType } from \"../types\";\n\nexport interface RetryOptions {\n  maxRetries?: number;\n  baseDelay?: number;\n  maxDelay?: number;\n  backoff?: \"linear\" | \"exponential\";\n  retryCondition?: (error: Error) => boolean;\n}\n\nexport class RetryManager {\n  private options: Required<RetryOptions>;\n  private bridge: IframeBridge;\n\n  constructor(bridge: IframeBridge, options: RetryOptions = {}) {\n    this.bridge = bridge;\n    this.options = {\n      maxRetries: 3,\n      baseDelay: 1000,\n      maxDelay: 10000,\n      backoff: \"exponential\",\n      retryCondition: (error) => error.message.includes(\"timeout\"),\n      ...options,\n    };\n\n    this.setupRetry();\n  }\n\n  private setupRetry() {\n    // 重写 request 方法以支持重试\n    const originalRequest = this.bridge.request.bind(this.bridge);\n    this.bridge.request = async <T, R>(\n      type: MessageType,\n      payload: T\n    ): Promise<R> => {\n      return this.requestWithRetry(originalRequest, type, payload);\n    };\n  }\n\n  private async requestWithRetry<T, R>(\n    originalRequest: (type: MessageType, payload: T) => Promise<R>,\n    type: MessageType,\n    payload: T\n  ): Promise<R> {\n    let lastError: Error;\n\n    for (let attempt = 0; attempt <= this.options.maxRetries; attempt++) {\n      try {\n        return await originalRequest(type, payload);\n      } catch (error) {\n        lastError = error instanceof Error ? error : new Error(String(error));\n\n        // 如果不满足重试条件，直接抛出错误\n        if (!this.options.retryCondition(lastError)) {\n          throw lastError;\n        }\n\n        // 如果是最后一次尝试，抛出错误\n        if (attempt === this.options.maxRetries) {\n          throw lastError;\n        }\n\n        // 计算延迟时间\n        const delay = this.calculateDelay(attempt);\n        console.warn(\n          `[CrossFrame] 请求失败，${delay}ms 后重试 (${attempt + 1}/${\n            this.options.maxRetries\n          })`\n        );\n\n        await this.sleep(delay);\n      }\n    }\n\n    throw lastError!;\n  }\n\n  private calculateDelay(attempt: number): number {\n    let delay: number;\n\n    if (this.options.backoff === \"linear\") {\n      delay = this.options.baseDelay * (attempt + 1);\n    } else {\n      delay = this.options.baseDelay * Math.pow(2, attempt);\n    }\n\n    return Math.min(delay, this.options.maxDelay);\n  }\n\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  // 手动重试方法\n  async retryRequest<T, R>(\n    type: MessageType,\n    payload: T,\n    customOptions?: Partial<RetryOptions>\n  ): Promise<R> {\n    const options = { ...this.options, ...customOptions };\n\n    for (let attempt = 0; attempt <= options.maxRetries; attempt++) {\n      try {\n        return await this.bridge.request<T, R>(type, payload);\n      } catch (error) {\n        const err = error instanceof Error ? error : new Error(String(error));\n\n        if (!options.retryCondition!(err) || attempt === options.maxRetries) {\n          throw err;\n        }\n\n        const delay = this.calculateDelayWithOptions(attempt, options);\n        await this.sleep(delay);\n      }\n    }\n\n    throw new Error(\"Retry failed\");\n  }\n\n  private calculateDelayWithOptions(\n    attempt: number,\n    options: Required<RetryOptions>\n  ): number {\n    let delay: number;\n\n    if (options.backoff === \"linear\") {\n      delay = options.baseDelay * (attempt + 1);\n    } else {\n      delay = options.baseDelay * Math.pow(2, attempt);\n    }\n\n    return Math.min(delay, options.maxDelay);\n  }\n}\n\n// 工厂函数\nexport function createRetryManager(\n  bridge: IframeBridge,\n  options?: RetryOptions\n): RetryManager {\n  return new RetryManager(bridge, options);\n}\n","/**\n * 消息队列管理器\n * 提供批量消息处理和流量控制功能\n */\n\nimport type { IframeBridge } from \"../base-bridge\";\nimport type { MessageType } from \"../types\";\n\nexport interface QueueOptions {\n  maxSize?: number;\n  flushInterval?: number;\n  batchSize?: number;\n  priority?: boolean;\n}\n\ninterface QueuedMessage {\n  type: MessageType;\n  payload: any;\n  priority?: number;\n  timestamp: number;\n  resolve?: (value: any) => void;\n  reject?: (error: Error) => void;\n  requestTimeout?: number;\n}\n\nexport class QueueManager {\n  private options: Required<QueueOptions>;\n  private bridge: IframeBridge;\n  private messageQueue: QueuedMessage[] = [];\n  private processing = false;\n  private flushTimer?: number;\n\n  constructor(bridge: IframeBridge, options: QueueOptions = {}) {\n    this.bridge = bridge;\n    this.options = {\n      maxSize: 100,\n      flushInterval: 1000,\n      batchSize: 10,\n      priority: false,\n      ...options,\n    };\n\n    this.setupQueue();\n    this.startFlushTimer();\n  }\n\n  private setupQueue() {\n    // 重写 send 方法\n    const originalSend = this.bridge.send.bind(this.bridge); // eslint-disable-line @typescript-eslint/no-unused-vars\n    this.bridge.send = <T>(type: MessageType, payload: T) => {\n      this.enqueue({\n        type,\n        payload,\n        timestamp: Date.now(),\n      });\n    };\n\n    // 重写 request 方法，保留超时参数\n    const originalRequest = this.bridge.request.bind(this.bridge); // eslint-disable-line @typescript-eslint/no-unused-vars\n    this.bridge.request = <T, R>(\n      type: MessageType,\n      payload: T,\n      requestTimeout?: number\n    ): Promise<R> => {\n      return new Promise((resolve, reject) => {\n        this.enqueue({\n          type,\n          payload,\n          timestamp: Date.now(),\n          resolve,\n          reject,\n          requestTimeout,\n        });\n      });\n    };\n  }\n\n  private enqueue(message: QueuedMessage) {\n    // 检查队列大小\n    if (this.messageQueue.length >= this.options.maxSize) {\n      const error = new Error(\"消息队列已满\");\n      if (message.reject) {\n        message.reject(error);\n      } else {\n        console.warn(\"[CrossFrame] 消息队列已满，丢弃消息:\", message);\n      }\n      return;\n    }\n\n    // 添加到队列\n    this.messageQueue.push(message);\n\n    // 如果启用了优先级，对队列进行排序\n    if (this.options.priority) {\n      this.messageQueue.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n    }\n\n    // 立即处理或等待批量处理\n    if (this.messageQueue.length >= this.options.batchSize) {\n      this.flush();\n    }\n  }\n\n  private startFlushTimer() {\n    this.flushTimer = setInterval(() => {\n      if (this.messageQueue.length > 0) {\n        this.flush();\n      }\n    }, this.options.flushInterval) as unknown as number;\n  }\n\n  private async flush() {\n    if (this.processing || this.messageQueue.length === 0) {\n      return;\n    }\n\n    this.processing = true;\n\n    // 取出要处理的消息\n    const batch = this.messageQueue.splice(0, this.options.batchSize);\n\n    try {\n      // 批量处理消息\n      for (const message of batch) {\n        try {\n          if (message.resolve) {\n            // 这是一个 request，传递超时参数\n            const result = await this.bridge.request(\n              message.type,\n              message.payload,\n              message.requestTimeout\n            );\n            message.resolve(result);\n          } else {\n            // 这是一个 send\n            this.bridge.send(message.type, message.payload);\n          }\n        } catch (error) {\n          if (message.reject) {\n            message.reject(\n              error instanceof Error ? error : new Error(String(error))\n            );\n          } else {\n            console.error(\"[CrossFrame] 消息处理失败:\", error);\n          }\n        }\n      }\n    } finally {\n      this.processing = false;\n    }\n  }\n\n  // 手动刷新队列\n  async flushNow(): Promise<void> {\n    return this.flush();\n  }\n\n  // 设置消息优先级\n  setPriority(type: MessageType, payload: any, priority: number) {\n    this.enqueue({\n      type,\n      payload,\n      priority,\n      timestamp: Date.now(),\n    });\n  }\n\n  // 获取队列状态\n  getQueueStatus() {\n    return {\n      size: this.messageQueue.length,\n      maxSize: this.options.maxSize,\n      processing: this.processing,\n      usage: (this.messageQueue.length / this.options.maxSize) * 100,\n    };\n  }\n\n  // 清空队列\n  clear() {\n    const rejectedCount = this.messageQueue.filter((msg) => msg.reject).length;\n    this.messageQueue.forEach((msg) => {\n      if (msg.reject) {\n        msg.reject(new Error(\"队列已清空\"));\n      }\n    });\n    this.messageQueue = [];\n    console.log(`[CrossFrame] 队列已清空，${rejectedCount} 个请求被拒绝`);\n  }\n\n  // 销毁队列管理器\n  destroy() {\n    if (this.flushTimer) {\n      clearInterval(this.flushTimer);\n    }\n    this.clear();\n  }\n}\n\n// 工厂函数\nexport function createQueueManager(\n  bridge: IframeBridge,\n  options?: QueueOptions\n): QueueManager {\n  return new QueueManager(bridge, options);\n}\n"]}