@pitifulhawk/flash-up
Version:
Interactive project scaffolder for modern web applications
127 lines • 3.19 kB
JavaScript
import * as fs from 'fs/promises';
import * as path from 'path';
export async function pathExists(targetPath) {
try {
await fs.access(targetPath);
return true;
}
catch {
return false;
}
}
export async function isDirectory(targetPath) {
try {
const stats = await fs.stat(targetPath);
return stats.isDirectory();
}
catch {
return false;
}
}
export async function isDirectoryEmpty(dirPath) {
try {
const files = await fs.readdir(dirPath);
return files.length === 0;
}
catch {
return false;
}
}
export async function createDirectory(dirPath) {
try {
await fs.mkdir(dirPath, { recursive: true });
return {
success: true,
path: dirPath,
};
}
catch (error) {
return {
success: false,
error: error.message,
path: dirPath,
};
}
}
export async function copyFile(sourcePath, destPath, overwrite = false) {
try {
if (!overwrite && await pathExists(destPath)) {
return {
success: false,
error: 'Destination file already exists',
path: destPath,
};
}
const destDir = path.dirname(destPath);
await fs.mkdir(destDir, { recursive: true });
await fs.copyFile(sourcePath, destPath);
return {
success: true,
path: destPath,
};
}
catch (error) {
return {
success: false,
error: error.message,
path: destPath,
};
}
}
export async function readTextFile(filePath) {
try {
return await fs.readFile(filePath, 'utf-8');
}
catch {
return null;
}
}
export async function writeTextFile(filePath, content) {
try {
const dir = path.dirname(filePath);
await fs.mkdir(dir, { recursive: true });
await fs.writeFile(filePath, content, 'utf-8');
return {
success: true,
path: filePath,
};
}
catch (error) {
return {
success: false,
error: error.message,
path: filePath,
};
}
}
export async function readJsonFile(filePath) {
try {
const content = await fs.readFile(filePath, 'utf-8');
return JSON.parse(content);
}
catch {
return null;
}
}
export async function writeJsonFile(filePath, data, indent = 2) {
try {
const content = JSON.stringify(data, null, indent);
return await writeTextFile(filePath, content);
}
catch (error) {
return {
success: false,
error: error.message,
path: filePath,
};
}
}
export function getAbsolutePath(relativePath, basePath) {
return path.resolve(basePath || process.cwd(), relativePath);
}
export function isPathSafe(targetPath, basePath) {
const resolvedTarget = path.resolve(basePath, targetPath);
const resolvedBase = path.resolve(basePath);
return resolvedTarget.startsWith(resolvedBase);
}
//# sourceMappingURL=file-system.js.map