memory-card
Version:
ES6 Map like Async API, with Swagger API Backend Support.
68 lines • 2.14 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { log, } from '../config.js';
import { StorageBackend, } from './backend.js';
class StorageFile extends StorageBackend {
absFileName;
constructor(name, options) {
log.verbose('StorageFile', 'constructor(%s, ...)', name);
options.type = 'file';
super(name, options);
options = options;
this.absFileName = path.isAbsolute(this.name)
? this.name
: path.resolve(process.cwd(), this.name);
if (!/\.memory-card\.json$/.test(this.absFileName)) {
this.absFileName += '.memory-card.json';
}
}
toString() {
const text = [
this.constructor.name,
'<',
this.absFileName,
'>',
].join('');
return text;
}
async load() {
log.verbose('StorageFile', 'load() from %s', this.absFileName);
if (!fs.existsSync(this.absFileName)) {
log.verbose('MemoryCard', 'load() file not exist, NOOP');
return {};
}
const buffer = await new Promise((resolve, reject) => fs.readFile(this.absFileName, (err, buf) => {
if (err) {
reject(err);
}
else {
resolve(buf);
}
}));
const text = buffer.toString();
let payload = {};
try {
payload = JSON.parse(text);
}
catch (e) {
log.error('MemoryCard', 'load() exception: %s', e);
}
return payload;
}
async save(payload) {
log.verbose('StorageFile', 'save() to %s', this.absFileName);
const text = JSON.stringify(payload);
await new Promise((resolve, reject) => {
fs.writeFile(this.absFileName, text, err => err ? reject(err) : resolve());
});
}
async destroy() {
log.verbose('StorageFile', 'destroy()');
if (fs.existsSync(this.absFileName)) {
fs.unlinkSync(this.absFileName);
}
}
}
export default StorageFile;
export { StorageFile, };
//# sourceMappingURL=file.js.map