Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / dist / cache / FileSystemJsonKeyValueCache.js
Size: Mime:
"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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