2022-04-15 15:19:05 +00:00
|
|
|
import { execSync } from 'node:child_process'
|
|
|
|
import { existsSync } from 'node:fs'
|
2021-10-29 08:41:04 +00:00
|
|
|
import { resolve } from 'pathe'
|
|
|
|
import { findup } from './fs'
|
|
|
|
|
|
|
|
export const packageManagerLocks = {
|
|
|
|
yarn: 'yarn.lock',
|
|
|
|
npm: 'package-lock.json',
|
|
|
|
pnpm: 'pnpm-lock.yaml'
|
|
|
|
}
|
|
|
|
|
2022-08-26 15:47:29 +00:00
|
|
|
type PackageManager = keyof typeof packageManagerLocks
|
|
|
|
|
2021-10-29 08:41:04 +00:00
|
|
|
export function getPackageManager (rootDir: string) {
|
|
|
|
return findup(rootDir, (dir) => {
|
|
|
|
for (const name in packageManagerLocks) {
|
2022-08-26 15:47:29 +00:00
|
|
|
const path = packageManagerLocks[name as PackageManager]
|
|
|
|
if (path && existsSync(resolve(dir, path))) {
|
2021-10-29 08:41:04 +00:00
|
|
|
return name
|
|
|
|
}
|
|
|
|
}
|
2022-08-26 15:47:29 +00:00
|
|
|
}) as PackageManager | null
|
2021-10-29 08:41:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export function getPackageManagerVersion (name: string) {
|
|
|
|
return execSync(`${name} --version`).toString('utf8').trim()
|
|
|
|
}
|