hidden param min param n param max export function clamp ( min , n , max ) { return Math . max ( min , Math . min ( n , max ) ) ; } hidden export function deepCopy ( obj ) { return JSON . parse ( JSON . stringify ( obj ) ) ; } hidden export function deepEqual ( a , b ) { if ( a === b ) { return true ; } return JSON . stringify ( a ) === JSON . stringify ( b ) ; } hidden export function debounce ( fn , wait , immediate = false ) { var timeout , args , context , timestamp , result ; return function ( ) { context = this ; args = arguments ; timestamp = Date . now ( ) ; var later = function ( ) { var last = Date . now ( ) - timestamp ; if ( last < wait ) { timeout = setTimeout ( later , wait - last ) ; } else { timeout = null ; if ( ! immediate ) result = fn . apply ( context , args ) ; } } ; var callNow = immediate && ! timeout ; if ( ! timeout ) { timeout = setTimeout ( later , wait ) ; } if ( callNow ) result = fn . apply ( context , args ) ; return result ; } ; } hidden export function normalizeURL ( url ) { const ionic = ( < any > window ) [ 'Ionic' ] ; if ( ionic && ionic . normalizeURL ) { return ionic . normalizeURL ( url ) ; } return url ; } hidden param { any } dest export function defaults ( dest , ... _args ) { for ( var i = arguments . length - 1 ; i >= 1 ; i -- ) { var source = arguments [ i ] ; if ( source ) { for ( var key in source ) { if ( source . hasOwnProperty ( key ) && ! dest . hasOwnProperty ( key ) ) { dest [ key ] = source [ key ] ; } } } } return dest ; } hidden export function isBoolean ( val ) { return typeof val === 'boolean' ; } hidden export function isString ( val ) { return typeof val === 'string' ; } hidden export function isNumber ( val ) { return typeof val === 'number' ; } hidden export function isFunction ( val ) { return typeof val === 'function' ; } hidden export function isDefined ( val ) { return typeof val !== 'undefined' ; } hidden export function isUndefined ( val ) { return typeof val === 'undefined' ; } hidden export function isPresent ( val ) { return val !== undefined && val !== null ; } hidden export function isBlank ( val ) { return val === undefined || val === null ; } hidden export function isObject ( val ) { return typeof val === 'object' ; } hidden export function isArray ( val ) { return Array . isArray ( val ) ; } hidden export function isPrimitive ( val ) { return isString ( val ) || isBoolean ( val ) || ( isNumber ( val ) && ! isNaN ( val ) ) ; } hidden export function isTrueProperty ( val ) { if ( typeof val === 'string' ) { val = val . toLowerCase ( ) . trim ( ) ; return ( val === 'true' || val === 'on' || val === '' ) ; } return ! ! val ; } hidden export function isCheckedProperty ( a , b ) { if ( a === undefined || a === null || a === '' ) { return ( b === undefined || b === null || b === '' ) ; } else if ( a === true || a === 'true' ) { return ( b === true || b === 'true' ) ; } else if ( a === false || a === 'false' ) { return ( b === false || b === 'false' ) ; } else if ( a === 0 || a === '0' ) { return ( b === 0 || b === '0' ) ; } return ( a == b ) ; } hidden export type Side = 'left' | 'right' | 'start' | 'end' ; hidden param side param isRTL param defaultRight export function isRightSide ( side , isRTL , defaultRight = false ) { switch ( side ) { case 'right' : return true ; case 'left' : return false ; case 'end' : return ! isRTL ; case 'start' : return isRTL ; default : return defaultRight ? ! isRTL : isRTL ; } } hidden export function reorderArray ( array , indexes ) { const element = array [ indexes . from ] ; array . splice ( indexes . from , 1 ) ; array . splice ( indexes . to , 0 , element ) ; return array ; } hidden export function removeArrayItem ( array , item ) { const index = array . indexOf ( item ) ; return ! ! ~ index && ! ! array . splice ( index , 1 ) ; } hidden export function swipeShouldReset ( isResetDirection , isMovingFast , isOnResetZone ) { let shouldClose = ( ! isMovingFast && isOnResetZone ) || ( isResetDirection && isMovingFast ) ; return shouldClose ; } hidden const ASSERT_ENABLED = true ; hidden function _runInDev ( fn ) { if ( ASSERT_ENABLED === true ) { return fn ( ) ; } } hidden function _assert ( actual , reason ) { if ( ! actual && ASSERT_ENABLED === true ) { let message = 'IONIC ASSERT: ' + reason ; console . error ( message ) ; debugger ; throw new Error ( message ) ; } } hidden export function requestIonicCallback ( functionToLazy ) { if ( 'requestIdleCallback' in window ) { return ( window as any ) . requestIdleCallback ( functionToLazy ) ; } else { return setTimeout ( functionToLazy , 500 ) ; } } hidden export { _assert as assert } ; hidden export { _runInDev as runInDev } ;