From ae2d5b072da1bb8a662189d98159e18f54f78794 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sun, 7 Jul 2024 15:44:20 -0700 Subject: [PATCH] remove find-up to remove six dependencies --- packages/find-root/package.json | 1 - packages/find-root/src/index.ts | 48 +++++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/packages/find-root/package.json b/packages/find-root/package.json index 6753b08..78f320b 100644 --- a/packages/find-root/package.json +++ b/packages/find-root/package.json @@ -11,7 +11,6 @@ "module": "dist/manypkg-find-root.esm.js", "dependencies": { "@manypkg/tools": "^1.1.1", - "find-up": "^4.1.0", "fs-extra": "^8.1.0" }, "devDependencies": { diff --git a/packages/find-root/src/index.ts b/packages/find-root/src/index.ts index 072138d..5ce56f2 100644 --- a/packages/find-root/src/index.ts +++ b/packages/find-root/src/index.ts @@ -1,6 +1,6 @@ -import findUp, { sync as findUpSync } from "find-up"; import path from "path"; import fs from "fs-extra"; +import fsp from "fs/promises"; import { Tool, @@ -98,7 +98,7 @@ export async function findRoot( } }); }, - { cwd, type: "directory" } + cwd ); if (monorepoRoot) { @@ -123,7 +123,7 @@ export async function findRoot( } } }, - { cwd, type: "directory" } + cwd ); if (!rootDir) { @@ -158,7 +158,7 @@ export function findRootSync( } } }, - { cwd, type: "directory" } + cwd ); if (monorepoRoot) { @@ -177,7 +177,7 @@ export function findRootSync( const exists = fs.existsSync(path.join(directory, "package.json")); return exists ? directory : undefined; }, - { cwd, type: "directory" } + cwd ); if (!rootDir) { @@ -189,3 +189,41 @@ export function findRootSync( rootDir, }; } + +export async function findUp(matcher: (directory: string) => Promise, cwd = process.cwd()) { + let directory = path.resolve(cwd); + const { root } = path.parse(directory); + + while (directory && directory !== root) { + const filePath = await matcher(directory); + + if (filePath) { + return path.resolve(directory, filePath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +} + +export function findUpSync(matcher: (directory: string) => string | undefined, cwd = process.cwd()) { + let directory = path.resolve(cwd); + const { root } = path.parse(directory); + + while (directory && directory !== root) { + const filePath = matcher(directory); + + if (filePath) { + return path.resolve(directory, filePath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +}