import { SDTFError, TokenState } from '@specifyapp/specify-design-token-format'; import { isEqual, uniqWith } from 'lodash-es'; import { NonNullableOptions } from './NonNullableOptions.js'; import { fontValueToCssFontImport } from './tokenTypes/font.js'; import { textStyleValueToCssFontImport } from './tokenTypes/textStyle.js'; import { specifyErrors } from '../../../errors/specifyErrors.js'; import { ParsersEngineWarningMessage } from '../../../parsersEngine/definitions/ParsersEngineMessage.js'; export const convertTokens = ( tokens: Array, { formats, fontsPath, includeFontWeight, genericFamily, fontDisplay }: NonNullableOptions, ) => { const outputs = [] as Array<{ value: Record }>; const warningMessages = [] as Array; for (const token of tokens) { try { const valueByMode = token.matchJSONValueByType( { font: v => fontValueToCssFontImport(v, { formats, fontsPath, includeFontWeight, genericFamily, fontDisplay, }), textStyle: v => textStyleValueToCssFontImport(v, { formats, fontsPath, includeFontWeight, genericFamily, fontDisplay, }), }, () => undefined, ); if (!valueByMode) continue; const modes = Object.keys(valueByMode); for (const mode of modes) { outputs.push({ value: valueByMode[mode] }); } } catch (error) { if ((error as SDTFError).errorKey === 'SDTF_HAS_UNRESOLVABLE_ALIASES') { warningMessages.push({ type: 'warning', content: `The token ${token.path.toString()} has unresolvable aliases.`, errorKey: specifyErrors.PARSERS_ENGINE_PARSER_EXECUTION_FAILED.errorKey, }); } } } return { outputs: uniqWith(outputs, isEqual), warningMessages, }; };