import * as path from 'path'; import { existsSync, realpathSync } from 'fs'; export function findUp(names: string | string[], from: string, stopOnNodeModules = false) { if (!Array.isArray(names)) { names = [names]; } const root = path.parse(from).root; let currentDir = from; while (currentDir && currentDir !== root) { for (const name of names) { const p = path.join(currentDir, name); if (existsSync(p)) { return realpathSync(p); } } if (stopOnNodeModules) { const nodeModuleP = path.join(currentDir, 'node_modules'); if (existsSync(nodeModuleP)) { return null; } } currentDir = path.dirname(currentDir); } return null; }