UNPKG

@visulima/find-cache-dir

Version:

Finds the common standard cache directory

75 lines (72 loc) 2.89 kB
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 };