42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
const WINDOWS_APPDATA_SEGMENTS = ["\\appdata\\local", "\\appdata\\roaming", "\\appdata\\locallow"]
|
|
|
|
function normalizeWindowsPath(directory: string): string {
|
|
return directory.replaceAll("/", "\\").toLowerCase()
|
|
}
|
|
|
|
export function isWindowsAppDataDirectory(directory: string): boolean {
|
|
const normalizedDirectory = normalizeWindowsPath(directory)
|
|
return WINDOWS_APPDATA_SEGMENTS.some((segment) => {
|
|
return normalizedDirectory.endsWith(segment) || normalizedDirectory.includes(`${segment}\\`)
|
|
})
|
|
}
|
|
|
|
export function resolveSessionDirectory(options: {
|
|
parentDirectory: string | null | undefined
|
|
fallbackDirectory: string
|
|
platform?: NodeJS.Platform
|
|
currentWorkingDirectory?: string
|
|
}): string {
|
|
const {
|
|
parentDirectory,
|
|
fallbackDirectory,
|
|
platform = process.platform,
|
|
currentWorkingDirectory = process.cwd(),
|
|
} = options
|
|
|
|
const sessionDirectory = parentDirectory ?? fallbackDirectory
|
|
if (platform !== "win32") {
|
|
return sessionDirectory
|
|
}
|
|
|
|
if (!isWindowsAppDataDirectory(sessionDirectory)) {
|
|
return sessionDirectory
|
|
}
|
|
|
|
if (isWindowsAppDataDirectory(currentWorkingDirectory)) {
|
|
return sessionDirectory
|
|
}
|
|
|
|
return currentWorkingDirectory
|
|
}
|