function isNumeric ( value ) { return ( value - parseFloat ( value ) + 1 ) >= 0 ; } function isNotBlank ( value ) { return ( value !== undefined && value !== null && value !== "" ) ; } export const SANITIZERS = { lowerCase : ( value ) => isNotBlank ( value ) ? value . toLowerCase ( ) : null , upperCase : ( value ) => isNotBlank ( value ) ? value . toUpperCase ( ) : null , trim : ( value ) => { if ( isNotBlank ( value ) ) if ( typeof value === "string" ) return value . trim ( ) ; return value ; } , ltrim : ( value ) => { if ( isNotBlank ( value ) ) if ( typeof value === "string" ) return value . replace ( /^\s+/g , '' ) ; return value ; } , rtrim : ( value ) => { if ( isNotBlank ( value ) ) if ( typeof value === "string" ) return value . replace ( /\s+$/g , '' ) ; return value ; } , blacklist : ( value , config ) => { if ( isNotBlank ( value ) ) if ( typeof value === "string" ) return value . replace ( new RegExp ( '[$' + config . chars + ']+' , 'g' ) , '' ) ; return value ; } , stripLow : ( value , config ) => { let chars = config . keepNewLines === true ? '\x00-\x09\x0B\x0C\x0E-\x1F\x7F' : '\x00-\x1F\x7F' ; return SANITIZERS . blacklist ( value , chars ) ; } , toBoolean : ( value , config ) => { if ( isNotBlank ( value ) ) { if ( config . strict ) { return value === '1' || value === 'true' ; } return value !== '0' && value !== 'false' && value !== '' ; } return value ; } , toFloat : ( value ) => { if ( isNotBlank ( value ) ) if ( isNumeric ( value ) ) return parseFloat ( value ) ; return null ; } , toDouble : ( value ) => { return SANITIZERS . toFloat ( value ) ; } , toInt : ( value , config ) => { if ( isNotBlank ( value ) ) if ( isNumeric ( value ) ) return parseInt ( value , config . radix || 10 ) ; return null ; } , toString : ( value ) => { if ( isNotBlank ( value ) ) return String ( value ) ; return value ; } , whitelist : ( value , config ) => { if ( isNotBlank ( value ) ) if ( typeof value === "string" ) return value . replace ( new RegExp ( `[^${ config . chars }]+` , 'g' ) , '' ) ; return value ; } , escape : ( value ) => { if ( isNotBlank ( value ) ) return ( value . replace ( /&/g , '&amp;' ) . replace ( /"/g , '&quot;' ) . replace ( /'/g , '&#x27;' ) . replace ( /</g , '&lt;' ) . replace ( />/g , '&gt;' ) . replace ( /\//g , '&#x2F;' ) . replace ( /\\/g , '&#x5C;' ) . replace ( /`/g , '&#96;' ) ) ; return value ; } , prefix : ( value , config ) => { if ( isNotBlank ( value ) ) return `${ config . text }${ value }` ; return value ; } , suffix : ( value , config ) => { if ( isNotBlank ( value ) ) return `${ value }${ config . text }` ; return value ; } , random : ( config ) => { if ( ! config ) return Math . random ( ) ; else { let min = Math . ceil ( config . min ) ; let max = Math . floor ( config . max ) ; return Math . floor ( Math . random ( ) * ( max - min ) ) + min ; } } } ;