@yoroi/common
Version:
The Common package of Yoroi SDK
53 lines (50 loc) • 1.82 kB
JavaScript
;
import { z } from 'zod';
// -------
// PARSERS
export const parseBoolean = data => {
const parsed = parseSafe(data);
return isBoolean(parsed) ? parsed : undefined;
};
export const parseString = data => {
const parsed = parseSafe(data);
return isString(parsed) ? parsed : undefined;
};
export const parseSafe = text => {
try {
return JSON.parse(text);
} catch (_) {
return undefined;
}
};
export const parseNumber = data => {
const parsed = parseSafe(data);
return isNumber(parsed) ? parsed : undefined;
};
// -----------
// TYPE GUARDS
export const isBoolean = data => typeof data === 'boolean';
export const isString = data => typeof data === 'string';
export const isKeyOf = (key, obj) => isString(key) && key in obj;
export const getKeys = obj => Object.keys(obj);
export const isNonNullable = data => data !== null && data !== undefined;
export const isNumber = data => typeof data === 'number' && !Number.isNaN(data) && Number.isFinite(data);
export const isPositiveNumber = data => isNumber(data) && data > 0;
export const isArrayOfString = data => isArrayOfType(data, isString);
export const isStringOrArrayOfString = data => isString(data) || isArrayOfString(data);
export const createTypeGuardFromSchema = schema => data => {
return schema.safeParse(data).success;
};
export const isRecord = createTypeGuardFromSchema(z.record(z.unknown()));
export const isArray = createTypeGuardFromSchema(z.array(z.unknown()));
export const urlSchema = z.string().url();
export const isUrl = data => {
return urlSchema.safeParse(data).success;
};
export function isArrayOfType(data, predicate) {
return isArray(data) && data.every(predicate);
}
export const isStringLiteral = (literals, value) => {
return literals.includes(value);
};
//# sourceMappingURL=parsers.js.map