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.
40 lines
720 B
40 lines
720 B
'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]; |
|
};
|
|
|