UNPKG

@yoroi/portfolio

Version:

The Portfolio package of Yoroi SDK

79 lines 1.74 kB
import { isNumber, isRecord, isString } from '@yoroi/common'; import { freeze } from 'immer'; export function traitValueExpander(value) { const type = detectType(value); switch (type) { case 'link': case 'string': { const transformedValue = type === 'link' ? transformIfIpfs(value) : value; return freeze({ originalValue: value, transformedValue, type }); } case 'number': { return freeze({ originalValue: value, transformedValue: value, type }); } case 'array': { return freeze({ originalValue: value, transformedValue: value, type }); } case 'record': { return freeze({ originalValue: value, transformedValue: value, type }); } default: { return freeze({ originalValue: value, transformedValue: value, type: 'unknown' }); } } } function isValidUrl(string) { try { // eslint-disable-next-line no-new new URL(string); return true; } catch (e) { return false; } } function transformIfIpfs(value) { if (value.startsWith('ipfs://')) return value.replace('ipfs://', 'https://ipfs.io/ipfs/'); return value; } function detectType(value) { if (isString(value)) { if (isValidUrl(value)) { return 'link'; } return 'string'; } else if (isNumber(value)) { return 'number'; } else if (Array.isArray(value)) { return 'array'; } else if (isRecord(value)) { return 'record'; } else { return 'unknown'; } } //# sourceMappingURL=trait-value-expander.js.map