Full codebase including API server (32 modules + routes), dashboard frontend, DashCA certificate distribution, installer script, and deployment skills.
66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
/**
|
|
* Async File System Helpers for DashCaddy
|
|
* Replaces common sync patterns with async equivalents.
|
|
*/
|
|
|
|
const fsp = require('fs').promises;
|
|
const fs = require('fs');
|
|
|
|
/**
|
|
* Async file existence check (replaces fs.existsSync)
|
|
*/
|
|
async function exists(filePath) {
|
|
try {
|
|
await fsp.access(filePath);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Read and parse a JSON file with fallback (replaces existsSync + readFileSync + JSON.parse)
|
|
*/
|
|
async function readJsonFile(filePath, fallback = null) {
|
|
try {
|
|
const content = await fsp.readFile(filePath, 'utf8');
|
|
return JSON.parse(content);
|
|
} catch (e) {
|
|
if (e.code === 'ENOENT') return fallback;
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Write data as formatted JSON (replaces writeFileSync + JSON.stringify)
|
|
*/
|
|
async function writeJsonFile(filePath, data) {
|
|
await fsp.writeFile(filePath, JSON.stringify(data, null, 2), 'utf8');
|
|
}
|
|
|
|
/**
|
|
* Read a text file with fallback (replaces existsSync + readFileSync)
|
|
*/
|
|
async function readTextFile(filePath, fallback = '') {
|
|
try {
|
|
return await fsp.readFile(filePath, 'utf8');
|
|
} catch (e) {
|
|
if (e.code === 'ENOENT') return fallback;
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if path is accessible with given mode (replaces accessSync)
|
|
*/
|
|
async function isAccessible(filePath, mode = fs.constants.R_OK) {
|
|
try {
|
|
await fsp.access(filePath, mode);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
module.exports = { exists, readJsonFile, writeJsonFile, readTextFile, isAccessible };
|