Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 33 34 35 36 37 38 39 40 41 42 43 44 45 | 13x 13x 13x 4x 13x 2x 13x 2x 13x 2x 13x | /**
* Reference token validator.
*
* Pattern: --{ns}-r-{category}-{role}-{range}
*
* Reference tokens have a strict 5-part structure.
*
* @module validators/reference
*/
import type { Metadata, ValidationError } from '../../types.js';
import { err } from '../shared/helpers.js';
export function validateReferenceTokens(
tokens: string[],
meta: Metadata,
): { errors: ValidationError[] } {
const errors: ValidationError[] = [];
const rv = meta.reference.valid;
if (tokens.length !== 5) {
errors.push(err(
'structure',
'exactly 5 segments (namespace-r-category-role-range)',
`${tokens.length} segments`,
));
}
if (tokens[2] && !rv.category.includes(tokens[2])) {
errors.push(err('category', rv.category, tokens[2]));
}
if (tokens[3] && !rv.role.includes(tokens[3])) {
errors.push(err('role', rv.role, tokens[3]));
}
if (tokens[4] && Number.isNaN(Number(tokens[4]))) {
errors.push(err('range', ['a numeric value'], tokens[4]));
}
return { errors };
}
export default validateReferenceTokens;
|