BetterDiscordApp-rauenzi/preload/src/api/filesystem.js

73 lines
1.8 KiB
JavaScript

import * as fs from "fs";
import cloneObject from "common/clone";
import Logger from "common/logger";
export function readFile(path, options = "utf8") {
return fs.readFileSync(path, options);
}
export function writeFile(path, content, options) {
if (content instanceof Uint8Array) {
content = Buffer.from(content);
}
const doWriteFile = options?.originalFs ? __non_webpack_require__("original-fs").writeFileSync : fs.writeFileSync;
return doWriteFile(path, content, options);
}
export function readDirectory(path, options) {
return fs.readdirSync(path, options);
}
export function createDirectory(path, options) {
return fs.mkdirSync(path, options);
}
export function deleteDirectory(path, options) {
fs.rmdirSync(path, options);
}
export function exists(path) {
return fs.existsSync(path);
}
export function getRealPath(path, options) {
return fs.realpathSync(path, options);
}
export function rename(oldPath, newPath) {
return fs.renameSync(oldPath, newPath);
}
export function createWriteStream(path, options) {
return cloneObject(fs.createWriteStream(path, options));
}
export function watch(path, options, callback) {
const watcher = fs.watch(path, options, (event, filename) => {
try {
callback(event, filename);
}
catch (error) {
Logger.stacktrace("filesystem", "Failed to watch path", error);
}
});
return {
close: () => {
watcher.close();
}
};
}
export function getStats(path, options) {
const stats = fs.statSync(path, options);
return {
...stats,
isFile: stats.isFile.bind(stats),
isDirectory: stats.isDirectory.bind(stats),
isSymbolicLink: stats.isSymbolicLink.bind(stats)
};
}