@goast/kotlin 0.4.18-springwebclient1 → 0.4.19

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.
Files changed (96) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +45 -45
  3. package/assets/client/okhttp3/ApiClient.kt +252 -252
  4. package/assets/client/spring-reactive-web-clients/ApiRequestFile.kt +33 -33
  5. package/esm/src/generators/models/model-generator.js +2 -2
  6. package/esm/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +28 -28
  7. package/esm/src/generators/services/spring-controllers/spring-controller-generator.js +9 -9
  8. package/esm/src/generators/services/spring-reactive-web-clients/models.d.ts +1 -1
  9. package/esm/src/generators/services/spring-reactive-web-clients/models.d.ts.map +1 -1
  10. package/esm/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  11. package/package.json +2 -2
  12. package/script/src/generators/models/model-generator.js +2 -2
  13. package/script/src/generators/services/okhttp3-clients/okhttp3-client-generator.js +28 -28
  14. package/script/src/generators/services/spring-controllers/spring-controller-generator.js +9 -9
  15. package/script/src/generators/services/spring-reactive-web-clients/models.d.ts +1 -1
  16. package/script/src/generators/services/spring-reactive-web-clients/models.d.ts.map +1 -1
  17. package/script/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.d.ts.map +1 -1
  18. package/src/mod.ts +8 -0
  19. package/src/src/assets.ts +9 -0
  20. package/src/src/ast/_index.ts +66 -0
  21. package/src/src/ast/common.ts +1 -0
  22. package/src/src/ast/index.ts +1 -0
  23. package/src/src/ast/node.ts +10 -0
  24. package/src/src/ast/nodes/annotation.ts +79 -0
  25. package/src/src/ast/nodes/argument.ts +62 -0
  26. package/src/src/ast/nodes/call.ts +75 -0
  27. package/src/src/ast/nodes/class.ts +178 -0
  28. package/src/src/ast/nodes/collection-literal.ts +49 -0
  29. package/src/src/ast/nodes/constructor.ts +126 -0
  30. package/src/src/ast/nodes/doc-tag.ts +138 -0
  31. package/src/src/ast/nodes/doc.ts +111 -0
  32. package/src/src/ast/nodes/enum-value.ts +100 -0
  33. package/src/src/ast/nodes/enum.ts +163 -0
  34. package/src/src/ast/nodes/function.ts +178 -0
  35. package/src/src/ast/nodes/generic-parameter.ts +54 -0
  36. package/src/src/ast/nodes/init-block.ts +38 -0
  37. package/src/src/ast/nodes/interface.ts +133 -0
  38. package/src/src/ast/nodes/lambda-type.ts +73 -0
  39. package/src/src/ast/nodes/lambda.ts +74 -0
  40. package/src/src/ast/nodes/object.ts +102 -0
  41. package/src/src/ast/nodes/parameter.ts +118 -0
  42. package/src/src/ast/nodes/property.ts +225 -0
  43. package/src/src/ast/nodes/reference.ts +178 -0
  44. package/src/src/ast/nodes/string.ts +114 -0
  45. package/src/src/ast/nodes/types.ts +23 -0
  46. package/src/src/ast/references/index.ts +10 -0
  47. package/src/src/ast/references/jackson.ts +24 -0
  48. package/src/src/ast/references/jakarta.ts +14 -0
  49. package/src/src/ast/references/java.ts +20 -0
  50. package/src/src/ast/references/kotlin.ts +41 -0
  51. package/src/src/ast/references/kotlinx.ts +14 -0
  52. package/src/src/ast/references/okhttp3.ts +5 -0
  53. package/src/src/ast/references/reactor.ts +5 -0
  54. package/src/src/ast/references/spring-reactive.ts +33 -0
  55. package/src/src/ast/references/spring.ts +86 -0
  56. package/src/src/ast/references/swagger.ts +23 -0
  57. package/src/src/ast/utils/get-kotlin-builder-options.ts +19 -0
  58. package/src/src/ast/utils/to-kt-node.ts +31 -0
  59. package/src/src/ast/utils/write-kt-annotations.ts +15 -0
  60. package/src/src/ast/utils/write-kt-arguments.ts +45 -0
  61. package/src/src/ast/utils/write-kt-enum-values.ts +27 -0
  62. package/src/src/ast/utils/write-kt-generic-parameters.ts +12 -0
  63. package/src/src/ast/utils/write-kt-members.ts +25 -0
  64. package/src/src/ast/utils/write-kt-node.ts +37 -0
  65. package/src/src/ast/utils/write-kt-parameters.ts +25 -0
  66. package/src/src/common-results.ts +4 -0
  67. package/src/src/config.ts +41 -0
  68. package/src/src/file-builder.ts +108 -0
  69. package/src/src/generators/file-generator.ts +29 -0
  70. package/src/src/generators/index.ts +5 -0
  71. package/src/src/generators/models/args.ts +132 -0
  72. package/src/src/generators/models/index.ts +4 -0
  73. package/src/src/generators/models/model-generator.ts +691 -0
  74. package/src/src/generators/models/models-generator.ts +65 -0
  75. package/src/src/generators/models/models.ts +95 -0
  76. package/src/src/generators/services/okhttp3-clients/args.ts +88 -0
  77. package/src/src/generators/services/okhttp3-clients/index.ts +4 -0
  78. package/src/src/generators/services/okhttp3-clients/models.ts +62 -0
  79. package/src/src/generators/services/okhttp3-clients/okhttp3-client-generator.ts +594 -0
  80. package/src/src/generators/services/okhttp3-clients/okhttp3-clients-generator.ts +130 -0
  81. package/src/src/generators/services/okhttp3-clients/refs.ts +55 -0
  82. package/src/src/generators/services/spring-controllers/args.ts +93 -0
  83. package/src/src/generators/services/spring-controllers/index.ts +4 -0
  84. package/src/src/generators/services/spring-controllers/models.ts +71 -0
  85. package/src/src/generators/services/spring-controllers/refs.ts +17 -0
  86. package/src/src/generators/services/spring-controllers/spring-controller-generator.ts +814 -0
  87. package/src/src/generators/services/spring-controllers/spring-controllers-generator.ts +118 -0
  88. package/src/src/generators/services/spring-reactive-web-clients/args.ts +101 -0
  89. package/src/src/generators/services/spring-reactive-web-clients/index.ts +4 -0
  90. package/src/src/generators/services/spring-reactive-web-clients/models.ts +62 -0
  91. package/src/src/generators/services/spring-reactive-web-clients/refs.ts +11 -0
  92. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-client-generator.ts +572 -0
  93. package/src/src/generators/services/spring-reactive-web-clients/spring-reactive-web-clients-generator.ts +128 -0
  94. package/src/src/import-collection.ts +98 -0
  95. package/src/src/types.ts +3 -0
  96. package/src/src/utils.ts +39 -0
