Skip to content

Commit ca7e8bd

Browse files
authored
typescript-fetch: Fix model date crash (#21821)
* typescript-fetch: Fix model date crash Fix a runtime crash converting to json when a date or datetime is both nullable AND required. There are 4 cases to account for: | required | nullable | values | |----------|----------|--------| | f | f | string OR undefined | | f | t | string OR null OR undefined | | t | f | string | | t | t | string OR null | And importantly when required and nullable code that would crash on null was being generated. additionally when required is false and nullable is true we still want to allow consumers to be able to pass in `undefined` OR `null` and pass that value to the server. Some servers treat null and undefined differently for some operations so having that ability is pretty reasonable. fix: #21820 * Update typescript-fetch samples ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
1 parent e1447bc commit ca7e8bd

File tree

17 files changed

+22
-22
lines changed

17 files changed

+22
-22
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,10 @@ export function {{classname}}ToJSONTyped(value?: {{#hasReadOnly}}Omit<{{classnam
141141
{{^isReadOnly}}
142142
{{#isPrimitiveType}}
143143
{{#isDateType}}
144-
'{{baseName}}': {{^required}}{{#isNullable}}value['{{name}}'] === null ? null : {{/isNullable}}{{^isNullable}}value['{{name}}'] == null ? undefined : {{/isNullable}}{{/required}}((value['{{name}}']{{#isNullable}} as any{{/isNullable}}){{^required}}{{#isNullable}}?{{/isNullable}}{{/required}}.toISOString().substring(0,10)),
144+
'{{baseName}}': {{^required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{#isNullable}}{{#required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{/isNullable}}value['{{name}}'].toISOString().substring(0,10),
145145
{{/isDateType}}
146146
{{#isDateTimeType}}
147-
'{{baseName}}': {{^required}}{{#isNullable}}value['{{name}}'] === null ? null : {{/isNullable}}{{^isNullable}}value['{{name}}'] == null ? undefined : {{/isNullable}}{{/required}}((value['{{name}}']{{#isNullable}} as any{{/isNullable}}){{^required}}{{#isNullable}}?{{/isNullable}}{{/required}}.toISOString()),
147+
'{{baseName}}': {{^required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{#isNullable}}{{#required}}value['{{name}}'] == null ? value['{{name}}'] : {{/required}}{{/isNullable}}value['{{name}}'].toISOString(),
148148
{{/isDateTimeType}}
149149
{{#isArray}}
150150
'{{baseName}}': {{#uniqueItems}}{{^required}}value['{{name}}'] == null ? undefined : {{/required}}{{#required}}{{#isNullable}}value['{{name}}'] == null ? null : {{/isNullable}}{{/required}}Array.from(value['{{name}}'] as Set<any>){{/uniqueItems}}{{^uniqueItems}}value['{{name}}']{{/uniqueItems}},

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ export function FormatTestToJSONTyped(value?: FormatTest | null, ignoreDiscrimin
178178
'string': value['string'],
179179
'byte': value['_byte'],
180180
'binary': value['binary'],
181-
'date': ((value['date']).toISOString().substring(0,10)),
182-
'dateTime': value['dateTime'] == null ? undefined : ((value['dateTime']).toISOString()),
181+
'date': value['date'].toISOString().substring(0,10),
182+
'dateTime': value['dateTime'] == null ? value['dateTime'] : value['dateTime'].toISOString(),
183183
'uuid': value['uuid'],
184184
'password': value['password'],
185185
'pattern_with_digits': value['patternWithDigits'],

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export function MixedPropertiesAndAdditionalPropertiesClassToJSONTyped(value?: M
8282
return {
8383

8484
'uuid': value['uuid'],
85-
'dateTime': value['dateTime'] == null ? undefined : ((value['dateTime']).toISOString()),
85+
'dateTime': value['dateTime'] == null ? value['dateTime'] : value['dateTime'].toISOString(),
8686
'map': value['map'] == null ? undefined : (mapValues(value['map'], AnimalToJSON)),
8787
};
8888
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ export function NullableClassToJSONTyped(value?: NullableClass | null, ignoreDis
143143
'number_prop': value['numberProp'],
144144
'boolean_prop': value['booleanProp'],
145145
'string_prop': value['stringProp'],
146-
'date_prop': value['dateProp'] === null ? null : ((value['dateProp'] as any)?.toISOString().substring(0,10)),
147-
'datetime_prop': value['datetimeProp'] === null ? null : ((value['datetimeProp'] as any)?.toISOString()),
146+
'date_prop': value['dateProp'] == null ? value['dateProp'] : value['dateProp'].toISOString().substring(0,10),
147+
'datetime_prop': value['datetimeProp'] == null ? value['datetimeProp'] : value['datetimeProp'].toISOString(),
148148
'array_nullable_prop': value['arrayNullableProp'],
149149
'array_and_items_nullable_prop': value['arrayAndItemsNullableProp'],
150150
'array_items_nullable': value['arrayItemsNullable'],

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

samples/client/petstore/typescript-fetch/builds/default/models/Order.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

samples/client/petstore/typescript-fetch/builds/es6-target/src/models/Order.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

samples/client/petstore/typescript-fetch/builds/multiple-parameters/models/Order.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/src/models/Order.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

samples/client/petstore/typescript-fetch/builds/sagas-and-records/src/models/Order.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function OrderToJSONTyped(value?: Order | null, ignoreDiscriminator: bool
109109
'id': value['id'],
110110
'petId': value['petId'],
111111
'quantity': value['quantity'],
112-
'shipDate': value['shipDate'] == null ? undefined : ((value['shipDate']).toISOString()),
112+
'shipDate': value['shipDate'] == null ? value['shipDate'] : value['shipDate'].toISOString(),
113113
'status': value['status'],
114114
'complete': value['complete'],
115115
};

0 commit comments

Comments
 (0)