std/fs/_is_subdir.ts
David Luis c0f87db914
refactor(fs): resolve directories when checking whether they are the same in isSubdir() (#5076)
refactor(fs): resolve directories when checking whether they are the same
2024-06-19 07:50:14 +10:00

35 lines
981 B
TypeScript

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// Copyright the Browserify authors. MIT License.
import { resolve } from "@std/path/resolve";
import { SEPARATOR } from "@std/path/constants";
import { toPathString } from "./_to_path_string.ts";
/**
* Checks whether `src` is a sub-directory of `dest`.
*
* @param src Source file path as a string or URL.
* @param dest Destination file path as a string or URL.
* @param sep Path separator. Defaults to `\\` for Windows and `/` for other
* platforms.
*
* @returns `true` if `src` is a sub-directory of `dest`, `false` otherwise.
*/
export function isSubdir(
src: string | URL,
dest: string | URL,
sep = SEPARATOR,
): boolean {
src = toPathString(src);
dest = toPathString(dest);
if (resolve(src) === resolve(dest)) {
return false;
}
const srcArray = src.split(sep);
const destArray = dest.split(sep);
return srcArray.every((current, i) => destArray[i] === current);
}