docs: function ModuleInfo(moduleInfoDict){
    if(!(this instanceof ModuleInfo))
      return new ModuleInfo(moduleInfoDict)
  
    // Check moduleInfoDict has the required fields
    checkType('String', 'moduleInfoDict.version', moduleInfoDict.version, {required: true});
    checkType('String', 'moduleInfoDict.name', moduleInfoDict.name, {required: true});
    checkType('String', 'moduleInfoDict.factories', moduleInfoDict.factories, {isArray: true, required: true});
  
    // Init parent class
    ModuleInfo.super_.call(this, moduleInfoDict)
  
    // Set object properties
    Object.defineProperties(this, {
      version: {
        writable: true,
        enumerable: true,
        value: moduleInfoDict.version
      },
      name: {
        writable: true,
        enumerable: true,
        value: moduleInfoDict.name
      },
      factories: {
        writable: true,
        enumerable: true,
        value: moduleInfoDict.factories
      }
    })
  }