import { TokenState, createSDTFEngine, SpecifyDesignTokenFormat, } from '@specifyapp/specify-design-token-format'; import { BitmapDataBox, ParserToolbox } from '../../../parsersEngine/index.js'; import { specifyErrors } from '../../../errors/index.js'; // TODO: Add tests /* v8 ignore start */ export function generateBitmapDataBoxAssets( tokens: SpecifyDesignTokenFormat, toolbox: ParserToolbox, ): BitmapDataBox['assets'] { const sdtfEngine = createSDTFEngine(tokens); const tokenStates = sdtfEngine.query.run({ where: { token: '.*', withTypes: { include: ['bitmap', 'bitmaps'], }, select: true, }, }) as Array | TokenState<'bitmaps'>>; return tokenStates.flatMap(tokenState => { if (!tokenState.isToken) return []; if (!tokenState.isFullyResolvable) { toolbox.populateMessage({ type: 'warning', content: `The bitmap token ${tokenState.name} is not resolvable.`, errorKey: specifyErrors.PARSERS_ENGINE_PARSER_EXECUTION_FAILED.errorKey, }); return []; } const token = tokenState.getJSONToken(); const resultsByMode = tokenState.matchJSONValueByType( { bitmap: (v, mode) => [ { mode, path: tokenState.path.toArray().slice(0), provider: v.provider, url: v.url, format: v.format, token, }, ], bitmaps: (bitmaps, mode) => bitmaps.files.map(v => ({ mode, path: tokenState.path.toArray().slice(0), provider: v.provider, url: v.url, format: v.format, token, })), }, _ => undefined, ); if (!resultsByMode) return []; return Object.values(resultsByMode).flat(); }); } /* v8 ignore stop */