UNPKG

7.92 kBMarkdownView Raw
1# dts-from-thrift
2
3[![npm version](https://badge.fury.io/js/dts-from-thrift.svg)](https://www.npmjs.com/package/dts-from-thrift)[![build](https://travis-ci.org/LPegasus/dts-from-thrift.svg?branch=master)](https://travis-ci.org/LPegasus/dts-from-thrift)[![coverage](https://img.shields.io/codecov/c/github/LPegasus/dts-from-thrift.svg?style=flat-square)](https://codecov.io/gh/LPegasus/dts-from-thrift)[![install size](https://packagephobia.now.sh/badge?p=dts-from-thrift)](https://packagephobia.now.sh/result?p=dts-from-thrift)
4
5thrift RPC 定义文件转 d.ts 工具
6
7**安装(install):** `npm install dts-from-thrift -g`
8
9**运行(exec):**`dts-from-thrift -p ~/git/my-thrift-repo/thrift -o ~/git/my-ts-repo/typings`
10
11由于实现全靠正则,特殊 case 无法避免,可以提 issue 或者 PR。
12
13(The tool use RegExp to generate d.ts file. If some special statement cases causes bugs, an issue or a PR is welcome.)
14
15# 变更历史(ChangeLog)
16
17## 1.1.4 - 2020.04.28
18
19### Changed
20
21- 优化 thrift 文件生成的代码格式 ([@mehwww](https://github.com/mehwww) in [#22](https://github.com/LPegasus/dts-from-thrift/pull/22))
22
23## 1.1.3 - 2020.03.29
24
25### Breaking Change
26
27- protobuf 所有字段均为 optional,与 pb3 一致
28
29## 1.1.0 - 2020.03.19
30
31### Breaking Change
32
33- 删除 `--new` 传参,只保留 ast 解析
34
35### Changed
36
37- 将行尾注释放到该行上面,使用 `/** */` 标注,以使得 vscode 可提示注释内容
38
39## 1.0.3 - 2019.11.18
40
41### Bugfix
42
43- 修复 const enum 为空的报错 [commit](https://github.com/LPegasus/dts-from-thrift/pull/19)
44
45## 1.0.2 - 2019.10.29
46
47### Bugfix
48
49- 老的 protobuf 转换类型逻辑受 1.0.0 功能影响,回滚老的代码逻辑
50
51## 1.0.0 - 2019.10.20
52
53### Added
54
55- 新增 `--i64` 参数
56
57 i64 转换成 string 或 Int64 对象**(需要加 --new 参数)**
58
59 ```shell
60 node ./bin/dts-from-[thrift|protobuf] -p ./test/idl/ \
61 -o ./test/idl/out/ \
62 --new --i64 string
63 ```
64
65- 新增 `--enum-json` 参数
66
67 把 thrift idl 中的 const 输出到 d.ts 和 enum.json 中,用于类型提示或者自定义 babel 插件(for byted-react-scripts)
68
69 默认输出在 enums.json 文件中
70
71 > 注意:d.ts 中的 const 在编译过程中并不会被转换。效果可以运行根目录下的 run.sh 来查看。
72
73- 新增 `--map` 参数
74
75 支持 thrift idl 中的 `map<type_a, type_b>` 输出到 `Record<string, type_b>`
76
77 > 注意:Record 对于 key 的支持只有 number,string,symbol,所以 `type_a` 强制为 `string`。
78
79 栗子:
80
81 ```shell
82 node ./bin/dts-from-[thrift|protobuf] -p ./test/idl/ \
83 -o ./test/idl/out/ \
84 --new --i64 string --map
85 ```
86
87## 1.0.0-rc.10 - 2019.9.8
88
89针对 struct 中的 field 是否是 optional 进行了梳理,详见`test/thriftNew/readCode.test.ts` line649 和下表,主要是针对`/\w+Response/i`和`/\w+Request/i`做了特殊处理,以符合实际的 idl 语义
90
91| 是否可选 | requeird | 无(默认) | optional |
92| ------------------------------------ | -------- | ------------- | -------- |
93| \*response | false | false | true |
94| \*response & defualt value | False | false | true |
95| \*request | false | false\|true\* | true |
96| \*request & default value | false | true | true |
97| Use-strict | false | true | true |
98| No-use-strict | false | false | true |
99| [^request\|response] & Default value | false | true | true |
100
101"\*"表示需要标记`strict-request`开启,表示是业务定制
102
103## 1.0.0-rc.6 - 2019.8.19
104
105### Added
106
107- 新增 `--strict-response` 传参
108
109 指定后如果 struct 名称包含 Response(例如:`ListResponse`),那么它的字段如果有 defaultValue 词缀,则此字段不会有 optional 标识
110
111 ```ts
112 /*
113 struct CreateResponse {
114 255: optional i32 err_no (defaultValue=0);
115 }
116 */
117
118 interface CreateResponse {
119 err_no: number; // 不指定的时候是 err_no?: number;
120 }
121 ```
122
123## 1.0.0-rc.5 - 2019.8.9
124
125### Added
126
127- dts-from-thrift 保留注释和注解
128
129## 1.0.0-rc.3 - 2019.7.12
130
131### Fixed
132
133- dts-from-protobuf 旧逻辑没有适配 `--i64_as_number` 参数
134
135## 1.0.0-rc.2 - 2019.6.25
136
137### Added
138
139- protobuf 如果没有 package,将尝试从 options 中取一个名称作为 namespace。如果没有 options,取文件路径为 namespace
140- dts-from-protobuf 新增 `--i64_as_number` 参数,将 i64 降级为 number
141
142## 1.0.0-rc.1 - 2019.6.24
143
144### Changed
145
146- protobuf 如果没有 package,将跳过该文件,而非中断报错
147
148## 1.0.0-rc.0 - 2019.6.5
149
150### Added
151
152- 新增 `--new` 参数,分别使用 [protobufjs](https://github.com/protobufjs/protobuf.js) 解析 pb、使用 [@creditkarma/thrift-parser](https://github.com/creditkarma/thrift-parser) 解析 thrift
153
154## 0.9.0-beta.1 - 2019.1.7
155
156### Bugfix
157
158- `thrift` `Struct` 字段如果定义了 `defaultValue`,生成的 dts 字段将带 `?`
159
160 fields in `thrift Struct` with `defaultValue` will attach a `?` when in `d.ts` file
161
162## 0.9.0-beta.0 - 2019.1.2
163
164### Breaking Change
165
166- thrift `i64` 类型会被生成为 `Int64` 的接口类型。该接口定义在 `tsHelper.d.ts` 中
167
168## 0.8.8 - 2018.12.28
169
170### Bugfix
171
172- 正确解析有多个形参的 service
173
174 parse service with multiple params currectly
175
176## 0.8.6 - 2018.12.27
177
178### Bugfix
179
180- 正确解析单行 service 声明
181
182 parse single line service declaration currectly.
183
184- typeof 泛型映射修复
185
186 typedef generic type fix
187
188## 0.8 - 2018.11.26
189
190### Added
191
192- 为 `${namespace}._Summary_` 接口增加了 `WrapperService` 推导函数。用来解决 `i64` 转 number 在 js 下需要特殊处理的问题。可以通过扩展 `Int64Type` 接口来实现自己的 `i64` 类型适配
193
194 Add a type inference wrapper function to process the i64 type. Extends the `Int64Type` interface for customization.
195
196## 0.7 - 2018.11.20
197
198### Added
199
200- `dts-from-thrift` 支持合并 service 到一个定义文件中
201
202 使用 `--rpc-namespace=xxx` 来指定需要合并到的 namespace 中,并且可以通过 `${namespace}._Summary_` 来获得一个总的 interface 用以继承
203
204 ```javascript
205 > dts-from-thrift -p ./ -o ../typings --rpc-namespace=demo.rpc
206 // 你输入的命令 (the Command you input)
207 > RPC d.ts files is /Users/xxx/projectpath/typings/demo.rpc-rpc.d.ts
208 // 生成的 rpc 定义文件 (the rpc definition file name)
209 ```
210
211 使用 \_Summary* 继承 rpc 接口 (use \_Summary* to extends)
212
213 ```typescript
214 interface MyRPCContainer extends demo.rpc._Summary_ {}
215 ```
216
217### Bugfix
218
219- 修复 service 无形参接口的报错问题
220
221 fix service interfaces which are without input params
222
223## 0.6 - 2018.11.13
224
225### Added
226
227- thrift 现在支持生成 `service RpcService {}` 定义
228
229 (support service definition)
230
231 ```typescript
232 // thrift sample
233 service RpcService {
234 ResponseType interface1 (1: RequestType req);
235 }
236
237 // generate code
238 export interface RpcService {
239 interface1(req: RequestType): Promise<ResponseType>;
240 }
241 ```
242
243## 0.5
244
245### Added
246
247- dts-from-protobuf 支持
248
249 (add dts-from-protobuf CLI, support protobuf)
250
251 `dts-from-protobuf -p <protobuf_idl_dir> -o <output_dir>`
252
253## 0.4
254
255### Added
256
257- --use-tag CLI option,来支持下面的语法
258
259 (add a new option [--use-tag] to replace original fieldname with tagname)
260
261 ```csharp
262 struct Foo {
263 1: list<string> comments (go.tag="json:\\"list,omitempty\\""),
264 }
265
266 // before 0.4.0
267 interface Foo {
268 comments: string[];
269 }
270
271 // after 0.4.0 with [--use-tag go]
272 interface Foo {
273 list: string[];
274 }
275 // detail in parseStruct.test.ts
276 ```
277
278### Changed
279
280- codestyle: 生成文件增加 `// prettier-ignore` 避免 format 导致的 git 提交
281
282 (add `// prettier-ignore` at head of d.ts file to prevent useless git commit)
283
\No newline at end of file