import { SpecifyColorValue, TokenState } from '@specifyapp/specify-design-token-format'; import { specifyErrors } from '../../../errors/index.js'; import { getColorUpdateValue } from './tokenTypes/color.js'; import { getCompositeUpdateValue } from './tokenTypes/composite.js'; import { getShadowsUpdateValue } from './tokenTypes/shadows.js'; import { getGradientUpdateValue } from './tokenTypes/gradient.js'; import { getGradientsUpdateValue } from './tokenTypes/gradients.js'; import { ParserToolbox } from '../../../parsersEngine/ParserToolbox.js'; export function updateToken( tokenState: TokenState, target: SpecifyColorValue['model'], toolbox: ParserToolbox, ) { if (!tokenState.isFullyResolvable) { toolbox.populateMessage({ type: 'warning', content: `Design token "${tokenState.path.toString()}" is not fully resolvable. Please make sure that aliases points to a valid value.`, errorKey: specifyErrors.PARSERS_ENGINE_INVALID_ALIAS.errorKey, }); return; } const updateValue = tokenState.matchJSONValueByType( { color: v => getColorUpdateValue(v, target), textStyle: v => getCompositeUpdateValue(v, target), border: v => getCompositeUpdateValue(v, target), shadow: v => getCompositeUpdateValue(v, target), shadows: v => getShadowsUpdateValue(v, target), gradient: v => getGradientUpdateValue(v, target), gradients: v => getGradientsUpdateValue(v, target), }, token => { toolbox.populateMessage({ type: 'warning', content: `Tried to update a token '${token.type}' but it's not supported by convert-color`, errorKey: specifyErrors.PARSERS_ENGINE_VALIDATION_ERROR.errorKey, }); }, ); if (!updateValue) return; tokenState.updateValue(updateValue, { overrideAliases: false }); }