import { isRecord } from '@ankhorage/utility/object'; import { isOptionalString } from '@ankhorage/utility/string'; import { isMediaAssetReference } from '../media'; /*** Validate a serializable icon as either a named font glyph or an SVG media reference. */ export function isIconSpec(value: unknown): boolean { if (!isRecord(value)) return false; const hasValidPresentation = (value.size === undefined || typeof value.size === 'string' || typeof value.size === 'number') && isOptionalString(value.color); if (!hasValidPresentation) return false; if ('source' in value) { return ( isMediaAssetReference(value.source) && value.name === undefined && value.provider === undefined ); } return ( typeof value.name === 'string' && isOptionalString(value.provider) && value.source === undefined ); }