import { IFileSystem, SyncOptions } from '../types.js'; /** * PouchDB 同步引擎(rev2:基于 _rev 差异,去 manifest / 全局 sequence / 目录重排) * * - push:轻量跳过 -> 初始化 remote-rev-cache(空则扫文件系统重建)-> 按 _rev generation 筛选差异 -> 二次 compareDocumentRevisions 兜底 -> 写入文件 -> 回写缓存 * - pull:listAllDataFiles -> processed-files 过滤未变文件 -> compareDocumentRevisions -> bulkDocs -> 回写 remote-rev-cache * - 删除靠 tombstone(_deleted:true,_rev 变新自然被推送),无特殊分支 */ export declare class SyncEngine { private db; private fs; private options; private storageManager; private lockManager; private localCache; private syncInProgress; private mergeInProgress; private mergeTimer?; private emitProgress; constructor(db: PouchDB.Database, fs: IFileSystem, options: SyncOptions); /** * 初始化同步 */ initialize(): Promise; /** * 仅从文件加载到 PouchDB(pull-only 同步) */ pull(): Promise; /** * 执行完整同步 */ sync(): Promise; /** * 从目标文件系统拉取到 PouchDB */ private pullFromFiles; /** * 读取文件内容,按内容哈希过滤未变文件,返回文档与文件哈希映射 */ private readChangedDocs; private resolvePullDocument; private applyBulkUpdates; private saveProcessedHashes; private updateRemoteRevCacheFromDocs; /** * 从 PouchDB 推送到目标文件系统 */ private pushToFiles; /** * 轻量跳过:上次推送 seq === 当前 seq 则无新变更 */ private canSkipPush; /** * 读取或(空时)从目标文件系统重建 remote-rev-cache */ private ensureRemoteRevCache; private buildRemoteRevCacheFromFiles; /** * 按 _rev generation 筛选 push 差异,并用 _revisions/变更链做二次兜底 */ private filterPushDiff; private isNewerThanRemote; private saveRemoteRevCache; private getLastPushedSeq; private saveLastPushedSeq; /** * 启动自动合并 */ private startAutoMerge; /** * 停止自动合并 */ stopAutoMerge(): void; /** * 执行文件合并 * @param force 跳过「上月已合并」标记约束 + 「排除本月文件」过滤,强制合并(含本月 data)。 * 手动/测试调用应传 true,否则本月 data 被留到下月、且上月已合并时会被标记挡住,无法验证合并逻辑。 * 自动定时检查不传(走跨时区/多设备去重约束,且只合并上月及更早的 data)。 */ performMerge(force?: boolean): Promise; /** * 比较两个文档的 revision 关系。 * 有 _revisions 时优先判断祖先关系;没有完整链时回退到 revision generation。 */ private compareDocumentRevisions; private resolveIncomingDocument; private parseRevision; private revisionsContain; private prepareDocForLocalWrite; private createConflictDocument; /** * 计算文件内容哈希(仅用于 processed-files 跳过未变文件,非密码学用途)。 * 使用 FNV-1a 32-bit 哈希,跨 Node/浏览器环境确定性一致,且不依赖 Node 内置模块。 * 最终正确性由 _rev 比较保证,哈希只是性能优化。 */ private hashContent; /** * 清理资源 */ cleanup(): Promise; } //# sourceMappingURL=sync-engine.d.ts.map