Skip to content

Commit 46f42bd

Browse files
perf: perf parse number enum
1 parent 31fcb5a commit 46f42bd

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

.changeset/gorgeous-radios-fold.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'openapi-ts-request': patch
3+
---
4+
5+
perf: perf parse number enum

src/generator/serviceGenarator.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import {
7575
getLastRefName,
7676
getRefName,
7777
handleDuplicateTypeNames,
78+
isAllNumeric,
7879
isArraySchemaObject,
7980
isBinaryArraySchemaObject,
8081
isNonArraySchemaObject,
@@ -984,10 +985,10 @@ export default class ServiceGenerator {
984985
let enumStr = '';
985986
let enumLabelTypeStr = '';
986987

987-
if (!numberEnum.includes(schemaObject.type)) {
988-
enumStr = `{${map(enumArray, (value) => `${value}="${value}"`).join(',')}}`;
988+
if (numberEnum.includes(schemaObject.type) || isAllNumeric(enumArray)) {
989+
enumStr = `{${map(enumArray, (value) => `NUMBER_${value}=${Number(value)}`).join(',')}}`;
989990
} else {
990-
enumStr = `{${map(enumArray, (value) => `NUMBER_${value}=${value}`).join(',')}}`;
991+
enumStr = `{${map(enumArray, (value) => `${value}="${value}"`).join(',')}}`;
991992
}
992993

993994
// 翻译枚举
@@ -1004,10 +1005,10 @@ export default class ServiceGenerator {
10041005
return `${value}:"${enumLabel}"`;
10051006
}).join(',')}}`;
10061007
} else {
1007-
if (!numberEnum.includes(schemaObject.type)) {
1008-
enumLabelTypeStr = `{${map(enumArray, (value) => `${value}:"${value}"`).join(',')}}`;
1008+
if (numberEnum.includes(schemaObject.type) || isAllNumeric(enumArray)) {
1009+
enumLabelTypeStr = `{${map(enumArray, (value) => `NUMBER_${value}:${Number(value)}`).join(',')}}`;
10091010
} else {
1010-
enumLabelTypeStr = `{${map(enumArray, (value) => `NUMBER_${value}:${value}`).join(',')}}`;
1011+
enumLabelTypeStr = `{${map(enumArray, (value) => `${value}:"${value}"`).join(',')}}`;
10111012
}
10121013
}
10131014

src/generator/util.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import {
22
Dictionary,
33
countBy,
4+
every,
45
filter,
56
forEach,
67
isArray,
78
isBoolean,
89
isEmpty,
910
isNull,
1011
isObject,
12+
isString,
1113
isUndefined,
1214
keys,
1315
map,
@@ -470,3 +472,7 @@ export function resolveRefs(obj: OpenAPIObject, fields: string[]) {
470472
return s;
471473
}, obj);
472474
}
475+
476+
export function isAllNumeric(arr) {
477+
return every(arr, (item) => isString(item) && /^[0-9]+$/.test(item));
478+
}

0 commit comments

Comments
 (0)