resolve()

in src/resolver/client.js [77:139]


  resolve() {
    const object = this.object;
    const combinator = this.combinator;
    const config = this.config;
    const ast = this.ast;

    combinator.config.emitType = 'client';
    object.name = config.clientName || 'Client';

    // resolve props
    this.resolveProps(ast);

    // resolve global annotation
    if (ast.annotation) {
      this.initAnnotation(ast.annotation);
    }
    object.topAnnotation.push(new AnnotationItem(
      object.index,
      'single',
      config.generateFileInfo
    ));

    // resolve extends
    if (ast.extends) {
      object.extends.push(`^${ast.extends.lexeme}`);
    } else if (config.baseClient) {
      let extendsClass = [];
      if (Array.isArray(config.baseClient)) {
        config.baseClient.forEach(item => extendsClass.push(`^${item}`));
      } else {
        extendsClass = [`^${config.baseClient}`];
      }
      object.extends = extendsClass;
    }

    // resolve construct body
    const [init] = ast.moduleBody.nodes.filter((item) => {
      return item.type === 'init';
    });
    if (init) {
      this.resolveInitBody(init);
    }

    // resolve api
    ast.moduleBody.nodes.filter((item) => {
      return item.type === 'api';
    }).forEach(item => {
      const func = new FuncItem();
      func.name = item.apiName.lexeme;
      this.resolveFunc(func, item, item.apiBody);
    });

    // resolve function
    ast.moduleBody.nodes.filter((item) => {
      return item.type === 'function';
    }).forEach(item => {
      const func = new FuncItem();
      func.name = item.functionName.lexeme;
      this.resolveFunc(func, item, item.functionBody);
    });

    return object;
  }