@stolostron/multicluster-sdk
Version:
Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.
56 lines • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.selectorToString = void 0;
const toArray = (value) => (Array.isArray(value) ? value : [value]);
const requirementToString = (requirement) => {
if (requirement.operator === 'Equals') {
return `${requirement.key}=${requirement.values?.[0]}`;
}
if (requirement.operator === 'NotEquals') {
return `${requirement.key}!=${requirement.values?.[0]}`;
}
if (requirement.operator === 'Exists') {
return requirement.key;
}
if (requirement.operator === 'DoesNotExist') {
return `!${requirement.key}`;
}
if (requirement.operator === 'In') {
return `${requirement.key} in (${toArray(requirement.values).join(',')})`;
}
if (requirement.operator === 'NotIn') {
return `${requirement.key} notin (${toArray(requirement.values).join(',')})`;
}
if (requirement.operator === 'GreaterThan') {
return `${requirement.key} > ${requirement.values?.[0]}`;
}
if (requirement.operator === 'LessThan') {
return `${requirement.key} < ${requirement.values?.[0]}`;
}
return '';
};
const createEquals = (key, value) => ({
key,
operator: 'Equals',
values: [value],
});
const toRequirements = (selector = {}) => {
const requirements = [];
const matchLabels = selector.matchLabels || {};
const { matchExpressions } = selector;
Object.keys(matchLabels || {})
.sort((a, b) => a.localeCompare(b))
.forEach((k) => {
requirements.push(createEquals(k, matchLabels[k]));
});
(matchExpressions || []).forEach((me) => {
requirements.push(me);
});
return requirements;
};
const selectorToString = (selector) => {
const requirements = toRequirements(selector);
return requirements.map(requirementToString).join(',');
};
exports.selectorToString = selectorToString;
//# sourceMappingURL=requirements.js.map