@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.
Files changed (50) hide show
  1. package/dist/api.constants.d.ts +2 -0
  2. package/dist/generator-old.d.ts +0 -0
  3. package/dist/generator-old.js +1 -1
  4. package/dist/generator.d.ts +40 -0
  5. package/dist/generator.js +2 -0
  6. package/dist/generators-writers/angular/api-angular-writer.d.ts +15 -0
  7. package/dist/generators-writers/angular/constants.d.ts +4 -0
  8. package/dist/generators-writers/angular/model-angular-writer.d.ts +10 -0
  9. package/dist/generators-writers/dart/api-dart-writer.d.ts +11 -0
  10. package/dist/generators-writers/dart/api-dart-writer.js +9 -3
  11. package/dist/generators-writers/dart/model-dart-writer.d.ts +9 -0
  12. package/dist/generators-writers/dart/model-dart-writer.js +2 -2
  13. package/dist/generators-writers/dart/models/import-definition-dart.d.ts +5 -0
  14. package/dist/generators-writers/dart/normalizator.d.ts +10 -0
  15. package/dist/generators-writers/dart/templates/api.mustache +13 -0
  16. package/dist/generators-writers/nextjs/api-nextjs-writer.d.ts +15 -0
  17. package/dist/generators-writers/nextjs/constants.d.ts +1 -0
  18. package/dist/generators-writers/nextjs/model-nextjs-writer.d.ts +10 -0
  19. package/dist/generators-writers/utils.d.ts +12 -0
  20. package/dist/index.d.ts +17 -0
  21. package/dist/model.constants.d.ts +0 -0
  22. package/dist/model.constants.js +1 -1
  23. package/dist/models/api-dto.d.ts +18 -0
  24. package/dist/models/enum-value-dto.d.ts +4 -0
  25. package/dist/models/model-dto.d.ts +9 -0
  26. package/dist/models/parameter-dto.d.ts +7 -0
  27. package/dist/models/property-dto.d.ts +4 -0
  28. package/dist/models/swagger/swagger-component.d.ts +10 -0
  29. package/dist/models/swagger/swagger-content.d.ts +4 -0
  30. package/dist/models/swagger/swagger-info.d.ts +4 -0
  31. package/dist/models/swagger/swagger-method.d.ts +9 -0
  32. package/dist/models/swagger/swagger-schema.d.ts +12 -0
  33. package/dist/models/swagger/swagger.d.ts +47 -0
  34. package/dist/models/type-dto.d.ts +8 -0
  35. package/dist/swagger-downloader.d.ts +5 -0
  36. package/dist/templates/api.mustache +29 -0
  37. package/dist/templates/model.mustache +18 -0
  38. package/package.json +2 -2
  39. package/src/generator.ts +1 -0
  40. package/src/generators-writers/dart/api-dart-writer.ts +11 -3
  41. package/src/generators-writers/dart/model-dart-writer.ts +2 -2
  42. package/src/generators-writers/dart/templates/api.mustache +13 -0
  43. package/tsconfig.json +9 -4
  44. package/dist/models/swagger-component.js +0 -1
  45. package/dist/models/swagger-content.js +0 -1
  46. package/dist/models/swagger-info.js +0 -1
  47. package/dist/models/swagger-method.js +0 -1
  48. package/dist/models/swagger-schema.js +0 -1
  49. package/dist/models/swagger.js +0 -1
  50. /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
@@ -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
- responseType = Utils.toDartClassName(responseType) ?? responseType;
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 == "userGeneralInfoTestSave") {
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.default.render(template, apiDefinition);
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.default.render(template, dartModel);
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.default.render(template, dartModel);
95
+ let result = Mustache.render(template, dartModel);
96
96
  writeFileSync(`${destinationPath}/${normalizedInfo.filename}.dart`, result, 'utf-8');
97
97
  });
98
98
  }
@@ -0,0 +1,5 @@
1
+ import { TypeDto } from "@src/models/type-dto.js";
2
+ export interface ImportDefinitionDart {
3
+ type: TypeDto;
4
+ import: string;
5
+ }
@@ -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
+ }
@@ -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
@@ -1 +1 @@
1
- export {};
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,4 @@
1
+ export interface EnumValueDto {
2
+ name: string;
3
+ value: string;
4
+ }
@@ -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,7 @@
1
+ import { PropertyDto } from "./property-dto.js";
2
+ import { SwaggerParameter } from "./swagger/swagger.js";
3
+ export interface ParameterDto extends PropertyDto {
4
+ isQuery: boolean;
5
+ isEnum: boolean;
6
+ swaggerParameter?: SwaggerParameter;
7
+ }
@@ -0,0 +1,4 @@
1
+ import { TypeDto } from "./type-dto.js";
2
+ export interface PropertyDto extends TypeDto {
3
+ name: string;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { SwaggerSchema } from "./swagger-schema.js";
2
+ export interface SwaggerComponent {
3
+ type: string;
4
+ properties: {
5
+ [key: string]: SwaggerSchema;
6
+ };
7
+ additionalProperties: boolean;
8
+ enum: string[];
9
+ required: string[];
10
+ }
@@ -0,0 +1,4 @@
1
+ import { SwaggerSchema } from "./swagger-schema.js";
2
+ export interface SwaggerContent {
3
+ schema: SwaggerSchema;
4
+ }
@@ -0,0 +1,4 @@
1
+ export interface SwaggerInfo {
2
+ title: string;
3
+ version: string;
4
+ }
@@ -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,12 @@
1
+ export interface SwaggerSchema {
2
+ type?: string;
3
+ $ref?: string;
4
+ allOf?: SwaggerSchema[];
5
+ format?: string;
6
+ items?: SwaggerSchema;
7
+ properties?: {
8
+ [key: string]: SwaggerSchema;
9
+ };
10
+ nullable?: boolean;
11
+ minLength?: number;
12
+ }
@@ -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,8 @@
1
+ export interface TypeDto {
2
+ typeName: string;
3
+ nullable: boolean;
4
+ isNativeType: boolean;
5
+ isTypeReference: boolean;
6
+ isVoid: boolean;
7
+ isArray: boolean;
8
+ }
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { Swagger } from "./models/swagger/swagger.js";
3
+ export declare class SwaggerDownloader {
4
+ download(swaggerJsonUrl: URL): Promise<Swagger>;
5
+ }
@@ -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.0",
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": "^20.19.10",
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
- responseType = Utils.toDartClassName(responseType) ?? responseType;
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 == "userGeneralInfoTestSave") {
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.default.render(template, apiDefinition);
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.default.render(template, dartModel);
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.default.render(template, dartModel);
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": "ES2022",
4
+ "module": "ESNext",
5
+ "lib": ["ES2022"],
5
6
  "baseUrl": "./src",
6
- "moduleResolution": "NodeNext",
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 {};
@@ -1 +0,0 @@
1
- export {};