UNPKG

memory-card

Version:

ES6 Map like Async API, with Swagger API Backend Support.

68 lines 2.14 kB
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