FS: Don't crash if config doesn't exist

QOL. Also, if we _do_ want to export this as a module, we need this to not crash if Config doesn't exist.
This commit is contained in:
Mia 2021-05-30 12:20:51 -05:00
parent 652bbb1064
commit 48ce5d720f

View File

@ -36,7 +36,9 @@ interface PendingUpdate {
}
declare const __fsState: {pendingUpdates: Map<string, PendingUpdate>};
declare const global: {__fsState: typeof __fsState};
// config needs to be declared here since we access it as global.Config?.nofswriting
// (so we can use it without the global)
declare const global: {__fsState: typeof __fsState, Config: any};
if (!global.__fsState) {
global.__fsState = {
pendingUpdates: new Map(),
@ -115,7 +117,7 @@ export class FSPath {
}
write(data: string | Buffer, options: AnyObject = {}) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.writeFile(this.path, data, options, err => {
err ? reject(err) : resolve();
@ -124,7 +126,7 @@ export class FSPath {
}
writeSync(data: string | Buffer, options: AnyObject = {}) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.writeFileSync(this.path, data, options);
}
@ -157,7 +159,7 @@ export class FSPath {
* with synchronous code; just use `safeWriteSync`.
*/
writeUpdate(dataFetcher: () => string | Buffer, options: AnyObject = {}) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
const pendingUpdate: PendingUpdate | undefined = __fsState.pendingUpdates.get(this.path);
const throttleTime = options.throttle ? Date.now() + options.throttle : 0;
@ -230,7 +232,7 @@ export class FSPath {
}
append(data: string | Buffer, options: AnyObject = {}) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.appendFile(this.path, data, options, err => {
err ? reject(err) : resolve();
@ -239,12 +241,12 @@ export class FSPath {
}
appendSync(data: string | Buffer, options: AnyObject = {}) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.appendFileSync(this.path, data, options);
}
symlinkTo(target: string) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.symlink(target, this.path, err => {
err ? reject(err) : resolve();
@ -253,12 +255,12 @@ export class FSPath {
}
symlinkToSync(target: string) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.symlinkSync(target, this.path);
}
copyFile(dest: string) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.copyFile(this.path, dest, err => {
err ? reject(err) : resolve();
@ -267,7 +269,7 @@ export class FSPath {
}
rename(target: string) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.rename(this.path, target, err => {
err ? reject(err) : resolve();
@ -276,7 +278,7 @@ export class FSPath {
}
renameSync(target: string) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.renameSync(this.path, target);
}
@ -297,7 +299,7 @@ export class FSPath {
}
createWriteStream(options = {}): WriteStream {
if (Config.nofswriting) {
if (global.Config?.nofswriting) {
// @ts-ignore
return new WriteStream({write() {}});
}
@ -306,7 +308,7 @@ export class FSPath {
}
createAppendStream(options = {}): WriteStream {
if (Config.nofswriting) {
if (global.Config?.nofswriting) {
// @ts-ignore
return new WriteStream({write() {}});
}
@ -317,7 +319,7 @@ export class FSPath {
}
unlinkIfExists() {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.unlink(this.path, err => {
if (err && err.code === 'ENOENT') return resolve();
@ -327,7 +329,7 @@ export class FSPath {
}
unlinkIfExistsSync() {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
try {
fs.unlinkSync(this.path);
} catch (err) {
@ -336,7 +338,7 @@ export class FSPath {
}
async rmdir(recursive?: boolean) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.rmdir(this.path, {recursive}, err => {
err ? reject(err) : resolve();
@ -345,12 +347,12 @@ export class FSPath {
}
rmdirSync(recursive?: boolean) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.rmdirSync(this.path, {recursive});
}
mkdir(mode: string | number = 0o755) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.mkdir(this.path, mode, err => {
err ? reject(err) : resolve();
@ -359,12 +361,12 @@ export class FSPath {
}
mkdirSync(mode: string | number = 0o755) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
return fs.mkdirSync(this.path, mode);
}
mkdirIfNonexistent(mode: string | number = 0o755) {
if (Config.nofswriting) return Promise.resolve();
if (global.Config?.nofswriting) return Promise.resolve();
return new Promise<void>((resolve, reject) => {
fs.mkdir(this.path, mode, err => {
if (err && err.code === 'EEXIST') return resolve();
@ -374,7 +376,7 @@ export class FSPath {
}
mkdirIfNonexistentSync(mode: string | number = 0o755) {
if (Config.nofswriting) return;
if (global.Config?.nofswriting) return;
try {
fs.mkdirSync(this.path, mode);
} catch (err) {