/**
 * PersonalPageStore.sync.ts — 同步层（磁盘读写 + 远端同步 + 文件操作 API）
 *
 * 包含：
 * - clearLocalDisk / clearRemotePage / clearPageData
 * - listPages
 * - _getRemoteTreeParams / _fetchRemoteTree
 * - checkLoadData / checkLoadPageFromDisk
 * - saveToDisk / syncToGit / batchSaveToDisk / batchSyncToGit / batchSyncToRemote
 * - debouncedDiskSave
 * - 文件操作 API：readFile / replaceStringInFile / grepSearch / createFile / listDir
 * - 辅助：_isFileOpScoped / _globToRegex
 */
import type { ListDirOptions } from './PersonalPageStore.types';
import { PersonalPageStoreData } from './PersonalPageStore.data';
export declare class PersonalPageStoreSync extends PersonalPageStoreData {
    /**
     * 清除指定页面的本地磁盘（IndexedDB）数据和内存缓存。
     * 同时清理 `.md` 扩展名变体，兼容旧版存储格式。
     *
     * @param pageName - 页面名
     * @returns 是否成功清除至少一条记录
     */
    clearLocalDisk(pageName: string): Promise<boolean>;
    /**
     * 删除远端页面文件（调用 sdk.deleteMarkdownByFullPath）。
     * 本地模式下跳过远端操作，直接返回 true。
     *
     * @param pageName - 页面名
     */
    clearRemotePage(pageName: string): Promise<boolean>;
    /**
     * 同时清除本地磁盘和远端页面。
     * @param pageName - 页面名
     */
    clearPageData(pageName: string): Promise<void>;
    /**
     * 列出所有已知页面名（内存 + IndexedDB + 远端 API）。
     * 委托给 `listDir('.', true)` 并去除 `.md` 扩展名。
     */
    listPages(): Promise<string[]>;
    /**
     * 获取当前 workspace 在远端的站点路径和目录参数。
     * @returns `{ sitePath, remotePrefix, folderBase }`
     */
    _getRemoteTreeParams(): {
        sitePath: string;
        remotePrefix: string;
        folderBase: string;
    };
    /**
     * 获取当前 workspace 的完整远端文件树（30 秒内存缓存）。
     * @returns 页面名数组（相对于 workspace，不含 .md）
     */
    _fetchRemoteTree(): Promise<string[]>;
    /**
     * 从 IndexedDB 加载页面数据（懒加载，已加载则跳过）。
     * 同步迁移 localStorage 旧版数据到 IndexedDB。
     *
     * @param pageName    - 页面名
     * @param forceRefresh - 强制重新从磁盘读取
     */
    checkLoadPageFromDisk(pageName: string, forceRefresh?: boolean): Promise<void>;
    /**
     * 将内存中的最新数据序列化并写入 IndexedDB（同步调用，立即返回）。
     *
     * 流程：
     * 1. 合并 personalPageDataUpdated 到 personalPageData
     * 2. 处理 personalPageDataDeleted 中的删除 key
     * 3. 更新版本元数据
     * 4. 序列化为 YAML 并调用 StorageUtil.setItem
     *
     * @param pageName  - 页面名
     * @param forceSave - 即使无更新也强制保存（用于版本冲突解决）
     */
    saveToDisk(pageName: string, forceSave?: boolean): Promise<boolean>;
    /**
     * 将页面数据同步到远端 Git（editMarkdownByFullPath）。
     *
     * 同步前先合并最新远端版本（防止覆盖他人更改）。
     * 同步成功后清除 pending 状态。
     *
     * @param pageName  - 页面名
     * @param bUseCache - 是否使用 API 缓存
     */
    syncToGit(pageName: string, bUseCache?: boolean): Promise<boolean>;
    /**
     * 防抖磁盘写入（500ms 后执行 batchSaveToDisk）。
     * 写入完成后若还有待保存页面则继续递归调度。
     */
    debouncedDiskSave(): void;
    /**
     * 批量写入所有 pendingDiskPages 到 IndexedDB。
     * 调用方若已在进行中，直接复用同一 Promise（合并并发）。
     *
     * @returns 成功保存的页面数
     */
    batchSaveToDisk(): Promise<number>;
    /**
     * 批量同步所有 pendingSync 到远端（每批并发执行，循环直到队列清空）。
     * 调用方若已在进行中，直接复用同一 Promise。
     *
     * @param forceSync - 强制同步（当前未使用，预留参数）
     * @returns 成功同步的页面数
     */
    batchSyncToGit(forceSync?: boolean): Promise<number>;
    /**
     * batchSyncToGit 的别名（兼容旧调用约定）。
     */
    batchSyncToRemote(forceSync?: boolean): Promise<number>;
    /**
     * 校验文件操作是否在 workspace 作用域内（未设置 workspace 时拒绝执行）。
     * @private
     */
    _isFileOpScoped(callerName: string): boolean;
    /**
     * 将 glob 模式转换为 RegExp（支持 * / ** / ?）。
     * @private
     */
    _globToRegex(glob: string): RegExp;
    /**
     * 按行范围读取文件内容。
     * 文件内容存储在页面数据的 `"content"` 键下。
     * 读取顺序：只读搜索路径 → 本地存储 → mountedFolder → 非只读搜索路径。
     *
     * @param pageName  - 页面名（相当于文件路径）
     * @param startLine - 起始行（1-based，默认 1）
     * @param endLine   - 终止行（1-based，包含，默认最后一行）
     * @returns 指定行范围的内容字符串
     */
    readFile(pageName: string, startLine?: number, endLine?: number): Promise<string>;
    /**
     * 精确替换文件中的一处字符串（仅替换首次出现，若多处匹配则报错）。
     * mountedFolder 中的文件走 copy-on-write：读取后写入本地。
     *
     * @param pageName  - 页面名
     * @param oldString - 要精确匹配的原始字符串
     * @param newString - 替换后的字符串
     * @returns 操作结果描述字符串
     */
    replaceStringInFile(pageName: string, oldString: string, newString: string): Promise<string>;
    /**
     * 在已加载页面的内容中全文搜索（text / regex）。
     * 当 `includePattern` 为精确文件名时，还会从磁盘/远端加载该文件。
     *
     * @param query          - 搜索字符串或正则模式
     * @param isRegexp       - 是否将 query 视为正则表达式
     * @param includePattern - Glob 模式，用于过滤搜索范围
     * @param maxResults     - 最大返回结果数（默认 100）
     * @returns 格式化的搜索结果字符串
     */
    grepSearch(query: string, isRegexp?: boolean, includePattern?: string, maxResults?: number): Promise<string>;
    /**
     * 创建或覆盖文件（将内容存储到页面的 `"content"` 键）。
     *
     * @param pageName - 页面名（文件路径）
     * @param content  - 文件内容（undefined/null 写入空字符串）
     */
    createFile(pageName: string, content?: string): Promise<string>;
    /**
     * 列出目录内容（本地 + 远端 + mountedFolder 三源合并）。
     * 目录以 `/` 结尾，文件不加后缀（但内部用 `.md` 标识）。
     *
     * @param dirPath   - 目录路径；`"."` / `""` / `"/"` 表示 workspace 根
     * @param recursive - 是否递归列出（默认 false）
     * @param options   - showInvisibleFiles / remoteOnly / skipLocalOnlyFile
     * @returns 换行分隔的子项名称字符串
     */
    listDir(dirPath: string, recursive?: boolean, options?: ListDirOptions | null): Promise<string>;
}
//# sourceMappingURL=PersonalPageStore.sync.d.ts.map