@visulima/package
Version:
One Package to rule them all, finds your root-dir, monorepo, or package manager.
68 lines (63 loc) • 2.05 kB
JavaScript
;
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;