15c0c35df6
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
27 lines
959 B
TypeScript
27 lines
959 B
TypeScript
function validRevision(value: number | null | undefined): number | null {
|
|
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) return null;
|
|
return value;
|
|
}
|
|
|
|
export function compareUserSettingsRevisions(
|
|
left: number | null | undefined,
|
|
right: number | null | undefined,
|
|
): -1 | 0 | 1 | null {
|
|
const leftValue = validRevision(left);
|
|
const rightValue = validRevision(right);
|
|
if (leftValue === null && rightValue === null) return null;
|
|
if (leftValue === null) return -1;
|
|
if (rightValue === null) return 1;
|
|
if (leftValue === rightValue) return 0;
|
|
return leftValue > rightValue ? 1 : -1;
|
|
}
|
|
|
|
export function isUserSettingsResponseCurrent(
|
|
responseRevision: number | null | undefined,
|
|
currentRevision: number | null | undefined,
|
|
isSubmittedSnapshot: boolean,
|
|
): boolean {
|
|
const order = compareUserSettingsRevisions(responseRevision, currentRevision);
|
|
return order === null ? isSubmittedSnapshot : order >= 0;
|
|
}
|