UNPKG

np

Version:
75 lines (60 loc) 2.12 kB
import fs from 'node:fs'; import path from 'node:path'; import semver from 'semver'; import * as configs from './configs.js'; /** @param {string} rootDirectory @param {import('./types.d.ts').PackageManagerConfig} config */ export function findLockfile(rootDirectory, config) { return config.lockfiles .map(filename => path.resolve(rootDirectory || '.', filename)) .find(filepath => fs.existsSync(filepath)); } /** @param {string} rootDirectory @param {import('read-pkg').NormalizedPackageJson} package_ */ export function getPackageManagerConfig(rootDirectory, package_) { const config = configFromPackageManagerField(package_); return config || configFromLockfile(rootDirectory) || configs.npmConfig; } /** @param {import('read-pkg').NormalizedPackageJson} package_ */ function configFromPackageManagerField(package_) { if (typeof package_.packageManager !== 'string') { return undefined; } const [packageManager, version] = package_.packageManager.split('@'); if (packageManager === 'yarn' && version && semver.gte(version, '2.0.0')) { return configs.yarnBerryConfig; } if (packageManager === 'npm') { return configs.npmConfig; } if (packageManager === 'pnpm') { return configs.pnpmConfig; } if (packageManager === 'yarn') { return configs.yarnConfig; } if (packageManager === 'bun') { return configs.bunConfig; } throw new Error(`Invalid package manager: ${package_.packageManager}`); } /** @param {string} rootDirectory */ function configFromLockfile(rootDirectory, options = [configs.npmConfig, configs.pnpmConfig, configs.yarnConfig]) { const foundConfig = options.find(config => findLockfile(rootDirectory, config)); // If yarn.lock is found, check if it's Yarn Berry by looking for .yarnrc.yml if (foundConfig === configs.yarnConfig) { const yarnrcYmlPath = path.resolve(rootDirectory || '.', '.yarnrc.yml'); if (fs.existsSync(yarnrcYmlPath)) { return configs.yarnBerryConfig; } } return foundConfig; } /** @param {import('./types.d.ts').Command} command */ export function printCommand([cli, arguments_]) { return `${cli} ${arguments_.join(' ')}`; }