@terrazzo/parser
Version:
Parser/validator for the Design Tokens Community Group (DTCG) standard.
55 lines • 2.14 kB
JavaScript
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