diff options
Diffstat (limited to 'std/fs/utils.ts')
-rw-r--r-- | std/fs/utils.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/std/fs/utils.ts b/std/fs/utils.ts new file mode 100644 index 000000000..f644f4869 --- /dev/null +++ b/std/fs/utils.ts @@ -0,0 +1,45 @@ +import * as path from "./path/mod.ts"; + +/** + * Test whether or not `dest` is a sub-directory of `src` + * @param src src file path + * @param dest dest file path + * @param sep path separator + */ +export function isSubdir( + src: string, + dest: string, + sep: string = path.sep +): boolean { + if (src === dest) { + return false; + } + const srcArray = src.split(sep); + const destArray = dest.split(sep); + // see: https://github.com/Microsoft/TypeScript/issues/30821 + return srcArray.reduce( + // @ts-ignore + (acc: true, current: string, i: number): boolean => { + return acc && destArray[i] === current; + }, + true + ); +} + +export type PathType = "file" | "dir" | "symlink"; + +/** + * Get a human readable file type string. + * + * @param fileInfo A FileInfo describes a file and is returned by `stat`, + * `lstat` + */ +export function getFileInfoType(fileInfo: Deno.FileInfo): PathType | undefined { + return fileInfo.isFile() + ? "file" + : fileInfo.isDirectory() + ? "dir" + : fileInfo.isSymlink() + ? "symlink" + : undefined; +} |