Spaces:
Sleeping
Sleeping
import { join } from '@std/path'; | |
export function randomString(len: number) { | |
return [...crypto.getRandomValues(new Uint8Array(len))].map((x, i) => (i = x / 255 * 61 | 0, String.fromCharCode(i + (i > 9 ? i > 35 ? 61 : 55 : 48)))).join(''); | |
} | |
export async function getFilesInDirectory(dirPath: string): Promise<string[]> { | |
const files: string[] = []; | |
for await (const entry of Deno.readDir(dirPath)) { | |
if (entry.isFile) { | |
files.push(entry.name); | |
} | |
} | |
return files; | |
} | |
export async function getDirectoryStructureString( | |
dirPath: string, | |
indent: string = '', | |
maxDepth?: number, | |
currentDepth: number = 0, | |
): Promise<string> { | |
let structureString = ''; // Initialize the string to build | |
// Stop if maxDepth is defined and reached | |
if (maxDepth !== undefined && currentDepth > maxDepth) { | |
return ''; // Return empty string if max depth exceeded | |
} | |
try { | |
const entries = []; | |
for await (const entry of Deno.readDir(dirPath)) { | |
entries.push(entry); | |
} | |
// Sort entries alphabetically, directories first | |
entries.sort((a, b) => { | |
if (a.isDirectory && !b.isDirectory) return -1; | |
if (!a.isDirectory && b.isDirectory) return 1; | |
return a.name.localeCompare(b.name); | |
}); | |
for (let i = 0; i < entries.length; i++) { | |
const entry = entries[i]; | |
const isLast = i === entries.length - 1; | |
const marker = isLast ? 'βββ ' : 'βββ '; | |
const entryPath = join(dirPath, entry.name); | |
// Append the current entry line to the string | |
structureString += `${indent}${marker}${entry.name}${entry.isDirectory ? '/' : ''}\n`; // Add newline | |
if (entry.isDirectory) { | |
const nextIndent = indent + (isLast ? ' ' : 'β '); | |
// Await the recursive call and append its result string | |
const subStructure = await getDirectoryStructureString(entryPath, nextIndent, maxDepth, currentDepth + 1); | |
structureString += subStructure; | |
} | |
} | |
} catch (error) { | |
// Append error messages to the string instead of logging them directly | |
if (error instanceof Deno.errors.PermissionDenied) { | |
structureString += `${indent}βββ [Permission Denied for ${dirPath}]\n`; | |
} else if (error instanceof Deno.errors.NotFound) { | |
structureString += `${indent}βββ [Directory Not Found: ${dirPath}]\n`; | |
} else { | |
// Append a generic error message; you might still want to log the full error separately | |
structureString += `${indent}βββ [Error reading ${dirPath}]\n`; | |
console.error(`Error details during structure generation for ${dirPath}:`, error); // Optionally log full error | |
} | |
} | |
return structureString; // Return the accumulated string | |
} | |