/
_util.ts
72 lines (66 loc) · 1.75 KB
/
_util.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import * as path from "../path/mod.ts";
import { basename, normalize } 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);
return srcArray.every((current, i) => destArray[i] === current);
}
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;
}
export interface WalkEntry extends Deno.DirEntry {
path: string;
}
/** Create WalkEntry for the `path` synchronously */
export function createWalkEntrySync(path: string): WalkEntry {
path = normalize(path);
const name = basename(path);
const info = Deno.statSync(path);
return {
path,
name,
isFile: info.isFile,
isDirectory: info.isDirectory,
isSymlink: info.isSymlink,
};
}
/** Create WalkEntry for the `path` asynchronously */
export async function createWalkEntry(path: string): Promise<WalkEntry> {
path = normalize(path);
const name = basename(path);
const info = await Deno.stat(path);
return {
path,
name,
isFile: info.isFile,
isDirectory: info.isDirectory,
isSymlink: info.isSymlink,
};
}