You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
847 B
35 lines
847 B
'use strict'; |
|
|
|
const utils = require('../../utils'); |
|
|
|
const keysToSkip = new Set(['__index', '__parentArray', '_doc']); |
|
|
|
/** |
|
* Using spread operator on a Mongoose document gives you a |
|
* POJO that has a tendency to cause infinite recursion. So |
|
* we use this function on `set()` to prevent that. |
|
*/ |
|
|
|
module.exports = function handleSpreadDoc(v, includeExtraKeys) { |
|
if (utils.isPOJO(v) && v.$__ != null && v._doc != null) { |
|
if (includeExtraKeys) { |
|
const extraKeys = {}; |
|
for (const key of Object.keys(v)) { |
|
if (typeof key === 'symbol') { |
|
continue; |
|
} |
|
if (key[0] === '$') { |
|
continue; |
|
} |
|
if (keysToSkip.has(key)) { |
|
continue; |
|
} |
|
extraKeys[key] = v[key]; |
|
} |
|
return { ...v._doc, ...extraKeys }; |
|
} |
|
return v._doc; |
|
} |
|
|
|
return v; |
|
};
|
|
|