1234567891011121314151617181920212223242526272829303132333435363738 |
- 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;
|