@contextjs/io
Version:
File system utilities for reading, writing, and inspecting files, directories, and paths.
56 lines (55 loc) • 2.12 kB
JavaScript
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;
}
}