UNPKG

@contextjs/io

Version:

File system utilities for reading, writing, and inspecting files, directories, and paths.

56 lines (55 loc) 2.12 kB
import { Throw } from "@contextjs/system"; import { mkdirSync, readdirSync, renameSync, rmSync, statSync } from "node:fs"; import path from "node:path"; import { DirectoryExistsException } from "../exceptions/directory-exists.exception.js"; import { PathNotFoundException } from "../exceptions/path-not-found.exception.js"; import { Path } from "./path.js"; export class Directory { static create(directory) { Throw.ifNullOrWhiteSpace(directory); if (Path.exists(directory)) return false; mkdirSync(directory, { recursive: true }); return true; } static rename(oldDirectory, newDirectory) { Throw.ifNullOrWhiteSpace(oldDirectory); Throw.ifNullOrWhiteSpace(newDirectory); if (!Directory.exists(oldDirectory)) throw new PathNotFoundException(oldDirectory); if (Path.exists(newDirectory)) throw new DirectoryExistsException(newDirectory); renameSync(oldDirectory, newDirectory); return true; } static delete(directory) { Throw.ifNullOrWhiteSpace(directory); if (!Path.exists(directory)) return true; rmSync(directory, { recursive: true }); return true; } static exists(directory) { Throw.ifNullOrWhiteSpace(directory); return Path.isDirectory(directory); } static isEmpty(directory) { if (!Path.isDirectory(directory)) throw new PathNotFoundException(directory); return readdirSync(directory).length === 0; } static listFiles(directory, recursive = false) { if (!Path.isDirectory(directory)) throw new PathNotFoundException(directory); const result = []; for (const entry of readdirSync(directory)) { const fullPath = path.join(directory, entry); const stat = statSync(fullPath); if (stat.isFile()) result.push(fullPath); else if (stat.isDirectory() && recursive) result.push(...Directory.listFiles(fullPath, true)); } return result; } }