File size: 956 Bytes
1f21206 | 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 | import * as path from 'node:path'
const registeredRoots = new Set<string>()
function normalizeComparablePath(filePath: string): string {
const resolved = path.resolve(filePath)
return process.platform === 'win32' ? resolved.toLowerCase() : resolved
}
function isWithinRoot(targetPath: string, rootPath: string): boolean {
const target = normalizeComparablePath(targetPath)
const root = normalizeComparablePath(rootPath)
return target === root || target.startsWith(`${root}${path.sep}`)
}
export function registerFilesystemAccessRoot(rootPath: string | null | undefined): void {
if (!rootPath) return
registeredRoots.add(path.resolve(rootPath))
}
export function isWithinRegisteredFilesystemRoot(targetPath: string): boolean {
for (const rootPath of registeredRoots) {
if (isWithinRoot(targetPath, rootPath)) return true
}
return false
}
export function clearFilesystemAccessRootsForTests(): void {
registeredRoots.clear()
}
|