Home / Function/ packageManagerForBase() — tailwindcss Function Reference

packageManagerForBase() — tailwindcss Function Reference

Architecture documentation for the packageManagerForBase() function in packages.ts from the tailwindcss codebase.

Entity Profile

Dependency Diagram

graph TD
  55f60f61_13cf_1b64_3900_3839b19ba413["packageManagerForBase()"]
  6403ca00_0447_9313_3bb5_f9ea44ca2dbb["packages.ts"]
  55f60f61_13cf_1b64_3900_3839b19ba413 -->|defined in| 6403ca00_0447_9313_3bb5_f9ea44ca2dbb
  e019b578_e34e_650f_6c6e_85cd4f4dbeb8["warn()"]
  55f60f61_13cf_1b64_3900_3839b19ba413 -->|calls| e019b578_e34e_650f_6c6e_85cd4f4dbeb8
  style 55f60f61_13cf_1b64_3900_3839b19ba413 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/@tailwindcss-upgrade/src/utils/packages.ts lines 77–138

let packageManagerForBase = new DefaultMap(async (base) => {
  do {
    // 1. Check package.json for a `packageManager` field
    let packageJsonPath = resolve(base, 'package.json')
    try {
      let packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8')
      let packageJson = JSON.parse(packageJsonContent)
      if (packageJson.packageManager) {
        if (packageJson.packageManager.includes('bun')) {
          return 'bun'
        }
        if (packageJson.packageManager.includes('yarn')) {
          return 'yarn'
        }
        if (packageJson.packageManager.includes('pnpm')) {
          return 'pnpm'
        }
        if (packageJson.packageManager.includes('npm')) {
          return 'npm'
        }
      }
    } catch {}

    // 2. Check for common lockfiles
    try {
      await fs.access(resolve(base, 'bun.lockb'))
      return 'bun'
    } catch {}
    try {
      await fs.access(resolve(base, 'bun.lock'))
      return 'bun'
    } catch {}
    try {
      await fs.access(resolve(base, 'pnpm-lock.yaml'))
      return 'pnpm'
    } catch {}

    try {
      await fs.access(resolve(base, 'yarn.lock'))
      return 'yarn'
    } catch {}

    try {
      await fs.access(resolve(base, 'package-lock.json'))
      return 'npm'
    } catch {}

    // 3. If no lockfile is found, we might be in a monorepo
    let previousBase = base
    base = dirname(base)

    // Already at the root
    if (previousBase === base) {
      if (!didWarnAboutPackageManager) {
        didWarnAboutPackageManager = true
        warn('Could not detect a package manager. Please manually update `tailwindcss` to v4.')
      }

      return Promise.reject('No package manager detected')
    }
  } while (true)
})

Subdomains

Calls

Frequently Asked Questions

What does packageManagerForBase() do?
packageManagerForBase() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/utils/packages.ts.
Where is packageManagerForBase() defined?
packageManagerForBase() is defined in packages/@tailwindcss-upgrade/src/utils/packages.ts at line 77.
What does packageManagerForBase() call?
packageManagerForBase() calls 1 function(s): warn.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free