@goast/kotlin 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/lib/generators/models/model-generator.js +39 -37
- package/cjs/lib/generators/models/models.js +1 -1
- package/cjs/lib/generators/services/spring-controllers/models.js +1 -1
- package/cjs/lib/generators/services/spring-controllers/spring-controller-generator.js +44 -37
- package/esm/lib/generators/models/model-generator.js +39 -37
- package/esm/lib/generators/models/models.js +1 -1
- package/esm/lib/generators/services/spring-controllers/models.js +1 -1
- package/esm/lib/generators/services/spring-controllers/spring-controller-generator.js +44 -37
- package/package.json +1 -1
- package/types/lib/generators/models/models.d.ts +3 -0
- package/types/lib/generators/services/spring-controllers/models.d.ts +2 -0
|
@@ -107,7 +107,7 @@ class DefaultKotlinModelGenerator extends file_generator_1.KotlinFileGenerator {
|
|
|
107
107
|
.parenthesize('{}', (builder) => this.generateObjectInterfaceMembers(ctx, builder, schema), { multiline: true });
|
|
108
108
|
}
|
|
109
109
|
generateObjectInterfaceAnnotations(ctx, builder, schema) {
|
|
110
|
-
if (schema.discriminator) {
|
|
110
|
+
if (schema.discriminator && ctx.config.addJacksonAnnotations) {
|
|
111
111
|
builder.appendAnnotation('JsonTypeInfo', 'com.fasterxml.jackson.annotation', [
|
|
112
112
|
['use', 'JsonTypeInfo.Id.NAME'],
|
|
113
113
|
['include', 'JsonTypeInfo.As.EXISTING_PROPERTY'],
|
|
@@ -155,22 +155,19 @@ class DefaultKotlinModelGenerator extends file_generator_1.KotlinFileGenerator {
|
|
|
155
155
|
}))
|
|
156
156
|
.append(' ')
|
|
157
157
|
.parenthesizeIf(schema.additionalProperties !== undefined && schema.additionalProperties !== false, '{}', (builder) => builder.if(schema.additionalProperties !== undefined && schema.additionalProperties !== false, (builder) => builder
|
|
158
|
-
.appendLine('@JsonIgnore')
|
|
159
|
-
.addImport('JsonIgnore', 'com.fasterxml.jackson.annotation')
|
|
158
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonIgnore').addImport('JsonIgnore', 'com.fasterxml.jackson.annotation'))
|
|
160
159
|
.append('val additionalProperties: Mutable')
|
|
161
160
|
.append((builder) => this.generateMapType(ctx, builder, schema))
|
|
162
161
|
.appendLine(' = mutableMapOf()')
|
|
163
162
|
.appendLine()
|
|
164
|
-
.appendLine('@JsonAnySetter')
|
|
165
|
-
.addImport('JsonAnySetter', 'com.fasterxml.jackson.annotation')
|
|
163
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonAnySetter').addImport('JsonAnySetter', 'com.fasterxml.jackson.annotation'))
|
|
166
164
|
.append('fun set')
|
|
167
165
|
.parenthesize('()', (builder) => builder.append('name: String, value: ').if(schema.additionalProperties === true, (builder) => builder.append('Any?'), (builder) => this.generateTypeUsage(ctx, builder, schema.additionalProperties)))
|
|
168
166
|
.append(' ')
|
|
169
167
|
.parenthesize('{}', 'this.additionalProperties[name] = value', { multiline: true })
|
|
170
168
|
.appendLine()
|
|
171
169
|
.appendLine()
|
|
172
|
-
.appendLine('@JsonAnyGetter')
|
|
173
|
-
.addImport('JsonAnyGetter', 'com.fasterxml.jackson.annotation')
|
|
170
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonAnyGetter').addImport('JsonAnyGetter', 'com.fasterxml.jackson.annotation'))
|
|
174
171
|
.append('fun getMap(): ')
|
|
175
172
|
.append((builder) => this.generateMapType(ctx, builder, schema))
|
|
176
173
|
.append(' ')
|
|
@@ -212,48 +209,52 @@ class DefaultKotlinModelGenerator extends file_generator_1.KotlinFileGenerator {
|
|
|
212
209
|
this.generateJsonPropertyAnnotation(ctx, builder, schema, property);
|
|
213
210
|
}
|
|
214
211
|
generatePropertyValidationAnnotations(ctx, builder, schema, property) {
|
|
215
|
-
if (
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
212
|
+
if (ctx.config.addJakartaValidationAnnotations) {
|
|
213
|
+
if (property.schema.kind === 'string' && property.schema.pattern) {
|
|
214
|
+
builder
|
|
215
|
+
.append('@get:Pattern(regexp = ')
|
|
216
|
+
.append(this.toStringLiteral(ctx, property.schema.pattern))
|
|
217
|
+
.append(')')
|
|
218
|
+
.addImport('Pattern', 'jakarta.validation.constraints')
|
|
219
|
+
.appendLine();
|
|
220
|
+
}
|
|
221
|
+
if (this.shouldGenerateTypeDeclaration(ctx, property.schema)) {
|
|
222
|
+
builder.append('@field:Valid').addImport('Valid', 'jakarta.validation').appendLine();
|
|
223
|
+
}
|
|
225
224
|
}
|
|
226
225
|
}
|
|
227
226
|
generatePropertySchemaAnnotation(ctx, builder, schema, property) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
227
|
+
if (ctx.config.addSwaggerAnnotations) {
|
|
228
|
+
const parts = new Map();
|
|
229
|
+
if (property.schema.example !== undefined) {
|
|
230
|
+
parts.set('example', this.toStringLiteral(ctx, String(property.schema.example)));
|
|
231
|
+
}
|
|
232
|
+
if (schema.required.has(property.name)) {
|
|
233
|
+
parts.set('required', 'true');
|
|
234
|
+
}
|
|
235
|
+
if (property.schema.description !== undefined) {
|
|
236
|
+
parts.set('description', this.toStringLiteral(ctx, property.schema.description));
|
|
237
|
+
}
|
|
238
|
+
builder
|
|
239
|
+
.append('@Schema')
|
|
240
|
+
.addImport('Schema', 'io.swagger.v3.oas.annotations.media')
|
|
241
|
+
.parenthesizeIf(parts.size > 0, '()', (builder) => builder.forEach(parts.entries(), (builder, [key, value]) => builder.append(`${key} = ${value}`), {
|
|
242
|
+
separator: ', ',
|
|
243
|
+
}))
|
|
244
|
+
.appendLine();
|
|
237
245
|
}
|
|
238
|
-
builder
|
|
239
|
-
.append('@Schema')
|
|
240
|
-
.addImport('Schema', 'io.swagger.v3.oas.annotations.media')
|
|
241
|
-
.parenthesizeIf(parts.size > 0, '()', (builder) => builder.forEach(parts.entries(), (builder, [key, value]) => builder.append(`${key} = ${value}`), {
|
|
242
|
-
separator: ', ',
|
|
243
|
-
}))
|
|
244
|
-
.appendLine();
|
|
245
246
|
}
|
|
246
247
|
generateJsonPropertyAnnotation(ctx, builder, schema, property, scope) {
|
|
247
248
|
builder
|
|
249
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder
|
|
248
250
|
.append(`@${scope ? scope + ':' : ''}JsonProperty`)
|
|
249
251
|
.addImport('JsonProperty', 'com.fasterxml.jackson.annotation')
|
|
250
252
|
.parenthesize('()', (builder) => builder
|
|
251
253
|
.append(this.toStringLiteral(ctx, property.name))
|
|
252
254
|
.appendIf(schema.required.has(property.name), ', required = true'))
|
|
253
|
-
.appendLine()
|
|
255
|
+
.appendLine())
|
|
254
256
|
.if(property.schema.custom['exclude-when-null'] === true, (builder) => builder
|
|
255
|
-
.append('@get:JsonInclude')
|
|
256
|
-
.addImport('JsonInclude', 'com.fasterxml.jackson.annotation')
|
|
257
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.append('@get:JsonInclude').addImport('JsonInclude', 'com.fasterxml.jackson.annotation'))
|
|
257
258
|
.parenthesize('()', 'JsonInclude.Include.NON_NULL')
|
|
258
259
|
.appendLine());
|
|
259
260
|
}
|
|
@@ -352,10 +353,11 @@ class DefaultKotlinModelGenerator extends file_generator_1.KotlinFileGenerator {
|
|
|
352
353
|
.parenthesize('{}', (builder) => {
|
|
353
354
|
var _a;
|
|
354
355
|
return builder.forEach((_a = schema.enum) !== null && _a !== void 0 ? _a : [], (builder, value) => builder
|
|
356
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder
|
|
355
357
|
.append('@JsonProperty')
|
|
356
358
|
.addImport('JsonProperty', 'com.fasterxml.jackson.annotation')
|
|
357
359
|
.parenthesize('()', this.toStringLiteral(ctx, String(value)))
|
|
358
|
-
.appendLine()
|
|
360
|
+
.appendLine())
|
|
359
361
|
.append((0, core_1.toCasing)(String(value), 'snake'))
|
|
360
362
|
.parenthesize('()', this.toStringLiteral(ctx, String(value))), { separator: (builder) => builder.appendLine(',').appendLine() });
|
|
361
363
|
}, { multiline: true });
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defaultKotlinModelsGeneratorConfig = void 0;
|
|
4
4
|
const config_1 = require("../../config");
|
|
5
|
-
exports.defaultKotlinModelsGeneratorConfig = Object.assign(Object.assign({}, config_1.defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.model', oneOfBehavior: 'treat-as-any-of' });
|
|
5
|
+
exports.defaultKotlinModelsGeneratorConfig = Object.assign(Object.assign({}, config_1.defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.model', oneOfBehavior: 'treat-as-any-of', addJacksonAnnotations: true, addJakartaValidationAnnotations: true, addSwaggerAnnotations: true });
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defaultKotlinServicesGeneratorConfig = void 0;
|
|
4
4
|
const config_1 = require("../../../config");
|
|
5
|
-
exports.defaultKotlinServicesGeneratorConfig = Object.assign(Object.assign({}, config_1.defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.api' });
|
|
5
|
+
exports.defaultKotlinServicesGeneratorConfig = Object.assign(Object.assign({}, config_1.defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.api', addSwaggerAnnotations: true, addJakartaValidationAnnotations: true });
|
|
@@ -69,32 +69,35 @@ class DefaultKotlinSpringControllerGenerator extends file_generator_1.KotlinFile
|
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
generateApiInterfaceMethodAnnnotations(ctx, builder, endpoint) {
|
|
72
|
-
var _a
|
|
72
|
+
var _a;
|
|
73
73
|
builder
|
|
74
|
-
.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
'
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
74
|
+
.if(ctx.config.addSwaggerAnnotations, (builder) => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
return builder.appendAnnotation('Operation', 'io.swagger.v3.oas.annotations', [
|
|
77
|
+
['summary', this.toStringLiteral(ctx, (_a = endpoint.summary) === null || _a === void 0 ? void 0 : _a.trim())],
|
|
78
|
+
['operationId', this.toStringLiteral(ctx, endpoint.name)],
|
|
79
|
+
['description', this.toStringLiteral(ctx, (_b = endpoint.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
80
|
+
[
|
|
81
|
+
'responses',
|
|
82
|
+
(builder) => builder.parenthesize('[]', (builder) => builder.forEach(endpoint.responses, (builder, response) => builder
|
|
83
|
+
.append('ApiResponse')
|
|
84
|
+
.addImport('ApiResponse', 'io.swagger.v3.oas.annotations.responses')
|
|
85
|
+
.parenthesize('()', (builder) => {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
return builder
|
|
88
|
+
.append(`responseCode = ${this.toStringLiteral(ctx, (_a = response.statusCode) === null || _a === void 0 ? void 0 : _a.toString())}, `)
|
|
89
|
+
.append(`description = ${this.toStringLiteral(ctx, (_b = response.description) === null || _b === void 0 ? void 0 : _b.trim())}`);
|
|
90
|
+
}), { separator: ',\n' }), { multiline: true }),
|
|
91
|
+
endpoint.responses.length > 0,
|
|
92
|
+
],
|
|
93
|
+
]);
|
|
94
|
+
})
|
|
92
95
|
.appendAnnotation('RequestMapping', 'org.springframework.web.bind.annotation', [
|
|
93
96
|
['method', '[RequestMethod.' + endpoint.method.toUpperCase() + ']'],
|
|
94
97
|
['value', '[' + this.toStringLiteral(ctx, this.getEndpointPath(ctx, endpoint)) + ']'],
|
|
95
98
|
[
|
|
96
99
|
'consumes',
|
|
97
|
-
'[' + ((
|
|
100
|
+
'[' + ((_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content.map((x) => this.toStringLiteral(ctx, x.type)).join(', ')) + ']',
|
|
98
101
|
!!endpoint.requestBody && endpoint.requestBody.content.length > 0,
|
|
99
102
|
],
|
|
100
103
|
])
|
|
@@ -126,19 +129,21 @@ class DefaultKotlinSpringControllerGenerator extends file_generator_1.KotlinFile
|
|
|
126
129
|
generateApiInterfaceMethodParameterAnnotations(ctx, builder, endpoint, parameter) {
|
|
127
130
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
128
131
|
const parameterSchemaInfo = this.getSchemaInfo(ctx, parameter.schema);
|
|
129
|
-
if (
|
|
130
|
-
|
|
132
|
+
if (ctx.config.addSwaggerAnnotations) {
|
|
133
|
+
if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.default) !== undefined) {
|
|
134
|
+
builder.addImport('Schema', 'io.swagger.v3.oas.annotations.media');
|
|
135
|
+
}
|
|
136
|
+
builder.appendAnnotation('Parameter', 'io.swagger.v3.oas.annotations', [
|
|
137
|
+
['description', this.toStringLiteral(ctx, (_b = parameter.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
138
|
+
['required', (_c = parameter.required) === null || _c === void 0 ? void 0 : _c.toString()],
|
|
139
|
+
[
|
|
140
|
+
'schema',
|
|
141
|
+
`Schema(defaultValue = ${this.toStringLiteral(ctx, String((_d = parameter.schema) === null || _d === void 0 ? void 0 : _d.default))})`,
|
|
142
|
+
((_e = parameter.schema) === null || _e === void 0 ? void 0 : _e.default) !== undefined,
|
|
143
|
+
],
|
|
144
|
+
]);
|
|
131
145
|
}
|
|
132
|
-
|
|
133
|
-
['description', this.toStringLiteral(ctx, (_b = parameter.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
134
|
-
['required', (_c = parameter.required) === null || _c === void 0 ? void 0 : _c.toString()],
|
|
135
|
-
[
|
|
136
|
-
'schema',
|
|
137
|
-
`Schema(defaultValue = ${this.toStringLiteral(ctx, String((_d = parameter.schema) === null || _d === void 0 ? void 0 : _d.default))})`,
|
|
138
|
-
((_e = parameter.schema) === null || _e === void 0 ? void 0 : _e.default) !== undefined,
|
|
139
|
-
],
|
|
140
|
-
]);
|
|
141
|
-
if (parameterSchemaInfo.packageName) {
|
|
146
|
+
if (parameterSchemaInfo.packageName && ctx.config.addJakartaValidationAnnotations) {
|
|
142
147
|
builder.appendAnnotation('Valid', 'jakarta.validation');
|
|
143
148
|
}
|
|
144
149
|
if (parameter.target === 'body') {
|
|
@@ -198,9 +203,9 @@ class DefaultKotlinSpringControllerGenerator extends file_generator_1.KotlinFile
|
|
|
198
203
|
}
|
|
199
204
|
generateApiControllerAnnotations(ctx, builder) {
|
|
200
205
|
builder
|
|
201
|
-
.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
206
|
+
.if(ctx.config.addJakartaValidationAnnotations, (builder) => builder.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
202
207
|
['value', '[' + this.toStringLiteral(ctx, 'com.goast.kotlin.spring-service-generator') + ']'],
|
|
203
|
-
])
|
|
208
|
+
]))
|
|
204
209
|
.appendAnnotation('Controller', 'org.springframework.stereotype')
|
|
205
210
|
.appendAnnotation('RequestMapping', 'org.springframework.web.bind.annotation', [
|
|
206
211
|
this.getControllerRequestMapping(ctx),
|
|
@@ -254,9 +259,11 @@ class DefaultKotlinSpringControllerGenerator extends file_generator_1.KotlinFile
|
|
|
254
259
|
.parenthesize('{}', (builder) => this.generateApiDelegateInterfaceContent(ctx, builder), { multiline: true });
|
|
255
260
|
}
|
|
256
261
|
generateApiDelegateInterfaceAnnotations(ctx, builder) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
262
|
+
if (ctx.config.addJakartaValidationAnnotations) {
|
|
263
|
+
builder.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
264
|
+
['value', '[' + this.toStringLiteral(ctx, 'com.goast.kotlin.spring-service-generator') + ']'],
|
|
265
|
+
]);
|
|
266
|
+
}
|
|
260
267
|
}
|
|
261
268
|
generateApiDelegateInterfaceSignature(ctx, builder) {
|
|
262
269
|
builder.append('interface ').append(this.getApiDelegateInterfaceName(ctx));
|
|
@@ -104,7 +104,7 @@ export class DefaultKotlinModelGenerator extends KotlinFileGenerator {
|
|
|
104
104
|
.parenthesize('{}', (builder) => this.generateObjectInterfaceMembers(ctx, builder, schema), { multiline: true });
|
|
105
105
|
}
|
|
106
106
|
generateObjectInterfaceAnnotations(ctx, builder, schema) {
|
|
107
|
-
if (schema.discriminator) {
|
|
107
|
+
if (schema.discriminator && ctx.config.addJacksonAnnotations) {
|
|
108
108
|
builder.appendAnnotation('JsonTypeInfo', 'com.fasterxml.jackson.annotation', [
|
|
109
109
|
['use', 'JsonTypeInfo.Id.NAME'],
|
|
110
110
|
['include', 'JsonTypeInfo.As.EXISTING_PROPERTY'],
|
|
@@ -152,22 +152,19 @@ export class DefaultKotlinModelGenerator extends KotlinFileGenerator {
|
|
|
152
152
|
}))
|
|
153
153
|
.append(' ')
|
|
154
154
|
.parenthesizeIf(schema.additionalProperties !== undefined && schema.additionalProperties !== false, '{}', (builder) => builder.if(schema.additionalProperties !== undefined && schema.additionalProperties !== false, (builder) => builder
|
|
155
|
-
.appendLine('@JsonIgnore')
|
|
156
|
-
.addImport('JsonIgnore', 'com.fasterxml.jackson.annotation')
|
|
155
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonIgnore').addImport('JsonIgnore', 'com.fasterxml.jackson.annotation'))
|
|
157
156
|
.append('val additionalProperties: Mutable')
|
|
158
157
|
.append((builder) => this.generateMapType(ctx, builder, schema))
|
|
159
158
|
.appendLine(' = mutableMapOf()')
|
|
160
159
|
.appendLine()
|
|
161
|
-
.appendLine('@JsonAnySetter')
|
|
162
|
-
.addImport('JsonAnySetter', 'com.fasterxml.jackson.annotation')
|
|
160
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonAnySetter').addImport('JsonAnySetter', 'com.fasterxml.jackson.annotation'))
|
|
163
161
|
.append('fun set')
|
|
164
162
|
.parenthesize('()', (builder) => builder.append('name: String, value: ').if(schema.additionalProperties === true, (builder) => builder.append('Any?'), (builder) => this.generateTypeUsage(ctx, builder, schema.additionalProperties)))
|
|
165
163
|
.append(' ')
|
|
166
164
|
.parenthesize('{}', 'this.additionalProperties[name] = value', { multiline: true })
|
|
167
165
|
.appendLine()
|
|
168
166
|
.appendLine()
|
|
169
|
-
.appendLine('@JsonAnyGetter')
|
|
170
|
-
.addImport('JsonAnyGetter', 'com.fasterxml.jackson.annotation')
|
|
167
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.appendLine('@JsonAnyGetter').addImport('JsonAnyGetter', 'com.fasterxml.jackson.annotation'))
|
|
171
168
|
.append('fun getMap(): ')
|
|
172
169
|
.append((builder) => this.generateMapType(ctx, builder, schema))
|
|
173
170
|
.append(' ')
|
|
@@ -209,48 +206,52 @@ export class DefaultKotlinModelGenerator extends KotlinFileGenerator {
|
|
|
209
206
|
this.generateJsonPropertyAnnotation(ctx, builder, schema, property);
|
|
210
207
|
}
|
|
211
208
|
generatePropertyValidationAnnotations(ctx, builder, schema, property) {
|
|
212
|
-
if (
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
209
|
+
if (ctx.config.addJakartaValidationAnnotations) {
|
|
210
|
+
if (property.schema.kind === 'string' && property.schema.pattern) {
|
|
211
|
+
builder
|
|
212
|
+
.append('@get:Pattern(regexp = ')
|
|
213
|
+
.append(this.toStringLiteral(ctx, property.schema.pattern))
|
|
214
|
+
.append(')')
|
|
215
|
+
.addImport('Pattern', 'jakarta.validation.constraints')
|
|
216
|
+
.appendLine();
|
|
217
|
+
}
|
|
218
|
+
if (this.shouldGenerateTypeDeclaration(ctx, property.schema)) {
|
|
219
|
+
builder.append('@field:Valid').addImport('Valid', 'jakarta.validation').appendLine();
|
|
220
|
+
}
|
|
222
221
|
}
|
|
223
222
|
}
|
|
224
223
|
generatePropertySchemaAnnotation(ctx, builder, schema, property) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
224
|
+
if (ctx.config.addSwaggerAnnotations) {
|
|
225
|
+
const parts = new Map();
|
|
226
|
+
if (property.schema.example !== undefined) {
|
|
227
|
+
parts.set('example', this.toStringLiteral(ctx, String(property.schema.example)));
|
|
228
|
+
}
|
|
229
|
+
if (schema.required.has(property.name)) {
|
|
230
|
+
parts.set('required', 'true');
|
|
231
|
+
}
|
|
232
|
+
if (property.schema.description !== undefined) {
|
|
233
|
+
parts.set('description', this.toStringLiteral(ctx, property.schema.description));
|
|
234
|
+
}
|
|
235
|
+
builder
|
|
236
|
+
.append('@Schema')
|
|
237
|
+
.addImport('Schema', 'io.swagger.v3.oas.annotations.media')
|
|
238
|
+
.parenthesizeIf(parts.size > 0, '()', (builder) => builder.forEach(parts.entries(), (builder, [key, value]) => builder.append(`${key} = ${value}`), {
|
|
239
|
+
separator: ', ',
|
|
240
|
+
}))
|
|
241
|
+
.appendLine();
|
|
234
242
|
}
|
|
235
|
-
builder
|
|
236
|
-
.append('@Schema')
|
|
237
|
-
.addImport('Schema', 'io.swagger.v3.oas.annotations.media')
|
|
238
|
-
.parenthesizeIf(parts.size > 0, '()', (builder) => builder.forEach(parts.entries(), (builder, [key, value]) => builder.append(`${key} = ${value}`), {
|
|
239
|
-
separator: ', ',
|
|
240
|
-
}))
|
|
241
|
-
.appendLine();
|
|
242
243
|
}
|
|
243
244
|
generateJsonPropertyAnnotation(ctx, builder, schema, property, scope) {
|
|
244
245
|
builder
|
|
246
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder
|
|
245
247
|
.append(`@${scope ? scope + ':' : ''}JsonProperty`)
|
|
246
248
|
.addImport('JsonProperty', 'com.fasterxml.jackson.annotation')
|
|
247
249
|
.parenthesize('()', (builder) => builder
|
|
248
250
|
.append(this.toStringLiteral(ctx, property.name))
|
|
249
251
|
.appendIf(schema.required.has(property.name), ', required = true'))
|
|
250
|
-
.appendLine()
|
|
252
|
+
.appendLine())
|
|
251
253
|
.if(property.schema.custom['exclude-when-null'] === true, (builder) => builder
|
|
252
|
-
.append('@get:JsonInclude')
|
|
253
|
-
.addImport('JsonInclude', 'com.fasterxml.jackson.annotation')
|
|
254
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder.append('@get:JsonInclude').addImport('JsonInclude', 'com.fasterxml.jackson.annotation'))
|
|
254
255
|
.parenthesize('()', 'JsonInclude.Include.NON_NULL')
|
|
255
256
|
.appendLine());
|
|
256
257
|
}
|
|
@@ -349,10 +350,11 @@ export class DefaultKotlinModelGenerator extends KotlinFileGenerator {
|
|
|
349
350
|
.parenthesize('{}', (builder) => {
|
|
350
351
|
var _a;
|
|
351
352
|
return builder.forEach((_a = schema.enum) !== null && _a !== void 0 ? _a : [], (builder, value) => builder
|
|
353
|
+
.if(ctx.config.addJacksonAnnotations, (builder) => builder
|
|
352
354
|
.append('@JsonProperty')
|
|
353
355
|
.addImport('JsonProperty', 'com.fasterxml.jackson.annotation')
|
|
354
356
|
.parenthesize('()', this.toStringLiteral(ctx, String(value)))
|
|
355
|
-
.appendLine()
|
|
357
|
+
.appendLine())
|
|
356
358
|
.append(toCasing(String(value), 'snake'))
|
|
357
359
|
.parenthesize('()', this.toStringLiteral(ctx, String(value))), { separator: (builder) => builder.appendLine(',').appendLine() });
|
|
358
360
|
}, { multiline: true });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { defaultKotlinGeneratorConfig } from '../../config';
|
|
2
|
-
export const defaultKotlinModelsGeneratorConfig = Object.assign(Object.assign({}, defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.model', oneOfBehavior: 'treat-as-any-of' });
|
|
2
|
+
export const defaultKotlinModelsGeneratorConfig = Object.assign(Object.assign({}, defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.model', oneOfBehavior: 'treat-as-any-of', addJacksonAnnotations: true, addJakartaValidationAnnotations: true, addSwaggerAnnotations: true });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { defaultKotlinGeneratorConfig } from '../../../config';
|
|
2
|
-
export const defaultKotlinServicesGeneratorConfig = Object.assign(Object.assign({}, defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.api' });
|
|
2
|
+
export const defaultKotlinServicesGeneratorConfig = Object.assign(Object.assign({}, defaultKotlinGeneratorConfig), { packageName: 'com.openapi.generated', packageSuffix: '.api', addSwaggerAnnotations: true, addJakartaValidationAnnotations: true });
|
|
@@ -66,32 +66,35 @@ export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator
|
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
generateApiInterfaceMethodAnnnotations(ctx, builder, endpoint) {
|
|
69
|
-
var _a
|
|
69
|
+
var _a;
|
|
70
70
|
builder
|
|
71
|
-
.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
'
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
71
|
+
.if(ctx.config.addSwaggerAnnotations, (builder) => {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
return builder.appendAnnotation('Operation', 'io.swagger.v3.oas.annotations', [
|
|
74
|
+
['summary', this.toStringLiteral(ctx, (_a = endpoint.summary) === null || _a === void 0 ? void 0 : _a.trim())],
|
|
75
|
+
['operationId', this.toStringLiteral(ctx, endpoint.name)],
|
|
76
|
+
['description', this.toStringLiteral(ctx, (_b = endpoint.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
77
|
+
[
|
|
78
|
+
'responses',
|
|
79
|
+
(builder) => builder.parenthesize('[]', (builder) => builder.forEach(endpoint.responses, (builder, response) => builder
|
|
80
|
+
.append('ApiResponse')
|
|
81
|
+
.addImport('ApiResponse', 'io.swagger.v3.oas.annotations.responses')
|
|
82
|
+
.parenthesize('()', (builder) => {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
return builder
|
|
85
|
+
.append(`responseCode = ${this.toStringLiteral(ctx, (_a = response.statusCode) === null || _a === void 0 ? void 0 : _a.toString())}, `)
|
|
86
|
+
.append(`description = ${this.toStringLiteral(ctx, (_b = response.description) === null || _b === void 0 ? void 0 : _b.trim())}`);
|
|
87
|
+
}), { separator: ',\n' }), { multiline: true }),
|
|
88
|
+
endpoint.responses.length > 0,
|
|
89
|
+
],
|
|
90
|
+
]);
|
|
91
|
+
})
|
|
89
92
|
.appendAnnotation('RequestMapping', 'org.springframework.web.bind.annotation', [
|
|
90
93
|
['method', '[RequestMethod.' + endpoint.method.toUpperCase() + ']'],
|
|
91
94
|
['value', '[' + this.toStringLiteral(ctx, this.getEndpointPath(ctx, endpoint)) + ']'],
|
|
92
95
|
[
|
|
93
96
|
'consumes',
|
|
94
|
-
'[' + ((
|
|
97
|
+
'[' + ((_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content.map((x) => this.toStringLiteral(ctx, x.type)).join(', ')) + ']',
|
|
95
98
|
!!endpoint.requestBody && endpoint.requestBody.content.length > 0,
|
|
96
99
|
],
|
|
97
100
|
])
|
|
@@ -123,19 +126,21 @@ export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator
|
|
|
123
126
|
generateApiInterfaceMethodParameterAnnotations(ctx, builder, endpoint, parameter) {
|
|
124
127
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
125
128
|
const parameterSchemaInfo = this.getSchemaInfo(ctx, parameter.schema);
|
|
126
|
-
if (
|
|
127
|
-
|
|
129
|
+
if (ctx.config.addSwaggerAnnotations) {
|
|
130
|
+
if (((_a = parameter.schema) === null || _a === void 0 ? void 0 : _a.default) !== undefined) {
|
|
131
|
+
builder.addImport('Schema', 'io.swagger.v3.oas.annotations.media');
|
|
132
|
+
}
|
|
133
|
+
builder.appendAnnotation('Parameter', 'io.swagger.v3.oas.annotations', [
|
|
134
|
+
['description', this.toStringLiteral(ctx, (_b = parameter.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
135
|
+
['required', (_c = parameter.required) === null || _c === void 0 ? void 0 : _c.toString()],
|
|
136
|
+
[
|
|
137
|
+
'schema',
|
|
138
|
+
`Schema(defaultValue = ${this.toStringLiteral(ctx, String((_d = parameter.schema) === null || _d === void 0 ? void 0 : _d.default))})`,
|
|
139
|
+
((_e = parameter.schema) === null || _e === void 0 ? void 0 : _e.default) !== undefined,
|
|
140
|
+
],
|
|
141
|
+
]);
|
|
128
142
|
}
|
|
129
|
-
|
|
130
|
-
['description', this.toStringLiteral(ctx, (_b = parameter.description) === null || _b === void 0 ? void 0 : _b.trim())],
|
|
131
|
-
['required', (_c = parameter.required) === null || _c === void 0 ? void 0 : _c.toString()],
|
|
132
|
-
[
|
|
133
|
-
'schema',
|
|
134
|
-
`Schema(defaultValue = ${this.toStringLiteral(ctx, String((_d = parameter.schema) === null || _d === void 0 ? void 0 : _d.default))})`,
|
|
135
|
-
((_e = parameter.schema) === null || _e === void 0 ? void 0 : _e.default) !== undefined,
|
|
136
|
-
],
|
|
137
|
-
]);
|
|
138
|
-
if (parameterSchemaInfo.packageName) {
|
|
143
|
+
if (parameterSchemaInfo.packageName && ctx.config.addJakartaValidationAnnotations) {
|
|
139
144
|
builder.appendAnnotation('Valid', 'jakarta.validation');
|
|
140
145
|
}
|
|
141
146
|
if (parameter.target === 'body') {
|
|
@@ -195,9 +200,9 @@ export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator
|
|
|
195
200
|
}
|
|
196
201
|
generateApiControllerAnnotations(ctx, builder) {
|
|
197
202
|
builder
|
|
198
|
-
.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
203
|
+
.if(ctx.config.addJakartaValidationAnnotations, (builder) => builder.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
199
204
|
['value', '[' + this.toStringLiteral(ctx, 'com.goast.kotlin.spring-service-generator') + ']'],
|
|
200
|
-
])
|
|
205
|
+
]))
|
|
201
206
|
.appendAnnotation('Controller', 'org.springframework.stereotype')
|
|
202
207
|
.appendAnnotation('RequestMapping', 'org.springframework.web.bind.annotation', [
|
|
203
208
|
this.getControllerRequestMapping(ctx),
|
|
@@ -251,9 +256,11 @@ export class DefaultKotlinSpringControllerGenerator extends KotlinFileGenerator
|
|
|
251
256
|
.parenthesize('{}', (builder) => this.generateApiDelegateInterfaceContent(ctx, builder), { multiline: true });
|
|
252
257
|
}
|
|
253
258
|
generateApiDelegateInterfaceAnnotations(ctx, builder) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
259
|
+
if (ctx.config.addJakartaValidationAnnotations) {
|
|
260
|
+
builder.appendAnnotation('Generated', 'jakarta.annotation', [
|
|
261
|
+
['value', '[' + this.toStringLiteral(ctx, 'com.goast.kotlin.spring-service-generator') + ']'],
|
|
262
|
+
]);
|
|
263
|
+
}
|
|
257
264
|
}
|
|
258
265
|
generateApiDelegateInterfaceSignature(ctx, builder) {
|
|
259
266
|
builder.append('interface ').append(this.getApiDelegateInterfaceName(ctx));
|
package/package.json
CHANGED
|
@@ -5,6 +5,9 @@ export type KotlinModelsGeneratorConfig = KotlinGeneratorConfig & {
|
|
|
5
5
|
packageName: string;
|
|
6
6
|
packageSuffix: string;
|
|
7
7
|
oneOfBehavior: 'treat-as-any-of' | 'treat-as-all-of';
|
|
8
|
+
addJacksonAnnotations: boolean;
|
|
9
|
+
addJakartaValidationAnnotations: boolean;
|
|
10
|
+
addSwaggerAnnotations: boolean;
|
|
8
11
|
};
|
|
9
12
|
export declare const defaultKotlinModelsGeneratorConfig: DefaultGenerationProviderConfig<KotlinModelsGeneratorConfig>;
|
|
10
13
|
export type KotlinModelsGeneratorInput = {};
|
|
@@ -7,6 +7,8 @@ export type KotlinServicesGeneratorConfig = KotlinGeneratorConfig & {
|
|
|
7
7
|
packageSuffix: string;
|
|
8
8
|
basePath?: string | RegExp | ((basePath: string, service: ApiService) => string);
|
|
9
9
|
pathModifier?: RegExp | ((path: string, endpoint: ApiEndpoint) => string);
|
|
10
|
+
addSwaggerAnnotations: boolean;
|
|
11
|
+
addJakartaValidationAnnotations: boolean;
|
|
10
12
|
};
|
|
11
13
|
export declare const defaultKotlinServicesGeneratorConfig: DefaultGenerationProviderConfig<KotlinServicesGeneratorConfig>;
|
|
12
14
|
export type KotlinServicesGeneratorInput = KotlinModelsGeneratorOutput;
|