All files / packages/sds-stylelint-config/src/validators/reference index.ts

100% Statements 11/11
100% Branches 14/14
100% Functions 1/1
100% Lines 11/11

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;