Coder Social home page Coder Social logo

aliyun / darabonba Goto Github PK

View Code? Open in Web Editor NEW
1.0K 16.0 90.0 1.74 MB

Darabonba 是一种用于 OpenAPI 的 DSL 语言,可以用来生成多语言的 SDK、Code Sample、Test Case 等代码

License: Other

JavaScript 100.00%
darabonba aliyun dsl geteway

darabonba's Introduction

Darabonba Logo

Darabonba

NPM version Node.js CI codecov npm download

一种 OpenAPI 应用的领域特定语言。可以利用它为任意风格的接口生成多语言的 SDK、代码示例、测试用例、接口编排等。

概念

Darabonba 概念图

组件

文档

安装

$ npm install @darabonba/cli -g

该命令执行后会具有一个 dara 命令,关于 dara 命令的详情可参考 CLI

钉钉群(群号:34664551)

Darabonba钉钉群

案例

许可证

Apache-2.0

Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

darabonba's People

Contributors

axiosleo avatar cctv1005s avatar dependabot[bot] avatar jacksontian avatar jasonhzq avatar legenddcr avatar peze avatar xiezhenouc avatar yndu13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

darabonba's Issues

文档问题

Model 的字段描述 章节的使用示例中的字段缺少 ?,否则不生效。如下:

model User {
  username?: string(
    description="登陆账号",
    example="johny",
    maxLength=32,
    minLength=5,
    pattern="[a-z0-9A-Z]+"
  ),
  age?: number(
    description="年龄",
    example="18",
    maximum=150,
    minimum=0,
    default=18
  )
}

代码仓库问题

1、自己本地写了一个dara模块,本地dara模块怎么相互调用,且本地dara模块的调用不应该涉及到远程仓库。
2、dara install的时候会在当前的dara模块下建立仓库,但是本地有多个dara模块要引用多个同一个远程dara仓库的时候就会重复下载。导致在每个dara模块下都有各自的仓库,非常不符合用户使用习惯,希望能设置一个本地仓库,dara模模块引用的时候先扫描本地仓库,在扫描远程仓库。解决在本地多个dara模块相互调用的问题。

钉钉群二维码已经过期

最近尝试用语雀SDK进行开发,但是语雀没有Java相关的SDK,只有Node.JS/Go/Python的SDK Demo,在同学的介绍下,认识到阿里有的darabonba,刚好能解决我的问题,所以想进一步调研和交流,发现二维码已经过期

模块引用匹配问题

在引用的模块中,如果引用的名字跟被引用的名字不相同会造成无法解析的报错:

image
在使用这个包初始化的代码中用不同的名字
image
image

dara format 相关问题

  1. 在main函数中存在argsn,在进行dara format的时候会报错。
    代码:
    static async function main(args: [ string ])throws : void { var a = args[0]; }
    报错信息:
    exec error : Error: unimpelemented at Formatter.visitExpr (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:511:13) at Formatter.visitDeclare (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:597:10) at Formatter.visitStmt (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:242:12) at Formatter.visitStmts (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:609:12) at Formatter.visitFunction (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:117:12) at Formatter.visit (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/formatter.js:66:14) at FormatCommand.exec (/opt/homebrew/lib/node_modules/@darabonba/cli/commands/format.js:42:15) at CommandsApplication.exec (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/app.js:154:13) at CommandsApplication.run (/opt/homebrew/lib/node_modules/@darabonba/cli/lib/app.js:34:12) at Object.<anonymous> (/opt/homebrew/lib/node_modules/@darabonba/cli/bin/dara.js:45:5)

  2. 若代码中存在for列表循环,dara format会将‘:’替换为'in',导致报错。
    原代码
    for (var a : response.body.list) { Console.log(a.b); }
    格式化之后代码
    for (var a in response.body.list) { Console.log(a.b); }
    导致报错
    SyntaxError: Unexpected token: Word:in. Expect :, but Word: inat Parser.error (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/node_modules/@jacksontian/skyline/lib/parser.js:56:11) at Parser.match (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/node_modules/@jacksontian/skyline/lib/parser.js:21:12) at Parser.forStmt (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1604:10) at Parser.stmt (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1653:19) at Parser.stmts (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1465:23) at Parser.blockStmts (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1477:22) at Parser.functionBody (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1791:24) at Parser.fun (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:1770:27) at Parser.moduleBody (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:138:21) at Parser.module (/opt/homebrew/lib/node_modules/@darabonba/cli/node_modules/@darabonba/parser/lib/parser.js:105:24)

建议支持生成注释

开发者在定义 tea 文件时通常会添加相应的注释, 但现在生成的 SDK 中似乎没有包含注释在里面.
对于使用方(其他开发者)而言, SDK 变得难以理解, 各种方法和字段的使用方式基本靠猜.

dara publish 注释问题

