import { access, accessSync, constants, writeFile, writeFileSync } from "node:fs"; import { Err, Ok, Result } from "ts-results-es"; import { tryCatch } from "@swiss-army-knife/utilities"; import { IFileWriter } from "./i-file-writer.js"; import { IFileWriterOptions } from "./i-file-writer-options.js"; export class FileWriter implements IFileWriter { private __fileContents: string; private __filePath: string; public encoding: BufferEncoding; public constructor(filePath: string, fileContents: string, options: IFileWriterOptions = {}) { this.__fileContents = fileContents; this.__filePath = filePath; this.encoding = options.encoding || "utf8"; } public execute(): Promise> { return new Promise((resolve) => { access(this.__filePath, constants.F_OK, (error) => { if (error) return resolve(new Err(error)); writeFile(this.__filePath, this.__fileContents, { encoding: this.encoding }, (error) => { if (error) return resolve(new Err(error)); return resolve(new Ok(undefined)); }); }); }); } public executeSync(): Result { return tryCatch(() => { accessSync(this.__filePath, constants.F_OK); writeFileSync(this.__filePath, this.__fileContents, { encoding: this.encoding }); }); } };