Files
start-os/web/projects/shared/src/pipes/emver/emver.pipe.ts
2023-11-13 15:59:16 -07:00

53 lines
1.4 KiB
TypeScript

import { Pipe, PipeTransform } from '@angular/core'
import { Emver } from '../../services/emver.service'
@Pipe({
name: 'satisfiesEmver',
})
export class EmverSatisfiesPipe implements PipeTransform {
constructor(private readonly emver: Emver) {}
transform(versionUnderTest?: string, range?: string): boolean {
return (
!!versionUnderTest &&
!!range &&
this.emver.satisfies(versionUnderTest, range)
)
}
}
@Pipe({
name: 'compareEmver',
})
export class EmverComparesPipe implements PipeTransform {
constructor(private readonly emver: Emver) {}
transform(first: string, second: string): SemverResult {
try {
return this.emver.compare(first, second) as SemverResult
} catch (e) {
console.error(`emver comparison failed`, e, first, second)
return 'comparison-impossible'
}
}
}
// left compared to right - if 1, version on left is higher; if 0, values the same; if -1, version on left is lower
type SemverResult = 0 | 1 | -1 | 'comparison-impossible'
@Pipe({
name: 'displayEmver',
})
export class EmverDisplayPipe implements PipeTransform {
constructor() {}
transform(version: string): string {
return displayEmver(version)
}
}
export function displayEmver(version: string): string {
const vs = version.split('.')
if (vs.length === 4) return `${vs[0]}.${vs[1]}.${vs[2]}~${vs[3]}`
return version
}