Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@antfu/dts-from-thrift
Advanced tools
thrift RPC 定义文件转 d.ts 工具
安装(install): npm install dts-from-thrift -g
运行(exec):dts-from-thrift -p ~/git/my-thrift-repo/thrift -o ~/git/my-ts-repo/typings
由于实现全靠正则,特殊 case 无法避免,可以提 issue 或者 PR。
(The tool use RegExp to generate d.ts file. If some special statement cases causes bugs, an issue or a PR is welcome.)
--new
传参,只保留 ast 解析/** */
标注,以使得 vscode 可提示注释内容新增 --i64
参数
i64 转换成 string 或 Int64 对象**(需要加 --new 参数)**
node ./bin/dts-from-[thrift|protobuf] -p ./test/idl/ \
-o ./test/idl/out/ \
--new --i64 string
新增 --enum-json
参数
把 thrift idl 中的 const 输出到 d.ts 和 enum.json 中,用于类型提示或者自定义 babel 插件(for byted-react-scripts)
默认输出在 enums.json 文件中
注意:d.ts 中的 const 在编译过程中并不会被转换。效果可以运行根目录下的 run.sh 来查看。
新增 --map
参数
支持 thrift idl 中的 map<type_a, type_b>
输出到 Record<string, type_b>
注意:Record 对于 key 的支持只有 number,string,symbol,所以
type_a
强制为string
。
栗子:
node ./bin/dts-from-[thrift|protobuf] -p ./test/idl/ \
-o ./test/idl/out/ \
--new --i64 string --map
针对 struct 中的 field 是否是 optional 进行了梳理,详见test/thriftNew/readCode.test.ts
line649 和下表,主要是针对/\w+Response/i
和/\w+Request/i
做了特殊处理,以符合实际的 idl 语义
是否可选 | requeird | 无(默认) | optional |
---|---|---|---|
*response | false | false | true |
*response & defualt value | False | false | true |
*request | false | false|true* | true |
*request & default value | false | true | true |
Use-strict | false | true | true |
No-use-strict | false | false | true |
[^request|response] & Default value | false | true | true |
"*"表示需要标记strict-request
开启,表示是业务定制
新增 --strict-response
传参
指定后如果 struct 名称包含 Response(例如:ListResponse
),那么它的字段如果有 defaultValue 词缀,则此字段不会有 optional 标识
/*
struct CreateResponse {
255: optional i32 err_no (defaultValue=0);
}
*/
interface CreateResponse {
err_no: number; // 不指定的时候是 err_no?: number;
}
--i64_as_number
参数--i64_as_number
参数,将 i64 降级为 number--new
参数,分别使用 protobufjs 解析 pb、使用 @creditkarma/thrift-parser 解析 thriftthrift
Struct
字段如果定义了 defaultValue
,生成的 dts 字段将带 ?
fields in thrift Struct
with defaultValue
will attach a ?
when in d.ts
file
i64
类型会被生成为 Int64
的接口类型。该接口定义在 tsHelper.d.ts
中正确解析有多个形参的 service
parse service with multiple params currectly
正确解析单行 service 声明
parse single line service declaration currectly.
typeof 泛型映射修复
typedef generic type fix
为 ${namespace}._Summary_
接口增加了 WrapperService
推导函数。用来解决 i64
转 number 在 js 下需要特殊处理的问题。可以通过扩展 Int64Type
接口来实现自己的 i64
类型适配
Add a type inference wrapper function to process the i64 type. Extends the Int64Type
interface for customization.
dts-from-thrift
支持合并 service 到一个定义文件中
使用 --rpc-namespace=xxx
来指定需要合并到的 namespace 中,并且可以通过 ${namespace}._Summary_
来获得一个总的 interface 用以继承
> dts-from-thrift -p ./ -o ../typings --rpc-namespace=demo.rpc
// 你输入的命令 (the Command you input)
> RPC d.ts files is /Users/xxx/projectpath/typings/demo.rpc-rpc.d.ts
// 生成的 rpc 定义文件 (the rpc definition file name)
使用 _Summary* 继承 rpc 接口 (use _Summary* to extends)
interface MyRPCContainer extends demo.rpc._Summary_ {}
修复 service 无形参接口的报错问题
fix service interfaces which are without input params
thrift 现在支持生成 service RpcService {}
定义
(support service definition)
// thrift sample
service RpcService {
ResponseType interface1 (1: RequestType req);
}
// generate code
export interface RpcService {
interface1(req: RequestType): Promise<ResponseType>;
}
dts-from-protobuf 支持
(add dts-from-protobuf CLI, support protobuf)
dts-from-protobuf -p <protobuf_idl_dir> -o <output_dir>
--use-tag CLI option,来支持下面的语法
(add a new option [--use-tag] to replace original fieldname with tagname)
struct Foo {
1: list<string> comments (go.tag="json:\\"list,omitempty\\""),
}
// before 0.4.0
interface Foo {
comments: string[];
}
// after 0.4.0 with [--use-tag go]
interface Foo {
list: string[];
}
// detail in parseStruct.test.ts
codestyle: 生成文件增加 // prettier-ignore
避免 format 导致的 git 提交
(add // prettier-ignore
at head of d.ts file to prevent useless git commit)
FAQs
typescript,thrift,protobuf
We found that @antfu/dts-from-thrift demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.