import { TokenState } from '@specifyapp/specify-design-token-format'; import { makeNumberRounder } from './makeNumberRounder.js'; import { getDimensionUpdateValue } from './tokenTypes/dimension.js'; import { getCubicBezierUpdateValue } from './tokenTypes/cubicBezier.js'; import { getDurationUpdateValue } from './tokenTypes/duration.js'; import { getRadiiUpdateValue } from './tokenTypes/radii.js'; import { getShadowUpdateValue } from './tokenTypes/shadow.js'; import { getTextStyleUpdateValue } from './tokenTypes/textStyle.js'; import { getBorderUpdateValue } from './tokenTypes/border.js'; import { getTransitionUpdateValue } from './tokenTypes/transition.js'; import { RoundNumberParserOptions } from './definition.js'; import { CleanOptions } from '../../utils/types.js'; export function updateToken(token: TokenState, options: CleanOptions) { const roundNumber = makeNumberRounder(options); const updateValue = token.matchJSONValueByType( { dimension: v => getDimensionUpdateValue(v, roundNumber), radius: v => getDimensionUpdateValue(v, roundNumber), spacing: v => getDimensionUpdateValue(v, roundNumber), breakpoint: v => getDimensionUpdateValue(v, roundNumber), blur: v => getDimensionUpdateValue(v, roundNumber), number: v => roundNumber(v), zeroToOneNumber: v => roundNumber(v), arcDegreeNumber: v => roundNumber(v), positiveNumber: v => roundNumber(v), percentageNumber: v => roundNumber(v), opacity: v => roundNumber(v), border: v => getBorderUpdateValue(v, roundNumber, options.applyToKeys.border), cubicBezier: v => getCubicBezierUpdateValue(v, roundNumber), duration: v => getDurationUpdateValue(v, roundNumber), radii: v => getRadiiUpdateValue(v, roundNumber), spacings: v => getRadiiUpdateValue(v, roundNumber), shadow: v => getShadowUpdateValue(v, roundNumber, options.applyToKeys.shadow), shadows: v => v.map(shadow => getShadowUpdateValue(shadow, roundNumber, options.applyToKeys.shadow)), transition: v => getTransitionUpdateValue(v, roundNumber, options.applyToKeys.transition), textStyle: v => getTextStyleUpdateValue(v, roundNumber, options.applyToKeys.textStyle), }, _ => undefined, ); if (!updateValue) return; token.updateValue(updateValue, { overrideAliases: false }); }