@@ -0,0 +1,130 @@
1
+ import { resolve } from 'node:path';
2
+
3
+
4
+ import fs from 'fs-extra';
5
+
6
+ import {
7
+ type ApiService,
8
+ Factory,
9
+ type MaybePromise,
10
+ type OpenApiGeneratorContext,
11
+ OpenApiServicesGenerationProviderBase,
12
+ toCasing,
13
+ } from '@goast/core';
14
+
15
+ import { getAssetFileContent } from '../../../assets.js';
16
+ import type { KotlinServicesGeneratorInput } from '../spring-controllers/index.js';
17
+ import {
18
+ defaultKotlinOkHttp3ClientsGeneratorConfig,
19
+ type KotlinOkHttp3ClientGeneratorOutput,
20
+ type KotlinOkHttp3ClientsGeneratorConfig,
21
+ type KotlinOkHttp3ClientsGeneratorContext,
22
+ type KotlinOkHttp3ClientsGeneratorInput,
23
+ type KotlinOkHttp3ClientsGeneratorOutput,
24
+ } from './models.js';
25
+ import { DefaultKotlinOkHttp3Generator, type KotlinOkHttp3Generator } from './okhttp3-client-generator.js';
26
+ import { getReferenceFactories } from './refs.js';
27
+
28
+ type Input = KotlinOkHttp3ClientsGeneratorInput;
29
+ type Output = KotlinOkHttp3ClientsGeneratorOutput;
30
+ type Config = KotlinOkHttp3ClientsGeneratorConfig;
31
+ type ServiceOutput = KotlinOkHttp3ClientGeneratorOutput;
32
+ type Context = KotlinOkHttp3ClientsGeneratorContext;
33
+
34
+ export class KotlinOkHttp3ClientsGenerator extends OpenApiServicesGenerationProviderBase<
35
+ Input,
36
+ Output,
37
+ Config,
38
+ ServiceOutput,
39
+ Context
40
+ > {
41
+ private readonly _serviceGeneratorFactory: Factory<KotlinOkHttp3Generator, []>;
42
+
43
+ constructor(serviceGeneratorFactory?: Factory<KotlinOkHttp3Generator, []>) {
44
+ super();
45
+ this._serviceGeneratorFactory = serviceGeneratorFactory ?? Factory.fromValue(new DefaultKotlinOkHttp3Generator());
46
+ }
47
+
48
+ protected override async generateAdditionalFiles(ctx: KotlinOkHttp3ClientsGeneratorContext): Promise<void> {
49
+ await this.copyInfrastructureFiles(ctx);
50
+ }
51
+
52
+ protected initResult(): Output {
53
+ return {
54
+ kotlin: {
55
+ clients: {},
56
+ },
57
+ };
58
+ }
59
+
60
+ protected generateService(ctx: Context, service: ApiService): MaybePromise<ServiceOutput> {
61
+ const serviceGenerator = this._serviceGeneratorFactory.create();
62
+ return serviceGenerator.generate({
63
+ ...ctx,
64
+ service,
65
+ });
66
+ }
67
+
68
+ protected addServiceResult(ctx: Context, service: ApiService, result: ServiceOutput): void {
69
+ ctx.output.kotlin.clients[service.id] = result;
70
+ }
71
+
72
+ protected buildContext(
73
+ context: OpenApiGeneratorContext<KotlinServicesGeneratorInput>,
74
+ config?: Partial<Config> | undefined,
75
+ ): Context {
76
+ context.data.services = context.data.services.filter((x) => x.name !== 'exclude-from-generation');
77
+ const providerContext = this.getProviderContext(context, config, defaultKotlinOkHttp3ClientsGeneratorConfig);
78
+ const infrastructurePackageName = this.getInfrastructurePackageName(providerContext.config);
79
+ return Object.assign(providerContext, {
80
+ infrastructurePackageName,
81
+ refs: getReferenceFactories(infrastructurePackageName),
82
+ });
83
+ }
84
+
85
+ protected getInfrastructurePackageName(config: Config): string {
86
+ if (typeof config.infrastructurePackageName === 'string') {
87
+ return config.infrastructurePackageName;
88
+ }
89
+ if (config.infrastructurePackageName.mode === 'append-package-name') {
90
+ return config.packageName + config.infrastructurePackageName.value;
91
+ }
92
+ if (config.infrastructurePackageName.mode === 'append-full-package-name') {
93
+ return this.getPackageName(config) + config.infrastructurePackageName.value;
94
+ }
95
+
96
+ return config.infrastructurePackageName.value;
97
+ }
98
+
99
+ protected getPackageName(config: Config): string {
100
+ const packageSuffix = typeof config.packageSuffix === 'string' ? config.packageSuffix : config.packageSuffix();
101
+ return config.packageName + packageSuffix;
102
+ }
103
+
104
+ private async copyInfrastructureFiles(ctx: Context): Promise<void> {
105
+ const targetDir = resolve(ctx.config.outputDir, ctx.infrastructurePackageName.replace(/\./g, '/'));
106
+ await fs.ensureDir(targetDir);
107
+
108
+ const files = [
109
+ 'ApiAbstractions.kt',
110
+ 'ApiClient.kt',
111
+ 'ApiResponse.kt',
112
+ 'Errors.kt',
113
+ 'PartConfig.kt',
114
+ 'RequestConfig.kt',
115
+ 'RequestMethod.kt',
116
+ 'ResponseExtensions.kt',
117
+ 'Serializer.kt',
118
+ ];
119
+
120
+ for (const file of files) {
121
+ const sourcePath = `client/okhttp3/${file}`;
122
+ const targetPath = resolve(targetDir, file);
123
+ console.log(`Copying asset file "${sourcePath}" to "${targetPath}"`);
124
+ const fileContent = (await getAssetFileContent(sourcePath))
125
+ .replace(/@PACKAGE_NAME@/g, ctx.infrastructurePackageName)
126
+ .replace(/@JSON_INCLUDE@/g, toCasing(ctx.config.serializerJsonInclude, 'snake'));
127
+ fs.writeFileSync(targetPath, fileContent);
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,55 @@
1
+ import { kt } from '../../../ast/index.js';
2
+
3
+ // See packages/kotlin/assets/client/okhttp3 for reference
4
+ export function getReferenceFactories(infrastructurePackageName: string): {
5
+ multiValueMap: kt.ReferenceFactory;
6
+ collectionDelimiter: kt.ReferenceFactory;
7
+ defaultMultiValueConverter: kt.ReferenceFactory;
8
+ toMultiValueMap: kt.GenericReferenceFactory<1>;
9
+ apiClient: kt.ReferenceFactory;
10
+ responseType: kt.ReferenceFactory;
11
+ apiResponse: kt.GenericReferenceFactory<1>;
12
+ success: kt.GenericReferenceFactory<1>;
13
+ informational: kt.GenericReferenceFactory<1>;
14
+ redirection: kt.GenericReferenceFactory<1>;
15
+ clientError: kt.GenericReferenceFactory<1>;
16
+ serverError: kt.GenericReferenceFactory<1>;
17
+ clientException: kt.ReferenceFactory;
18
+ serverException: kt.ReferenceFactory;
19
+ partConfig: kt.GenericReferenceFactory<1>;
20
+ requestConfig: kt.GenericReferenceFactory<1>;
21
+ requestMethod: kt.ReferenceFactory;
22
+ } {
23
+ return {
24
+ // ApiAbstractions.kt
25
+ multiValueMap: kt.reference.factory('MultiValueMap', infrastructurePackageName),
26
+ collectionDelimiter: kt.reference.factory('collectionDelimiter', infrastructurePackageName),
27
+ defaultMultiValueConverter: kt.reference.factory('defaultMultiValueConverter', infrastructurePackageName),
28
+ toMultiValueMap: kt.reference.genericFactory<1>('toMultiValueMap', infrastructurePackageName),
29
+
30
+ // ApiClient.kt
31
+ apiClient: kt.reference.factory('ApiClient', infrastructurePackageName),
32
+
33
+ // ApiResponse.kt
34
+ responseType: kt.reference.factory('ResponseType', infrastructurePackageName),
35
+ apiResponse: kt.reference.genericFactory<1>('ApiResponse', infrastructurePackageName),
36
+ success: kt.reference.genericFactory<1>('Success', infrastructurePackageName),
37
+ informational: kt.reference.genericFactory<1>('Informational', infrastructurePackageName),
38
+ redirection: kt.reference.genericFactory<1>('Redirection', infrastructurePackageName),
39
+ clientError: kt.reference.genericFactory<1>('ClientError', infrastructurePackageName),
40
+ serverError: kt.reference.genericFactory<1>('ServerError', infrastructurePackageName),
41
+
42
+ // Errors.kt
43
+ clientException: kt.reference.factory('ClientException', infrastructurePackageName),
44
+ serverException: kt.reference.factory('ServerException', infrastructurePackageName),
45
+
46
+ // PartConfig.kt
47
+ partConfig: kt.reference.genericFactory<1>('PartConfig', infrastructurePackageName),
48
+
49
+ // RequestConfig.kt
50
+ requestConfig: kt.reference.genericFactory<1>('RequestConfig', infrastructurePackageName),
51
+
52
+ // RequestMethod.kt
53
+ requestMethod: kt.reference.factory('RequestMethod', infrastructurePackageName),
54
+ };
55
+ }
@@ -0,0 +1,93 @@
1
+ import type { ApiEndpoint, ApiResponse, ApiSchema, SourceBuilder } from '@goast/core';
2
+
3
+ import type { kt } from '../../../ast/index.js';
4
+ import type { ApiParameterWithMultipartInfo } from '../../../types.js';
5
+
6
+ // #region API Response Entities
7
+ export type GenerateApiResponseEntitiesFile = {
8
+ dirPath: string;
9
+ packageName: string;
10
+ };
11
+
12
+ export type GetApiResponseEntitiesFileContent = { packageName: string };
13
+
14
+ export type GetApiResponseEntities = object;
15
+ // #endregion
16
+
17
+ // #region API Interface
18
+ export type GenerateApiInterfaceFile = {
19
+ dirPath: string;
20
+ packageName: string;
21
+ };
22
+
23
+ export type GetApiInterfaceFileContent = { interfaceName: string };
24
+
25
+ export type GetApiInterface = { interfaceName: string };
26
+
27
+ export type GetApiInterfaceEndpointMethod = { endpoint: ApiEndpoint };
28
+
29
+ export type GetApiResponseEntityClass = { endpoint: ApiEndpoint };
30
+ // #endregion
31
+
32
+ // #region API Controller
33
+ export type GenerateApiControllerFile = {
34
+ dirPath: string;
35
+ packageName: string;
36
+ };
37
+
38
+ export type GetApiControllerFileContent = { controllerName: string };
39
+
40
+ export type GetApiController = { controllerName: string };
41
+ // #endregion
42
+
43
+ // #region API Delegate Interface
44
+ export type GenerateApiDelegateInterfaceFile = {
45
+ dirPath: string;
46
+ packageName: string;
47
+ };
48
+
49
+ export type GetApiDelegateInterfaceFileContent = { delegateInterfaceName: string };
50
+
51
+ export type GetApiDelegateInterface = { delegateInterfaceName: string };
52
+
53
+ export type GetApiDelegateInterfaceEndpointMethod = { endpoint: ApiEndpoint };
54
+ // #endregion
55
+
56
+ export type GetParameterType = {
57
+ endpoint: ApiEndpoint;
58
+ parameter: ApiParameterWithMultipartInfo;
59
+ type?: kt.Reference<SourceBuilder>;
60
+ };
61
+
62
+ export type GetResponseType = { endpoint: ApiEndpoint; response?: ApiResponse };
63
+
64
+ export type GetTypeUsage<TBuilder extends SourceBuilder> = {
65
+ schema: ApiSchema | undefined;
66
+ nullable?: boolean;
67
+ fallback?: kt.Type<TBuilder>;
68
+ type?: kt.Reference<TBuilder>;
69
+ };
70
+
71
+ export type GetSchemaType = { schema: ApiSchema | undefined };
72
+
73
+ export type GetControllerRequestMapping = { prefix?: string };
74
+
75
+ export type GetBasePath = object;
76
+
77
+ export type GetEndpointPath = { endpoint: ApiEndpoint };
78
+
79
+ export type GetDirectoryPath = { packageName: string };
80
+
81
+ export type GetPathConstantName = { endpoint: ApiEndpoint };
82
+
83
+ export type GetPackageName = object;
84
+
85
+ export type GetApiResponseEntityName = { endpoint: ApiEndpoint };
86
+
87
+ export type GetApiInterfaceName = object;
88
+
89
+ export type GetApiDelegateInterfaceName = object;
90
+
91
+ export type GetApiControllerName = object;
92
+
93
+ export type GetAllParameters = { endpoint: ApiEndpoint };
@@ -0,0 +1,4 @@
1
+ export * as DefaultKotlinSpringControllerGeneratorArgs from './args.js';
2
+ export * from './models.js';
3
+ export * from './spring-controller-generator.js';
4
+ export * from './spring-controllers-generator.js';
@@ -0,0 +1,71 @@
1
+ import type {
2
+ ApiEndpoint,
3
+ ApiService,
4
+ DefaultGenerationProviderConfig,
5
+ OpenApiServicesGenerationProviderContext,
6
+ } from '@goast/core';
7
+
8
+ import type { KotlinImport } from '../../../common-results.js';
9
+ import { defaultKotlinGeneratorConfig, type KotlinGeneratorConfig } from '../../../config.js';
10
+ import type { KotlinModelsGeneratorOutput } from '../../models/index.js';
11
+ import type { getReferenceFactories } from './refs.js';
12
+
13
+ export type KotlinServicesGeneratorConfig = KotlinGeneratorConfig & {
14
+ packageName: string;
15
+ packageSuffix: string | ((service: ApiService | null) => string);
16
+
17
+ basePath?: string | RegExp | ((basePath: string, service: ApiService) => string);
18
+ pathModifier?: RegExp | ((path: string, endpoint: ApiEndpoint) => string);
19
+
20
+ addSwaggerAnnotations: boolean;
21
+ addJakartaValidationAnnotations: boolean;
22
+ arrayType: 'list' | 'flux';
23
+
24
+ strictResponseEntities: boolean;
25
+ defaultStatusCodes: number[];
26
+ };
27
+
28
+ export const defaultKotlinServicesGeneratorConfig: DefaultGenerationProviderConfig<KotlinServicesGeneratorConfig> = {
29
+ ...defaultKotlinGeneratorConfig,
30
+
31
+ packageName: 'com.openapi.generated',
32
+ packageSuffix: '.api',
33
+
34
+ addSwaggerAnnotations: true,
35
+ addJakartaValidationAnnotations: true,
36
+ arrayType: 'flux',
37
+
38
+ strictResponseEntities: false,
39
+ defaultStatusCodes: [400, 401, 403, 500, 501],
40
+ };
41
+
42
+ export type KotlinServicesGeneratorInput = KotlinModelsGeneratorOutput;
43
+
44
+ export type KotlinServicesGeneratorOutput = {
45
+ kotlin: {
46
+ services: {
47
+ [serviceId: string]: KotlinServiceGeneratorOutput;
48
+ };
49
+ };
50
+ };
51
+
52
+ export type KotlinServiceGeneratorOutput = {
53
+ apiInterface: KotlinImport;
54
+ apiController: KotlinImport;
55
+ apiDelegate: KotlinImport;
56
+ };
57
+
58
+ export type KotlinServicesGeneratorContext =
59
+ & OpenApiServicesGenerationProviderContext<
60
+ KotlinServicesGeneratorInput,
61
+ KotlinServicesGeneratorOutput,
62
+ KotlinServicesGeneratorConfig,
63
+ KotlinServiceGeneratorOutput
64
+ >
65
+ & {
66
+ refs: ReturnType<typeof getReferenceFactories>;
67
+ };
68
+
69
+ export type KotlinServiceGeneratorContext = KotlinServicesGeneratorContext & {
70
+ service: ApiService;
71
+ };
@@ -0,0 +1,17 @@
1
+ import { toCasing } from '@goast/core';
2
+ import { kt } from '../../../ast/index.js';
3
+ import type { KotlinServicesGeneratorConfig } from './models.js';
4
+
5
+ export function getReferenceFactories(options: KotlinServicesGeneratorConfig): {
6
+ apiExceptionHandler: kt.ReferenceFactory;
7
+ } {
8
+ const packageSuffix = typeof options.packageSuffix === 'string' ? options.packageSuffix : options.packageSuffix(null);
9
+ const packageName = options.packageName + packageSuffix;
10
+
11
+ return {
12
+ apiExceptionHandler: kt.reference.factory(
13
+ toCasing('ApiExceptionHandler', options.typeNameCasing),
14
+ packageName,
15
+ ),
16
+ };
17
+ }