Skip to content

Commit 8c4743c

Browse files
committed
fix(typescript-fetch): generate validationAttributes when withoutRuntimeChecks=true
Previously, setting `validationAttributes=true` had no effect when `withoutRuntimeChecks=true` was set. This commit fixes that by adding the validation attributes to the `modelGenericInterfaces.mustache` template (that is used when withoutRuntimeChecks is enabled) - Moves validationAttributes logic to a partial template and includes it in the modelGenericInterfaces.mustache template - modelGeneric.mustache includes the modelGenericInterfaces.mustache partial and should work as before
1 parent cbdee19 commit 8c4743c

4 files changed

Lines changed: 80 additions & 66 deletions

File tree

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

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -194,68 +194,3 @@ export function {{classname}}ToJSONTyped(value?: {{#hasReadOnly}}Omit<{{classnam
194194
return value;
195195
{{/hasVars}}
196196
}
197-
{{#validationAttributes}}
198-
199-
export const {{classname}}PropertyValidationAttributesMap: {
200-
[property: string]: {
201-
maxLength?: number,
202-
minLength?: number,
203-
pattern?: string,
204-
maximum?: number,
205-
exclusiveMaximum?: boolean,
206-
minimum?: number,
207-
exclusiveMinimum?: boolean,
208-
multipleOf?: number,
209-
maxItems?: number,
210-
minItems?: number,
211-
uniqueItems?: boolean
212-
}
213-
} = {
214-
{{#vars}}
215-
{{#hasValidation}}
216-
{{name}}: {
217-
{{#maxLength}}
218-
maxLength: {{maxLength}},
219-
{{/maxLength}}
220-
{{#minLength}}
221-
minLength: {{minLength}},
222-
{{/minLength}}
223-
{{#pattern}}
224-
pattern: '{{pattern}}',
225-
{{/pattern}}
226-
{{#maximum}}
227-
maximum: {{maximum}},
228-
exclusiveMaximum: {{exclusiveMaximum}},
229-
{{/maximum}}
230-
{{#minimum}}
231-
minimum: {{minimum}},
232-
exclusiveMinimum: {{exclusiveMinimum}},
233-
{{/minimum}}
234-
{{#multipleOf}}
235-
multipleOf: {{multipleOf}},
236-
{{/multipleOf}}
237-
{{#maxItems}}
238-
maxItems: {{maxItems}},
239-
{{/maxItems}}
240-
{{#minItems}}
241-
minItems: {{minItems}},
242-
{{/minItems}}
243-
{{#isArray}}
244-
uniqueItems: {{uniqueItems}},
245-
{{/isArray}}
246-
},
247-
{{/hasValidation}}
248-
{{/vars}}
249-
}
250-
{{#isAdditionalPropertiesTrue}}
251-
252-
export const {{classname}}AdditionalPropertiesValidationAttributes: { maxProperties?: number, minProperties?: number } = {
253-
{{#maxProperties}}
254-
maxProperties: {{maxProperties}},
255-
{{/maxProperties}}
256-
{{#minProperties}}
257-
minProperties: {{minProperties}},
258-
{{/minProperties}}
259-
}
260-
{{/isAdditionalPropertiesTrue}}
261-
{{/validationAttributes}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@ export const {{classname}}{{enumName}} = {
4747
} as const;
4848
export type {{classname}}{{enumName}} = typeof {{classname}}{{enumName}}[keyof typeof {{classname}}{{enumName}}];
4949
{{/stringEnums}}
50-
{{/isEnum}}{{/vars}}{{/hasEnums}}
50+
{{/isEnum}}{{/vars}}{{/hasEnums}}{{>validationAttributes}}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
{{#validationAttributes}}
2+
3+
export const {{classname}}PropertyValidationAttributesMap: {
4+
[property: string]: {
5+
maxLength?: number,
6+
minLength?: number,
7+
pattern?: string,
8+
maximum?: number,
9+
exclusiveMaximum?: boolean,
10+
minimum?: number,
11+
exclusiveMinimum?: boolean,
12+
multipleOf?: number,
13+
maxItems?: number,
14+
minItems?: number,
15+
uniqueItems?: boolean
16+
}
17+
} = {
18+
{{#vars}}
19+
{{#hasValidation}}
20+
{{name}}: {
21+
{{#maxLength}}
22+
maxLength: {{maxLength}},
23+
{{/maxLength}}
24+
{{#minLength}}
25+
minLength: {{minLength}},
26+
{{/minLength}}
27+
{{#pattern}}
28+
pattern: '{{pattern}}',
29+
{{/pattern}}
30+
{{#maximum}}
31+
maximum: {{maximum}},
32+
exclusiveMaximum: {{exclusiveMaximum}},
33+
{{/maximum}}
34+
{{#minimum}}
35+
minimum: {{minimum}},
36+
exclusiveMinimum: {{exclusiveMinimum}},
37+
{{/minimum}}
38+
{{#multipleOf}}
39+
multipleOf: {{multipleOf}},
40+
{{/multipleOf}}
41+
{{#maxItems}}
42+
maxItems: {{maxItems}},
43+
{{/maxItems}}
44+
{{#minItems}}
45+
minItems: {{minItems}},
46+
{{/minItems}}
47+
{{#isArray}}
48+
uniqueItems: {{uniqueItems}},
49+
{{/isArray}}
50+
},
51+
{{/hasValidation}}
52+
{{/vars}}
53+
}
54+
{{#isAdditionalPropertiesTrue}}
55+
56+
export const {{classname}}AdditionalPropertiesValidationAttributes: { maxProperties?: number, minProperties?: number } = {
57+
{{#maxProperties}}
58+
maxProperties: {{maxProperties}},
59+
{{/maxProperties}}
60+
{{#minProperties}}
61+
minProperties: {{minProperties}},
62+
{{/minProperties}}
63+
}
64+
{{/isAdditionalPropertiesTrue}}
65+
{{/validationAttributes}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/fetch/TypeScriptFetchClientCodegenTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,20 @@ public void testOneOfModelsImportNonPrimitiveTypes() throws IOException {
444444
TestUtils.assertFileContains(testResponse, "import type { OptionThree } from './OptionThree'");
445445
}
446446

447+
@Test(description = "Verify validationAttributes works with withoutRuntimeChecks=true")
448+
public void testValidationAttributesWithWithoutRuntimeChecks() throws IOException {
449+
Map<String, Object> properties = new HashMap<>();
450+
properties.put(TypeScriptFetchClientCodegen.VALIDATION_ATTRIBUTES, true);
451+
properties.put(TypeScriptFetchClientCodegen.WITHOUT_RUNTIME_CHECKS, true);
452+
453+
File output = generate(properties, "src/test/resources/3_0/typescript-fetch/validation-attributes.yaml");
454+
455+
Path modelsIndex = Paths.get(output + "/models/index.ts");
456+
TestUtils.assertFileExists(modelsIndex);
457+
TestUtils.assertFileContains(modelsIndex, "PetPropertyValidationAttributesMap");
458+
TestUtils.assertFileContains(modelsIndex, "[property: string]:");
459+
}
460+
447461
private static File generate(
448462
Map<String, Object> properties
449463
) throws IOException {

0 commit comments

Comments
 (0)