1import chalk from 'chalk'; 2import semver from 'semver'; 3import terminalLink from 'terminal-link'; 4 5import { EXPOTOOLS_DIR } from '../Constants'; 6import dependenciesChangelogs from '../data/androidDependenciesChangelogs.json'; 7 8export function getChangelogLink(dependency: string, fallbackLink: string | null) { 9 const link = dependenciesChangelogs[dependency] ?? fallbackLink; 10 return chalk.italic.dim( 11 (link && terminalLink('CHANGELOG', link)) ?? 12 chalk.whiteBright( 13 `Hey developer! Add CHANGELOG URL address for this dependency in ${terminalLink( 14 'dependenciesChangelogs.json', 15 `file://${EXPOTOOLS_DIR}/src/android-update-native-dependencies/dependenciesChangelogs.json` 16 )}!` 17 ) 18 ); 19} 20 21export function calculateSemverDiff(from: string, to: string | null): SemverDiff { 22 if (!to) { 23 return null; 24 } 25 try { 26 const semverDiff = semver.diff(from, to); 27 return semverDiff; 28 } catch { 29 return null; 30 } 31} 32 33export type SemverDiff = 34 | 'major' 35 | 'premajor' 36 | 'minor' 37 | 'preminor' 38 | 'patch' 39 | 'prepatch' 40 | 'prerelease' 41 | null; 42 43export function addColorBasedOnSemverDiff(version: string | null, semverDiff: SemverDiff) { 44 let colorEffect: 'green' | 'yellow' | 'red' | 'reset' | 'bgRedBright' = 'bgRedBright'; 45 if (semverDiff) { 46 if (['patch', 'prepatch'].includes(semverDiff)) { 47 colorEffect = 'green'; 48 } else if (['minor', 'preminor'].includes(semverDiff)) { 49 colorEffect = 'yellow'; 50 } else if (['major', 'premajor'].includes(semverDiff)) { 51 colorEffect = 'red'; 52 } 53 } 54 55 return chalk.reset.bold[colorEffect](version ?? '<unknown>'); 56} 57