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
			| 
								 
											3 years ago
										 
									 | 
							
								'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;
							 |