Skip to content

Commit 2ac8cf5

Browse files
feat: 支持通过hooks处理enum types (#381)
* feat: 支持通过hooks处理enum types * chore: add changelog --------- Co-authored-by: 故城 <1055120207@qq.com>
1 parent f5d7e5f commit 2ac8cf5

File tree

6 files changed

+54
-5
lines changed

6 files changed

+54
-5
lines changed

.changeset/real-suns-move.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"openapi-ts-request": minor
3+
---
4+
5+
feat: 支持通过hooks处理enum types

src/generator/serviceGenarator.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,11 +359,19 @@ export default class ServiceGenerator {
359359
// 生成枚举翻译
360360
const enums = filter(this.interfaceTPConfigs, (item) => item.isEnum);
361361
if (!isGenJavaScript && !isOnlyGenTypeScriptType && !isEmpty(enums)) {
362+
const hookCustomTemplateService =
363+
this.config.hook?.customTemplates?.[
364+
TypescriptFileType.displayEnumLabel
365+
];
366+
362367
this.genFileFromTemplate(
363368
`${displayEnumLabelFileName}.ts`,
364369
TypescriptFileType.displayEnumLabel,
365370
{
366-
list: enums,
371+
customTemplate: !!hookCustomTemplateService,
372+
list: hookCustomTemplateService
373+
? hookCustomTemplateService(enums, this.config)
374+
: enums,
367375
namespace: this.config.namespace,
368376
interfaceFileName: interfaceFileName,
369377
}
@@ -381,11 +389,19 @@ export default class ServiceGenerator {
381389
this.config.isDisplayTypeLabel &&
382390
!isEmpty(displayTypeLabels)
383391
) {
392+
const hookCustomTemplateService =
393+
this.config.hook?.customTemplates?.[
394+
TypescriptFileType.displayTypeLabel
395+
];
396+
384397
this.genFileFromTemplate(
385398
`${displayTypeLabelFileName}.ts`,
386399
TypescriptFileType.displayTypeLabel,
387400
{
388-
list: displayTypeLabels,
401+
customTemplate: !!hookCustomTemplateService,
402+
list: hookCustomTemplateService
403+
? hookCustomTemplateService(enums, this.config)
404+
: enums,
389405
namespace: this.config.namespace,
390406
interfaceFileName: interfaceFileName,
391407
}
@@ -569,6 +585,7 @@ export default class ServiceGenerator {
569585
isEnum: enumObj.isEnum,
570586
displayLabelFuncName: camelCase(`display-${item.name}-Enum`),
571587
enumLabelType: enumObj.enumLabelType,
588+
description: enumObj.description,
572589
});
573590
}
574591
});
@@ -1251,6 +1268,7 @@ export default class ServiceGenerator {
12511268
isEnum: true,
12521269
type: Array.isArray(enumArray) ? enumStr : 'string',
12531270
enumLabelType: enumLabelTypeStr,
1271+
description: schemaObject.description,
12541272
};
12551273
}
12561274

src/generator/type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export interface ITypeItem {
3939
isEnum: boolean;
4040
displayLabelFuncName?: string;
4141
enumLabelType?: string;
42+
description?: string;
4243
}
4344

4445
export type ICustomSchemaObject = SchemaObject & { isAllowed?: boolean };

src/index.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,21 @@ export type GenerateServiceProps = {
238238
* 自定义模板
239239
*/
240240
customTemplates?: {
241+
/**
242+
* 自定义 displayTypeLabel 模板
243+
*/
244+
[TypescriptFileType.displayTypeLabel]?: <T, U>(
245+
types: T[],
246+
config: U
247+
) => string;
248+
/**
249+
* 自定义 displayEnumLabel 模板
250+
*/
251+
[TypescriptFileType.displayEnumLabel]?: <T, U>(
252+
enums: T[],
253+
config: U
254+
) => string;
255+
241256
/**
242257
* 自定义 serviceController 模板
243258
*/

templates/displayEnumLabel.njk

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22
// @ts-ignore
33
import * as {{ namespace }} from './{{ interfaceFileName }}';
44

5+
{% if customTemplate %}
6+
{{ list }}
7+
{% else %}
8+
59
{% for type in list -%}
610
export function {{ type.displayLabelFuncName }}(field: {{ namespace }}.{{ type.typeName }}) {
711
return ({{ type.enumLabelType }})[field]
812
}
913

10-
{% endfor -%}
14+
{% endfor -%}
15+
{%- endif %}

templates/displayTypeLabel.njk

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// @ts-ignore
33
import * as {{ namespace }} from './{{ interfaceFileName }}';
44

5+
{% if customTemplate %}
6+
{{ list }}
7+
{% else %}
8+
59
{% for type in list -%}
610
{%- if type.props.length %}
711
export function display{{ type.typeName }}(field: keyof {{ namespace }}.{{ type.typeName }}) {
@@ -20,7 +24,7 @@ import * as {{ namespace }} from './{{ interfaceFileName }}';
2024
display{{ p.type | safe }}(field as keyof {{ namespace }}.{{ p.type }})
2125
{%- else %}
2226
{{ p.name }}: '{{ p.desc if p.desc else p.name }}',
23-
{%- endif %}
27+
{%- endif %}
2428
{%- endfor %}
2529
{%- if prop.length > 1 %}
2630
}[field]
@@ -39,4 +43,5 @@ import * as {{ namespace }} from './{{ interfaceFileName }}';
3943
}
4044
{%- endif %}
4145

42-
{% endfor -%}
46+
{% endfor -%}
47+
{%- endif %}

0 commit comments

Comments
 (0)