@devlearning/swagger-generator 1.1.16 → 1.1.17
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/.vscode/launch.json +28 -28
- package/README-OLD.md +209 -209
- package/README.md +277 -277
- package/dist/api.constants.js +22 -22
- package/dist/generator.d.ts +4 -0
- package/dist/generator.js +118 -4
- package/dist/generators-writers/angular/api-angular-writer.js +38 -38
- package/dist/generators-writers/angular/constants.js +24 -24
- package/dist/generators-writers/angular/model-angular-writer.js +6 -6
- package/dist/generators-writers/dart/model-dart-writer.d.ts +1 -0
- package/dist/generators-writers/dart/model-dart-writer.js +15 -14
- package/dist/generators-writers/dart/templates/api.mustache +143 -143
- package/dist/generators-writers/dart/templates/enum.mustache +14 -14
- package/dist/generators-writers/dart/templates/model.mustache +20 -23
- package/dist/generators-writers/nextjs/api-nextjs-writer.js +12 -12
- package/dist/generators-writers/nextjs/constants.js +4 -4
- package/dist/generators-writers/nextjs/model-nextjs-writer.js +6 -6
- package/dist/models/swagger/swagger-component.d.ts +2 -2
- package/dist/models/swagger/swagger-schema.d.ts +1 -0
- package/package.json +49 -49
- package/src/api.constants.ts +26 -26
- package/src/generator-old.ts +449 -449
- package/src/generator.ts +752 -625
- package/src/generators-writers/angular/api-angular-writer.ts +187 -187
- package/src/generators-writers/angular/constants.ts +36 -36
- package/src/generators-writers/angular/model-angular-writer.ts +65 -65
- package/src/generators-writers/angular/normalizator.ts +41 -41
- package/src/generators-writers/dart/api-dart-writer.ts +303 -303
- package/src/generators-writers/dart/model-dart-writer.ts +212 -209
- package/src/generators-writers/dart/models/import-definition-dart.ts +5 -5
- package/src/generators-writers/dart/normalizator.ts +72 -72
- package/src/generators-writers/dart/templates/api.mustache +143 -143
- package/src/generators-writers/dart/templates/enum.mustache +14 -14
- package/src/generators-writers/dart/templates/model.mustache +20 -23
- package/src/generators-writers/nextjs/api-nextjs-writer.ts +157 -157
- package/src/generators-writers/nextjs/constants.ts +5 -5
- package/src/generators-writers/nextjs/model-nextjs-writer.ts +61 -61
- package/src/generators-writers/utils.ts +93 -93
- package/src/index.ts +103 -103
- package/src/models/api-dto.ts +17 -17
- package/src/models/enum-value-dto.ts +3 -3
- package/src/models/model-dto.ts +9 -9
- package/src/models/parameter-dto.ts +7 -7
- package/src/models/property-dto.ts +4 -4
- package/src/models/swagger/swagger-component-property.ts +11 -11
- package/src/models/swagger/swagger-component.ts +17 -17
- package/src/models/swagger/swagger-content.ts +4 -4
- package/src/models/swagger/swagger-info.ts +3 -3
- package/src/models/swagger/swagger-method.ts +7 -7
- package/src/models/swagger/swagger-schema.ts +21 -20
- package/src/models/swagger/swagger.ts +38 -38
- package/src/models/type-dto.ts +7 -7
- package/src/swagger-downloader.ts +46 -46
- package/src/utils/logger.ts +73 -73
- package/src/utils/swagger-validator.ts +89 -89
- package/tsconfig.json +33 -33
- package/dist/templates/api.mustache +0 -29
- package/dist/templates/model.mustache +0 -18
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
import 'package:{{package}}/core/di/injector.dart';
|
|
2
|
-
import 'package:dio/dio.dart';
|
|
3
|
-
{{#imports}}
|
|
4
|
-
{{{.}}}
|
|
5
|
-
{{/imports}}
|
|
6
|
-
|
|
7
|
-
class {{apiClassName}} {
|
|
8
|
-
final Dio _dio;
|
|
9
|
-
|
|
10
|
-
{{apiClassName}}() : _dio = getIt<Dio>();
|
|
11
|
-
|
|
12
|
-
{{#endpoints}}
|
|
13
|
-
Future<{{responseType}}> {{methodName}}(
|
|
14
|
-
{{#haveRequest}}{{requestType}} request,{{/haveRequest}}
|
|
15
|
-
{{#pathParams}}
|
|
16
|
-
{{type}}{{#nullable}}?{{/nullable}} {{name}},
|
|
17
|
-
{{/pathParams}}
|
|
18
|
-
{{#queryParams}}
|
|
19
|
-
{{type}}{{#nullable}}?{{/nullable}} {{name}},
|
|
20
|
-
{{/queryParams}}
|
|
21
|
-
) async {
|
|
22
|
-
{{#isMultiPart}}
|
|
23
|
-
final formData = FormData();
|
|
24
|
-
{{#multipartFields}}
|
|
25
|
-
{{#isFile}}
|
|
26
|
-
{{#isArray}}
|
|
27
|
-
{{^nullable}}
|
|
28
|
-
for (final file in request.{{name}}) {
|
|
29
|
-
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(file.path)));
|
|
30
|
-
}
|
|
31
|
-
{{/nullable}}
|
|
32
|
-
{{#nullable}}
|
|
33
|
-
if (request.{{name}} != null) {
|
|
34
|
-
for (final file in request.{{name}}!) {
|
|
35
|
-
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(file.path)));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
{{/nullable}}
|
|
39
|
-
{{/isArray}}
|
|
40
|
-
{{^isArray}}
|
|
41
|
-
{{^nullable}}
|
|
42
|
-
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(request.{{name}}.path)));
|
|
43
|
-
{{/nullable}}
|
|
44
|
-
{{#nullable}}
|
|
45
|
-
if (request.{{name}} != null) {
|
|
46
|
-
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(request.{{name}}!.path)));
|
|
47
|
-
}
|
|
48
|
-
{{/nullable}}
|
|
49
|
-
{{/isArray}}
|
|
50
|
-
{{/isFile}}
|
|
51
|
-
{{^isFile}}
|
|
52
|
-
{{#isArray}}
|
|
53
|
-
{{^nullable}}
|
|
54
|
-
for (final value in request.{{name}}) {
|
|
55
|
-
formData.fields.add(MapEntry('{{name}}', value.toString()));
|
|
56
|
-
}
|
|
57
|
-
{{/nullable}}
|
|
58
|
-
{{#nullable}}
|
|
59
|
-
if (request.{{name}} != null) {
|
|
60
|
-
for (final value in request.{{name}}!) {
|
|
61
|
-
formData.fields.add(MapEntry('{{name}}', value.toString()));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
{{/nullable}}
|
|
65
|
-
{{/isArray}}
|
|
66
|
-
{{^isArray}}
|
|
67
|
-
{{^nullable}}
|
|
68
|
-
formData.fields.add(MapEntry('{{name}}', request.{{name}}.toString()));
|
|
69
|
-
{{/nullable}}
|
|
70
|
-
{{#nullable}}
|
|
71
|
-
if (request.{{name}} != null) {
|
|
72
|
-
formData.fields.add(MapEntry('{{name}}', request.{{name}}!.toString()));
|
|
73
|
-
}
|
|
74
|
-
{{/nullable}}
|
|
75
|
-
{{/isArray}}
|
|
76
|
-
{{/isFile}}
|
|
77
|
-
{{/multipartFields}}
|
|
78
|
-
{{/isMultiPart}}
|
|
79
|
-
final response = await _dio.{{httpMethod}}(
|
|
80
|
-
'{{{path}}}',
|
|
81
|
-
{{#haveRequest}}
|
|
82
|
-
{{#isMultiPart}}
|
|
83
|
-
data: formData,
|
|
84
|
-
{{/isMultiPart}}
|
|
85
|
-
{{^isMultiPart}}
|
|
86
|
-
data: request.toJson(),
|
|
87
|
-
{{/isMultiPart}}
|
|
88
|
-
{{/haveRequest}}
|
|
89
|
-
{{^haveRequest}}
|
|
90
|
-
queryParameters: {
|
|
91
|
-
{{#queryParams}}
|
|
92
|
-
{{#nullable}}if ({{name}} != null) {{/nullable}}'{{name}}': {{name}},
|
|
93
|
-
{{/queryParams}}
|
|
94
|
-
},
|
|
95
|
-
{{/haveRequest}}
|
|
96
|
-
);
|
|
97
|
-
{{#isResponseNativeType}}
|
|
98
|
-
return _parseNative<{{responseType}}>(response.data);
|
|
99
|
-
{{/isResponseNativeType}}
|
|
100
|
-
{{^isResponseNativeType}}
|
|
101
|
-
return {{responseType}}.fromJson(response.data);
|
|
102
|
-
{{/isResponseNativeType}}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
{{/endpoints}}
|
|
106
|
-
|
|
107
|
-
T _parseNative<T>(dynamic data) {
|
|
108
|
-
if (data == null) {
|
|
109
|
-
throw Exception('Cannot parse null data as $T');
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (T == String) {
|
|
113
|
-
return data.toString() as T;
|
|
114
|
-
}
|
|
115
|
-
if (T == int) {
|
|
116
|
-
if (data is int) return data as T;
|
|
117
|
-
if (data is double) return data.toInt() as T;
|
|
118
|
-
return int.parse(data.toString()) as T;
|
|
119
|
-
}
|
|
120
|
-
if (T == double) {
|
|
121
|
-
if (data is double) return data as T;
|
|
122
|
-
if (data is int) return data.toDouble() as T;
|
|
123
|
-
return double.parse(data.toString()) as T;
|
|
124
|
-
}
|
|
125
|
-
if (T == bool) {
|
|
126
|
-
if (data is bool) return data as T;
|
|
127
|
-
if (data is String) {
|
|
128
|
-
final lower = data.toLowerCase();
|
|
129
|
-
if (lower == 'true' || lower == '1') return true as T;
|
|
130
|
-
if (lower == 'false' || lower == '0') return false as T;
|
|
131
|
-
}
|
|
132
|
-
if (data is int) return (data != 0) as T;
|
|
133
|
-
throw Exception('Cannot convert $data to bool');
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Se il tipo è dynamic o Object, ritorna direttamente
|
|
137
|
-
if (T == dynamic || T == Object) {
|
|
138
|
-
return data as T;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
throw UnsupportedError('Unsupported native type $T');
|
|
142
|
-
}
|
|
143
|
-
}
|
|
1
|
+
import 'package:{{package}}/core/di/injector.dart';
|
|
2
|
+
import 'package:dio/dio.dart';
|
|
3
|
+
{{#imports}}
|
|
4
|
+
{{{.}}}
|
|
5
|
+
{{/imports}}
|
|
6
|
+
|
|
7
|
+
class {{apiClassName}} {
|
|
8
|
+
final Dio _dio;
|
|
9
|
+
|
|
10
|
+
{{apiClassName}}() : _dio = getIt<Dio>();
|
|
11
|
+
|
|
12
|
+
{{#endpoints}}
|
|
13
|
+
Future<{{responseType}}> {{methodName}}(
|
|
14
|
+
{{#haveRequest}}{{requestType}} request,{{/haveRequest}}
|
|
15
|
+
{{#pathParams}}
|
|
16
|
+
{{type}}{{#nullable}}?{{/nullable}} {{name}},
|
|
17
|
+
{{/pathParams}}
|
|
18
|
+
{{#queryParams}}
|
|
19
|
+
{{type}}{{#nullable}}?{{/nullable}} {{name}},
|
|
20
|
+
{{/queryParams}}
|
|
21
|
+
) async {
|
|
22
|
+
{{#isMultiPart}}
|
|
23
|
+
final formData = FormData();
|
|
24
|
+
{{#multipartFields}}
|
|
25
|
+
{{#isFile}}
|
|
26
|
+
{{#isArray}}
|
|
27
|
+
{{^nullable}}
|
|
28
|
+
for (final file in request.{{name}}) {
|
|
29
|
+
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(file.path)));
|
|
30
|
+
}
|
|
31
|
+
{{/nullable}}
|
|
32
|
+
{{#nullable}}
|
|
33
|
+
if (request.{{name}} != null) {
|
|
34
|
+
for (final file in request.{{name}}!) {
|
|
35
|
+
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(file.path)));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
{{/nullable}}
|
|
39
|
+
{{/isArray}}
|
|
40
|
+
{{^isArray}}
|
|
41
|
+
{{^nullable}}
|
|
42
|
+
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(request.{{name}}.path)));
|
|
43
|
+
{{/nullable}}
|
|
44
|
+
{{#nullable}}
|
|
45
|
+
if (request.{{name}} != null) {
|
|
46
|
+
formData.files.add(MapEntry('{{name}}', await MultipartFile.fromFile(request.{{name}}!.path)));
|
|
47
|
+
}
|
|
48
|
+
{{/nullable}}
|
|
49
|
+
{{/isArray}}
|
|
50
|
+
{{/isFile}}
|
|
51
|
+
{{^isFile}}
|
|
52
|
+
{{#isArray}}
|
|
53
|
+
{{^nullable}}
|
|
54
|
+
for (final value in request.{{name}}) {
|
|
55
|
+
formData.fields.add(MapEntry('{{name}}', value.toString()));
|
|
56
|
+
}
|
|
57
|
+
{{/nullable}}
|
|
58
|
+
{{#nullable}}
|
|
59
|
+
if (request.{{name}} != null) {
|
|
60
|
+
for (final value in request.{{name}}!) {
|
|
61
|
+
formData.fields.add(MapEntry('{{name}}', value.toString()));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
{{/nullable}}
|
|
65
|
+
{{/isArray}}
|
|
66
|
+
{{^isArray}}
|
|
67
|
+
{{^nullable}}
|
|
68
|
+
formData.fields.add(MapEntry('{{name}}', request.{{name}}.toString()));
|
|
69
|
+
{{/nullable}}
|
|
70
|
+
{{#nullable}}
|
|
71
|
+
if (request.{{name}} != null) {
|
|
72
|
+
formData.fields.add(MapEntry('{{name}}', request.{{name}}!.toString()));
|
|
73
|
+
}
|
|
74
|
+
{{/nullable}}
|
|
75
|
+
{{/isArray}}
|
|
76
|
+
{{/isFile}}
|
|
77
|
+
{{/multipartFields}}
|
|
78
|
+
{{/isMultiPart}}
|
|
79
|
+
final response = await _dio.{{httpMethod}}(
|
|
80
|
+
'{{{path}}}',
|
|
81
|
+
{{#haveRequest}}
|
|
82
|
+
{{#isMultiPart}}
|
|
83
|
+
data: formData,
|
|
84
|
+
{{/isMultiPart}}
|
|
85
|
+
{{^isMultiPart}}
|
|
86
|
+
data: request.toJson(),
|
|
87
|
+
{{/isMultiPart}}
|
|
88
|
+
{{/haveRequest}}
|
|
89
|
+
{{^haveRequest}}
|
|
90
|
+
queryParameters: {
|
|
91
|
+
{{#queryParams}}
|
|
92
|
+
{{#nullable}}if ({{name}} != null) {{/nullable}}'{{name}}': {{name}},
|
|
93
|
+
{{/queryParams}}
|
|
94
|
+
},
|
|
95
|
+
{{/haveRequest}}
|
|
96
|
+
);
|
|
97
|
+
{{#isResponseNativeType}}
|
|
98
|
+
return _parseNative<{{responseType}}>(response.data);
|
|
99
|
+
{{/isResponseNativeType}}
|
|
100
|
+
{{^isResponseNativeType}}
|
|
101
|
+
return {{responseType}}.fromJson(response.data);
|
|
102
|
+
{{/isResponseNativeType}}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
{{/endpoints}}
|
|
106
|
+
|
|
107
|
+
T _parseNative<T>(dynamic data) {
|
|
108
|
+
if (data == null) {
|
|
109
|
+
throw Exception('Cannot parse null data as $T');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (T == String) {
|
|
113
|
+
return data.toString() as T;
|
|
114
|
+
}
|
|
115
|
+
if (T == int) {
|
|
116
|
+
if (data is int) return data as T;
|
|
117
|
+
if (data is double) return data.toInt() as T;
|
|
118
|
+
return int.parse(data.toString()) as T;
|
|
119
|
+
}
|
|
120
|
+
if (T == double) {
|
|
121
|
+
if (data is double) return data as T;
|
|
122
|
+
if (data is int) return data.toDouble() as T;
|
|
123
|
+
return double.parse(data.toString()) as T;
|
|
124
|
+
}
|
|
125
|
+
if (T == bool) {
|
|
126
|
+
if (data is bool) return data as T;
|
|
127
|
+
if (data is String) {
|
|
128
|
+
final lower = data.toLowerCase();
|
|
129
|
+
if (lower == 'true' || lower == '1') return true as T;
|
|
130
|
+
if (lower == 'false' || lower == '0') return false as T;
|
|
131
|
+
}
|
|
132
|
+
if (data is int) return (data != 0) as T;
|
|
133
|
+
throw Exception('Cannot convert $data to bool');
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Se il tipo è dynamic o Object, ritorna direttamente
|
|
137
|
+
if (T == dynamic || T == Object) {
|
|
138
|
+
return data as T;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
throw UnsupportedError('Unsupported native type $T');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
2
|
-
{{#imports}}
|
|
3
|
-
{{{.}}}
|
|
4
|
-
{{/imports}}
|
|
5
|
-
|
|
6
|
-
@JsonEnum(fieldRename: FieldRename.pascal)
|
|
7
|
-
enum {{enumName}} {
|
|
8
|
-
{{#fields}}
|
|
9
|
-
@JsonValue({{value}})
|
|
10
|
-
{{name}}({{value}}){{#isLast}};{{/isLast}}{{^isLast}},{{/isLast}}
|
|
11
|
-
{{/fields}}
|
|
12
|
-
|
|
13
|
-
final
|
|
14
|
-
const {{enumName}}(this.value);
|
|
1
|
+
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
2
|
+
{{#imports}}
|
|
3
|
+
{{{.}}}
|
|
4
|
+
{{/imports}}
|
|
5
|
+
|
|
6
|
+
@JsonEnum(fieldRename: FieldRename.pascal)
|
|
7
|
+
enum {{enumName}} {
|
|
8
|
+
{{#fields}}
|
|
9
|
+
@JsonValue({{{value}}})
|
|
10
|
+
{{name}}({{{value}}}){{#isLast}};{{/isLast}}{{^isLast}},{{/isLast}}
|
|
11
|
+
{{/fields}}
|
|
12
|
+
|
|
13
|
+
final {{valueType}} value;
|
|
14
|
+
const {{enumName}}(this.value);
|
|
15
15
|
}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
2
|
-
{{#imports}}
|
|
3
|
-
{{{.}}}
|
|
4
|
-
{{/imports}}
|
|
5
|
-
|
|
6
|
-
part '{{filename}}.freezed.dart';
|
|
7
|
-
part '{{filename}}.g.dart';
|
|
8
|
-
|
|
9
|
-
@freezed
|
|
10
|
-
abstract class {{className}} with _${{className}} {
|
|
11
|
-
const factory {{className}}({
|
|
12
|
-
{{#fields}}
|
|
13
|
-
{{#jsonKeyAnnotation}}
|
|
14
|
-
{{{jsonKeyAnnotation}}}
|
|
15
|
-
{{/jsonKeyAnnotation}}
|
|
16
|
-
{{
|
|
17
|
-
{{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}) = _{{className}};
|
|
22
|
-
|
|
23
|
-
factory {{className}}.fromJson(Map<String, dynamic> json) => _${{className}}FromJson(json);
|
|
1
|
+
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
2
|
+
{{#imports}}
|
|
3
|
+
{{{.}}}
|
|
4
|
+
{{/imports}}
|
|
5
|
+
|
|
6
|
+
part '{{filename}}.freezed.dart';
|
|
7
|
+
part '{{filename}}.g.dart';
|
|
8
|
+
|
|
9
|
+
@freezed
|
|
10
|
+
abstract class {{className}} with _${{className}} {
|
|
11
|
+
const factory {{className}}({
|
|
12
|
+
{{#fields}}
|
|
13
|
+
{{#jsonKeyAnnotation}}
|
|
14
|
+
{{{jsonKeyAnnotation}}}
|
|
15
|
+
{{/jsonKeyAnnotation}}
|
|
16
|
+
{{required}}{{{type}}}{{nullable}} {{name}},
|
|
17
|
+
{{/fields}}
|
|
18
|
+
}) = _{{className}};
|
|
19
|
+
|
|
20
|
+
factory {{className}}.fromJson(Map<String, dynamic> json) => _${{className}}FromJson(json);
|
|
24
21
|
}
|