@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
85 lines (84 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.traitValueExpander = traitValueExpander;
var _common = require("@yoroi/common");
var _immer = require("immer");
function traitValueExpander(value) {
const type = detectType(value);
switch (type) {
case 'link':
case 'string':
{
const transformedValue = type === 'link' ? transformIfIpfs(value) : value;
return (0, _immer.freeze)({
originalValue: value,
transformedValue,
type
});
}
case 'number':
{
return (0, _immer.freeze)({
originalValue: value,
transformedValue: value,
type
});
}
case 'array':
{
return (0, _immer.freeze)({
originalValue: value,
transformedValue: value,
type
});
}
case 'record':
{
return (0, _immer.freeze)({
originalValue: value,
transformedValue: value,
type
});
}
default:
{
return (0, _immer.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 ((0, _common.isString)(value)) {
if (isValidUrl(value)) {
return 'link';
}
return 'string';
} else if ((0, _common.isNumber)(value)) {
return 'number';
} else if (Array.isArray(value)) {
return 'array';
} else if ((0, _common.isRecord)(value)) {
return 'record';
} else {
return 'unknown';
}
}
//# sourceMappingURL=trait-value-expander.js.map