findUndefinedModel()

in src/langs/cpp/combinator.js [936:984]


  findUndefinedModel(emitter, type, parentObject = []) {
    const models = this.models;
    if (is.object(type)) {
      let objectName = this.resolveName(type.objectName);
      if (parentObject.indexOf(objectName) < 0) {
        parentObject.push(objectName);
      }
      if (!_contain(this.definedModels, objectName)) {
        const [obj] = models.filter(node => node.name === objectName);
        if (obj) {
          obj.body.filter(node => is.prop(node)).forEach(item => {
            if (is.object(item.type)) {
              const typeObjectName = this.resolveName(item.type.objectName);
              if (typeObjectName === objectName) {
                return;
              } else if (parentObject.indexOf(typeObjectName) < 0) {
                parentObject.push(typeObjectName);
              }
            }
            this.findUndefinedModel(emitter, item.type, parentObject);
          });
          this.emitModel(emitter, obj);
        }
      }
    } else if (is.array(type)) {
      if (is.object(type.itemType)) {
        const objectName = this.resolveName(type.itemType.objectName);
        if (parentObject && parentObject.indexOf(objectName) > -1) {
          return;
        }
        parentObject.push(objectName);
        this.findUndefinedModel(emitter, type.itemType, parentObject);
      } else {
        this.findUndefinedModel(emitter, type.itemType, parentObject);
      }
    } else if (is.map(type)) {
      if (is.object(type.valType)) {
        const objectName = this.resolveName(type.valType.objectName);
        if (parentObject && parentObject.indexOf(objectName) > -1) {
          return;
        }
        parentObject.push(objectName);
        this.findUndefinedModel(emitter, type.valType, parentObject);
      } else {
        this.findUndefinedModel(emitter, type.valType, parentObject);
      }
    }
    return parentObject;
  }