/** * Starred Sync Hook * * 当实体的 starred 字段变更时,自动同步到 favoriteResource: * - starred: true → 创建 Favorite 记录 * - starred: false → 删除 Favorite 记录 * * 支持的实体类型:Chat, Thread, Contact * targetType 使用 RDF type URI 标识 */ import type { TableHooks } from '@undefineds.co/drizzle-solid'; /** V2 来源模块类型 */ export type SourceModule = 'chat' | 'contacts' | 'files' | 'messages' | 'thread'; /** 快照数据提取器 */ export interface SnapshotExtractor> { /** 获取收藏标题 */ getTitle: (record: T) => string; /** 获取内容快照(可选) */ getContent?: (record: T) => string | undefined; /** 获取作者快照(可选) */ getAuthor?: (record: T) => string | undefined; /** V2: 获取检索文本(可选,默认用 title) */ getSearchText?: (record: T) => string | undefined; /** V2: 获取快照元数据 JSON(可选) */ getSnapshotMeta?: (record: T) => string | undefined; } /** Starred Sync Hook 配置 */ export interface StarredSyncConfig> { /** RDF type URI (e.g., MEETING.LongChat, SIOC.Thread, VCARD.Individual) */ rdfType: string; /** V2: 来源模块标识 */ sourceModule: SourceModule; /** 快照数据提取器 */ extractor: SnapshotExtractor; } /** * 创建 starred 同步 hook * * @example * const chatResource = podTable('chats', columns, { * hooks: createStarredSyncHook({ * rdfType: MEETING.LongChat, * extractor: { * getTitle: (r) => r.title as string, * getContent: (r) => r.lastMessagePreview as string, * } * }) * }) */ export declare function createStarredSyncHook>(config: StarredSyncConfig): TableHooks; /** * 注册 db 实例(应用层启动时调用) */ export declare function registerDbForStarredSync(db: any): void; /** Chat 快照提取器 */ export declare const chatSnapshotExtractor: SnapshotExtractor; /** Thread 快照提取器 */ export declare const threadSnapshotExtractor: SnapshotExtractor; /** Contact 快照提取器 */ export declare const contactSnapshotExtractor: SnapshotExtractor; /** Chat starred sync hook */ export declare const chatStarredSyncHook: TableHooks; /** Thread starred sync hook */ export declare const threadStarredSyncHook: TableHooks; /** Contact starred sync hook */ export declare const contactStarredSyncHook: TableHooks;