{"version":3,"file":"createRegistry.mjs","sources":["../../../../../pro-components/chat/chat-engine/components/shared/createRegistry.ts"],"sourcesContent":["import type { Component } from 'vue';\nimport { h, defineComponent } from 'vue';\n\n/**\n * 基础配置接口 - 所有注册配置必须包含组件\n */\nexport interface BaseConfig {\n  component: Component;\n}\n\n/**\n * Registry 配置选项\n */\nexport interface RegistryOptions<TConfig extends BaseConfig> {\n  /** 从配置中获取唯一标识符的函数 */\n  getKey: (config: TConfig) => string;\n  /** 注册事件名称 */\n  eventName: string;\n  /** 事件 detail 中的键名 */\n  eventDetailKey: string;\n}\n\n/**\n * 泛型 Registry 管理器接口\n */\nexport interface IRegistryManager<TConfig extends BaseConfig> {\n  register(config: TConfig): boolean;\n  get(key: string): TConfig | undefined;\n  getRenderFunction(key: string): Component | null;\n  getAll(): Record<string, TConfig>;\n  unregister(key: string): void;\n  clear(): void;\n  has(key: string): boolean;\n  getRegisteredKeys(): string[];\n}\n\n/**\n * 创建泛型 Registry 管理器\n * 用于统一管理 Activity 和 Toolcall 的注册逻辑\n */\nexport function createRegistryManager<TConfig extends BaseConfig>(\n  options: RegistryOptions<TConfig>,\n): IRegistryManager<TConfig> {\n  const { getKey, eventName, eventDetailKey } = options;\n\n  // 内部状态\n  const registry: Record<string, TConfig> = {};\n  const renderFunctionCache = new Map<string, Component>();\n\n  return {\n    /**\n     * 注册配置\n     * @returns 是否成功注册（如果已存在相同配置则返回 false）\n     */\n    register(config: TConfig): boolean {\n      const key = getKey(config);\n      const existingConfig = registry[key];\n\n      // 如果已存在且组件相同，跳过注册（真正的防重复）\n      if (existingConfig && existingConfig.component === config.component) {\n        return false;\n      }\n\n      // 如果组件发生变化，清除旧的缓存\n      if (existingConfig) {\n        renderFunctionCache.delete(key);\n      }\n\n      registry[key] = config;\n\n      // 只在真正有变化时触发注册事件\n      window.dispatchEvent(\n        new CustomEvent(eventName, {\n          detail: { [eventDetailKey]: key },\n        }),\n      );\n\n      return true;\n    },\n\n    /**\n     * 获取指定 key 的配置\n     */\n    get(key: string): TConfig | undefined {\n      return registry[key];\n    },\n\n    /**\n     * 获取或创建缓存的组件渲染函数\n     */\n    getRenderFunction(key: string): Component | null {\n      const config = registry[key];\n      if (!config) return null;\n\n      let cachedComponent = renderFunctionCache.get(key);\n\n      if (!cachedComponent) {\n        // 创建包装组件，Vue3 会自动处理组件的缓存和优化\n        cachedComponent = defineComponent({\n          name: `Cached_${key}`,\n          setup(props) {\n            return () => h(config.component, props);\n          },\n        });\n\n        // 缓存组件\n        renderFunctionCache.set(key, cachedComponent);\n      }\n\n      return cachedComponent;\n    },\n\n    /**\n     * 获取所有已注册的配置\n     */\n    getAll(): Record<string, TConfig> {\n      return { ...registry };\n    },\n\n    /**\n     * 取消注册\n     */\n    unregister(key: string): void {\n      delete registry[key];\n      renderFunctionCache.delete(key);\n    },\n\n    /**\n     * 清空所有注册\n     */\n    clear(): void {\n      Object.keys(registry).forEach((key) => delete registry[key]);\n      renderFunctionCache.clear();\n    },\n\n    /**\n     * 检查指定 key 是否已注册\n     */\n    has(key: string): boolean {\n      return key in registry;\n    },\n\n    /**\n     * 获取所有已注册的 key\n     */\n    getRegisteredKeys(): string[] {\n      return Object.keys(registry);\n    },\n  };\n}\n"],"names":["createRegistryManager","options","getKey","eventName","eventDetailKey","registry","renderFunctionCache","Map","register","config","key","existingConfig","component","window","dispatchEvent","CustomEvent","detail","_defineProperty","get","getRenderFunction","cachedComponent","defineComponent","name","setup","props","h","set","getAll","_objectSpread","unregister","clear","Object","keys","forEach","has","getRegisteredKeys"],"mappings":"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"}