///
///
///
import { createReadStream, createWriteStream, Dirent, Stats } from "fs";
import { Pattern } from "./matcher";
/** 表示一个文件系统 */
export declare class FileSystem {
/** 判断当前文件系统是否是物理文件系统 */
get native(): boolean;
/** 判断当前文件系统是否忽略大小写 */
readonly isCaseInsensitive: boolean;
/**
* 获取文件或文件夹的属性
* @param path 要获取的路径
* @param resolveLink 如果是软链接,是否解析链接引用的路径属性
*/
getStat(path: string, resolveLink?: boolean): Promise;
/**
* 判断指定的路径是否存在
* @param path 要判断的路径
* @returns 如果路径不存在,则返回 `false`,否则返回 `true`
*/
exists(path: string): Promise;
/**
* 判断指定的文件是否存在
* @param path 要判断的路径
* @returns 如果文件不存在或路径不是一个文件,则返回 `false`,否则返回 `true`
*/
existsFile(path: string): Promise;
/**
* 判断指定的文件夹是否存在
* @param path 要判断的路径
* @returns 如果文件夹不存在或路径不是一个文件,则返回 `false`,否则返回 `true`
*/
existsDir(path: string): Promise;
/**
* 如果指定的路径不存在则直接返回,否则返回重命名后的新路径
* @param path 要测试的文件或文件夹路径
* @param append 如果路径已存在则添加的文件名后缀,其中的数字会递增直到文件不存在
*/
ensureNotExists(path: string, append?: string): Promise;
/**
* 如果路径所在的文件夹不存在则创建一个
* @param path 相关的路径
*/
ensureDirExists(path: string): Promise;
/**
* 创建一个文件夹
* @param path 要创建的文件夹路径
*/
createDir(path: string): Promise;
/**
* 创建一个临时文件夹
* @param parent 临时文件夹的根目录
* @returns 返回已创建文件夹路径
*/
createTempDir(parent?: string): Promise;
/**
* 删除指定的文件夹
* @param path 要删除的文件夹路径
* @param recursive 是否删除所有所有子文件夹和文件,如果为 `false` 则只删除空文件夹
* @returns 返回删除的文件数
*/
deleteDir(path: string, recursive?: boolean): Promise;
/**
* 清空指定的文件夹
* @param path 要清空的文件夹路径
* @returns 返回删除的文件数
*/
cleanDir(path: string): Promise;
/**
* 如果路径所在的文件夹是空的则删除所在文件夹
* @param path 文件夹内的文件路径
* @returns 返回已删除的文件夹数,如果文件夹不空,返回 `0`
*/
deleteParentDirIfEmpty(path: string): Promise;
/**
* 删除指定的文件或软链接
* @param path 要删除的文件路径
* @returns 如果删除成功则返回 `true`,否则说明文件不存在,返回 `false`
*/
deleteFile(path: string): Promise;
/**
* 深度遍历指定的路径并执行回调
* @param path 要遍历的文件或文件夹路径
* @param options 遍历的选项
*/
walk(path: string, options: WalkOptions): Promise;
/**
* 遍历通配符匹配的所有文件
* @param pattern 要匹配的模式
* @param callback 遍历的回调函数
* @param baseDir 查找的基文件夹路径
* @param followLinks 是否展开链接,默认 `true`
*/
walkGlob(pattern: Pattern, callback: (path: string) => any, baseDir?: string, followLinks?: boolean): Promise;
/**
* 查找匹配指定模式的所有文件
* @param pattern 要匹配的模式
* @param baseDir 查找的基文件夹路径
* @param followLinks 是否展开链接,默认 `true`
* @returns 返回所有匹配文件的路径
*/
glob(pattern: Pattern, baseDir?: string, followLinks?: boolean): Promise;
/**
* 获取文件夹内的所有文件和文件夹组成的数组
* @param path 要读取的文件夹路径
* @param withFileTypes 是否包含文件类型信息
*/
readDir(path: string, withFileTypes: true): Promise;
/**
* 获取文件夹内的所有文件和文件夹组成的数组
* @param path 要读取的文件夹路径
* @param withFileTypes 是否包含文件类型信息
*/
readDir(path: string, withFileTypes?: boolean): Promise;
/**
* 读取指定文件的二进制内容
* @param path 要读取的文件路径
*/
readFile(path: string): Promise;
/**
* 读取指定文件的文本内容
* @param path 要读取的文件路径
* @param encoding 文件的编码
*/
readFile(path: string, encoding: BufferEncoding): Promise;
/**
* 使用 UTF-8 编码读取指定的文本文件
* @param path 要读取的文件路径
* @param throwIfNotFound 如果文件不存在,是否抛出异常,如果值为 `false`,则文件不存在时返回 `null`
*/
readText(path: string, throwIfNotFound: false): Promise;
/**
* 使用 UTF-8 编码读取指定的文本文件
* @param path 要读取的文件路径
* @param throwIfNotFound 如果文件不存在,是否抛出异常,如果值为 `false`,则文件不存在时返回 `null`
*/
readText(path: string, throwIfNotFound?: boolean): Promise;
/**
* 将内容写入指定的文件
* @param path 要写入的文件路径
* @param data 要写入的文件数据
* @param overwrite 是否允许覆盖现有的目标
* @returns 如果写入成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
writeFile(path: string, data: string | Buffer, overwrite?: boolean): Promise;
/**
* 在指定文件末尾追加内容
* @param path 要创建的文件路径
* @param data 要写入的文件数据
*/
appendFile(path: string, data: string | Buffer): Promise;
/**
* 读取指定的 JSON 文件,如果文件不存在或解析失败则返回 `undefined`
* @param path 要读取的文件路径
*/
readJSON(path: string): Promise;
/**
* 写入指定的 JSON 文件
* @param path 要保存的文件路径
* @param data 要保存的 JSON 数据
*/
writeJSON(path: string, data: any): Promise;
/**
* 搜索指定文件
* @param path 要搜索的文件路径
* @param search 搜索的源
* @param limit 限制匹配的数目
*/
searchText(path: string, search: string | RegExp, limit?: number): Promise;
/**
* 搜索匹配的文件
* @param pattern 要搜索的通配符
* @param search 搜索的源
* @param baseDir 搜索的根目录
* @param limit 限制匹配的数目
* @param followLinks 是否展开链接,默认 `false`
*/
searchAllText(pattern: string, search: string | RegExp, baseDir?: string, limit?: number, followLinks?: boolean): Promise;
/**
* 替换指定文件
* @param path 要搜索的文件路径
* @param search 替换的源
* @param replacer 替换的目标
* @returns 返回是否已修改文件
*/
replaceText(path: string, search: string | RegExp, replacer: string | ((source: string, ...args: any[]) => string)): Promise;
/**
* 替换匹配的文件
* @param pattern 要搜索的通配符
* @param search 替换的源
* @param replacer 替换的目标
* @param baseDir 搜索的根目录
* @param followLinks 是否展开链接,默认 `false`
* @returns 返回受影响的文件数
*/
replaceAllText(pattern: string, search: string | RegExp, replacer: string | ((source: string, ...args: any[]) => string), baseDir?: string, followLinks?: boolean): Promise;
/**
* 创建一个软链接
* @param path 要创建的文件路径
* @param target 要链接的目标路径
* @param overwrite 是否覆盖已有的目标
* @returns 如果创建成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
createLink(path: string, target: string, overwrite?: boolean): Promise;
/**
* 读取软链接的实际地址
* @param path 要读取的软链接路径
*/
readLink(path: string): Promise;
/**
* 创建一个用于读取指定文件的流
* @param path 要读取的文件路径
* @param options 附加选项
*/
createReadStream(path: string, options?: Parameters[1]): import("fs").ReadStream;
/**
* 创建一个用于写入指定文件的流
* @param path 要读取的文件路径
* @param options 附加选项
*/
createWriteStream(path: string, options?: Parameters[1]): import("fs").WriteStream;
/**
* 复制指定的文件夹
* @param src 要复制的源路径
* @param dest 要复制的目标路径
* @param overwrite 是否覆盖已有的目标
* @param preserveLinks 是否保留链接
* @param ignore 忽略的通配符
* @returns 返回已复制的文件数
*/
copyDir(src: string, dest: string, overwrite?: boolean, preserveLinks?: boolean, ignore?: Pattern): Promise;
/**
* 复制指定的文件
* @param src 要复制的源路径
* @param dest 要复制的目标路径
* @param overwrite 是否覆盖已有的目标
* @returns 如果复制成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
copyFile(src: string, dest: string, overwrite?: boolean): Promise;
/**
* 复制指定的软链接
* @param src 要复制的源路径
* @param dest 要复制的目标路径
* @param overwrite 是否覆盖已有的目标
* @returns 如果复制成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
copyLink(src: string, dest: string, overwrite?: boolean): Promise;
/**
* 移动指定的文件夹
* @param src 要移动的源路径
* @param dest 要移动的目标路径
* @param overwrite 是否允许覆盖现有的目标
* @param preserveLinks 是否保留链接
*/
moveDir(src: string, dest: string, overwrite?: boolean, preserveLinks?: boolean): Promise;
/**
* 移动指定的文件
* @param src 要移动的源路径
* @param dest 要移动的目标路径
* @param overwrite 是否允许覆盖现有的目标
* @returns 如果移动成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
moveFile(src: string, dest: string, overwrite?: boolean): Promise;
/**
* 移动指定的软链接
* @param src 要移动的源路径
* @param dest 要移动的目标路径
* @param overwrite 是否允许覆盖现有的目标
* @returns 如果移动成功则返回 `true`,否则说明目标已存在,返回 `false`
*/
moveLink(src: string, dest: string, overwrite?: boolean): Promise;
/**
* 获取指定路径区分大小写的实际路径,如果地址不存在则返回 `null`
* @param path 原路径
*/
getRealPath(path: string): Promise;
}
/** 表示遍历文件或文件夹的选项 */
export interface WalkOptions {
/**
* 如果为 `true` 则软链接被解析为实际的路径,否则不解析软链接
* @default true
*/
follow?: boolean;
/**
* 处理错误的回调函数
* @param error 错误对象
* @param path 出现错误的路径
* @param stats 文件的属性
*/
error?(error: NodeJS.ErrnoException, path: string, stats?: Dirent | Stats): any;
/**
* 处理一个文件夹的回调函数,如果函数返回 `false` 则跳过遍历此文件夹
* @param path 当前文件夹的路径
* @param entries 当前文件夹下的所有项
* @param stats 文件的属性
*/
dir?(path: string, entries: Dirent[], stats?: Dirent | Stats): any;
/**
* 处理一个文件的回调函数
* @param path 当前文件的路径
* @param stats 文件的属性
*/
file?(path: string, stats?: Dirent | Stats): any;
/**
* 处理一个其它类型文件(如软链接)的回调函数
* @param path 当前文件的路径
* @param stats 文件的属性
*/
other?(path: string, stats: Dirent | Stats): any;
}
/** 表示一个搜索结果 */
export interface SearchTextResult {
/** 文件路径 */
path: string;
/** 文件中匹配结果的开始索引 */
start: number;
/** 文件中匹配结果的结束索引 */
end: number;
/** 文件源码 */
content: string;
}
/** 表示一个异步文件系统 */
export declare const fs: FileSystem;