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.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							64 lines
						
					
					
						
							1.2 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| /*!
 | |
|  * Simplified lodash.get to work around the annoying null quirk. See:
 | |
|  * https://github.com/lodash/lodash/issues/3659
 | |
|  */
 | |
| 
 | |
| module.exports = function get(obj, path, def) {
 | |
|   let parts;
 | |
|   let isPathArray = false;
 | |
|   if (typeof path === 'string') {
 | |
|     if (path.indexOf('.') === -1) {
 | |
|       const _v = getProperty(obj, path);
 | |
|       if (_v == null) {
 | |
|         return def;
 | |
|       }
 | |
|       return _v;
 | |
|     }
 | |
| 
 | |
|     parts = path.split('.');
 | |
|   } else {
 | |
|     isPathArray = true;
 | |
|     parts = path;
 | |
| 
 | |
|     if (parts.length === 1) {
 | |
|       const _v = getProperty(obj, parts[0]);
 | |
|       if (_v == null) {
 | |
|         return def;
 | |
|       }
 | |
|       return _v;
 | |
|     }
 | |
|   }
 | |
|   let rest = path;
 | |
|   let cur = obj;
 | |
|   for (const part of parts) {
 | |
|     if (cur == null) {
 | |
|       return def;
 | |
|     }
 | |
| 
 | |
|     // `lib/cast.js` depends on being able to get dotted paths in updates,
 | |
|     // like `{ $set: { 'a.b': 42 } }`
 | |
|     if (!isPathArray && cur[rest] != null) {
 | |
|       return cur[rest];
 | |
|     }
 | |
| 
 | |
|     cur = getProperty(cur, part);
 | |
| 
 | |
|     if (!isPathArray) {
 | |
|       rest = rest.substr(part.length + 1);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return cur == null ? def : cur;
 | |
| };
 | |
| 
 | |
| function getProperty(obj, prop) {
 | |
|   if (obj == null) {
 | |
|     return obj;
 | |
|   }
 | |
|   if (obj instanceof Map) {
 | |
|     return obj.get(prop);
 | |
|   }
 | |
|   return obj[prop];
 | |
| } |