Necesito comparar dos versiones, la local, que está instalada en el dispositivo del usuario, y la versión, que está disponible en las tiendas de aplicaciones. Actualmente, estoy tratando de lograr el resultado deseado usando la biblioteca compareVersions . Eso funciona muy bien, devuelve la cadena 'nueva' si la versión remota es mayor. Pero necesito un poco más de salida que estoy tratando de obtener, por ejemplo, si la versión local es 1.0.5 y la remota es 1.0.6 (cambia el último número), entonces necesito devolver 'menor', y si local la versión es 1.0.5 y la remota es 1.1.0 (cambia el número del medio y el último), luego devuelve 'principal'. La idea principal para mí es obtener un resultado diferente en estos casos, por lo que, según la verificación de la versión, puedo actualizar la interfaz de usuario en consecuencia. Cualquier ayuda muy apreciada!
Una vez escribí una función que compara dos versiones, podrías adaptarla en lugar de devolver un booleano, devolver una cadena:
const DEFAULT_VERSION = '0.0.0'; export const isLatestGreaterThanCurrent = ({ latest = DEFAULT_VERSION, current = DEFAULT_VERSION } = {}) => { const [latestMajor, latestMinor, latestPatch] = latest.split('.').map((s) => parseInt(s, 10)); const [currentMajor, currentMinor, currentPatch] = current.split('.').map((s) => parseInt(s, 10)); return ( latestMajor > currentMajor || (latestMajor === currentMajor && latestMinor > currentMinor) || (latestMajor === currentMajor && latestMinor === currentMinor && latestPatch > currentPatch) ); };y por supuesto, sus pruebas:
import { isLatestGreaterThanCurrent } from '../isLatestGreaterThanCurrent'; import each from "jest-each"; describe('isLatestGreaterThanCurrent', () => { each([ // [latest, current] ['0.0.0', '0.0.0'], ['0.0.0', '0.0.1'], ['0.0.1', '0.1.0'], ['0.1.0', '0.1.0'], ['0.1.0', '0.1.1'], ['0.1.1', '1.0.0'], ['1.0.0', '1.0.0'], ['1.0.0', '1.0.1'], ['1.0.1', '1.1.0'], ['1.1.0', '1.1.0'], ['1.1.0', '1.1.1'], ['1.1.1', '1.1.1'], ]).test('latest %s is NOT greater than current %s', (latest, current) => { expect(isLatestGreaterThanCurrent({latest, current})).toBeFalsy(); }); each([ // [latest, current] ['0.0.1', '0.0.0'], ['0.1.0', '0.0.1'], ['0.1.1', '0.1.0'], ['1.0.0', '0.1.1'], ['1.0.1', '1.0.0'], ['1.1.0', '1.0.0'], ['1.1.0', '1.0.1'], ['1.1.1', '1.1.0'], ]).test('latest %s is greater than current %s', (latest, current) => { expect(isLatestGreaterThanCurrent({latest, current})).toBeTruthy(); }) });