Skip to content

Commit 93b76dd

Browse files
fix: Fix schema generation for oneOf when using TS-FETCH client (#18154)
* fix: Fix schema generation for `oneOf` when using TS-FETCH client This fixes the following errors: * Spread types may only be created from object types (on `FromJSONTyped` functions). * Module '"./BlankEnum"' has no exported member 'instanceOfBlankEnum' (enum templaces don't export function used by other API client files). * chore: Regenerate samples
1 parent 191dc1a commit 93b76dd

23 files changed

Lines changed: 90 additions & 2 deletions

File tree

modules/openapi-generator/src/main/resources/typescript-fetch/modelEnum.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
{{>modelEnumInterfaces}}
22

3+
export function instanceOf{{classname}}(value: any): boolean {
4+
return Object.values({{classname}}).includes(value);
5+
}
6+
37
export function {{classname}}FromJSON(json: any): {{classname}} {
48
return {{classname}}FromJSONTyped(json, false);
59
}

modules/openapi-generator/src/main/resources/typescript-fetch/modelOneOf.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ export function {{classname}}FromJSONTyped(json: any, ignoreDiscriminator: boole
2424
switch (json['{{discriminator.propertyBaseName}}']) {
2525
{{#discriminator.mappedModels}}
2626
case '{{mappingName}}':
27-
return {...{{modelName}}FromJSONTyped(json, true), {{discriminator.propertyName}}: '{{mappingName}}'};
27+
return Object.assign({}, {{modelName}}FromJSONTyped(json, true), { {{discriminator.propertyName}}: '{{mappingName}}' });
2828
{{/discriminator.mappedModels}}
2929
default:
3030
throw new Error(`No variant of {{classname}} exists with '{{discriminator.propertyName}}=${json['{{discriminator.propertyName}}']}'`);
3131
}
3232
{{/discriminator}}
3333
{{^discriminator}}
34-
return { {{#oneOf}}...{{{.}}}FromJSONTyped(json, true){{^-last}}, {{/-last}}{{/oneOf}} };
34+
return Object.assign({}, {{#oneOf}}{{{.}}}FromJSONTyped(json, true){{^-last}}, {{/-last}}{{/oneOf}});
3535
{{/discriminator}}
3636
}
3737

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumClass.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const EnumClass = {
2525
export type EnumClass = typeof EnumClass[keyof typeof EnumClass];
2626

2727

28+
export function instanceOfEnumClass(value: any): boolean {
29+
return Object.values(EnumClass).includes(value);
30+
}
31+
2832
export function EnumClassFromJSON(json: any): EnumClass {
2933
return EnumClassFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/OuterEnum.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const OuterEnum = {
2525
export type OuterEnum = typeof OuterEnum[keyof typeof OuterEnum];
2626

2727

28+
export function instanceOfOuterEnum(value: any): boolean {
29+
return Object.values(OuterEnum).includes(value);
30+
}
31+
2832
export function OuterEnumFromJSON(json: any): OuterEnum {
2933
return OuterEnumFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/OuterEnumDefaultValue.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const OuterEnumDefaultValue = {
2525
export type OuterEnumDefaultValue = typeof OuterEnumDefaultValue[keyof typeof OuterEnumDefaultValue];
2626

2727

28+
export function instanceOfOuterEnumDefaultValue(value: any): boolean {
29+
return Object.values(OuterEnumDefaultValue).includes(value);
30+
}
31+
2832
export function OuterEnumDefaultValueFromJSON(json: any): OuterEnumDefaultValue {
2933
return OuterEnumDefaultValueFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/OuterEnumInteger.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const OuterEnumInteger = {
2525
export type OuterEnumInteger = typeof OuterEnumInteger[keyof typeof OuterEnumInteger];
2626

2727

28+
export function instanceOfOuterEnumInteger(value: any): boolean {
29+
return Object.values(OuterEnumInteger).includes(value);
30+
}
31+
2832
export function OuterEnumIntegerFromJSON(json: any): OuterEnumInteger {
2933
return OuterEnumIntegerFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/OuterEnumIntegerDefaultValue.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const OuterEnumIntegerDefaultValue = {
2525
export type OuterEnumIntegerDefaultValue = typeof OuterEnumIntegerDefaultValue[keyof typeof OuterEnumIntegerDefaultValue];
2626

2727

28+
export function instanceOfOuterEnumIntegerDefaultValue(value: any): boolean {
29+
return Object.values(OuterEnumIntegerDefaultValue).includes(value);
30+
}
31+
2832
export function OuterEnumIntegerDefaultValueFromJSON(json: any): OuterEnumIntegerDefaultValue {
2933
return OuterEnumIntegerDefaultValueFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/default-v3.0/models/SingleRefType.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ export const SingleRefType = {
2424
export type SingleRefType = typeof SingleRefType[keyof typeof SingleRefType];
2525

2626

27+
export function instanceOfSingleRefType(value: any): boolean {
28+
return Object.values(SingleRefType).includes(value);
29+
}
30+
2731
export function SingleRefTypeFromJSON(json: any): SingleRefType {
2832
return SingleRefTypeFromJSONTyped(json, false);
2933
}

samples/client/petstore/typescript-fetch/builds/enum/models/NumberEnum.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const NumberEnum = {
2525
export type NumberEnum = typeof NumberEnum[keyof typeof NumberEnum];
2626

2727

28+
export function instanceOfNumberEnum(value: any): boolean {
29+
return Object.values(NumberEnum).includes(value);
30+
}
31+
2832
export function NumberEnumFromJSON(json: any): NumberEnum {
2933
return NumberEnumFromJSONTyped(json, false);
3034
}

samples/client/petstore/typescript-fetch/builds/enum/models/StringEnum.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export const StringEnum = {
2525
export type StringEnum = typeof StringEnum[keyof typeof StringEnum];
2626

2727

28+
export function instanceOfStringEnum(value: any): boolean {
29+
return Object.values(StringEnum).includes(value);
30+
}
31+
2832
export function StringEnumFromJSON(json: any): StringEnum {
2933
return StringEnumFromJSONTyped(json, false);
3034
}

0 commit comments

Comments
 (0)