|
|
@@ -0,0 +1,79 @@
|
|
|
+// 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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|