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

'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];
};