@visulima/find-cache-dir
Version:
Finds the common standard cache directory
75 lines (72 loc) • 2.89 kB
JavaScript
import { existsSync } from 'node:fs';
import { env, cwd } from 'node:process';
import { findUp, isAccessible, W_OK, findUpSync, isAccessibleSync, ensureDirSync } from '@visulima/fs';
import { NotFoundError } from '@visulima/fs/error';
import { join, dirname } from '@visulima/path';
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
const useDirectory = /* @__PURE__ */ __name((directory, options) => {
if (options?.create) {
ensureDirSync(directory);
}
return directory;
}, "useDirectory");
const findCacheDirectory = /* @__PURE__ */ __name(async (name, options) => {
if (env.CACHE_DIR && !["0", "1", "false", "true"].includes(env.CACHE_DIR)) {
return useDirectory(join(env.CACHE_DIR, name), options);
}
const rootDirectory = await findUp("package.json", {
cwd: options?.cwd ?? cwd(),
type: "file"
});
if (!rootDirectory) {
if (options?.throwError) {
throw new NotFoundError("No such file or directory found.");
}
return void 0;
}
const nodeModulesDirectory = join(dirname(rootDirectory), "node_modules");
const cacheDirectory = join(nodeModulesDirectory, ".cache");
const cacheNameDirectory = join(cacheDirectory, name);
if (existsSync(cacheNameDirectory) && !await isAccessible(cacheNameDirectory, W_OK)) {
return void 0;
}
if (existsSync(cacheDirectory) && !await isAccessible(cacheDirectory, W_OK)) {
return void 0;
}
if (existsSync(nodeModulesDirectory) && !await isAccessible(nodeModulesDirectory, W_OK)) {
return void 0;
}
return useDirectory(cacheNameDirectory, options);
}, "findCacheDirectory");
const findCacheDirectorySync = /* @__PURE__ */ __name((name, options) => {
if (env.CACHE_DIR && !["0", "1", "false", "true"].includes(env.CACHE_DIR)) {
return useDirectory(join(env.CACHE_DIR, name), options);
}
const rootDirectory = findUpSync("package.json", {
cwd: options?.cwd ?? cwd(),
type: "file"
});
if (!rootDirectory) {
if (options?.throwError) {
throw new NotFoundError("No such file or directory found.");
}
return void 0;
}
const nodeModulesDirectory = join(dirname(rootDirectory), "node_modules");
const cacheDirectory = join(nodeModulesDirectory, ".cache");
const cacheNameDirectory = join(cacheDirectory, name);
if (existsSync(cacheNameDirectory) && !isAccessibleSync(cacheNameDirectory, W_OK)) {
return void 0;
}
if (existsSync(cacheDirectory) && !isAccessibleSync(cacheDirectory, W_OK)) {
return void 0;
}
if (existsSync(nodeModulesDirectory) && !isAccessibleSync(nodeModulesDirectory, W_OK)) {
return void 0;
}
return useDirectory(cacheNameDirectory, options);
}, "findCacheDirectorySync");
const findCacheDir = findCacheDirectory;
const findCacheDirSync = findCacheDirectorySync;
export { findCacheDir, findCacheDirSync };