@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
79 lines • 1.74 kB
JavaScript
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