/** * ObservableResourceStore - 可观察的资源存储包装器 * * 在资源变更时发出事件,供订阅者(如 UsageTracker、VectorIndexer)处理。 * 采用事件驱动模式,解耦存储操作与副作用逻辑。 */ import { PassthroughStore } from '@solid/community-server'; import type { ChangeMap, Representation, ResourceIdentifier, Conditions, ResourceStore } from '@solid/community-server'; /** * 资源变更事件类型 */ export type ResourceChangeAction = 'create' | 'update' | 'delete'; /** * 资源变更事件 */ export interface ResourceChangeEvent { /** 资源路径 */ path: string; /** 变更类型 */ action: ResourceChangeAction; /** 是否为容器 */ isContainer: boolean; /** 变更时间戳 */ timestamp: number; } /** * 资源变更监听器接口 */ export interface ResourceChangeListener { /** * 处理资源变更事件 * @param event 变更事件 */ onResourceChanged(event: ResourceChangeEvent): Promise; } /** Durable append boundary used before asynchronous derived-index delivery. */ export interface ResourceChangeRecorder { recordResourceChange(event: ResourceChangeEvent): Promise; } export interface ObservableResourceStoreOptions { /** 资源变更监听器列表 */ listeners?: ResourceChangeListener[]; /** Durable outbox writers. A resource mutation does not return until these append. */ recorders?: ResourceChangeRecorder[]; } /** * ObservableResourceStore - 在资源变更时发出事件 * * 使用方式: * 1. 作为 Store 链的包装层 * 2. 注册 listeners 处理变更事件 * 3. 事件异步处理,不阻塞主流程 */ export declare class ObservableResourceStore extends PassthroughStore { private static readonly globalListeners; protected readonly logger: import("global-logger-factory").Logger; private readonly emitter; private readonly listeners; private readonly recorders; constructor(source: T, options?: ObservableResourceStoreOptions); /** * 添加监听器 */ addListener(listener: ResourceChangeListener): void; static addGlobalListener(listener: ResourceChangeListener): void; static removeGlobalListener(listener: ResourceChangeListener): void; /** * 移除监听器 */ removeListener(listener: ResourceChangeListener): void; /** * 添加资源(创建新资源) */ addResource(container: ResourceIdentifier, representation: Representation, conditions?: Conditions): Promise; /** * 设置资源(创建或更新) */ setRepresentation(identifier: ResourceIdentifier, representation: Representation, conditions?: Conditions): Promise; /** * 删除资源 */ deleteResource(identifier: ResourceIdentifier, conditions?: Conditions): Promise; /** * 修改资源(PATCH) */ modifyResource(identifier: ResourceIdentifier, patch: Representation, conditions?: Conditions): Promise; /** * 发出资源变更事件 */ private emitChange; /** * 通知所有监听器 */ private notifyListeners; /** * 检查资源是否存在 */ private resourceExists; }