findProperty()

in lib/semantic.js [527:582]


  findProperty(model, propName, isException = false, moduleName, extendFrom = []) {
    let find = model.modelBody.nodes.find((item) => {
      return item.fieldName.lexeme === propName;
    });
    if(find) {
      return {
        modelField: find,
        modelName: model.modelName.lexeme,
        extendFrom: extendFrom,
      };
    }

    if(!model.extendOn && !isException) {
      return;
    }
    let extendModel;
    let checker = this;
    
    if(!model.extendOn && isException) {
      extendModel = builtin.get('$Error');
      isException = false;
    } else if (model.extendOn.type === 'moduleModel') {
      const [ main, ...path ] = model.extendOn.path;
      moduleName = main.lexeme;
      checker = this.dependencies.get(moduleName);
      const typeName = path.map((item) => {
        return item.lexeme;
      }).join('.');
      extendModel = checker.models.get(typeName);
    } else if (model.extendOn.type === 'subModel') {
      let modelName = model.extendOn.path.map((tag) => {
        return tag.lexeme;
      }).join('.');
      extendModel = this.models.get(modelName);
    } else if (model.extendOn.idType === 'builtin_model') {
      extendModel = builtin.get(model.extendOn.lexeme);
    } else {
      extendModel = this.models.get(model.extendOn.lexeme);
    }

    // console.log(model)
    extendFrom.push({
      moduleName,
      modelName: extendModel.modelName.lexeme
    });

    find = checker.findProperty(extendModel, propName, isException, moduleName, extendFrom);

    if(!find) {
      return;
    }
    return { 
      moduleName,
      ...find
    };
  }