Skip to content

Find a file or directory by walking up parent directories recursively. Zero dependency.

License

Notifications You must be signed in to change notification settings

exuanbo/look-it-up

Repository files navigation

look-it-up

Find a file or directory by walking up parent directories recursively. Zero dependency.

npm github workflow Codecov branch libera manifesto

Install

npm install look-it-up

Usage

import { existsSync } from 'fs'
import { join } from 'path'
import { lookItUp, lookItUpSync, exists } from 'look-it-up'

const contains = async (file, dir) => (await exists(join(dir, file))) ? dir : null
const containsSync = (file, dir) => existsSync(join(dir, file) ? dir : null

;(async () => {
  await lookItUp('.zshrc') //=> '~/.zshrc'

  await lookItUp(dir => containsSync('.zshrc', dir)) //=> '~'

  await lookItUp(async dir => await contains('.zshrc', dir)) //=> '~'
})()

lookItUpSync('.zshrc') //=> '~/.zshrc'

lookItUpSync(dir => containsSync('.zshrc', dir)) //=> '~'

API

declare type MatcherResult = string | null | symbol
declare type Matcher = string | ((dir: string) => MatcherResult | Promise<MatcherResult>)
declare type MatcherSync = string | ((dir: string) => MatcherResult)

declare const lookItUp: (matcher: Matcher, dir?: string) => Promise<string | null>

declare const lookItUpSync: (matcher: MatcherSync, dir?: string) => string | null | never

declare const exists: (path: string) => Promise<boolean>
declare const stop: unique symbol

export { exists, lookItUp, lookItUpSync, stop }

License

MIT License © 2021 Exuanbo