import { ObjectId } from "./objectid" ; export const isFunction = ( fn ) => typeof fn === "function" ; export const isObject = ( fn ) => typeof fn === "object" && ! ( fn instanceof ObjectId ) ; export const keysOf = ( obj ) => Object . keys ( obj ) ; export const lengthOf = ( obj ) => Object . keys ( obj ) . length ; export const hasOwn = ( obj , prop ) => Object . prototype . hasOwnProperty . call ( obj , prop ) ; export const convertMapToObject = ( map ) => Array . from ( map ) . reduce ( ( acc , [ key , value ] ) => { acc [ key ] = value ; return acc ; } , { } ) ; export const isArguments = ( obj ) => obj != null && hasOwn ( obj , "callee" ) ; export const isInfOrNaN = ( obj ) => Number . isNaN ( obj ) || obj === Infinity || obj === - Infinity ; export const checkError = { maxStack : ( msgError ) => new RegExp ( "Maximum call stack size exceeded" , "g" ) . test ( msgError ) , } ; export const handleError = ( fn ) => function ( ) { try { return fn . apply ( this , arguments ) ; } catch ( error ) { const isMaxStack = checkError . maxStack ( error . message ) ; if ( isMaxStack ) { throw new Error ( "Converting circular structure to JSON" ) ; } throw error ; } } ;