{"version":3,"sources":["../src/message-handler.ts","../src/base-bridge.ts","../src/host-bridge.ts","../src/child-bridge.ts","../src/factory.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * 消息处理器\n * 负责处理消息的发送、接收和响应逻辑\n */\n\nimport type {\n  MessageType,\n  RequestMessage,\n  ResponseMessage,\n  EventListener,\n  PendingRequest,\n} from \"./types\";\n\nexport class MessageHandler {\n  private pendingRequests = new Map<string, PendingRequest>();\n  private eventListeners = new Map<MessageType, Set<EventListener>>();\n  private messageId = 0;\n  private targetOrigin: string;\n  private timeout?: number;\n  private debug: boolean;\n  private timeoutChecker: number | null = null; // 集中式超时检查器\n  private checkInterval = 1000; // 检查间隔（毫秒）\n\n  constructor(targetOrigin: string, timeout?: number, debug: boolean = false) {\n    this.targetOrigin = targetOrigin;\n    this.timeout = timeout;\n    this.debug = debug;\n\n    // 启动超时检查器\n    this.startTimeoutChecker();\n  }\n\n  /**\n   * 启动集中式超时检查器\n   */\n  private startTimeoutChecker(): void {\n    if (this.timeoutChecker !== null) return;\n\n    this.timeoutChecker = setInterval(() => {\n      this.checkTimeouts();\n    }, this.checkInterval) as unknown as number;\n  }\n\n  /**\n   * 检查所有待处理请求的超时\n   */\n  private checkTimeouts(): void {\n    if (this.pendingRequests.size === 0) return;\n\n    const now = Date.now();\n\n    // 收集超时的请求ID\n    const timedOutIds: string[] = [];\n\n    this.pendingRequests.forEach((request, id) => {\n      if (request.expirationTime && now >= request.expirationTime) {\n        timedOutIds.push(id);\n      }\n    });\n\n    // 处理超时的请求\n    timedOutIds.forEach((id) => {\n      const request = this.pendingRequests.get(id);\n      if (request) {\n        this.pendingRequests.delete(id);\n        request.reject(new Error(`Request timeout: ${id}`));\n\n        if (this.debug) {\n          this.log(`请求超时: ${id}`);\n        }\n      }\n    });\n  }\n\n  /**\n   * 生成唯一的消息ID\n   */\n  generateMessageId(): string {\n    return `msg_${Date.now()}_${++this.messageId}`;\n  }\n\n  /**\n   * 调试日志\n   */\n  log(...args: any[]): void {\n    if (this.debug) {\n      console.log(\"[CrossFrame]\", ...args);\n    }\n  }\n\n  /**\n   * 处理响应消息\n   */\n  handleResponse(response: ResponseMessage): void {\n    const pending = this.pendingRequests.get(response.id);\n    if (!pending) {\n      return;\n    }\n\n    // 不再需要清除计时器，直接从待处理请求中移除\n    this.pendingRequests.delete(response.id);\n\n    if (response.success) {\n      pending.resolve(response.data);\n    } else {\n      pending.reject(new Error(response.error || \"Unknown error\"));\n    }\n  }\n\n  /**\n   * 处理请求消息\n   */\n  async handleRequest(request: RequestMessage, source: Window): Promise<void> {\n    this.log(\"Received request:\", request);\n\n    const listeners = this.eventListeners.get(request.type);\n    if (!listeners || listeners.size === 0) {\n      // 发送错误响应\n      const response: ResponseMessage = {\n        id: request.id,\n        success: false,\n        error: `No handler for message type: ${request.type}`,\n        isResponse: true,\n        timestamp: Date.now(),\n      };\n      source.postMessage(response, this.targetOrigin);\n      return;\n    }\n\n    try {\n      // 执行所有监听器\n      const results = await Promise.all(\n        Array.from(listeners).map((listener) => listener(request.payload))\n      );\n\n      // 发送成功响应（取第一个结果）\n      const response: ResponseMessage = {\n        id: request.id,\n        success: true,\n        data: results[0],\n        isResponse: true,\n        timestamp: Date.now(),\n      };\n      source.postMessage(response, this.targetOrigin);\n    } catch (error) {\n      // 发送错误响应\n      const response: ResponseMessage = {\n        id: request.id,\n        success: false,\n        error: error instanceof Error ? error.message : \"Unknown error\",\n        isResponse: true,\n        timestamp: Date.now(),\n      };\n      source.postMessage(response, this.targetOrigin);\n    }\n  }\n\n  /**\n   * 创建待处理的请求\n   * @param id 请求ID\n   * @param resolve 成功回调\n   * @param reject 失败回调\n   * @param requestTimeout 可选的单个请求超时时间，覆盖全局设置\n   */\n  createPendingRequest(\n    id: string,\n    resolve: Function,\n    reject: Function,\n    requestTimeout?: number\n  ): void {\n    // 优先使用请求特定的超时时间，其次使用全局超时设置\n    const timeout =\n      requestTimeout !== undefined ? requestTimeout : this.timeout;\n\n    // 计算过期时间\n    const expirationTime =\n      timeout !== undefined ? Date.now() + timeout : undefined;\n\n    // 添加到待处理请求，设置过期时间而不是计时器\n    this.pendingRequests.set(id, {\n      resolve,\n      reject,\n      expirationTime,\n    });\n  }\n\n  /**\n   * 添加事件监听器\n   */\n  addEventListener(type: MessageType, listener: EventListener): () => void {\n    if (!this.eventListeners.has(type)) {\n      this.eventListeners.set(type, new Set());\n    }\n\n    this.eventListeners.get(type)!.add(listener);\n\n    // 返回取消监听的函数\n    return () => {\n      const listeners = this.eventListeners.get(type);\n      if (listeners) {\n        listeners.delete(listener);\n        if (listeners.size === 0) {\n          this.eventListeners.delete(type);\n        }\n      }\n    };\n  }\n\n  /**\n   * 移除事件监听器\n   */\n  removeEventListener(type: MessageType, listener?: EventListener): void {\n    const listeners = this.eventListeners.get(type);\n\n    if (!listeners) {\n      return;\n    }\n\n    if (listener) {\n      listeners.delete(listener);\n      if (listeners.size === 0) {\n        this.eventListeners.delete(type);\n      }\n    } else {\n      this.eventListeners.delete(type);\n    }\n  }\n\n  /**\n   * 清理所有待处理的请求\n   */\n  cleanup(): void {\n    // 停止超时检查器\n    if (this.timeoutChecker !== null) {\n      clearInterval(this.timeoutChecker);\n      this.timeoutChecker = null;\n    }\n\n    // 拒绝所有待处理请求\n    this.pendingRequests.forEach(({ reject }) => {\n      reject(new Error(\"Bridge destroyed\"));\n    });\n    this.pendingRequests.clear();\n    this.eventListeners.clear();\n  }\n\n  /**\n   * 获取待处理请求数量（用于调试）\n   */\n  getPendingRequestsCount(): number {\n    return this.pendingRequests.size;\n  }\n\n  /**\n   * 获取监听器数量（用于调试）\n   */\n  getListenersCount(): number {\n    return this.eventListeners.size;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * 跨框架通信基础桥梁类\n */\n\nimport { MessageHandler } from \"./message-handler\";\nimport type {\n  MessageType,\n  RequestMessage,\n  ResponseMessage,\n  EventMessage,\n  BridgeConfig,\n  EventListener,\n} from \"./types\";\n\nexport abstract class IframeBridge {\n  protected messageHandler: MessageHandler;\n  protected config: Required<BridgeConfig>;\n  protected windowId?: string;\n\n  constructor(config: BridgeConfig = {}) {\n    // 设置默认配置\n    this.config = {\n      targetOrigin: \"*\",\n      timeout: 5000,\n      debug: false,\n      enableMultiWindow: false,\n      windowId: \"\",\n      ...config,\n    };\n\n    // 如果启用多窗口隔离，生成或使用提供的窗口ID\n    if (this.config.enableMultiWindow) {\n      this.windowId = this.config.windowId || this.generateWindowId();\n      if (this.config.debug) {\n        console.log(`[CrossFrame] 多窗口模式启用，窗口ID: ${this.windowId}`);\n      }\n    }\n\n    this.messageHandler = new MessageHandler(\n      this.config.targetOrigin,\n      this.config.timeout,\n      this.config.debug\n    );\n\n    this.setupMessageListener();\n  }\n\n  /**\n   * 生成唯一窗口ID\n   */\n  private generateWindowId(): string {\n    return `window_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  /**\n   * 设置消息监听器\n   */\n  protected abstract setupMessageListener(): void;\n\n  /**\n   * 获取目标窗口\n   */\n  protected abstract getTargetWindow(): Window | null;\n\n  /**\n   * 发送消息（无返回值）\n   */\n  send<T = any>(type: MessageType, payload: T): void {\n    const targetWindow = this.getTargetWindow();\n    if (!targetWindow) {\n      this.messageHandler.log(\"目标窗口不可用\");\n      return;\n    }\n\n    const message: EventMessage<T> = {\n      type,\n      payload,\n      timestamp: Date.now(),\n    };\n\n    // 如果启用多窗口隔离，添加窗口ID\n    if (this.config.enableMultiWindow && this.windowId) {\n      message.windowId = this.windowId;\n    }\n\n    this.messageHandler.log(\"发送消息:\", message);\n    targetWindow.postMessage(message, this.config.targetOrigin);\n  }\n\n  /**\n   * 发送请求（有返回值）\n   * @param type 消息类型\n   * @param payload 消息负载\n   * @param requestTimeout 单个请求的超时时间（毫秒），覆盖全局设置\n   */\n  request<T = any, R = any>(\n    type: MessageType,\n    payload: T,\n    requestTimeout?: number\n  ): Promise<R> {\n    return new Promise((resolve, reject) => {\n      const targetWindow = this.getTargetWindow();\n      if (!targetWindow) {\n        reject(new Error(\"目标窗口不可用\"));\n        return;\n      }\n\n      const messageId = this.messageHandler.generateMessageId();\n\n      // 创建待处理请求，使用传入的requestTimeout或默认配置\n      this.messageHandler.createPendingRequest(\n        messageId,\n        resolve,\n        reject,\n        requestTimeout !== undefined ? requestTimeout : undefined\n      );\n\n      const message: RequestMessage<T> = {\n        id: messageId,\n        type,\n        payload,\n        needResponse: true,\n        timestamp: Date.now(),\n      };\n\n      // 如果启用多窗口隔离，添加窗口ID\n      if (this.config.enableMultiWindow && this.windowId) {\n        message.windowId = this.windowId;\n      }\n\n      this.messageHandler.log(\"发送请求:\", message);\n      targetWindow.postMessage(message, this.config.targetOrigin);\n    });\n  }\n\n  /**\n   * 监听消息\n   */\n  on<T = any, R = any>(\n    type: MessageType,\n    listener: EventListener<T, R>\n  ): () => void {\n    return this.messageHandler.addEventListener(type, listener);\n  }\n\n  /**\n   * 取消监听\n   */\n  off<T = any, R = any>(\n    type: MessageType,\n    listener?: EventListener<T, R>\n  ): void {\n    this.messageHandler.removeEventListener(type, listener);\n  }\n\n  /**\n   * 处理接收到的消息\n   */\n  protected handleIncomingMessage(event: MessageEvent): void {\n    const targetWindow = this.getTargetWindow();\n    if (!targetWindow || event.source !== targetWindow) {\n      return;\n    }\n\n    // 如果启用多窗口隔离，检查窗口ID\n    if (this.config.enableMultiWindow) {\n      if (\n        !event.data ||\n        !event.data.windowId ||\n        event.data.windowId !== this.windowId\n      ) {\n        if (this.config.debug) {\n          this.messageHandler.log(\"忽略其他窗口消息:\", event.data);\n        }\n        return;\n      }\n    }\n\n    // 处理响应消息\n    if (event.data && event.data.isResponse) {\n      this.messageHandler.handleResponse(event.data as ResponseMessage);\n      return;\n    }\n\n    // 处理请求消息\n    if (event.data && event.data.needResponse) {\n      this.messageHandler.handleRequest(\n        event.data as RequestMessage,\n        targetWindow\n      );\n      return;\n    }\n\n    // 处理普通事件消息\n    if (event.data && event.data.type) {\n      const listeners = (this.messageHandler as any).eventListeners.get(\n        event.data.type\n      );\n      if (listeners && listeners.size > 0) {\n        listeners.forEach((listener: EventListener) => {\n          try {\n            listener(event.data.payload);\n          } catch (error) {\n            this.messageHandler.log(\"事件监听器执行错误:\", error);\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * 获取调试信息\n   */\n  getDebugInfo() {\n    return {\n      config: this.config,\n      windowId: this.windowId,\n      pendingRequests: this.messageHandler.getPendingRequestsCount(),\n      listeners: this.messageHandler.getListenersCount(),\n    };\n  }\n\n  /**\n   * 销毁桥梁\n   */\n  destroy(): void {\n    this.messageHandler.cleanup();\n    window.removeEventListener(\n      \"message\",\n      this.handleIncomingMessage.bind(this)\n    );\n  }\n}\n","/**\n * 主窗口iframe桥梁\n */\n\nimport { IframeBridge } from \"./base-bridge\";\nimport type { BridgeConfig } from \"./types\";\n\nexport class HostBridge extends IframeBridge {\n  private iframe: HTMLIFrameElement;\n\n  constructor(iframe: HTMLIFrameElement, config: BridgeConfig = {}) {\n    super(config);\n    this.iframe = iframe;\n  }\n\n  protected setupMessageListener(): void {\n    window.addEventListener(\"message\", this.handleIncomingMessage.bind(this));\n  }\n\n  protected getTargetWindow(): Window | null {\n    return this.iframe.contentWindow;\n  }\n}\n","/**\n * 子窗口iframe桥梁\n */\n\nimport { IframeBridge } from \"./base-bridge\";\nimport type { BridgeConfig } from \"./types\";\n\nexport class ChildBridge extends IframeBridge {\n  constructor(config: BridgeConfig = {}) {\n    super(config);\n  }\n\n  protected setupMessageListener(): void {\n    window.addEventListener(\"message\", this.handleIncomingMessage.bind(this));\n  }\n\n  protected getTargetWindow(): Window | null {\n    return window.parent;\n  }\n}\n","/**\n * 跨框架桥梁工厂函数\n */\n\nimport { HostBridge } from \"./host-bridge\";\nimport { ChildBridge } from \"./child-bridge\";\nimport type { BridgeConfig } from \"./types\";\nimport {\n  PluginsConfig,\n  createLogger,\n  createRetryManager,\n  createQueueManager,\n} from \"./plugins\";\n\n// 扩展配置接口\nexport interface EnhancedBridgeConfig extends BridgeConfig {\n  plugins?: PluginsConfig;\n}\n\n/**\n * 创建增强的主窗口桥梁（带插件支持）\n */\nexport function createEnhancedHostBridge(\n  iframe: HTMLIFrameElement,\n  config: EnhancedBridgeConfig = {}\n): HostBridge {\n  const { plugins: pluginsConfig, ...bridgeConfig } = config;\n  const bridge = new HostBridge(iframe, bridgeConfig);\n\n  // 应用插件\n  if (pluginsConfig) {\n    applyPlugins(bridge, pluginsConfig);\n  }\n\n  return bridge;\n}\n\n/**\n * 创建增强的子窗口桥梁（带插件支持）\n */\nexport function createEnhancedChildBridge(\n  config: EnhancedBridgeConfig = {}\n): ChildBridge {\n  const { plugins: pluginsConfig, ...bridgeConfig } = config;\n  const bridge = new ChildBridge(bridgeConfig);\n\n  // 应用插件\n  if (pluginsConfig) {\n    applyPlugins(bridge, pluginsConfig);\n  }\n\n  return bridge;\n}\n\n/**\n * 自动创建增强的桥梁（根据环境判断，带插件支持）\n */\nexport function createEnhancedBridge(\n  iframeOrConfig?: HTMLIFrameElement | EnhancedBridgeConfig,\n  config?: EnhancedBridgeConfig\n): HostBridge | ChildBridge {\n  // 如果在iframe环境中\n  if (window !== window.parent) {\n    const bridgeConfig =\n      iframeOrConfig instanceof HTMLElement\n        ? config\n        : (iframeOrConfig as EnhancedBridgeConfig);\n    return createEnhancedChildBridge(bridgeConfig);\n  }\n\n  // 如果在主窗口环境中\n  if (iframeOrConfig instanceof HTMLElement) {\n    return createEnhancedHostBridge(iframeOrConfig, config);\n  }\n\n  throw new Error(\"在主窗口环境中必须提供 iframe 元素\");\n}\n\n/**\n * 应用插件到桥梁实例\n */\nfunction applyPlugins(\n  bridge: HostBridge | ChildBridge,\n  config: PluginsConfig\n): void {\n  // 应用日志插件\n  if (config.logger) {\n    const options = config.logger === true ? {} : config.logger;\n    createLogger(bridge, options);\n  }\n\n  // 应用重试插件\n  if (config.retry) {\n    const options = config.retry === true ? {} : config.retry;\n    createRetryManager(bridge, options);\n  }\n\n  // 应用队列插件\n  if (config.queue) {\n    const options = config.queue === true ? {} : config.queue;\n    createQueueManager(bridge, options);\n  }\n}\n\n/**\n * 创建主窗口桥梁\n */\nexport function createHostBridge(\n  iframe: HTMLIFrameElement,\n  config?: BridgeConfig\n): HostBridge {\n  return new HostBridge(iframe, config);\n}\n\n/**\n * 创建子窗口桥梁\n */\nexport function createChildBridge(config?: BridgeConfig): ChildBridge {\n  return new ChildBridge(config);\n}\n\n/**\n * 自动创建桥梁（根据环境判断）\n */\nexport function createAutoBridge(\n  iframeOrConfig?: HTMLIFrameElement | BridgeConfig,\n  config?: BridgeConfig\n): HostBridge | ChildBridge {\n  // 如果在iframe环境中\n  if (window !== window.parent) {\n    const bridgeConfig =\n      iframeOrConfig instanceof HTMLElement ? config : iframeOrConfig;\n    return new ChildBridge(bridgeConfig);\n  }\n\n  // 如果在主窗口环境中\n  if (iframeOrConfig instanceof HTMLElement) {\n    return new HostBridge(iframeOrConfig, config);\n  }\n\n  throw new Error(\"在主窗口环境中必须提供 iframe 元素\");\n}\n"]}