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;
 |