UNPKG

new-find-package-json

Version:

Find the an package.json in the path provided upwards

109 lines 8.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findSync = exports.find = exports.findAsync = void 0; const path = require("path"); const fs_1 = require("fs"); const debug = require("debug"); const log = debug('new-find-package-json:main'); /** * Find "package.json" files, starting from "input" * @param input Input Path to start searching from * @param base Base path, combined with input to form an absolute path (default: `process.cwd()`) * @param fileName The filename to search for (default: `package.json`) */ async function* findAsync(input, base, fileName) { log(`findSync: called with "${input}" and "${base}" and "${fileName}"`); base = !!base ? base : ''; const useFileName = !!fileName ? fileName : 'package.json'; const useBase = !!base || path.isAbsolute(base) ? base : process.cwd(); let testPath = path.resolve(useBase, input); let wasRoot = false; while (testPath) { // Exectue search for "package.json" even on "/" | "C:" if (testPath === path.parse(testPath).root) { wasRoot = true; } const testFile = path.resolve(testPath, useFileName); log(`findSync: testing path "${testFile}"`); const result = await statPathAsync(testFile); if (!!result && result.isFile()) { log(`findSync: path exists and is file "${testFile}"`); yield testFile; log(`findSync: after yield`); } // stop looping after having searched root, because there is no more going up if (wasRoot) { break; } testPath = path.resolve(testPath, '..'); } } exports.findAsync = findAsync; exports.find = findAsync; /** * Find "package.json" files, starting from "input" * @param input Input Path to start searching from * @param base Base path, combined with input to form an absolute path (default: `process.cwd()`) * @param fileName The filename to search for (default: `package.json`) */ function* findSync(input, base, fileName) { log(`findSync: called with "${input}" and "${base}" and "${fileName}"`); base = !!base ? base : ''; const useFileName = !!fileName ? fileName : 'package.json'; const useBase = !!base || path.isAbsolute(base) ? base : process.cwd(); let testPath = path.resolve(useBase, input); let wasRoot = false; while (testPath) { // Exectue search for "package.json" even on "/" | "C:" if (testPath === path.parse(testPath).root) { wasRoot = true; } const testFile = path.resolve(testPath, useFileName); log(`findSync: testing path "${testFile}"`); const result = statPathSync(testFile); if (!!result && result.isFile()) { log(`findSync: path exists and is file "${testFile}"`); yield testFile; log(`findSync: after yield`); } // stop looping after having searched root, because there is no more going up if (wasRoot) { break; } testPath = path.resolve(testPath, '..'); } } exports.findSync = findSync; /** * Run "fs.promises.stat", but return "undefined" if error is "ENOENT" * follows symlinks * @param path The Path to Stat * @throws if the error is not "ENOENT" */ function statPathSync(path) { var _a; try { return (0, fs_1.statSync)(path); } catch (err) { if (err != undefined && err != null && ((_a = err) === null || _a === void 0 ? void 0 : _a.code) === 'ENOENT') { return undefined; // catch the error if the directory dosnt exist, without throwing an error } throw err; } } /** * Run "fs.promises.stat", but return "undefined" if error is "ENOENT" * follows symlinks * @param path The Path to Stat * @throws if the error is not "ENOENT" */ async function statPathAsync(path) { return fs_1.promises.stat(path).catch((err) => { if (err.code === 'ENOENT') { return undefined; // catch the error if the directory dosnt exist, without throwing an error } throw err; }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLDJCQUE2RDtBQUM3RCwrQkFBK0I7QUFFL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFFaEQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBYSxFQUFFLFFBQWlCO0lBQzlFLEdBQUcsQ0FBQywwQkFBMEIsS0FBSyxVQUFVLElBQUksVUFBVSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRXhFLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxQixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixPQUFPLFFBQVEsRUFBRTtRQUNmLHVEQUF1RDtRQUN2RCxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ2hCO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxD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