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 |
|
5 | thrift 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 |