Repository URL to install this package:
|
Version:
9.0.21-framework ▾
|
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const trash_1 = __importDefault(require("trash"));
const exotic_1 = require("exotic");
const path_1 = require("path");
const fs_1 = require("../deps/fs");
const log_1 = require("../log");
// @note, should be in config, .tmp
const cacheDir = path_1.resolve(__dirname, './split/');
const cacheManifestFileName = 'file-system-json-key-value-cache-manifest.json';
const cacheManifestFilePath = path_1.resolve(cacheDir, cacheManifestFileName);
function fromCacheKeyToFileName(key) {
const sanitizedKey = fs_1.fromStringToSanitizedFileName(key).replace('httpcachehttps', '');
return path_1.resolve(cacheDir, sanitizedKey) + '.json';
}
exports.fromCacheKeyToFileName = fromCacheKeyToFileName;
async function fromManifestToMap() {
// console.log('fromManifestToMap: reading manifest')
const manifest = await fs_1.readFileAsyncJson(cacheManifestFilePath);
const store = new Map();
let manifestFileLoadingList;
try {
manifestFileLoadingList = Object.keys(manifest).map(key => new Promise(async (done) => {
const fileName = manifest[key];
// const fileName = fromCacheKeyToFileName(key)
// console.log({ key, fileName })
try {
const entry = await fs_1.readFileAsyncJson(fileName);
store.set(key, entry);
}
catch (readException) {
console.error(readException);
}
finally {
done();
}
}));
}
catch (manifestException) {
console.error(manifestException);
}
// console.log('fromManifestToMap: awaiting')
const promises = Promise.all(manifestFileLoadingList);
await promises;
// console.log('fromManifestToMap: waited!!!')
return store;
}
// @note was writeMapToFile
async function writeMapToFiles(store) {
const obj = exotic_1.fromMapToObj(store);
const files = Object.keys(obj).map(key => new Promise(async (done) => {
const filePathForKey = fromCacheKeyToFileName(key);
// console.log(`[cache]{fs.json} saving: ${filePathForKey}`)
try {
await fs_1.writeFileAsyncJson(filePathForKey, obj[key]);
}
catch (fileTooLong) {
console.error('fix this. use redis');
console.error(fileTooLong);
}
finally {
done();
}
}));
const manifest = {};
Object.keys(obj).forEach(key => {
manifest[key] = fromCacheKeyToFileName(key);
});
await Promise.all(files);
// await writeFileAsyncJson(cacheManifestFilePath, manifest)
}
class FileSystemJsonKeyValueCache {
constructor() {
this.store = new Map();
}
async rehydrate() {
try {
log_1.logger.info('[cache]{fs.json} rehydrating');
await fs_1.ensureFile(cacheManifestFilePath);
log_1.logger.info('[cache] ensured manifest');
}
catch (ensureException) {
log_1.logger.error(ensureException);
}
// console.log('going to load manifest')
try {
this.store = await fromManifestToMap();
console.log('[cache]{rehydrate} loaded all manifest files');
}
catch (readException) {
console.log('[cache]{rehydrate} FAILED');
console.error(readException);
throw readException;
}
finally {
console.log('[cache]{rehydrate} FINALLY');
// console.log(this.store)
}
}
async get(key) {
const value = this.store.get(key);
log_1.logger.info(`[cache]{fs.json} has? ${this.store.has(key)}; get: ${key}`);
// @todo could get size of this instead
// logger.debug('[cache]{fs.json} get->value: ', value)
return Promise.resolve(value);
}
/**
* @todo debounce?
*/
async set(key, value, options = {}) {
log_1.logger.info('[cache]{fs.json} set: ' + key);
this.store.set(key, value);
await fs_1.ensureFile(cacheManifestFilePath);
await writeMapToFiles(this.store);
// logger.info('[cache] wrote manifest')
}
// @todo
async clear(shouldDeleteFiles = false) {
this.store.clear();
if (shouldDeleteFiles === true) {
trash_1.default(cacheDir);
}
}
}
exports.FileSystemJsonKeyValueCache = FileSystemJsonKeyValueCache;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZVN5c3RlbUpzb25LZXlWYWx1ZUNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0ZpbGVTeXN0ZW1Kc29uS2V5VmFsdWVDYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUF5QjtBQUN6QixtQ0FBbUQ7QUFDbkQsK0JBQThCO0FBQzlCLG1DQVFtQjtBQUNuQixnQ0FBK0I7QUFJL0IsbUNBQW1DO0FBQ25DLE1BQU0sUUFBUSxHQUFHLGNBQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7QUFDL0MsTUFBTSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQTtBQUM5RSxNQUFNLHFCQUFxQixHQUFHLGNBQU8sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtBQUV0RSxTQUFnQixzQkFBc0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sWUFBWSxHQUFHLGtDQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDN0QsZ0JBQWdCLEVBQ2hCLEVBQUUsQ0FDSCxDQUFBO0lBQ0QsT0FBTyxjQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQTtBQUNsRCxDQUFDO0FBTkQsd0RBTUM7QUFFRCxLQUFLLFVBQVUsaUJBQWlCO0lBQzlCLHFEQUFxRDtJQUNyRCxNQUFNLFFBQVEsR0FBRyxNQUFNLHNCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV2QixJQUFJLHVCQUF1QixDQUFBO0lBRTNCLElBQUk7UUFDRix1QkFBdUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FDakQsR0FBRyxDQUFDLEVBQUUsQ0FDSixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdB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