visitMapAccess()

in lib/generator.js [2035:2060]


  visitMapAccess(ast, level, env = {}) {
    assert.equal(ast.type, 'map_access');
    let expr;
    if (ast.id.tag === DSL.Tag.Tag.VID) {
      expr = `self.${_snakeCase(_vid(ast.id))}`;
    } else {
      expr = `${_avoidKeywords(_snakeCase(_name(ast.id)))}`;
    }
    const prefix = env.left ? '[' : '.get(';
    const suffix = env.left ? ']' : ')';
    if (ast.propertyPath && ast.propertyPath.length) {
      var current = ast.id.inferred;
      for (var i = 0; i < ast.propertyPath.length; i++) {
        var name = _name(ast.propertyPath[i]);
        if (current.type === 'model') {
          expr += `.${_avoidKeywords(_snakeCase(name))}`;
        } else {
          expr += `${prefix}"${name}"${suffix}`;
        }
        current = ast.propertyPathTypes[i];
      }
    }
    this.emit(`${expr}${prefix}`);
    this.visitExpr(ast.accessKey, level);
    this.emit(suffix);
  }