Files
30-seconds-of-code/node_modules/@gatsbyjs/relay-compiler/lib/RelayCompilerCache.js
2019-08-20 15:52:05 +02:00

98 lines
2.4 KiB
JavaScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* strict-local
* @format
*/
'use strict';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var Profiler = require("./GraphQLCompilerProfiler");
var crypto = require("crypto");
var fs = require("fs");
var os = require("os");
var path = require("path");
/**
* A file backed cache. Values are JSON encoded on disk, so only JSON
* serializable values should be used.
*/
var RelayCompilerCache =
/*#__PURE__*/
function () {
/**
* @param name Human readable identifier for the cache
* @param cacheBreaker This should be changed in order to invalidate existing
* caches.
*/
function RelayCompilerCache(name, cacheBreaker) {
(0, _defineProperty2["default"])(this, "_dir", null);
this._name = name;
this._cacheBreaker = cacheBreaker;
}
var _proto = RelayCompilerCache.prototype;
_proto._getFile = function _getFile(key) {
if (this._dir == null) {
// Include username in the cache dir to avoid issues with directories being
// owned by a different user.
var username = os.userInfo().username;
var cacheID = crypto.createHash('md5').update(this._cacheBreaker).update(username).digest('hex');
var dir = path.join(os.tmpdir(), "".concat(this._name, "-").concat(cacheID));
if (!fs.existsSync(dir)) {
try {
fs.mkdirSync(dir);
} catch (error) {
if (error.code !== 'EEXIST') {
throw error;
}
}
}
this._dir = dir;
}
return path.join(this._dir, key);
};
_proto.getOrCompute = function getOrCompute(key, compute) {
var _this = this;
return Profiler.run('RelayCompilerCache.getOrCompute', function () {
var cacheFile = _this._getFile(key);
if (fs.existsSync(cacheFile)) {
try {
return JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
} catch (_unused) {// ignore
}
}
var value = compute();
try {
fs.writeFileSync(cacheFile, JSON.stringify(value), 'utf8');
} catch (_unused2) {// ignore
}
return value;
});
};
return RelayCompilerCache;
}();
module.exports = RelayCompilerCache;