mongoose-diff-tracking
Version:
Manage Mongo Collection diff History and versions
88 lines (81 loc) • 1.88 kB
JavaScript
var isEmpty;
function type (obj) {
return Object.prototype.toString.call(obj).split(/ |\[|\]/g)[2]
}
function walkObjectForAll (obj) {
switch (type(obj)) {
case 'Object':
for (var key in obj) {
walkObjectForAll(obj[key])
}
break
case 'Array':
for (var i = 0; i < obj.length; i++) {
walkObjectForAll(obj[i])
}
break
case 'String':
if (!obj) {
break
} else {
isEmpty = false
return
}
case 'Undefined':
case 'Null':
break
default:
isEmpty = false
return
}
}
function walkObjectForParts (obj) {
switch (type(obj)) {
case 'Object':
if (Object.keys(obj).length) {
for (var key in obj) {
walkObjectForParts(obj[key])
}
} else {
isEmpty = true
return
}
break
case 'Array':
if (obj.length === 0) {
isEmpty = true
return
} else {
for (var i = 0; i < obj.length; i++) {
walkObjectForParts(obj[i])
}
}
break
case 'String':
if (!obj) {
isEmpty = true
return
} else {
break
}
case 'Undefined':
case 'Null':
isEmpty = true
return
break
}
}
function all (obj) {
isEmpty = true
walkObjectForAll(obj)
return isEmpty
}
function some (obj) {
isEmpty = false
walkObjectForParts(obj)
return isEmpty
}
module.exports = {
all: all,
some: some
}