nodejs-file-utils
Version:
File Read and Write Apis with Cached content in NodeJs
60 lines (59 loc) • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.saveFileStore = exports.updateFileStore = exports.readFileStore = void 0;
var tslib_1 = require("tslib");
var lodash_1 = require("lodash");
var path_1 = require("path");
var readPromises = {};
var dataMap = {};
var readFileStore = function (path, reader, force) {
if (force === void 0) { force = false; }
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var normalizedPath, data, e_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
normalizedPath = (0, path_1.normalize)(path);
if (!(!dataMap[normalizedPath] || force)) return [3 /*break*/, 4];
if (!readPromises[normalizedPath] || force) {
readPromises[normalizedPath] = reader(normalizedPath);
}
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, readPromises[normalizedPath]];
case 2:
data = _a.sent();
dataMap[normalizedPath] = data;
return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
delete readPromises[normalizedPath];
throw e_1;
case 4: return [2 /*return*/, (0, lodash_1.cloneDeep)(dataMap[normalizedPath])];
}
});
});
};
exports.readFileStore = readFileStore;
var updateFileStore = function (path, data) {
var normalizedPath = (0, path_1.normalize)(path);
dataMap[normalizedPath] = (0, lodash_1.cloneDeep)(data);
};
exports.updateFileStore = updateFileStore;
var saveFileStore = function (path, writer) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var normalizedPath;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
normalizedPath = (0, path_1.normalize)(path);
if (!dataMap[normalizedPath]) return [3 /*break*/, 2];
return [4 /*yield*/, writer(normalizedPath, dataMap[normalizedPath])];
case 1:
_a.sent();
_a.label = 2;
case 2: return [2 /*return*/];
}
});
}); };
exports.saveFileStore = saveFileStore;