kathairo
Version:
A CLI utility for processing USFM.
68 lines (53 loc) • 1.67 kB
JavaScript
import { readFile, writeFile, stat, readdir } from 'fs/promises';
import path from "path";
import { log } from "./logger.js";
async function isDirectory(path) {
try {
const result = await stat(path);
return result.isDirectory();
} catch (e) {
log('error', e.message);
return false;
}
}
async function isFile(path, quiet) {
try {
const result = await stat(path);
return result.isFile();
} catch (e) {
log.error(e.message);
return false;
}
}
async function loadFile(filePath) {
return { path: filePath, content: await readFile(filePath) };
}
async function loadDirectory(directoryPath, quiet) {
log('info', `Processing directory: ${directoryPath}`);
const directoryFilePaths = await readdir(directoryPath)
log('info', directoryFilePaths);
const contentPromises = directoryFilePaths.map(async directoryFilePath => {
const fullPath = path.join(directoryPath, directoryFilePath);
if (await isFile(fullPath)) {
return await loadFile(fullPath);
}
});
const contents = await Promise.all(contentPromises);
return contents.filter(content => content);
}
export async function createFile(destination, data) {
return await writeFile(destination, data);
}
export async function loadContent(path, quiet) {
if (await isFile(path, quiet)) {
return [await loadFile(path, quiet)]
}
if (await isDirectory(path, quiet)) {
return await loadDirectory(path, quiet);
}
};
export async function getVersion() {
const packageJsonText = await readFile(new URL('../package.json', import.meta.url), 'utf8');
const packageJson = JSON.parse(packageJsonText);
return packageJson.version;
}