@devlearning/swagger-generator 1.1.0 → 1.1.1

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 (54) hide show
  1. package/.vscode/launch.json +28 -28
  2. package/README.md +209 -209
  3. package/dist/api.constants.js +22 -22
  4. package/dist/generators-writers/angular/api-angular-writer.js +15 -15
  5. package/dist/generators-writers/angular/constants.js +24 -24
  6. package/dist/generators-writers/angular/model-angular-writer.js +6 -6
  7. package/dist/generators-writers/dart/api-dart-writer.js +8 -2
  8. package/dist/generators-writers/dart/templates/api.mustache +49 -36
  9. package/dist/generators-writers/dart/templates/enum.mustache +14 -14
  10. package/dist/generators-writers/dart/templates/model.mustache +17 -17
  11. package/dist/generators-writers/nextjs/api-nextjs-writer.js +12 -12
  12. package/dist/generators-writers/nextjs/constants.js +4 -4
  13. package/dist/generators-writers/nextjs/model-nextjs-writer.js +6 -6
  14. package/package.json +45 -45
  15. package/src/api.constants.ts +26 -26
  16. package/src/generator-old.ts +449 -449
  17. package/src/generator.ts +582 -582
  18. package/src/generators-writers/angular/api-angular-writer.ts +141 -141
  19. package/src/generators-writers/angular/constants.ts +36 -36
  20. package/src/generators-writers/angular/model-angular-writer.ts +62 -62
  21. package/src/generators-writers/dart/api-dart-writer.ts +198 -190
  22. package/src/generators-writers/dart/model-dart-writer.ts +162 -162
  23. package/src/generators-writers/dart/models/import-definition-dart.ts +5 -5
  24. package/src/generators-writers/dart/normalizator.ts +72 -72
  25. package/src/generators-writers/dart/templates/api.mustache +49 -36
  26. package/src/generators-writers/dart/templates/enum.mustache +14 -14
  27. package/src/generators-writers/dart/templates/model.mustache +17 -17
  28. package/src/generators-writers/nextjs/api-nextjs-writer.ts +156 -156
  29. package/src/generators-writers/nextjs/constants.ts +5 -5
  30. package/src/generators-writers/nextjs/model-nextjs-writer.ts +61 -61
  31. package/src/generators-writers/utils.ts +78 -78
  32. package/src/index.ts +96 -96
  33. package/src/models/api-dto.ts +17 -17
  34. package/src/models/enum-value-dto.ts +3 -3
  35. package/src/models/model-dto.ts +9 -9
  36. package/src/models/parameter-dto.ts +7 -7
  37. package/src/models/property-dto.ts +4 -4
  38. package/src/models/swagger/swagger-component-property.ts +11 -11
  39. package/src/models/swagger/swagger-component.ts +17 -17
  40. package/src/models/swagger/swagger-content.ts +4 -4
  41. package/src/models/swagger/swagger-info.ts +3 -3
  42. package/src/models/swagger/swagger-method.ts +7 -7
  43. package/src/models/swagger/swagger-schema.ts +20 -20
  44. package/src/models/swagger/swagger.ts +38 -38
  45. package/src/models/type-dto.ts +7 -7
  46. package/src/swagger-downloader.ts +12 -12
  47. package/tsconfig.json +28 -28
  48. package/dist/models/swagger-component-property.js +0 -1
  49. package/dist/models/swagger-component.js +0 -1
  50. package/dist/models/swagger-content.js +0 -1
  51. package/dist/models/swagger-info.js +0 -1
  52. package/dist/models/swagger-method.js +0 -1
  53. package/dist/models/swagger-schema.js +0 -1
  54. package/dist/models/swagger.js +0 -1
