123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- "use strict";
- var _fs = _interopRequireDefault(require("fs"));
- var _os = _interopRequireDefault(require("os"));
- var _path = require("path");
- var _util = require("util");
- var _zlib = _interopRequireDefault(require("zlib"));
- var _crypto = require("crypto");
- var _findCacheDir = _interopRequireDefault(require("find-cache-dir"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- let defaultCacheDirectory = null;
- const readFile = (0, _util.promisify)(_fs.default.readFile);
- const writeFile = (0, _util.promisify)(_fs.default.writeFile);
- const gunzip = (0, _util.promisify)(_zlib.default.gunzip);
- const gzip = (0, _util.promisify)(_zlib.default.gzip);
- const read = async (filename, compress) => {
- const data = await readFile(filename + (compress ? '.gz' : ''));
- const content = compress ? await gunzip(data) : data;
- return JSON.parse(content.toString());
- };
- const write = async (filename, compress, result) => {
- const content = JSON.stringify(result);
- const data = compress ? await gzip(content) : content;
- return writeFile(filename + (compress ? '.gz' : ''), data);
- };
- const filename = (source, identifier, options) => {
- const hash = (0, _crypto.createHash)('md4');
- const contents = JSON.stringify({
- source,
- options,
- identifier
- });
- hash.update(contents);
- return `${hash.digest('hex')}.json`;
- };
- const handleCache = async (directory, params) => {
- const {
- source,
- options = {},
- transform,
- cacheIdentifier,
- cacheDirectory,
- cacheCompression
- } = params;
- const file = (0, _path.join)(directory, filename(source, cacheIdentifier, options));
- try {
-
-
- return await read(file, cacheCompression);
- } catch (err) {}
- const fallback = typeof cacheDirectory !== 'string' && directory !== _os.default.tmpdir();
- try {
- _fs.default.mkdirSync(directory, {
- recursive: true
- });
- } catch (err) {
- if (fallback) {
- return handleCache(_os.default.tmpdir(), params);
- }
- throw err;
- }
-
- const result = await transform(source, options);
- try {
- await write(file, cacheCompression, result);
- } catch (err) {
- if (fallback) {
-
- return handleCache(_os.default.tmpdir(), params);
- }
- throw err;
- }
- return result;
- };
- module.exports = async params => {
- let directory;
- if (typeof params.cacheDirectory === 'string') {
- directory = params.cacheDirectory;
- } else {
- if (defaultCacheDirectory === null) {
- defaultCacheDirectory = (0, _findCacheDir.default)({
- name: 'eslint-loader'
- }) || _os.default.tmpdir();
- }
- directory = defaultCacheDirectory;
- }
- return handleCache(directory, params);
- };
|