korefile
Version:
File System API for Local/GitHub.
43 lines (40 loc) • 1.61 kB
text/typescript
import { KoreFileAdaptor } from "./KoreFileAdaptor";
import * as fs from "fs";
import * as path from "path";
import * as util from "util";
export interface FsAdaptorOptions {
cwd?: string;
}
export const createFsAdaptor = (options?: FsAdaptorOptions): KoreFileAdaptor => {
const readFile = util.promisify(fs.readFile);
const writeFile = util.promisify(fs.writeFile);
const unlinkFile = util.promisify(fs.unlink);
const mkdir = util.promisify(fs.mkdir);
const cwd = options && options.cwd ? options.cwd : process.cwd();
return {
readFile(filePath: string): Promise<string> {
return readFile(path.resolve(cwd, filePath), "utf-8");
},
async writeFile(filePath: string, content: string | Buffer): Promise<void> {
const resolvedFilePath = path.resolve(cwd, filePath);
const dir = path.dirname(resolvedFilePath);
await mkdir(dir, {
recursive: true
});
if (Buffer.isBuffer(content)) {
return writeFile(resolvedFilePath, content);
} else {
return writeFile(resolvedFilePath, content, "utf-8");
}
},
async writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise<void> {
const promises = files.map((file) => {
return this.writeFile(file.path, file.content);
});
await Promise.all(promises);
},
deleteFile(filePath: string): Promise<void> {
return unlinkFile(path.resolve(cwd, filePath));
}
};
};