UNPKG

@terrazzo/parser

Version:

Parser/validator for the Design Tokens Community Group (DTCG) standard.

55 lines 2.14 kB
import { getObjMember } from '@terrazzo/json-schema-tools'; import { isAlias } from '@terrazzo/token-tools'; import { docsLink } from '../lib/docs.js'; export const VALID_NUMBER = 'core/valid-number'; const ERROR_NAN = 'ERROR_NAN'; const rule = { meta: { messages: { [ERROR_NAN]: 'Must be a number.', }, docs: { description: 'Require number tokens to follow the format.', url: docsLink(VALID_NUMBER), }, }, defaultOptions: {}, create({ tokens, report }) { for (const token of Object.values(tokens)) { if (token.aliasOf || !token.originalValue) { continue; } switch (token.$type) { case 'number': { validateNumber(token.originalValue.$value, { filename: token.source.filename, node: getObjMember(token.source.node, '$value'), report, }); break; } // Note: gradient not needed, validated in gradient case 'typography': { const $valueNode = getObjMember(token.source.node, '$value'); if (typeof token.originalValue.$value === 'object' && token.originalValue.$value.lineHeight && !isAlias(token.originalValue.$value.lineHeight) && typeof token.originalValue.$value.lineHeight !== 'object') { validateNumber(token.originalValue.$value.lineHeight, { filename: token.source.filename, node: getObjMember($valueNode, 'lineHeight'), report, }); } } } } }, }; function validateNumber(value, { node, filename, report, }) { if (typeof value !== 'number' || Number.isNaN(value)) { report({ filename, messageId: ERROR_NAN, node }); } } export default rule; //# sourceMappingURL=valid-number.js.map