import {Service} from "@spring4js/container-node"; import path from "path"; import fs from "fs/promises"; @Service() export default class FileService { async makeDir(path: string): Promise { await fs.mkdir(path) } async exists(path: string): Promise { try { await fs.access(path, fs.constants.F_OK) return true } catch (err) { return false } } async deleteFile(filePath: string): Promise { await fs.unlink(filePath) }; async readFile(path: string): Promise { return await fs.readFile(path, {encoding: 'utf-8'}) } async writeFile(path: string, content: string) { await fs.writeFile(path, content, {encoding: 'utf-8'}); } async readJsonFromFile(path: string): Promise { const content = await fs.readFile(path, {encoding: 'utf-8'}) return JSON.parse(content) } async writeJsonToFile(path: string, data: T): Promise { const content = JSON.stringify(data, null, 2); await fs.writeFile(path, content, {encoding: 'utf-8'}); } async getJsonFileContentInDir(dir: string): Promise> { const tmpFiles = await fs.readdir(dir) const jsonFiles = tmpFiles.filter(nameWithExtension => nameWithExtension.endsWith('.json')); const contentMap: Record = {}; for (const file of jsonFiles) { const fullPath = path.resolve(dir, file) const content = await fs.readFile(fullPath, {encoding: 'utf-8'}) contentMap[file] = JSON.parse(content) } return contentMap; } }