29 lines
806 B
JavaScript
29 lines
806 B
JavaScript
|
const fs = require("graceful-fs");
|
||
|
const Base = require("lowdb/adapters/Base");
|
||
|
const { sync: writeFileAtomicSync } = require("write-file-atomic");
|
||
|
|
||
|
class FileSyncAtomic extends Base {
|
||
|
read() {
|
||
|
if (fs.existsSync(this.source)) {
|
||
|
try {
|
||
|
const data = fs.readFileSync(this.source, "utf-8").trim();
|
||
|
return data ? this.deserialize(data) : this.defaultValue;
|
||
|
} catch (e) {
|
||
|
if (e instanceof SyntaxError) {
|
||
|
e.message = `Malformed JSON in file: ${this.source}\n${e.message}`;
|
||
|
}
|
||
|
throw e;
|
||
|
}
|
||
|
} else {
|
||
|
writeFileAtomicSync(this.source, this.serialize(this.defaultValue));
|
||
|
return this.defaultValue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
write(data) {
|
||
|
return writeFileAtomicSync(this.source, this.serialize(data));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = FileSyncAtomic;
|