You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
720 B
JavaScript
41 lines
720 B
JavaScript
10 months ago
|
'use strict';
|
||
|
|
||
|
module.exports = function lookupLocalFields(cur, path, val) {
|
||
|
if (cur == null) {
|
||
|
return cur;
|
||
|
}
|
||
|
|
||
|
if (cur._doc != null) {
|
||
|
cur = cur._doc;
|
||
|
}
|
||
|
|
||
|
if (arguments.length >= 3) {
|
||
|
if (typeof cur !== 'object') {
|
||
|
return void 0;
|
||
|
}
|
||
|
if (val === void 0) {
|
||
|
return void 0;
|
||
|
}
|
||
|
if (cur instanceof Map) {
|
||
|
cur.set(path, val);
|
||
|
} else {
|
||
|
cur[path] = val;
|
||
|
}
|
||
|
return val;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Support populating paths under maps using `map.$*.subpath`
|
||
|
if (path === '$*') {
|
||
|
return cur instanceof Map ?
|
||
|
Array.from(cur.values()) :
|
||
|
Object.keys(cur).map(key => cur[key]);
|
||
|
}
|
||
|
|
||
|
if (cur instanceof Map) {
|
||
|
return cur.get(path);
|
||
|
}
|
||
|
|
||
|
return cur[path];
|
||
|
};
|