var isFn = require('./isFn'); var isObj = require('./isObj'); var isArr = require('./isArr'); var optimizeCb = require('./optimizeCb'); var matcher = require('./matcher'); var identity = require('./identity'); var property = require('./property'); exports = function(val, ctx, argCount) { if (val == null) return identity; if (isFn(val)) return optimizeCb(val, ctx, argCount); if (isObj(val) && !isArr(val)) return matcher(val); return property(val); }; module.exports = exports;