@devlearning/swagger-generator 1.1.0 → 1.1.2
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/dist/api.constants.d.ts +2 -0
- package/dist/generator-old.d.ts +0 -0
- package/dist/generator-old.js +1 -1
- package/dist/generator.d.ts +40 -0
- package/dist/generator.js +2 -0
- package/dist/generators-writers/angular/api-angular-writer.d.ts +15 -0
- package/dist/generators-writers/angular/constants.d.ts +4 -0
- package/dist/generators-writers/angular/model-angular-writer.d.ts +10 -0
- package/dist/generators-writers/dart/api-dart-writer.d.ts +11 -0
- package/dist/generators-writers/dart/api-dart-writer.js +9 -3
- package/dist/generators-writers/dart/model-dart-writer.d.ts +9 -0
- package/dist/generators-writers/dart/model-dart-writer.js +2 -2
- package/dist/generators-writers/dart/models/import-definition-dart.d.ts +5 -0
- package/dist/generators-writers/dart/normalizator.d.ts +10 -0
- package/dist/generators-writers/dart/templates/api.mustache +13 -0
- package/dist/generators-writers/nextjs/api-nextjs-writer.d.ts +15 -0
- package/dist/generators-writers/nextjs/constants.d.ts +1 -0
- package/dist/generators-writers/nextjs/model-nextjs-writer.d.ts +10 -0
- package/dist/generators-writers/utils.d.ts +12 -0
- package/dist/index.d.ts +17 -0
- package/dist/model.constants.d.ts +0 -0
- package/dist/model.constants.js +1 -1
- package/dist/models/api-dto.d.ts +18 -0
- package/dist/models/enum-value-dto.d.ts +4 -0
- package/dist/models/model-dto.d.ts +9 -0
- package/dist/models/parameter-dto.d.ts +7 -0
- package/dist/models/property-dto.d.ts +4 -0
- package/dist/models/swagger/swagger-component.d.ts +10 -0
- package/dist/models/swagger/swagger-content.d.ts +4 -0
- package/dist/models/swagger/swagger-info.d.ts +4 -0
- package/dist/models/swagger/swagger-method.d.ts +9 -0
- package/dist/models/swagger/swagger-schema.d.ts +12 -0
- package/dist/models/swagger/swagger.d.ts +47 -0
- package/dist/models/type-dto.d.ts +8 -0
- package/dist/swagger-downloader.d.ts +5 -0
- package/dist/templates/api.mustache +29 -0
- package/dist/templates/model.mustache +18 -0
- package/package.json +2 -2
- package/src/generator.ts +1 -0
- package/src/generators-writers/dart/api-dart-writer.ts +11 -3
- package/src/generators-writers/dart/model-dart-writer.ts +2 -2
- package/src/generators-writers/dart/templates/api.mustache +13 -0
- package/tsconfig.json +9 -4
- package/dist/models/swagger-component.js +0 -1
- package/dist/models/swagger-content.js +0 -1
- package/dist/models/swagger-info.js +0 -1
- package/dist/models/swagger-method.js +0 -1
- package/dist/models/swagger-schema.js +0 -1
- package/dist/models/swagger.js +0 -1
- /package/dist/models/{swagger-component-property.js → swagger/swagger-component-property.d.ts} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const API_PRE = "import { HttpClient } from '@angular/common/http';\nimport { Observable, catchError, map } from 'rxjs';\nimport * as Models from './model.autogenerated';\nimport { HttpHeaders } from \"@angular/common/http\";\n\nexport const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n};\n\nexport const httpOptionsMultipart = {};\n\nexport abstract class ApiAutogeneratedService {\n constructor(\n public _http: HttpClient,\n public _baseUrl: string,\n ) { }\n\n protected abstract _momentToString(moment: moment.Moment): string;\n protected abstract _handleRequest<T>(request: T): T;\n protected abstract _handleMultipart<T>(request: T): FormData;\n protected abstract _handleResponse<T>(response: T): T;\n protected abstract _handleError(error: any, obs: any): Observable<never>;\n";
|
|
2
|
+
export declare const API_POST = "}";
|
|
File without changes
|
package/dist/generator-old.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// import fs from 'fs';
|
|
2
3
|
// import { SwaggerComponent } from './models/swagger/swagger-component.js';
|
|
3
4
|
// import { Swagger, SwaggerParameter } from './models/swagger/swagger.js';
|
|
@@ -6,7 +7,6 @@
|
|
|
6
7
|
// import { SwaggerSchema } from './models/swagger/swagger-schema.js';
|
|
7
8
|
// import { API_PRE, API_POST } from './api.constants.js';
|
|
8
9
|
// import { MODEL_POST, MODEL_PRE } from './model.constants.js';
|
|
9
|
-
export {};
|
|
10
10
|
// const contentTypeApplicationJson = 'application/json';
|
|
11
11
|
// const contentTypeMultipartFormData = 'multipart/form-data';
|
|
12
12
|
// export class GeneratorOld {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { SwaggerComponent } from './models/swagger/swagger-component.js';
|
|
2
|
+
import { Swagger } from './models/swagger/swagger.js';
|
|
3
|
+
import { SwaggerMethod } from './models/swagger/swagger-method.js';
|
|
4
|
+
import { SwaggerSchema } from './models/swagger/swagger-schema.js';
|
|
5
|
+
import { TypeDto } from './models/type-dto.js';
|
|
6
|
+
import { ParameterDto } from './models/parameter-dto.js';
|
|
7
|
+
import { PropertyDto } from './models/property-dto.js';
|
|
8
|
+
import { EnumValueDto } from './models/enum-value-dto.js';
|
|
9
|
+
import { SwaggerContent } from './models/swagger/swagger-content.js';
|
|
10
|
+
import { CommandLineArgs } from './index.js';
|
|
11
|
+
export declare class Generator {
|
|
12
|
+
private _swagger;
|
|
13
|
+
private _commandLineArgs;
|
|
14
|
+
private _apis;
|
|
15
|
+
private _models;
|
|
16
|
+
private _barApis;
|
|
17
|
+
private _barModels;
|
|
18
|
+
constructor(swagger: Swagger, commandLineArgs: CommandLineArgs);
|
|
19
|
+
generate(): void;
|
|
20
|
+
computeApi(): void;
|
|
21
|
+
computeModel(): void;
|
|
22
|
+
generateApi(): void;
|
|
23
|
+
generateModel(): void;
|
|
24
|
+
computeParameters(apiName: string, swaggerMethod: SwaggerMethod | undefined): ParameterDto[];
|
|
25
|
+
computeResponseType(swaggerMethod: SwaggerMethod): TypeDto | undefined;
|
|
26
|
+
computeRequestBodyType(swaggerMethod: SwaggerMethod): TypeDto | undefined;
|
|
27
|
+
computeSwaggerContentType(swaggerContent: SwaggerContent): TypeDto | undefined;
|
|
28
|
+
retrieveType(swaggerComponentProperty: SwaggerSchema): TypeDto;
|
|
29
|
+
parametrizeObject(objectName: string): string;
|
|
30
|
+
isEnum(objectName: string): boolean;
|
|
31
|
+
isDate(schema: SwaggerSchema): boolean;
|
|
32
|
+
getObjectName(ref: string): string;
|
|
33
|
+
retrieveComponentProperties(swaggerComponent: SwaggerComponent): PropertyDto[];
|
|
34
|
+
retrieveEnumValues(name: string, swaggerCopmponent: SwaggerComponent): EnumValueDto[];
|
|
35
|
+
retrieveNestedObjects(usedTypes: TypeDto[]): void;
|
|
36
|
+
retrieveNestedObjectsRecursive(swaggerComponent: SwaggerComponent, usedTypes: TypeDto[]): void;
|
|
37
|
+
getNativeType(schema: SwaggerSchema): string;
|
|
38
|
+
getApiNameNormalized(apiName: string): string;
|
|
39
|
+
toFirstLetterLowercase(value: string): string;
|
|
40
|
+
}
|
package/dist/generator.js
CHANGED
|
@@ -489,6 +489,8 @@ export class Generator {
|
|
|
489
489
|
nativeType = 'string';
|
|
490
490
|
if (schema.type == 'string' && schema.format == 'date-time')
|
|
491
491
|
nativeType = 'dateTime';
|
|
492
|
+
if (schema.type == 'string' && schema.format == 'date-time-local-tz')
|
|
493
|
+
nativeType = 'dateTime';
|
|
492
494
|
if (schema.type == 'string' && schema.format == 'uuid')
|
|
493
495
|
nativeType = 'string';
|
|
494
496
|
if (schema.type == 'string' && schema.format == 'binary')
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ApiDto } from '@src/models/api-dto.js';
|
|
2
|
+
export declare class ApiAngularWriter {
|
|
3
|
+
private _outputDirectory;
|
|
4
|
+
constructor(_outputDirectory: string);
|
|
5
|
+
write(apis: ApiDto[]): void;
|
|
6
|
+
private _apiString;
|
|
7
|
+
private _parameters;
|
|
8
|
+
private _returnType;
|
|
9
|
+
private _queryParametersPreparation;
|
|
10
|
+
private _queryParametersPreparationStatement;
|
|
11
|
+
private _queryParameters;
|
|
12
|
+
private _queryParametersStatement;
|
|
13
|
+
private _requestPreparation;
|
|
14
|
+
private _writeFile;
|
|
15
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const API_PRE = "import { HttpClient } from '@angular/common/http';\nimport { Observable, catchError, map } from 'rxjs';\nimport * as Models from './model.autogenerated';\nimport { HttpHeaders } from \"@angular/common/http\";\n\nexport const httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n};\n\nexport const httpOptionsMultipart = {};\n\nexport abstract class ApiAutogeneratedService {\n constructor(\n public _http: HttpClient,\n public _baseUrl: string,\n ) { }\n\n protected abstract _momentToString(moment: moment.Moment): string;\n protected abstract _handleRequest<T>(request: T): T;\n protected abstract _handleMultipart<T>(request: T): FormData;\n protected abstract _handleResponse<T>(response: T): T;\n protected abstract _handleError(error: any, obs: any): Observable<never>;\n";
|
|
2
|
+
export declare const API_POST = "}";
|
|
3
|
+
export declare const MODEL_PRE = "import * as moment from 'moment';\n ";
|
|
4
|
+
export declare const MODEL_POST = "\n";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModelDto } from '@src/models/model-dto.js';
|
|
2
|
+
export declare class ModelAngularWriter {
|
|
3
|
+
private _outputDirectory;
|
|
4
|
+
constructor(_outputDirectory: string);
|
|
5
|
+
write(models: ModelDto[]): void;
|
|
6
|
+
private _modelString;
|
|
7
|
+
private _properties;
|
|
8
|
+
private _enumValues;
|
|
9
|
+
private _writeFile;
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ApiDto } from '@src/models/api-dto.js';
|
|
2
|
+
import { CommandLineArgs } from '@src/index.js';
|
|
3
|
+
import { ModelDto } from '@src/models/model-dto.js';
|
|
4
|
+
export declare class ApiDartWriter {
|
|
5
|
+
private _commandLineArgs;
|
|
6
|
+
constructor(commandLineArgs: CommandLineArgs);
|
|
7
|
+
write(apis: ApiDto[], models: ModelDto[]): void;
|
|
8
|
+
private _toPascalCase;
|
|
9
|
+
private _normalizeApiClassName;
|
|
10
|
+
private _groupByTag;
|
|
11
|
+
}
|
|
@@ -43,14 +43,19 @@ export class ApiDartWriter {
|
|
|
43
43
|
var responseType = 'void';
|
|
44
44
|
responseType = api.returnType ? api.returnType.typeName : 'void';
|
|
45
45
|
responseType = responseType?.split('.').pop();
|
|
46
|
-
|
|
46
|
+
if (api.returnType?.isNativeType) {
|
|
47
|
+
responseType = Normalizator.mapTsTypeToDart(responseType);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
responseType = Utils.toDartClassName(responseType) ?? responseType;
|
|
51
|
+
}
|
|
47
52
|
var methodName = Utils.getNormalizedApiPath(api.name);
|
|
48
53
|
if (methodName.startsWith(Utils.toFirstLetterLowercase(tag))) {
|
|
49
54
|
methodName = methodName.slice(tag.length);
|
|
50
55
|
methodName = Utils.toFirstLetterLowercase(methodName);
|
|
51
56
|
}
|
|
52
57
|
// console.debug(`\tAPI - ${apiName} - ${apiMethod}`);
|
|
53
|
-
if (methodName
|
|
58
|
+
if (methodName.toLowerCase().indexOf("productsave") >= 0) {
|
|
54
59
|
debugger;
|
|
55
60
|
}
|
|
56
61
|
const endpoint = {
|
|
@@ -58,6 +63,7 @@ export class ApiDartWriter {
|
|
|
58
63
|
httpMethod: api.method.toLowerCase(),
|
|
59
64
|
path: api.url,
|
|
60
65
|
responseType: responseType,
|
|
66
|
+
isResponseNativeType: api.returnType ? api.returnType.isNativeType : true,
|
|
61
67
|
haveRequest: api.haveRequest,
|
|
62
68
|
requestType: requestType,
|
|
63
69
|
};
|
|
@@ -101,7 +107,7 @@ export class ApiDartWriter {
|
|
|
101
107
|
apiDefinition.imports = imports.map(i => i.import);
|
|
102
108
|
let destinationPath = `${this._commandLineArgs.outputDirectory}/${subPath}/api`;
|
|
103
109
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
104
|
-
var result = Mustache.
|
|
110
|
+
var result = Mustache.render(template, apiDefinition);
|
|
105
111
|
writeFileSync(`${destinationPath}/${apiDefinition.filename}.dart`, result, 'utf-8');
|
|
106
112
|
}
|
|
107
113
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ModelDto } from '@src/models/model-dto.js';
|
|
2
|
+
import { CommandLineArgs } from '@src/index.js';
|
|
3
|
+
export declare class ModelDartWriter {
|
|
4
|
+
private _commandLineArgs;
|
|
5
|
+
constructor(commandLineArgs: CommandLineArgs);
|
|
6
|
+
write(models: ModelDto[]): void;
|
|
7
|
+
writeClasses(models: ModelDto[]): void;
|
|
8
|
+
writeEnums(models: ModelDto[]): void;
|
|
9
|
+
}
|
|
@@ -60,7 +60,7 @@ export class ModelDartWriter {
|
|
|
60
60
|
dartModel.imports = imports.map(i => i.import);
|
|
61
61
|
let destinationPath = `${this._commandLineArgs.outputDirectory}/${normalizedInfo.subPath}`;
|
|
62
62
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
63
|
-
let result = Mustache.
|
|
63
|
+
let result = Mustache.render(template, dartModel);
|
|
64
64
|
writeFileSync(`${destinationPath}/${normalizedInfo.filename}.dart`, result, 'utf-8');
|
|
65
65
|
}
|
|
66
66
|
});
|
|
@@ -92,7 +92,7 @@ export class ModelDartWriter {
|
|
|
92
92
|
dartModel.fields[lastIndex].isLast = true;
|
|
93
93
|
let destinationPath = `${this._commandLineArgs.outputDirectory}/${normalizedInfo.subPath}`;
|
|
94
94
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
95
|
-
let result = Mustache.
|
|
95
|
+
let result = Mustache.render(template, dartModel);
|
|
96
96
|
writeFileSync(`${destinationPath}/${normalizedInfo.filename}.dart`, result, 'utf-8');
|
|
97
97
|
});
|
|
98
98
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModelDto } from "@src/models/model-dto.js";
|
|
2
|
+
export declare class Normalizator {
|
|
3
|
+
static getNormalizedInfo(model: ModelDto): {
|
|
4
|
+
filename: string;
|
|
5
|
+
subPath: string;
|
|
6
|
+
modelName: string;
|
|
7
|
+
};
|
|
8
|
+
static getNormalizedTypeName(typeName: string): string;
|
|
9
|
+
static mapTsTypeToDart(type: string): string;
|
|
10
|
+
}
|
|
@@ -29,8 +29,21 @@ class {{apiClassName}} {
|
|
|
29
29
|
},
|
|
30
30
|
{{/haveRequest}}
|
|
31
31
|
);
|
|
32
|
+
{{#isResponseNativeType}}
|
|
33
|
+
return parseNative<{{responseType}}>(response.data);
|
|
34
|
+
{{/isResponseNativeType}}
|
|
35
|
+
{{^isResponseNativeType}}
|
|
32
36
|
return {{responseType}}.fromJson(response.data);
|
|
37
|
+
{{/isResponseNativeType}}
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
{{/endpoints}}
|
|
41
|
+
|
|
42
|
+
T parseNative<T>(dynamic data) {
|
|
43
|
+
if (T == int) return int.parse(data.toString()) as T;
|
|
44
|
+
if (T == double) return double.parse(data.toString()) as T;
|
|
45
|
+
if (T == String) return data as T;
|
|
46
|
+
if (T == bool) return data as T;
|
|
47
|
+
throw UnsupportedError('Unsupported native type $T');
|
|
48
|
+
}
|
|
36
49
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ApiDto } from '@src/models/api-dto.js';
|
|
2
|
+
export declare class ApiNextJsWriter {
|
|
3
|
+
private _outputDirectory;
|
|
4
|
+
constructor(_outputDirectory: string);
|
|
5
|
+
write(apis: ApiDto[]): void;
|
|
6
|
+
private _apiString;
|
|
7
|
+
private _parameters;
|
|
8
|
+
private _returnType;
|
|
9
|
+
private _queryParametersPreparation;
|
|
10
|
+
private _queryParametersPreparationStatement;
|
|
11
|
+
private _queryParameters;
|
|
12
|
+
private _queryParametersStatement;
|
|
13
|
+
private _requestPreparation;
|
|
14
|
+
private _writeFile;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const API_PRE = "import axios from 'axios';\nimport * as Models from './model.autogenerated';\nimport { handleRequest, dateToZulu } from './utils/axios'\nimport { isValid } from 'date-fns';\n";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModelDto } from '@src/models/model-dto.js';
|
|
2
|
+
export declare class ModelNextJsWriter {
|
|
3
|
+
private _outputDirectory;
|
|
4
|
+
constructor(_outputDirectory: string);
|
|
5
|
+
write(models: ModelDto[]): void;
|
|
6
|
+
private _modelString;
|
|
7
|
+
private _properties;
|
|
8
|
+
private _enumValues;
|
|
9
|
+
private _writeFile;
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SwaggerSchema } from "@src/models/swagger/swagger-schema.js";
|
|
2
|
+
export declare class Utils {
|
|
3
|
+
static getNormalizedApiPath(apiName: string): string;
|
|
4
|
+
static toFirstLetterLowercase(value: string): string;
|
|
5
|
+
static toCamelCase(input: string): string;
|
|
6
|
+
static toPascalCase(input: string): string;
|
|
7
|
+
static isDate(schema?: SwaggerSchema): boolean;
|
|
8
|
+
static toDartFileName(name: string): string;
|
|
9
|
+
static toDartClassName(name: string): string | undefined;
|
|
10
|
+
static ensureDirectorySync(dirPath: string): Promise<void>;
|
|
11
|
+
static clearDirectory(dirPath: string): Promise<void>;
|
|
12
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export declare enum DateTimeLibrary {
|
|
3
|
+
Moment = "moment",
|
|
4
|
+
DateFns = "date-fn"
|
|
5
|
+
}
|
|
6
|
+
export declare enum TargetGeneration {
|
|
7
|
+
Angular = "angular",
|
|
8
|
+
Next = "next",
|
|
9
|
+
Flutter = "flutter"
|
|
10
|
+
}
|
|
11
|
+
export interface CommandLineArgs {
|
|
12
|
+
swaggerJsonUrl: string;
|
|
13
|
+
outputDirectory: string;
|
|
14
|
+
target: TargetGeneration;
|
|
15
|
+
dateTimeLibrary?: DateTimeLibrary;
|
|
16
|
+
package?: string;
|
|
17
|
+
}
|
|
File without changes
|
package/dist/model.constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ParameterDto } from "./parameter-dto.js";
|
|
2
|
+
import { SwaggerMethod } from "./swagger/swagger-method.js";
|
|
3
|
+
import { TypeDto } from "./type-dto.js";
|
|
4
|
+
export interface ApiDto {
|
|
5
|
+
name: string;
|
|
6
|
+
method: string;
|
|
7
|
+
url: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
parameters: ParameterDto[];
|
|
10
|
+
returnType: TypeDto | undefined;
|
|
11
|
+
haveRequest: boolean;
|
|
12
|
+
isMultiPart: boolean;
|
|
13
|
+
tag: string;
|
|
14
|
+
swaggerMethodKey: {
|
|
15
|
+
[key: string]: SwaggerMethod;
|
|
16
|
+
};
|
|
17
|
+
swaggerMethod: SwaggerMethod;
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EnumValueDto } from "./enum-value-dto.js";
|
|
2
|
+
import { PropertyDto } from "./property-dto.js";
|
|
3
|
+
export interface ModelDto {
|
|
4
|
+
typeName: string;
|
|
5
|
+
modelType: 'enum' | 'interface' | 'class';
|
|
6
|
+
name: string;
|
|
7
|
+
properties: PropertyDto[];
|
|
8
|
+
enumValues: EnumValueDto[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SwaggerParameter, SwaggerRequestBody, SwaggerResponses } from "./swagger.js";
|
|
2
|
+
export interface SwaggerMethod {
|
|
3
|
+
tags: string[];
|
|
4
|
+
parameters: SwaggerParameter[];
|
|
5
|
+
requestBody: SwaggerRequestBody;
|
|
6
|
+
responses: {
|
|
7
|
+
[key: string]: SwaggerResponses;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SwaggerComponent } from "./swagger-component.js";
|
|
2
|
+
import { SwaggerContent } from "./swagger-content.js";
|
|
3
|
+
import { SwaggerInfo } from "./swagger-info.js";
|
|
4
|
+
import { SwaggerMethod } from "./swagger-method.js";
|
|
5
|
+
import { SwaggerSchema } from "./swagger-schema.js";
|
|
6
|
+
export interface Swagger {
|
|
7
|
+
openApi: string;
|
|
8
|
+
info: SwaggerInfo;
|
|
9
|
+
paths: {
|
|
10
|
+
[key: string]: {
|
|
11
|
+
[key: string]: SwaggerMethod;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
components: SwaggerComponents;
|
|
15
|
+
}
|
|
16
|
+
export interface SwaggerParameter {
|
|
17
|
+
name: string;
|
|
18
|
+
in: string;
|
|
19
|
+
required: boolean;
|
|
20
|
+
schema: SwaggerSchema;
|
|
21
|
+
}
|
|
22
|
+
export interface SwaggerRequestBody {
|
|
23
|
+
content: {
|
|
24
|
+
[key: string]: SwaggerContent;
|
|
25
|
+
};
|
|
26
|
+
encoding: SwaggerEncoding;
|
|
27
|
+
required?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface SwaggerResponses {
|
|
30
|
+
description: string;
|
|
31
|
+
content: {
|
|
32
|
+
[key: string]: SwaggerContent;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface SwaggerComponents {
|
|
36
|
+
schemas: {
|
|
37
|
+
[key: string]: SwaggerComponent;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface SwaggerEncoding {
|
|
41
|
+
File: {
|
|
42
|
+
style: 'form';
|
|
43
|
+
};
|
|
44
|
+
Id: {
|
|
45
|
+
style: 'form';
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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}}({{#haveRequest}}{{requestType}} request{{/haveRequest}}) async {
|
|
14
|
+
final response = await _dio.{{httpMethod}}(
|
|
15
|
+
'{{{path}}}',
|
|
16
|
+
{{#haveRequest}}
|
|
17
|
+
{{#isGet}}
|
|
18
|
+
queryParameters: request.toJson(),
|
|
19
|
+
{{/isGet}}
|
|
20
|
+
{{^isGet}}
|
|
21
|
+
data: request.toJson(),
|
|
22
|
+
{{/isGet}}
|
|
23
|
+
{{/haveRequest}}
|
|
24
|
+
);
|
|
25
|
+
return {{responseType}}.fromJson(response.data);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
{{/endpoints}}
|
|
29
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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 {{modelName}} with _${{modelName}} {
|
|
11
|
+
const factory {{modelName}}({
|
|
12
|
+
{{#fields}}
|
|
13
|
+
{{required}}{{type}}{{nullable}} {{name}},
|
|
14
|
+
{{/fields}}
|
|
15
|
+
}) = _{{modelName}};
|
|
16
|
+
|
|
17
|
+
factory {{modelName}}.fromJson(Map<String, dynamic> json) => _${{modelName}}FromJson(json);
|
|
18
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devlearning/swagger-generator",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Swagger generator apis and models for Angular and NextJS",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/cli-progress": "^3.11.6",
|
|
37
37
|
"@types/mustache": "^4.2.6",
|
|
38
|
-
"@types/node": "^
|
|
38
|
+
"@types/node": "^24.7.0",
|
|
39
39
|
"@types/yargs": "^17.0.33",
|
|
40
40
|
"copyfiles": "^2.4.1",
|
|
41
41
|
"ts-node": "^10.9.1",
|
package/src/generator.ts
CHANGED
|
@@ -553,6 +553,7 @@ export class Generator {
|
|
|
553
553
|
if (schema.type == 'integer') nativeType = 'integer'; //era number
|
|
554
554
|
if (schema.type == 'string' && schema.format == null) nativeType = 'string';
|
|
555
555
|
if (schema.type == 'string' && schema.format == 'date-time') nativeType = 'dateTime';
|
|
556
|
+
if (schema.type == 'string' && schema.format == 'date-time-local-tz') nativeType = 'dateTime';
|
|
556
557
|
if (schema.type == 'string' && schema.format == 'uuid') nativeType = 'string';
|
|
557
558
|
if (schema.type == 'string' && schema.format == 'binary') nativeType = 'File';
|
|
558
559
|
if (schema.type == 'number') nativeType = 'number';
|
|
@@ -25,6 +25,7 @@ interface EndpointDefinitionDart {
|
|
|
25
25
|
httpMethod: HttpMethodDart;
|
|
26
26
|
path: string;
|
|
27
27
|
responseType: string;
|
|
28
|
+
isResponseNativeType: boolean;
|
|
28
29
|
haveRequest: boolean;
|
|
29
30
|
requestType?: string; // solo se haveRequest è true
|
|
30
31
|
queryParams?: Parameter[],
|
|
@@ -85,10 +86,16 @@ export class ApiDartWriter {
|
|
|
85
86
|
requestType = requestType?.split('.').pop()!
|
|
86
87
|
requestType = Utils.toDartClassName(requestType);
|
|
87
88
|
|
|
89
|
+
|
|
90
|
+
|
|
88
91
|
var responseType: string = 'void';
|
|
89
92
|
responseType = api.returnType ? api.returnType.typeName : 'void';
|
|
90
93
|
responseType = responseType?.split('.').pop()!;
|
|
91
|
-
|
|
94
|
+
if (api.returnType?.isNativeType) {
|
|
95
|
+
responseType = Normalizator.mapTsTypeToDart(responseType);
|
|
96
|
+
} else {
|
|
97
|
+
responseType = Utils.toDartClassName(responseType) ?? responseType;
|
|
98
|
+
}
|
|
92
99
|
|
|
93
100
|
var methodName = Utils.getNormalizedApiPath(api.name);
|
|
94
101
|
if (methodName.startsWith(Utils.toFirstLetterLowercase(tag))) {
|
|
@@ -97,7 +104,7 @@ export class ApiDartWriter {
|
|
|
97
104
|
}
|
|
98
105
|
|
|
99
106
|
// console.debug(`\tAPI - ${apiName} - ${apiMethod}`);
|
|
100
|
-
if (methodName
|
|
107
|
+
if (methodName.toLowerCase().indexOf("productsave") >= 0) {
|
|
101
108
|
debugger
|
|
102
109
|
}
|
|
103
110
|
|
|
@@ -106,6 +113,7 @@ export class ApiDartWriter {
|
|
|
106
113
|
httpMethod: api.method.toLowerCase() as HttpMethodDart,
|
|
107
114
|
path: api.url,
|
|
108
115
|
responseType: responseType,
|
|
116
|
+
isResponseNativeType: api.returnType ? api.returnType.isNativeType : true,
|
|
109
117
|
haveRequest: api.haveRequest,
|
|
110
118
|
requestType: requestType,
|
|
111
119
|
};
|
|
@@ -157,7 +165,7 @@ export class ApiDartWriter {
|
|
|
157
165
|
|
|
158
166
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
159
167
|
|
|
160
|
-
var result = Mustache.
|
|
168
|
+
var result = Mustache.render(template, apiDefinition);
|
|
161
169
|
writeFileSync(`${destinationPath}/${apiDefinition.filename}.dart`, result, 'utf-8');
|
|
162
170
|
}
|
|
163
171
|
}
|
|
@@ -116,7 +116,7 @@ export class ModelDartWriter {
|
|
|
116
116
|
|
|
117
117
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
118
118
|
|
|
119
|
-
let result = Mustache.
|
|
119
|
+
let result = Mustache.render(template, dartModel);
|
|
120
120
|
writeFileSync(`${destinationPath}/${normalizedInfo.filename}.dart`, result, 'utf-8');
|
|
121
121
|
}
|
|
122
122
|
});
|
|
@@ -156,7 +156,7 @@ export class ModelDartWriter {
|
|
|
156
156
|
|
|
157
157
|
Utils.ensureDirectorySync(`${destinationPath}`);
|
|
158
158
|
|
|
159
|
-
let result = Mustache.
|
|
159
|
+
let result = Mustache.render(template, dartModel);
|
|
160
160
|
writeFileSync(`${destinationPath}/${normalizedInfo.filename}.dart`, result, 'utf-8');
|
|
161
161
|
});
|
|
162
162
|
}
|
|
@@ -29,8 +29,21 @@ class {{apiClassName}} {
|
|
|
29
29
|
},
|
|
30
30
|
{{/haveRequest}}
|
|
31
31
|
);
|
|
32
|
+
{{#isResponseNativeType}}
|
|
33
|
+
return parseNative<{{responseType}}>(response.data);
|
|
34
|
+
{{/isResponseNativeType}}
|
|
35
|
+
{{^isResponseNativeType}}
|
|
32
36
|
return {{responseType}}.fromJson(response.data);
|
|
37
|
+
{{/isResponseNativeType}}
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
{{/endpoints}}
|
|
41
|
+
|
|
42
|
+
T parseNative<T>(dynamic data) {
|
|
43
|
+
if (T == int) return int.parse(data.toString()) as T;
|
|
44
|
+
if (T == double) return double.parse(data.toString()) as T;
|
|
45
|
+
if (T == String) return data as T;
|
|
46
|
+
if (T == bool) return data as T;
|
|
47
|
+
throw UnsupportedError('Unsupported native type $T');
|
|
48
|
+
}
|
|
36
49
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"target": "ES2022",
|
|
4
|
-
"module": "
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2022"],
|
|
5
6
|
"baseUrl": "./src",
|
|
6
|
-
"moduleResolution": "
|
|
7
|
+
"moduleResolution": "node",
|
|
7
8
|
"paths": {
|
|
8
9
|
"@src/*": [
|
|
9
10
|
"*"
|
|
@@ -11,15 +12,19 @@
|
|
|
11
12
|
},
|
|
12
13
|
"outDir": "./dist",
|
|
13
14
|
"esModuleInterop": true,
|
|
15
|
+
"allowSyntheticDefaultImports": true,
|
|
14
16
|
"forceConsistentCasingInFileNames": true,
|
|
15
17
|
"strict": true,
|
|
16
|
-
"skipLibCheck": true
|
|
18
|
+
"skipLibCheck": true,
|
|
19
|
+
"declaration": true,
|
|
20
|
+
"skipDefaultLibCheck": true
|
|
17
21
|
},
|
|
18
22
|
"include": [
|
|
19
23
|
"src/**/*.ts"
|
|
20
24
|
],
|
|
21
25
|
"exclude": [
|
|
22
|
-
"node_modules"
|
|
26
|
+
"node_modules",
|
|
27
|
+
"dist"
|
|
23
28
|
],
|
|
24
29
|
"ts-node": {
|
|
25
30
|
"require": [
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/models/swagger.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
/package/dist/models/{swagger-component-property.js → swagger/swagger-component-property.d.ts}
RENAMED
|
File without changes
|