UNPKG

@yoroi/common

Version:
53 lines (50 loc) 1.82 kB
"use strict"; 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