Roo-Code/packages/vscode-shim/src/utils/paths.ts
Chris Estreich b11d53adf4
VSCode shim + basic cli (#10452)
Co-authored-by: Roo Code <roomote@roocode.com>
2026-01-05 10:24:05 -08:00

89 lines
2.1 KiB
TypeScript

/**
* Path utilities for VSCode mock storage
*/
import * as fs from "fs"
import * as path from "path"
const STORAGE_BASE_DIR = ".vscode-mock"
/**
* Get the base storage directory
*/
function getBaseStorageDir(): string {
const homeDir = process.env.HOME || process.env.USERPROFILE || "."
return path.join(homeDir, STORAGE_BASE_DIR)
}
/**
* Hash a workspace path to create a unique directory name
*
* @param workspacePath - The workspace path to hash
* @returns A hexadecimal hash string
*/
export function hashWorkspacePath(workspacePath: string): string {
let hash = 0
for (let i = 0; i < workspacePath.length; i++) {
const char = workspacePath.charCodeAt(i)
hash = (hash << 5) - hash + char
hash = hash & hash // Convert to 32-bit integer
}
return Math.abs(hash).toString(16)
}
/**
* Ensure a directory exists, creating it if necessary
*
* @param dirPath - The directory path to ensure exists
*/
export function ensureDirectoryExists(dirPath: string): void {
try {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, { recursive: true })
}
} catch (error) {
console.warn(`Failed to create directory ${dirPath}:`, error)
}
}
/**
* Initialize workspace directories
*/
export function initializeWorkspace(workspacePath: string): void {
const dirs = [getGlobalStorageDir(), getWorkspaceStorageDir(workspacePath), getLogsDir()]
for (const dir of dirs) {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true })
}
}
}
/**
* Get global storage directory
*/
export function getGlobalStorageDir(): string {
return path.join(getBaseStorageDir(), "global-storage")
}
/**
* Get workspace-specific storage directory
*/
export function getWorkspaceStorageDir(workspacePath: string): string {
const hash = hashWorkspacePath(workspacePath)
return path.join(getBaseStorageDir(), "workspace-storage", hash)
}
/**
* Get logs directory
*/
export function getLogsDir(): string {
return path.join(getBaseStorageDir(), "logs")
}
export const VSCodeMockPaths = {
initializeWorkspace,
getGlobalStorageDir,
getWorkspaceStorageDir,
getLogsDir,
}