// noinspection ES6ConvertVarToLetConst export default function isEmptyable(value) { return !_isNil && (looksLikeArray(value) || looksLikeMap(value) || isPrototype(value) || isKeyedObject(value) ) function looksLikeArray(value) { return _isArrayLike(value) && (_isArray(value) || typeof value == "string" || typeof value.splice == "function" || _isBuffer(value) || _isTypedArray(value) || _isArguments(value)) } function looksLikeMap(value) { const tag = getTag(value) const mapTag = "[object Map]" const setTag = "[object Set]" return (tag === mapTag) || (tag === setTag) } function isKeyedObject(value) { return _isObject(value) && (_keys(value).length > 0) } // lodash internals function isPrototype(value) { const objectProto = Object.prototype const Ctor = value && value.constructor const proto = (typeof Ctor === "function" && Ctor.prototype) || objectProto return value === proto } function getTag(value) { const nullTag = "[object Null]" const symToStringTag = Symbol ? Symbol.toStringTag : undefined const undefinedTag = "[object Undefined]" const objectProto = Object.prototype const hasOwnProperty = objectProto.hasOwnProperty const nativeObjectToString = objectProto.toString if (value == null) { return value === undefined ? undefinedTag : nullTag } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value) function getRawTag(value) { const isOwn = hasOwnProperty.call(value, symToStringTag) const tag = value[symToStringTag] try { value[symToStringTag] = undefined var unmasked = true } catch (e) { } const result = nativeObjectToString.call(value) if (unmasked) { if (isOwn) { value[symToStringTag] = tag } else { delete value[symToStringTag] } } return result } function objectToString(value) { return nativeObjectToString.call(value) } } }