diff --git a/docs/public/sitemap.xml b/docs/public/sitemap.xml
index b36d4f0d7..e3d62144c 100644
--- a/docs/public/sitemap.xml
+++ b/docs/public/sitemap.xml
@@ -4,99 +4,134 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
- https://orval.dev/guides/angular
-
-
-
- 2023-11-14
- https://orval.dev/guides/basics
-
-
-
- 2023-11-14
- https://orval.dev/guides/custom-axios
-
-
-
- 2023-11-14
- https://orval.dev/guides/custom-client
-
-
-
- 2023-11-14
- https://orval.dev/guides/react-query
-
-
-
- 2023-11-14
- https://orval.dev/guides/set-base-url
-
-
-
- 2023-11-14
- https://orval.dev/guides/svelte-query
-
-
-
- 2023-11-14
- https://orval.dev/guides/swr
-
-
-
- 2023-11-14
- https://orval.dev/guides/vue-query
-
-
-
- 2023-11-14
- https://orval.dev/installation
-
-
-
- 2023-11-14
- https://orval.dev/overview
-
-
-
- 2023-11-14
- https://orval.dev/quick-start
-
-
-
- 2023-11-14
- https://orval.dev/reference/cli
-
-
-
- 2023-11-14
- https://orval.dev/reference/configuration/full-example
-
-
-
- 2023-11-14
- https://orval.dev/reference/configuration/hooks
-
-
-
- 2023-11-14
- https://orval.dev/reference/configuration/input
-
-
-
- 2023-11-14
- https://orval.dev/reference/configuration/output
-
-
-
- 2023-11-14
- https://orval.dev/reference/configuration/overview
-
-
-
- 2023-11-14
- https://orval.dev/reference/integration
-
-
-
- 2023-11-14
-
\ No newline at end of file
+
+
+ https://orval.dev/guides/angular
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/basics
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/client-with-zod
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/custom-axios
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/custom-client
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/enums
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/fetch-client
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/fetch
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/hono
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/msw
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/react-query
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/set-base-url
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/svelte-query
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/swr
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/vue-query
+ 2025-04-02
+
+
+
+ https://orval.dev/guides/zod
+ 2025-04-02
+
+
+
+ https://orval.dev/installation
+ 2025-04-02
+
+
+
+ https://orval.dev/overview
+ 2025-04-02
+
+
+
+ https://orval.dev/quick-start
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/cli
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/configuration/full-example
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/configuration/hooks
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/configuration/input
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/configuration/output
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/configuration/overview
+ 2025-04-02
+
+
+
+ https://orval.dev/reference/integration
+ 2025-04-02
+
+
\ No newline at end of file
diff --git a/docs/src/manifests/manifest.json b/docs/src/manifests/manifest.json
index 6fc531692..b190ab3a6 100644
--- a/docs/src/manifests/manifest.json
+++ b/docs/src/manifests/manifest.json
@@ -99,6 +99,11 @@
"title": "Hono",
"path": "/guides/hono",
"editUrl": "/guides/hono.md"
+ },
+ {
+ "title": "Enum names",
+ "path": "/guides/enums",
+ "editUrl": "/guides/enums.md"
}
]
},
diff --git a/docs/src/pages/guides/enums.md b/docs/src/pages/guides/enums.md
new file mode 100644
index 000000000..2e19b34f9
--- /dev/null
+++ b/docs/src/pages/guides/enums.md
@@ -0,0 +1,53 @@
+---
+id: enums
+title: Enum Names
+---
+
+You can extend your OpenAPI schema to include enum names for your enum values. This will let Orval generate your enums with the correct names.
+
+#### Example of OpenAPI schema
+
+```yaml
+openapi: '3.1.0'
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ license:
+ name: MIT
+components:
+ schemas:
+ MyObject:
+ type: object
+ properties:
+ myEnum:
+ type: number
+ enum:
+ - 1
+ - 2
+ - 3
+ - 4
+ x-enumNames:
+ - One
+ - Two
+ - Three
+ - Four
+```
+
+The enum generated by Orval will be
+
+```ts
+export const MyEnum {
+ One: 1,
+ Two: 2,
+ Three: 3,
+ Four: 4
+} as const;
+```
+
+#### Valid enum name extensions
+
+Orval recognizes the following extensions:
+
+- x-enumNames
+- x-enumnames
+- x-enum-varnames
diff --git a/packages/core/src/generators/schema-definition.ts b/packages/core/src/generators/schema-definition.ts
index 5c3237fa1..1e101120c 100644
--- a/packages/core/src/generators/schema-definition.ts
+++ b/packages/core/src/generators/schema-definition.ts
@@ -1,6 +1,6 @@
import isEmpty from 'lodash.isempty';
import type { SchemaObject, SchemasObject } from 'openapi3-ts/oas30';
-import { getEnum, resolveDiscriminators } from '../getters';
+import { getEnum, getEnumNames, resolveDiscriminators } from '../getters';
import { resolveRef, resolveValue } from '../resolvers';
import type {
ContextSpecs,
@@ -84,7 +84,7 @@ export const generateSchemasDefinition = (
output += getEnum(
resolvedValue.value,
schemaName,
- resolvedValue.originalSchema?.['x-enumNames'],
+ getEnumNames(resolvedValue.originalSchema),
context.output.override.useNativeEnums,
);
} else if (schemaName === resolvedValue.value && resolvedValue.isRef) {
diff --git a/packages/core/src/getters/combine.ts b/packages/core/src/getters/combine.ts
index 3b60f2cef..6907019de 100644
--- a/packages/core/src/getters/combine.ts
+++ b/packages/core/src/getters/combine.ts
@@ -8,7 +8,7 @@ import {
SchemaType,
} from '../types';
import { getNumberWord, pascal, isSchema } from '../utils';
-import { getEnumImplementation } from './enum';
+import { getEnumImplementation, getEnumNames } from './enum';
import { getScalar } from './scalar';
import uniq from 'lodash.uniq';
@@ -282,7 +282,7 @@ const getCombineEnumValue = ({
return `...${e},`;
}
- const names = originalSchema[i]?.['x-enumNames'] as string[];
+ const names = getEnumNames(originalSchema[i]);
return getEnumImplementation(e, names);
})
diff --git a/packages/core/src/getters/enum.ts b/packages/core/src/getters/enum.ts
index 01b06d0a8..7405cda58 100644
--- a/packages/core/src/getters/enum.ts
+++ b/packages/core/src/getters/enum.ts
@@ -1,6 +1,15 @@
import { keyword } from 'esutils';
+import { SchemaObject } from 'openapi3-ts/dist/model/openapi30';
import { isNumeric, sanitize } from '../utils';
+export const getEnumNames = (schemaObject: SchemaObject | undefined) => {
+ return (
+ schemaObject?.['x-enumNames'] ||
+ schemaObject?.['x-enumnames'] ||
+ schemaObject?.['x-enum-varnames']
+ );
+};
+
export const getEnum = (
value: string,
enumName: string,
diff --git a/packages/core/src/getters/query-params.ts b/packages/core/src/getters/query-params.ts
index 446a9f870..84c7d28ee 100644
--- a/packages/core/src/getters/query-params.ts
+++ b/packages/core/src/getters/query-params.ts
@@ -8,7 +8,7 @@ import {
GetterQueryParam,
} from '../types';
import { jsDoc, pascal, sanitize } from '../utils';
-import { getEnum } from './enum';
+import { getEnum, getEnumNames } from './enum';
import { getKey } from './keys';
type QueryParamsType = {
@@ -71,7 +71,7 @@ const getQueryParamsTypes = (
const enumValue = getEnum(
resolvedValue.value,
enumName,
- resolvedValue.originalSchema?.['x-enumNames'],
+ getEnumNames(resolvedValue.originalSchema),
context.output.override.useNativeEnums,
);
diff --git a/packages/core/src/resolvers/object.ts b/packages/core/src/resolvers/object.ts
index 28cea3ac8..df5575700 100644
--- a/packages/core/src/resolvers/object.ts
+++ b/packages/core/src/resolvers/object.ts
@@ -1,5 +1,5 @@
import { ReferenceObject, SchemaObject } from 'openapi3-ts/oas30';
-import { getEnum } from '../getters/enum';
+import { getEnum, getEnumNames } from '../getters/enum';
import { ContextSpecs, ResolverValue } from '../types';
import { jsDoc } from '../utils';
import { resolveValue } from './value';
@@ -64,7 +64,7 @@ const resolveObjectOriginal = ({
const enumValue = getEnum(
resolvedValue.value,
propName,
- resolvedValue.originalSchema?.['x-enumNames'],
+ getEnumNames(resolvedValue.originalSchema),
context.output.override.useNativeEnums,
);