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.
		
		
		
		
		
			
		
			
				
					
					
						
							77 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							77 lines
						
					
					
						
							1.7 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| /*!
 | |
|  * ignore
 | |
|  */
 | |
| 
 | |
| const MongooseMap = require('../types/map');
 | |
| const SchemaMapOptions = require('../options/SchemaMapOptions');
 | |
| const SchemaType = require('../schematype');
 | |
| /*!
 | |
|  * ignore
 | |
|  */
 | |
| 
 | |
| class Map extends SchemaType {
 | |
|   constructor(key, options) {
 | |
|     super(key, options, 'Map');
 | |
|     this.$isSchemaMap = true;
 | |
|   }
 | |
| 
 | |
|   set(option, value) {
 | |
|     return SchemaType.set(option, value);
 | |
|   }
 | |
| 
 | |
|   cast(val, doc, init) {
 | |
|     if (val instanceof MongooseMap) {
 | |
|       return val;
 | |
|     }
 | |
| 
 | |
|     const path = this.path;
 | |
| 
 | |
|     if (init) {
 | |
|       const map = new MongooseMap({}, path, doc, this.$__schemaType);
 | |
| 
 | |
|       if (val instanceof global.Map) {
 | |
|         for (const key of val.keys()) {
 | |
|           let _val = val.get(key);
 | |
|           if (_val == null) {
 | |
|             _val = map.$__schemaType._castNullish(_val);
 | |
|           } else {
 | |
|             _val = map.$__schemaType.cast(_val, doc, true, null, { path: path + '.' + key });
 | |
|           }
 | |
|           map.$init(key, _val);
 | |
|         }
 | |
|       } else {
 | |
|         for (const key of Object.keys(val)) {
 | |
|           let _val = val[key];
 | |
|           if (_val == null) {
 | |
|             _val = map.$__schemaType._castNullish(_val);
 | |
|           } else {
 | |
|             _val = map.$__schemaType.cast(_val, doc, true, null, { path: path + '.' + key });
 | |
|           }
 | |
|           map.$init(key, _val);
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       return map;
 | |
|     }
 | |
| 
 | |
|     return new MongooseMap(val, path, doc, this.$__schemaType);
 | |
|   }
 | |
| 
 | |
|   clone() {
 | |
|     const schematype = super.clone();
 | |
| 
 | |
|     if (this.$__schemaType != null) {
 | |
|       schematype.$__schemaType = this.$__schemaType.clone();
 | |
|     }
 | |
|     return schematype;
 | |
|   }
 | |
| }
 | |
| 
 | |
| Map.prototype.OptionsConstructor = SchemaMapOptions;
 | |
| 
 | |
| Map.defaultOptions = {};
 | |
| 
 | |
| module.exports = Map;
 |