UNPKG

ts-cast

Version:
24 lines (23 loc) 1.16 kB
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, };