"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findProjectRoot = exports.isLocalPath = void 0;
const findup_sync_1 = __importDefault(require("findup-sync"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
/**
 * Attempts to detect whether the string is a local path regardless of its
 * existence by checking its format. The point is to distinguish between
 * paths and modules on the npm registry. This will fail for non-existent
 * local Windows paths that begin with a drive letter, e.g. C:..\generator.js,
 * but will succeed for any existing files and any absolute paths.
 *
 * @param {String} str - string to check
 * @returns {Boolean} whether the string could be a path to a local file or directory
 */
function isLocalPath(str) {
    return path_1.default.isAbsolute(str) || /^\./.test(str) || fs_1.default.existsSync(str);
}
exports.isLocalPath = isLocalPath;
/**
 * Find the root directory path of a project.
 * @param {String} cwd - Any custom starting point to walk through directories
 * @returns {String} Absolute path of the project root.
 */
function findProjectRoot(cwd = process.cwd()) {
    const rootFilePath = findup_sync_1.default('package.json', { cwd });
    const projectRoot = path_1.default.dirname(rootFilePath);
    return projectRoot;
}
exports.findProjectRoot = findProjectRoot;
