argo-cd

Форк
0
/
label-selector.ts 
39 строк · 1.6 Кб
1
type operatorFn = (labels: {[name: string]: string}, key: string, values: string[]) => boolean;
2

3
const operators: {[type: string]: operatorFn} = {
4
    '!=': (labels, key, values) => labels[key] !== values[0],
5
    '==': (labels, key, values) => labels[key] === values[0],
6
    '=': (labels, key, values) => labels[key] === values[0],
7
    '[\\W]notin[\\W]': (labels, key, values) => !values.includes(labels[key]),
8
    '[\\W]in[\\W]': (labels, key, values) => values.includes(labels[key]),
9
    '[\\W]gt[\\W]': (labels, key, values) => parseFloat(labels[key]) > parseFloat(values[0]),
10
    '[\\W]lt[\\W]': (labels, key, values) => parseFloat(labels[key]) < parseFloat(values[0])
11
};
12

13
function split(input: string, delimiter: string | RegExp): string[] {
14
    return input
15
        .split(delimiter)
16
        .map(part => part.trim())
17
        .filter(part => part !== '');
18
}
19

20
export type LabelSelector = (labels: {[name: string]: string}) => boolean;
21

22
export function parse(selector: string): LabelSelector {
23
    for (const type of Object.keys(operators)) {
24
        const operator = operators[type];
25
        const parts = split(selector, new RegExp(type));
26
        if (parts.length > 1) {
27
            const values = split(parts[1], ',');
28
            return labels => operator(labels, parts[0], values);
29
        }
30
    }
31
    if (selector.startsWith('!')) {
32
        return labels => !labels.hasOwnProperty(selector.slice(1));
33
    }
34
    return labels => labels.hasOwnProperty(selector);
35
}
36

37
export function match(selector: string, labels: {[name: string]: string}): boolean {
38
    return parse(selector)(labels || {});
39
}
40

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.