import { getNpm } from './platform' import { execa } from 'execa' import { cwd } from 'process' import { semverMaxSatisfying } from './semver' /** * get the latest version of the package * @param {string} packageName * @returns {string} latestVersion */ async function getLastestVersion(packageName: string) { const npmCommand = getNpm() const viewArgs = ['info', packageName, '--json'] const { stdout } = await execa(npmCommand, viewArgs, { cwd: cwd() }) const { 'dist-tags': { latest: latestVersion }, } = JSON.parse(stdout) return latestVersion } async function getLastestVersionWithRange(packageName: string, versionRange: string) { const npmCommand = getNpm() const viewArgs = ['view', packageName, 'versions', '--json'] const { stdout } = await execa(npmCommand, viewArgs, { cwd: cwd() }) const versionList = JSON.parse(stdout) const lastestVersion = semverMaxSatisfying(versionList, versionRange) return lastestVersion } async function getPackageDependencies(packageName: string, version: string) { const npmCommand = getNpm() const viewArgs = ['view', `${packageName}@${version}`, 'dependencies', '--json'] const { stdout } = await execa(npmCommand, viewArgs, { cwd: cwd() }) const dependencies = JSON.parse(stdout) return dependencies } export { getLastestVersion, getLastestVersionWithRange, getPackageDependencies }