// Safe toJSON | |
module.exports = | |
function getSafe (self, uuid) { | |
if (typeof self === 'object' || typeof self === 'function') var safe = {} | |
if (Array.isArray(self)) var safe = [] | |
var recurse = [] | |
Object.defineProperty(self, uuid, {}) | |
var attrs = Object.keys(self).filter(function (i) { | |
if (i === uuid) return false | |
if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true | |
return !(Object.getOwnPropertyDescriptor(self[i], uuid)) | |
}) | |
for (var i=0;i<attrs.length;i++) { | |
if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') || | |
self[attrs[i]] === null | |
) { | |
safe[attrs[i]] = self[attrs[i]] | |
} else { | |
recurse.push(attrs[i]) | |
Object.defineProperty(self[attrs[i]], uuid, {}) | |
} | |
} | |
for (var i=0;i<recurse.length;i++) { | |
safe[recurse[i]] = getSafe(self[recurse[i]], uuid) | |
} | |
return safe | |
} |