|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 'use strict';
-
- const fs = require('fs');
- const hash = require('./hash');
- const path = require('path');
-
- /**
- * Return the cacheFile to be used by stylelint, based on whether the provided parameter is
- * a directory or looks like a directory (ends in `path.sep`), in which case the file
- * name will be `cacheFile/.cache_hashOfCWD`.
- *
- * If cacheFile points to a file or looks like a file, then it will just use that file.
- *
- * @param {string} cacheFile - The name of file to be used to store the cache
- * @param {string} cwd - Current working directory. Used for tests
- * @returns {string} Resolved path to the cache file
- */
- module.exports = function getCacheFile(cacheFile, cwd) {
- /*
- * Make sure path separators are normalized for environment/os.
- * Also, keep trailing path separator if present.
- */
- cacheFile = path.normalize(cacheFile);
-
- const resolvedCacheFile = path.resolve(cwd, cacheFile);
- // If the last character passed is a path separator, we assume is a directory.
- const looksLikeADirectory = cacheFile[cacheFile.length - 1] === path.sep;
-
- /**
- * Return the default cache file name when provided parameter is a directory.
- * @returns {string} - Resolved path to the cacheFile
- */
- function getCacheFileForDirectory() {
- return path.join(resolvedCacheFile, `.stylelintcache_${hash(cwd)}`);
- }
-
- let fileStats;
-
- try {
- fileStats = fs.lstatSync(resolvedCacheFile);
- } catch {
- fileStats = null;
- }
-
- if (looksLikeADirectory || (fileStats && fileStats.isDirectory())) {
- // Return path to provided directory with generated file name.
- return getCacheFileForDirectory();
- }
-
- // Return normalized path to cache file.
- return resolvedCacheFile;
- };
|