UNPKG

@code-pushup/js-packages-plugin

Version:
53 lines 2.42 kB
import { readFile } from 'node:fs/promises'; import path from 'node:path'; import { fileExists, logger } from '@code-pushup/utils'; import { formatMetaLog } from '../format.js'; import { deriveYarnVersion } from './derive-yarn.js'; import { packageManagers } from './package-managers.js'; export async function derivePackageManagerInPackageJson(currentDir = process.cwd()) { if (await fileExists(path.join(currentDir, 'package.json'))) { const content = JSON.parse((await readFile(path.join('package.json'))).toString()); const { packageManager: packageManagerData = '' } = content; const [manager = '', version = ''] = packageManagerData.split('@'); if (manager === 'npm') { return manager; } if (manager === 'pnpm') { return manager; } if (manager === 'yarn') { const majorVersion = Number(version.split('.')[0]); return majorVersion > 1 ? 'yarn-modern' : 'yarn-classic'; } } return false; } export async function derivePackageManager(currentDir = process.cwd()) { const pkgManagerFromPackageJson = await derivePackageManagerInPackageJson(currentDir); if (pkgManagerFromPackageJson) { logDerivedPackageManager(pkgManagerFromPackageJson, 'packageManager field in package.json'); return pkgManagerFromPackageJson; } // Check for lock files if (await fileExists(path.join(currentDir, 'package-lock.json'))) { logDerivedPackageManager('npm', 'existence of package-lock.json file'); return 'npm'; } else if (await fileExists(path.join(currentDir, 'pnpm-lock.yaml'))) { logDerivedPackageManager('pnpm', 'existence of pnpm-lock.yaml file'); return 'pnpm'; } else if (await fileExists(path.join(currentDir, 'yarn.lock'))) { const yarnVersion = await deriveYarnVersion(); if (yarnVersion) { logDerivedPackageManager(yarnVersion, 'existence of yarn.lock file and yarn -v command'); return yarnVersion; } } throw new Error('Could not detect package manager. Please provide it in the js-packages plugin config.'); } function logDerivedPackageManager(id, sourceDescription) { const pm = packageManagers[id]; logger.info(formatMetaLog(`Inferred ${pm.name} package manager from ${sourceDescription}`)); } //# sourceMappingURL=derive-package-manager.js.map