/**
* Redis server version parsing and feature gating.
* Shared by Angular and React frontends.
*
* Usage:
* const rv = parseRedisVersion(state.info()?.server?.redis_version)
* if (rv.isAtLeast(8, 2)) { // show VSIM IN filter }
*/
export interface RedisVersion {
major: number
minor: number
patch: number
/** Check if version is at least major.minor */
isAtLeast(major: number, minor: number): boolean
/** Raw version string (e.g. '8.6.2') */
raw: string
}
const UNKNOWN: RedisVersion = {
major: 0, minor: 0, patch: 0,
isAtLeast: () => false,
raw: '',
}
export function parseRedisVersion(versionStr: string | undefined | null): RedisVersion {
if (!versionStr) return UNKNOWN
const parts = versionStr.split('.').map(Number)
const major = parts[0] || 0
const minor = parts[1] || 0
const patch = parts[2] || 0
return {
major, minor, patch,
isAtLeast: (reqMajor, reqMinor) =>
major > reqMajor || (major === reqMajor && minor >= reqMinor),
raw: versionStr,
}
}