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