cli-engine
Version:
Generic CLI Framework
43 lines (32 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// TODO: move to its own package
exports.default = class {
static async fetch(cachePath, cacheDuration, options) {
let cachePresent = await _fsExtra2.default.exists(cachePath);
if (cachePresent && !this._isStale(cachePath, cacheDuration)) {
return _fsExtra2.default.readJSON(cachePath);
}
const cache = await options.cacheFn();
// TODO: move this to a fork
await this._updateCache(cachePath, cache);
return cache;
}
static async _updateCache(cachePath, cache) {
await _fsExtra2.default.ensureFile(cachePath);
await _fsExtra2.default.writeJSON(cachePath, cache);
}
static _isStale(cachePath, cacheDuration) {
return this._mtime(cachePath).isBefore((0, _moment2.default)().subtract(cacheDuration, 'seconds'));
}
static _mtime(f) {
return (0, _moment2.default)(_fsExtra2.default.statSync(f).mtime);
}
};