ts-cast
Version:
Runtime typechecking
24 lines (23 loc) • 1.16 kB
JavaScript
import { array } from './array';
import { createCaster } from '../engine';
export const textInt = createCaster('text.integer', (value) => typeof value === 'string' && value !== '', (value, context, reportError) => {
const parsed = +value;
if (Number.isInteger(parsed))
return parsed;
return reportError(`text.integer is expected${context ? ` in ${context}` : ''} but "${value}" received.`, context);
});
export const textNum = createCaster('text.number', (value) => typeof value === 'string' && value !== '', (value, context, reportError) => {
const parsed = +value;
if (!Number.isNaN(parsed))
return parsed;
return reportError(`text.number is expected${context ? ` in ${context}` : ''} but "${value}" received.`, context);
});
export const textList = (itemCaster, separator = ',') => {
const castArray = array(itemCaster);
return createCaster(`list(${itemCaster.name})`, (value) => typeof value === 'string', (value, context, reportError) => castArray(value === '' ? [] : value.split(separator), context, reportError));
};
export const text = {
integer: textInt,
number: textNum,
list: textList,
};