Skip to content

Commit aaff311

Browse files
committed
feat: support x-discriminator for OpenAPI 2
related to #496
1 parent 6ea2b7b commit aaff311

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

src/services/models/Schema.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class SchemaModel {
111111
return;
112112
}
113113

114-
if (!isChild && schema.discriminator !== undefined) {
114+
if (!isChild && getDiscriminator(schema) !== undefined) {
115115
this.initDiscriminator(schema, parser);
116116
return;
117117
}
@@ -171,7 +171,8 @@ export class SchemaModel {
171171
},
172172
parser: OpenAPIParser,
173173
) {
174-
this.discriminatorProp = schema.discriminator!.propertyName;
174+
const discriminator = getDiscriminator(schema)!;
175+
this.discriminatorProp = discriminator.propertyName;
175176
const derived = parser.findDerived([...(schema.parentRefs || []), this._$ref]);
176177

177178
if (schema.oneOf) {
@@ -184,7 +185,7 @@ export class SchemaModel {
184185
}
185186
}
186187

187-
const mapping = schema.discriminator!.mapping || {};
188+
const mapping = discriminator.mapping || {};
188189
for (const name in mapping) {
189190
derived[mapping[name]] = name;
190191
}
@@ -257,3 +258,7 @@ function buildFields(
257258

258259
return fields;
259260
}
261+
262+
function getDiscriminator(schema: OpenAPISchema): OpenAPISchema['discriminator'] {
263+
return schema.discriminator || schema['x-discriminator'];
264+
}

src/types/index.d.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
export * from './open-api';
22

3-
export type Diff<T extends string, U extends string> = ({ [P in T]: P } &
4-
{ [P in U]: never } & { [x: string]: never })[T];
5-
export type Omit<T, K extends keyof T> = { [P in Diff<keyof T, K>]: T[P] };
3+
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

src/types/open-api.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Omit } from './';
1+
import { Omit } from './index';
22

33
export interface OpenAPISpec {
44
openapi: string;

0 commit comments

Comments
 (0)