ui/lib/shared/addon/utils/parse-label.js

79 lines
2.1 KiB
JavaScript

import { validateChars, validateHostname } from 'ember-api-store/utils/validate';
export function parseKey(str) {
str = str||'';
const idx = str.indexOf('/');
if ( idx > 0 ) {
const prefix = str.substr(0,idx);
const key = str.substr(idx+1);
return {
str,
prefix,
key
}
} else {
return {
str,
prefix: null,
key: str,
}
}
}
const MIDDLE_ONLY = ['_','.','-'];
export function validateIdentifier(str, displayKey, intl, errors=[]) {
validateChars(str, {validChars: 'A-Za-z0-9_.-'}, displayKey, intl, errors);
// Indentifier cannot begin with a hyphen
let chr = str.slice(0,1);
if ( MIDDLE_ONLY.includes(chr) ) {
errors.push(intl.t(`validation.k8s.identifier.startLetter`, {key: displayKey}));
}
// Label cannot end with a hyphen
chr = str.slice(-1);
if ( MIDDLE_ONLY.includes(chr) ) {
errors.push(intl.t(`validation.k8s.identifier.endLetter`, {key: displayKey}));
}
// Label must be 1-63 characters
const min = 1;
const max = 63;
if ( str.length < min ) {
errors.push(intl.t(`validation.k8s.identifier.emptyKey`, {key: displayKey, min: min}));
} else if ( str.length > max ) {
errors.push(intl.t(`validation.k8s.identifier}.tooLongKey`, {key: displayKey, max: max}));
}
}
export function validatePrefix(str, displayKey, intl, errors=[]) {
const intlKey = intl.t('generic.key');
const min = 1;
const max = 253;
if ( str.length < min ) {
errors.push(intl.t(`validation.k8s.identifier.emptyPrefix`, {key: displayKey, min: min}));
} else if ( str.length > max ) {
errors.push(intl.t(`validation.k8s.identifier}.tooLongPRefix`, {key: displayKey, max: max}));
} else {
validateHostname(str, intlKey, intl, errors);
}
}
export function validateKey(str, intl, errors=[]) {
const parts = parseKey(str);
const intlKey = intl.t('generic.key');
if ( parts.prefix ) {
validatePrefix(parts.prefix, intlKey, intl, errors);
}
validateIdentifier(parts.key, intlKey, intl, errors);
}
export function validateValue(str, intl, errors=[]) {
const intlKey = intl.t('generic.value');
validateIdentifier(str, intlKey, intl, errors);
}