forked from denoland/std
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse_comparator.ts
32 lines (29 loc) · 910 Bytes
/
parse_comparator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
import { parse } from "./parse.ts";
import type { Operator, SemVerComparator } from "./types.ts";
import { COMPARATOR, re } from "./_shared.ts";
import { comparatorMax } from "./comparator_max.ts";
import { comparatorMin } from "./comparator_min.ts";
import { ANY, NONE } from "./constants.ts";
/**
* Parses a comparator string into a valid SemVerComparator.
* @param comparator
* @returns A valid SemVerComparator
*/
export function parseComparator(comparator: string): SemVerComparator {
const r = re[COMPARATOR];
const m = comparator.match(r);
if (!m) {
return NONE;
}
const operator = (m[1] ?? "") as Operator;
const semver = m[2] ? parse(m[2]) : ANY;
const min = comparatorMin(semver, operator);
const max = comparatorMax(semver, operator);
return {
operator,
semver,
min,
max,
};
}