mtcute/packages/create-bot/src/package-manager.ts

71 lines
1.8 KiB
TypeScript
Raw Normal View History

export enum PackageManager {
Npm = 'npm',
Yarn = 'yarn',
Pnpm = 'pnpm',
Bun = 'bun',
}
export function getPackageManager(): PackageManager {
const userAgent = process.env.npm_config_user_agent
if (!userAgent) {
return PackageManager.Pnpm // fall back to the most based one
}
const name = userAgent.split('/')[0]
switch (name) {
case 'pnpm':
return PackageManager.Pnpm
case 'yarn':
return PackageManager.Yarn
case 'npm':
return PackageManager.Npm
case 'bun':
return PackageManager.Bun
default:
throw new Error(`Unsupported package manager: ${name}`)
}
}
export function getInstallCommand(params: { mgr: PackageManager; packages: string[]; dev?: boolean }): string[] {
const { mgr, packages, dev } = params
const exec: string[] = [mgr]
switch (mgr) {
case PackageManager.Npm:
exec.push('install', dev ? '--save-dev' : '--save')
break
case PackageManager.Yarn:
exec.push('add')
if (dev) exec.push('-D')
break
case PackageManager.Pnpm:
exec.push('add')
if (dev) exec.push('--save-dev')
break
case PackageManager.Bun:
exec.push('add')
if (dev) exec.push('-D')
break
}
exec.push(...packages)
return exec
}
export function getExecCommand(mgr: PackageManager, ...cmd: string[]) {
switch (mgr) {
case PackageManager.Npm:
return ['npx', ...cmd]
case PackageManager.Yarn:
return ['yarn', ...cmd]
case PackageManager.Pnpm:
return ['pnpm', 'exec', ...cmd]
case PackageManager.Bun:
return ['bun', 'run', ...cmd]
}
}