@@ -1,157 +1,157 @@
1
- import fs from 'fs';
2
- import { API_PRE } from './constants.js';
3
- import { ApiDto } from '@src/models/api-dto.js';
4
- import { Utils } from '../utils.js';
5
- import { ParameterDto } from '@src/models/parameter-dto.js';
6
-
7
- export class ApiNextJsWriter {
8
- private _outputDirectory: string;
9
-
10
- constructor(_outputDirectory: string) {
11
- this._outputDirectory = _outputDirectory;
12
- }
13
-
14
- write(apis: ApiDto[]) {
15
- let apiString = '';
16
-
17
- apis.forEach(api => {
18
- apiString += this._apiString(api);
19
- });
20
-
21
-
22
- this._writeFile(apiString);
23
- }
24
-
25
- private _apiString(api: ApiDto) {
26
-
27
- let apiNameNormalized = Utils.toCamelCase(Utils.getNormalizedApiPath(api.name));
28
- let parametersString = this._parameters(api);
29
- let queryParametersPreparation = this._queryParametersPreparation(api);
30
- let requestPreparation = this._requestPreparation(api);
31
- let queryParameters = this._queryParameters(api);
32
- let returnTypeString = this._returnType(api);
33
- let haveRequest = api.haveRequest;
34
- let method = api.method.toLowerCase();
35
- let httpOptions = api.isMultiPart ? 'httpOptionsMultiPart' : 'httpOptions';
36
- let preparation = `${queryParametersPreparation}
37
- ${requestPreparation}`.trim();
38
- preparation = preparation.length > 0 ? ` ${preparation}\n ` : '';
39
-
40
- //\`\${API_BASE_URL}
41
- let apiString = `
42
- export const ${apiNameNormalized} = async (${parametersString}): Promise<${returnTypeString}> => {
43
- ${preparation}const response = await axios.${method}<${returnTypeString}>(\`${api.url}${queryParameters}\`${haveRequest ? ', wrappedRequest' : ''});
44
- return response.data;
45
- }
46
- `;
47
-
48
- return apiString;
49
- }
50
-
51
- private _parameters(api: ApiDto) {
52
- let parametersString = '';
53
-
54
- api.parameters.forEach(parameter => {
55
- parametersString += `${parameter.name}${parameter.nullable ? '?' : ''}: ${!parameter.isNativeType ? 'Models.' : ''}${parameter.typeName}, `;
56
- });
57
-
58
- if (api.parameters.length > 0)
59
- parametersString = parametersString.substring(0, parametersString.length - 2);
60
-
61
- return parametersString;
62
- }
63
-
64
- private _returnType(api: ApiDto) {
65
- return api.returnType ? `${!api.returnType.isNativeType ? 'Models.' : ''}${api.returnType.typeName}` : 'any';
66
- }
67
-
68
- private _queryParametersPreparation(api: ApiDto) {
69
- let queryParametersPreparation = '';
70
-
71
- api.parameters.forEach(parameter => {
72
- if (parameter.isQuery) {
73
- queryParametersPreparation += this._queryParametersPreparationStatement(parameter);
74
- }
75
- });
76
-
77
- return `${queryParametersPreparation}`;
78
- }
79
-
80
- private _queryParametersPreparationStatement(parameter: ParameterDto) {
81
- if (parameter.nullable) {
82
- if (Utils.isDate(parameter.swaggerParameter?.schema)) {
83
- return ` const ${parameter.name}Param: string = ${parameter.name} != null && ${parameter.name} !== undefined && isValid(${parameter.name}) ? encodeURIComponent(dateToZulu(${parameter.name})) : '';
84
- `;
85
- } else {
86
- return ` const ${parameter.name}Param: string = ${parameter.name} != null && ${parameter.name} !== undefined ? encodeURIComponent('' + ${parameter.name}) : '';
87
- `;
88
- }
89
- } else {
90
- if (Utils.isDate(parameter.swaggerParameter?.schema)) {
91
- return ` const ${parameter.name}Param: string = encodeURIComponent(dateToZulu(${parameter.name}));
92
- `;
93
- } else {
94
- return ` const ${parameter.name}Param: string = encodeURIComponent('' + ${parameter.name});
95
- `;
96
- }
97
- }
98
- }
99
-
100
- private _queryParameters(api: ApiDto) {
101
- let queryParameters = '';
102
-
103
- api.parameters.forEach(parameter => {
104
- if (parameter.isQuery) {
105
- queryParameters += this._queryParametersStatement(parameter);
106
- }
107
- });
108
-
109
- if (queryParameters.length > 0) {
110
- queryParameters = '?' + queryParameters.substring(0, queryParameters.length - 1);
111
- }
112
-
113
- return queryParameters;
114
- }
115
-
116
- private _queryParametersStatement(parameter: ParameterDto) {
117
- if (parameter.swaggerParameter == null) return '';
118
-
119
- if (!parameter.isQuery) return '';
120
-
121
- return `${parameter.name}=\${${parameter.name}Param}&`;
122
- // if (parameter.isEnum) {
123
- // return `${parameter.name}=\${` + parameter.name + `Param}&`;
124
- // } else {
125
- // return `${parameter.name}=\${` + parameter.name + `}&`;
126
- // }
127
- // if (parameter.swaggerParameter.schema.$ref != null) {
128
- // if (this.isEnum(parameter.schema.$ref) != null) {
129
- // parameters += `${this.toFirstLetterLowercase(parameter.name)}=\${` + this.toFirstLetterLowercase(parameter.name) + `Param}&`;;
130
- // } else {
131
- // throw new Error("retrieveQueryParameters unmanaged parameter.schema.$ref");
132
- // }
133
- // } else {
134
- // parameters += `${this.toFirstLetterLowercase(parameter.name)}=\${` + this.toFirstLetterLowercase(parameter.name) + `Param}&`;
135
- // }
136
- // let paramName = Utils.toFirstLetterLowercase(parameter.name);
137
- // return `${parameter.swaggerParameter?.name}=\${${paramName}Param}&`;
138
- }
139
-
140
- private _requestPreparation(api: ApiDto) {
141
- if (!api.haveRequest) {
142
- return ``;
143
- }
144
-
145
- return ` const wrappedRequest = handleRequest(request);
146
- `;
147
- }
148
-
149
-
150
-
151
- private _writeFile(apis: string) {
152
- fs.writeFileSync(this._outputDirectory + "/api.autogenerated.ts",
153
- `${API_PRE}
154
- ${apis}`,
155
- { flag: 'w' });
156
- }
1
+ import fs from 'fs';
2
+ import { API_PRE } from './constants.js';
3
+ import { ApiDto } from '@src/models/api-dto.js';
4
+ import { Utils } from '../utils.js';
5
+ import { ParameterDto } from '@src/models/parameter-dto.js';
6
+
7
+ export class ApiNextJsWriter {
8
+ private _outputDirectory: string;
9
+
10
+ constructor(_outputDirectory: string) {
11
+ this._outputDirectory = _outputDirectory;
12
+ }
13
+
14
+ write(apis: ApiDto[]) {
15
+ let apiString = '';
16
+
17
+ apis.forEach(api => {
18
+ apiString += this._apiString(api);
19
+ });
20
+
21
+
22
+ this._writeFile(apiString);
23
+ }
24
+
25
+ private _apiString(api: ApiDto) {
26
+
27
+ let apiNameNormalized = Utils.toCamelCase(Utils.getNormalizedApiPath(api.name));
28
+ let parametersString = this._parameters(api);
29
+ let queryParametersPreparation = this._queryParametersPreparation(api);
30
+ let requestPreparation = this._requestPreparation(api);
31
+ let queryParameters = this._queryParameters(api);
32
+ let returnTypeString = this._returnType(api);
33
+ let haveRequest = api.haveRequest;
34
+ let method = api.method.toLowerCase();
35
+ let httpOptions = api.isMultiPart ? 'httpOptionsMultiPart' : 'httpOptions';
36
+ let preparation = `${queryParametersPreparation}
37
+ ${requestPreparation}`.trim();
38
+ preparation = preparation.length > 0 ? ` ${preparation}\n ` : '';
39
+
40
+ //\`\${API_BASE_URL}
41
+ let apiString = `
42
+ export const ${apiNameNormalized} = async (${parametersString}): Promise<${returnTypeString}> => {
43
+ ${preparation}const response = await axios.${method}<${returnTypeString}>(\`${api.url}${queryParameters}\`${haveRequest ? ', wrappedRequest' : ''});
44
+ return response.data;
45
+ }
46
+ `;
47
+
48
+ return apiString;
49
+ }
50
+
51
+ private _parameters(api: ApiDto) {
52
+ let parametersString = '';
53
+
54
+ api.parameters.forEach(parameter => {
55
+ parametersString += `${parameter.name}${parameter.nullable ? '?' : ''}: ${!parameter.isNativeType ? 'Models.' : ''}${parameter.typeName}, `;
56
+ });
57
+
58
+ if (api.parameters.length > 0)
59
+ parametersString = parametersString.substring(0, parametersString.length - 2);
60
+
61
+ return parametersString;
62
+ }
63
+
64
+ private _returnType(api: ApiDto) {
65
+ return api.returnType ? `${!api.returnType.isNativeType ? 'Models.' : ''}${api.returnType.typeName}` : 'any';
66
+ }
67
+
68
+ private _queryParametersPreparation(api: ApiDto) {
69
+ let queryParametersPreparation = '';
70
+
71
+ api.parameters.forEach(parameter => {
72
+ if (parameter.isQuery) {
73
+ queryParametersPreparation += this._queryParametersPreparationStatement(parameter);
74
+ }
75
+ });
76
+
77
+ return `${queryParametersPreparation}`;
78
+ }
79
+
80
+ private _queryParametersPreparationStatement(parameter: ParameterDto) {
81
+ if (parameter.nullable) {
82
+ if (Utils.isDate(parameter.swaggerParameter?.schema)) {
83
+ return ` const ${parameter.name}Param: string = ${parameter.name} != null && ${parameter.name} !== undefined && isValid(${parameter.name}) ? encodeURIComponent(dateToZulu(${parameter.name})) : '';
84
+ `;
85
+ } else {
86
+ return ` const ${parameter.name}Param: string = ${parameter.name} != null && ${parameter.name} !== undefined ? encodeURIComponent('' + ${parameter.name}) : '';
87
+ `;
88
+ }
89
+ } else {
90
+ if (Utils.isDate(parameter.swaggerParameter?.schema)) {
91
+ return ` const ${parameter.name}Param: string = encodeURIComponent(dateToZulu(${parameter.name}));
92
+ `;
93
+ } else {
94
+ return ` const ${parameter.name}Param: string = encodeURIComponent('' + ${parameter.name});
95
+ `;
96
+ }
97
+ }
98
+ }
99
+
100
+ private _queryParameters(api: ApiDto) {
101
+ let queryParameters = '';
102
+
103
+ api.parameters.forEach(parameter => {
104
+ if (parameter.isQuery) {
105
+ queryParameters += this._queryParametersStatement(parameter);
106
+ }
107
+ });
108
+
109
+ if (queryParameters.length > 0) {
110
+ queryParameters = '?' + queryParameters.substring(0, queryParameters.length - 1);
111
+ }
112
+
113
+ return queryParameters;
114
+ }
115
+
116
+ private _queryParametersStatement(parameter: ParameterDto) {
117
+ if (parameter.swaggerParameter == null) return '';
118
+
119
+ if (!parameter.isQuery) return '';
120
+
121
+ return `${parameter.name}=\${${parameter.name}Param}&`;
122
+ // if (parameter.isEnum) {
123
+ // return `${parameter.name}=\${` + parameter.name + `Param}&`;
124
+ // } else {
125
+ // return `${parameter.name}=\${` + parameter.name + `}&`;
126
+ // }
127
+ // if (parameter.swaggerParameter.schema.$ref != null) {
128
+ // if (this.isEnum(parameter.schema.$ref) != null) {
129
+ // parameters += `${this.toFirstLetterLowercase(parameter.name)}=\${` + this.toFirstLetterLowercase(parameter.name) + `Param}&`;;
130
+ // } else {
131
+ // throw new Error("retrieveQueryParameters unmanaged parameter.schema.$ref");
132
+ // }
133
+ // } else {
134
+ // parameters += `${this.toFirstLetterLowercase(parameter.name)}=\${` + this.toFirstLetterLowercase(parameter.name) + `Param}&`;
135
+ // }
136
+ // let paramName = Utils.toFirstLetterLowercase(parameter.name);
137
+ // return `${parameter.swaggerParameter?.name}=\${${paramName}Param}&`;
138
+ }
139
+
140
+ private _requestPreparation(api: ApiDto) {
141
+ if (!api.haveRequest) {
142
+ return ``;
143
+ }
144
+
145
+ return ` const wrappedRequest = handleRequest(request);
146
+ `;
147
+ }
148
+
149
+
150
+
151
+ private _writeFile(apis: string) {
152
+ fs.writeFileSync(this._outputDirectory + "/api.autogenerated.ts",
153
+ `${API_PRE}
154
+ ${apis}`,
155
+ { flag: 'w' });
156
+ }
157
157
  }
@@ -1,6 +1,6 @@
1
- export const API_PRE =
2
- `import axios from 'axios';
3
- import * as Models from './model.autogenerated';
4
- import { handleRequest, dateToZulu } from './utils/axios'
5
- import { isValid } from 'date-fns';
1
+ export const API_PRE =
2
+ `import axios from 'axios';
3
+ import * as Models from './model.autogenerated';
4
+ import { handleRequest, dateToZulu } from './utils/axios'
5
+ import { isValid } from 'date-fns';
6
6
  `;
@@ -1,62 +1,62 @@
1
- import fs from 'fs';
2
- import { ModelDto } from '@src/models/model-dto.js';
3
-
4
- export class ModelNextJsWriter {
5
- private _outputDirectory: string;
6
-
7
- constructor(_outputDirectory: string) {
8
- this._outputDirectory = _outputDirectory;
9
- }
10
-
11
- write(models: ModelDto[]) {
12
- let modelString = '';
13
-
14
- models.forEach(model => {
15
- modelString += this._modelString(model);
16
- });
17
-
18
-
19
- this._writeFile(modelString);
20
- }
21
-
22
- private _modelString(model: ModelDto) {
23
- let modelString = `
24
- export ${model.modelType} ${model.name} {
25
- ${this._properties(model)}${this._enumValues(model)}
26
- }
27
- `;
28
-
29
- return modelString;
30
- }
31
-
32
- private _properties(model: ModelDto) {
33
- let propertiesString = '';
34
-
35
- model.properties.forEach(property => {
36
- //const libraryDate = this._commandLineArgs.dateTimeLibrary == DateTimeLibrary.Moment ? 'moment.Moment' : 'Date'
37
- const libraryDate = 'Date';
38
- const typeName = property.typeName === 'dateTime' ? libraryDate : property.typeName;
39
- propertiesString += ` ${property.name}${property.nullable ? '?' : ''}: ${typeName};\n`;
40
- });
41
-
42
- return propertiesString.trimEnd();
43
- }
44
-
45
- private _enumValues(model: ModelDto) {
46
- let enumValuesString = '';
47
-
48
- model.enumValues.forEach(enumValue => {
49
- enumValuesString += ` ${enumValue.name} = ${enumValue.value},\n`;
50
- });
51
-
52
- return enumValuesString.trimEnd();
53
- }
54
-
55
- private _writeFile(models: string) {
56
- fs.writeFileSync(this._outputDirectory + "/model.autogenerated.ts",
57
- `
58
- ${models}
59
- `,
60
- { flag: 'w' });
61
- }
1
+ import fs from 'fs';
2
+ import { ModelDto } from '@src/models/model-dto.js';
3
+
4
+ export class ModelNextJsWriter {
5
+ private _outputDirectory: string;
6
+
7
+ constructor(_outputDirectory: string) {
8
+ this._outputDirectory = _outputDirectory;
9
+ }
10
+
11
+ write(models: ModelDto[]) {
12
+ let modelString = '';
13
+
14
+ models.forEach(model => {
15
+ modelString += this._modelString(model);
16
+ });
17
+
18
+
19
+ this._writeFile(modelString);
20
+ }
21
+
22
+ private _modelString(model: ModelDto) {
23
+ let modelString = `
24
+ export ${model.modelType} ${model.name} {
25
+ ${this._properties(model)}${this._enumValues(model)}
26
+ }
27
+ `;
28
+
29
+ return modelString;
30
+ }
31
+
32
+ private _properties(model: ModelDto) {
33
+ let propertiesString = '';
34
+
35
+ model.properties.forEach(property => {
36
+ //const libraryDate = this._commandLineArgs.dateTimeLibrary == DateTimeLibrary.Moment ? 'moment.Moment' : 'Date'
37
+ const libraryDate = 'Date';
38
+ const typeName = property.typeName === 'dateTime' ? libraryDate : property.typeName;
39
+ propertiesString += ` ${property.name}${property.nullable ? '?' : ''}: ${typeName};\n`;
40
+ });
41
+
42
+ return propertiesString.trimEnd();
43
+ }
44
+
45
+ private _enumValues(model: ModelDto) {
46
+ let enumValuesString = '';
47
+
48
+ model.enumValues.forEach(enumValue => {
49
+ enumValuesString += ` ${enumValue.name} = ${enumValue.value},\n`;
50
+ });
51
+
52
+ return enumValuesString.trimEnd();
53
+ }
54
+
55
+ private _writeFile(models: string) {
56
+ fs.writeFileSync(this._outputDirectory + "/model.autogenerated.ts",
57
+ `
58
+ ${models}
59
+ `,
60
+ { flag: 'w' });
61
+ }
62
62
  }
@@ -1,79 +1,79 @@
1
- import { SwaggerSchema } from "@src/models/swagger/swagger-schema.js";
2
- import fs from 'fs';
3
- import path from 'path';
4
-
5
- export class Utils {
6
-
7
- public static getNormalizedApiPath(apiName: string) {
8
- let normalizedApiName = apiName.replace('/api/v{version}/', '').replaceAll('/', '_');
9
-
10
- if (normalizedApiName.charAt(0) == '_') {
11
- normalizedApiName = normalizedApiName.slice(1);
12
- }
13
-
14
- normalizedApiName = normalizedApiName.replace(/-([a-zA-Z])/g, (_, char) => char.toUpperCase());
15
-
16
- normalizedApiName = this.toCamelCase(normalizedApiName);
17
-
18
- normalizedApiName = this.toFirstLetterLowercase(normalizedApiName);
19
-
20
- normalizedApiName = normalizedApiName.replaceAll('_', '');
21
-
22
- return normalizedApiName;
23
- }
24
-
25
- public static toFirstLetterLowercase(value: string) {
26
- return value.charAt(0).toLowerCase() + value.slice(1);
27
- }
28
-
29
- public static toCamelCase(input: string): string {
30
- return input.replace(/_([a-zA-Z])/g, (_, letter) => letter.toUpperCase());
31
- }
32
-
33
- public static toPascalCase(input: string): string {
34
- return input
35
- .replace(/[_\-\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ""))
36
- .replace(/^(.)/, (_, c) => c.toUpperCase());
37
- }
38
-
39
- public static isDate(schema?: SwaggerSchema) {
40
- if (!schema) return false;
41
-
42
- return schema.type == 'string' && schema.format == 'date-time';
43
- }
44
-
45
- public static toDartFileName(name: string): string {
46
- return name
47
- .replace(/\./g, '_') // sostituisce i punti con underscore
48
- .replace(/([a-z0-9])([A-Z])/g, '$1_$2') // aggiunge _ tra camelCase
49
- .toLowerCase();
50
- }
51
-
52
- public static toDartClassName(name: string): string | undefined {
53
- if (!name) return undefined;
54
-
55
- return name.replace(/\./g, ''); // rimuove i punti per ottenere PascalCase
56
- }
57
-
58
- public static async ensureDirectorySync(dirPath: string) {
59
- if (!fs.existsSync(dirPath)) {
60
- fs.mkdirSync(dirPath, { recursive: true });
61
- }
62
- }
63
-
64
- public static async clearDirectory(dirPath: string) {
65
- if (!fs.existsSync(dirPath)) return;
66
-
67
- for (const file of fs.readdirSync(dirPath)) {
68
- const fullPath = path.join(dirPath, file);
69
- const stat = fs.statSync(fullPath);
70
-
71
- if (stat.isDirectory()) {
72
- fs.rmSync(fullPath, { recursive: true, force: true });
73
- } else {
74
- fs.unlinkSync(fullPath);
75
- }
76
- }
77
- }
78
-
1
+ import { SwaggerSchema } from "@src/models/swagger/swagger-schema.js";
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+
5
+ export class Utils {
6
+
7
+ public static getNormalizedApiPath(apiName: string) {
8
+ let normalizedApiName = apiName.replace('/api/v{version}/', '').replaceAll('/', '_');
9
+
10
+ if (normalizedApiName.charAt(0) == '_') {
11
+ normalizedApiName = normalizedApiName.slice(1);
12
+ }
13
+
14
+ normalizedApiName = normalizedApiName.replace(/-([a-zA-Z])/g, (_, char) => char.toUpperCase());
15
+
16
+ normalizedApiName = this.toCamelCase(normalizedApiName);
17
+
18
+ normalizedApiName = this.toFirstLetterLowercase(normalizedApiName);
19
+
20
+ normalizedApiName = normalizedApiName.replaceAll('_', '');
21
+
22
+ return normalizedApiName;
23
+ }
24
+
25
+ public static toFirstLetterLowercase(value: string) {
26
+ return value.charAt(0).toLowerCase() + value.slice(1);
27
+ }
28
+
29
+ public static toCamelCase(input: string): string {
30
+ return input.replace(/_([a-zA-Z])/g, (_, letter) => letter.toUpperCase());
31
+ }
32
+
33
+ public static toPascalCase(input: string): string {
34
+ return input
35
+ .replace(/[_\-\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ""))
36
+ .replace(/^(.)/, (_, c) => c.toUpperCase());
37
+ }
38
+
39
+ public static isDate(schema?: SwaggerSchema) {
40
+ if (!schema) return false;
41
+
42
+ return schema.type == 'string' && schema.format == 'date-time';
43
+ }
44
+
45
+ public static toDartFileName(name: string): string {
46
+ return name
47
+ .replace(/\./g, '_') // sostituisce i punti con underscore
48
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2') // aggiunge _ tra camelCase
49
+ .toLowerCase();
50
+ }
51
+
52
+ public static toDartClassName(name: string): string | undefined {
53
+ if (!name) return undefined;
54
+
55
+ return name.replace(/\./g, ''); // rimuove i punti per ottenere PascalCase
56
+ }
57
+
58
+ public static async ensureDirectorySync(dirPath: string) {
59
+ if (!fs.existsSync(dirPath)) {
60
+ fs.mkdirSync(dirPath, { recursive: true });
61
+ }
62
+ }
63
+
64
+ public static async clearDirectory(dirPath: string) {
65
+ if (!fs.existsSync(dirPath)) return;
66
+
67
+ for (const file of fs.readdirSync(dirPath)) {
68
+ const fullPath = path.join(dirPath, file);
69
+ const stat = fs.statSync(fullPath);
70
+
71
+ if (stat.isDirectory()) {
72
+ fs.rmSync(fullPath, { recursive: true, force: true });
73
+ } else {
74
+ fs.unlinkSync(fullPath);
75
+ }
76
+ }
77
+ }
78
+
79
79
  }