UNPKG

@visulima/package

Version:

One Package to rule them all, finds your root-dir, monorepo, or package manager.

68 lines (63 loc) 2.05 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const node_fs = require('node:fs'); const fs = require('@visulima/fs'); const path = require('@visulima/path'); const packageManager = require('./package-manager.cjs'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); const packageJsonMatcher = /* @__PURE__ */ __name((directory) => { if (node_fs.existsSync(path.join(directory, "package.json"))) { const packageJson = fs.readJsonSync(path.join(directory, "package.json")); if (packageJson.name && packageJson.private !== true) { return "package.json"; } } return void 0; }, "packageJsonMatcher"); const findPackageRoot = /* @__PURE__ */ __name(async (cwd) => { try { const lockFile = await packageManager.findLockFile(cwd); return path.dirname(lockFile); } catch { } const gitConfig = await fs.findUp(".git/config", { ...cwd && { cwd }, type: "file" }); if (gitConfig) { return path.dirname(path.dirname(gitConfig)); } const filePath = await fs.findUp(packageJsonMatcher, { ...cwd && { cwd }, type: "file" }); if (filePath) { return path.dirname(filePath); } throw new Error("Could not find root directory"); }, "findPackageRoot"); const findPackageRootSync = /* @__PURE__ */ __name((cwd) => { try { const lockFile = packageManager.findLockFileSync(cwd); return path.dirname(lockFile); } catch { } const gitConfig = fs.findUpSync(".git/config", { ...cwd && { cwd }, type: "file" }); if (gitConfig) { return path.dirname(path.dirname(gitConfig)); } const filePath = fs.findUpSync(packageJsonMatcher, { ...cwd && { cwd }, type: "file" }); if (filePath) { return path.dirname(filePath); } throw new Error("Could not find root directory"); }, "findPackageRootSync"); exports.findPackageRoot = findPackageRoot; exports.findPackageRootSync = findPackageRootSync;