使用:dara publish 时候报错,原因是dara 文件中的多行注释导致的。

main.dara

type @organization = string

// 定义一个 model
model User {
  name: string,
  age: number
}

/**
 * 模块的初始化函数
 * @param organization 
 */
init(organization: string) {
  @organization = organization;
}

/**
 * 模块的静态方法
 * @param username 
 * @param age
 */
static function getUser(username: string, age: number): string {
  var user = new User{
    name = username,
    age = age
  };
  return `user's name is ${user.name} ,user's age is ${user.age}! `;
} 

报错原因:
1633881542(1)

async function

写api方法的时候python代码总是会同时生成异步方法和同步方法,可是我并不想要异步方法,有没有开关可以关闭异步方法的生成啊?

如何发音

Darabonba 这个单词如何发音,是何含义?

使用 submodel 的时候,报 the submodel ComplexRequest.instance is inexist 错误

// source 代码
init();

model Request = {
  accesskey?: string(name='accesskey', description='accesskey'),
  region?: string(name='region', description='region'),
  instance: {
    instanceId: string(name='instanceId', description='instanceId'),
  }(name='instance', description='instance'),
}
// 错误代码
import Source;

model ComplexRequest = {
  instance: Source.Request.instance,
}

model Response {
  instance: ComplexRequest.instance,
}

SyntaxError: the submodel ComplexRequest.instance is inexist
at TypeChecker.error (node_modules/@[email protected]@@darabonba/parser/lib/semantic.js:338:11)
at TypeChecker.checkType (node_modules/
@[email protected]@@darabonba/parser/lib/semantic.js:743:16)
at TypeChecker.flatModel (node_modules/@[email protected]@@darabonba/parser/lib/semantic.js:2107:16)
at TypeChecker.visitModel (node_modules/
@[email protected]@@darabonba/parser/lib/semantic.js:2132:10)
at models.forEach (node_modules/@[email protected]@@darabonba/parser/lib/semantic.js:356:12)
at Array.forEach ()
at TypeChecker.checkModels (node_modules/
@[email protected]@@darabonba/parser/lib/semantic.js:355:12)
at TypeChecker.check (node_modules/@[email protected]@@darabonba/parser/lib/semantic.js:524:10)
at getChecker (node_modules/
@[email protected]@@darabonba/parser/lib/semantic.js:2140:44)
at analyze (node_modules/@[email protected]@@darabonba/parser/lib/semantic.js:2144:19)
at Object.parse (node_modules/
@[email protected]@@darabonba/parser/index.js:13:15)
at check (test/main.test.js:19:19)

支持 Callback

Callback 作为一类特殊的 function,主要用于解决回调函数,事件等。

生成sdk 报错

import Util;

type @endpoint_host = string
type @protocol = string

model Config {
  endpoint: string,
  protocol: string
}

init(config: Config){
  @endpoint_host = config.endpoint;
  @protocol = config.protocol;
}

model RawGetRequest {
  Key: string,
}

model RawGetResponse{  
	code: number,
	msg: string,
	data: string
}

api rawgetModule(pathname: string, query: RawGetRequest): RawGetResponse {
  __request.protocol = @protocol;
  __request.method = 'POST';
  __request.pathname = `/api/v1/raw/get`;
  __request.headers = {
    host = @endpoint_host,
    content-type = 'application/json; charset=utf-8'
  };
  __request.query = Util.toJSONString(query);  
} returns {
  var result = Util.assertAsMap(Util.readAsJSON(__response.body));

  if (!Util.equalNumber(__response.statusCode, 200)) {
    throw {
      message = `code: ${__response.statusCode}, ${result.code} reason: ${result.msg}`,
      code = `${result.code}`
    };
  }

  if (!Util.assertAsBoolean(result.ok)) {
    throw {
      message = `code: ${result.status}, ${result.code} reason: ${result.msg}`,
      code = `${result.code}`
    };
  }
  return result;
} runtime {
  timeout = 1000 // 10s 的过期时间
}

报错如下

exec error :
SyntaxError: Unexpected token / in JSON at position 110
    at JSON.parse (<anonymous>)
    at CodegenCommand.exec (/Users/jiashiwen/node-v16.13.0-darwin-x64/lib/node_modules/@darabonba/cli/commands/codegen.js:116:22)
    at CommandsApplication.exec (/Users/jiashiwen/node-v16.13.0-darwin-x64/lib/node_modules/@darabonba/cli/lib/app.js:154:13)
    at CommandsApplication.run (/Users/jiashiwen/node-v16.13.0-darwin-x64/lib/node_modules/@darabonba/cli/lib/app.js:34:12)
    at Object.<anonymous> (/Users/jiashiwen/node-v16.13.0-darwin-x64/lib/node_modules/@darabonba/cli/bin/dara.js:45:5)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)

不知道是那句语法错了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.