commitmnt
Version:
Copy your gitlab and bitbucket commits to a new, publishable github repo
62 lines • 3.42 kB
JavaScript
import crypto from 'crypto';
import path from 'path';
import fs from 'fs-extra';
/**
* Very simple cache class that uses the filesystem
*/
export class Cache {
dir;
/**
* @param baseDir the directory to create the .cache directory in
* @constructor
*/
constructor(baseDir = './') {
this.dir = path.resolve(baseDir, '.cache');
if (!fs.existsSync(this.dir)) {
fs.mkdirSync(this.dir, { recursive: true });
}
}
/**
* Gets a value from the cache
*
* @param key the cache key to lookup
* @template R the type of the return value
* @returns the value for `key` as json or null if key doesn't exist
*/
async get(key) {
const file = this.getPath(key);
if (!fs.existsSync(file))
return;
return fs.readJson(this.getPath(key), { throws: false });
}
/**
* Sets a value to the cache
*
* @param key the cache key to set the value at
* @param value the value to set
* @template R the type of the value
*/
async set(key, val) {
const file = this.getPath(key);
return fs.writeJson(file, val);
}
/**
* Gets the path to a file for a given key
*
* @param key the cache key to get the path for
* @returns the path
*/
getPath(key) {
return path.join(this.dir, this.hash(key));
}
/**
* Hashes a given key
*
* @param key the cache key to hash
* @returns the hashed key
*/
hash(key) {
return crypto.createHash('md5').update(key).digest('hex');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2NhY2hlL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFDaEIsR0FBRyxDQUFTO0lBRVo7OztPQUdHO0lBQ0gsWUFBWSxPQUFPLEdBQUcsSUFBSTtRQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFJLEdBQVc7UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRWpDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUksR0FBVyxFQUFFLEdBQU07UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxJQUFJLENBQUMsR0FBVztRQUN0QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0YifQ==