const fs = require('graceful-fs');
|
|
const promisify = require('./util/promisify');
|
|
const fsReadFile = promisify(fs.readFile, { context: fs });
|
const fsWriteFile = promisify(fs.writeFile, { context: fs });
|
|
class JsonSerializer {
|
constructor({ cacheDirPath }) {
|
this.path = cacheDirPath;
|
if (!/\.json$/.test(this.path)) {
|
this.path += '.json';
|
}
|
}
|
|
read() {
|
const cacheDirPath = this.path;
|
return fsReadFile(cacheDirPath, 'utf8')
|
.catch(() => '{}')
|
.then(JSON.parse);
|
}
|
|
write(moduleOps) {
|
const cacheDirPath = this.path;
|
return this.read()
|
.then(cache => {
|
for (let i = 0; i < moduleOps.length; i++) {
|
const op = moduleOps[i];
|
cache[op.key] = op.value;
|
}
|
return cache;
|
})
|
.then(JSON.stringify)
|
.then(cache => fsWriteFile(cacheDirPath, cache));
|
}
|
}
|
|
module.exports = JsonSerializer;
|