JSPM

  • Created
  • Published
  • 0
  • Score
    100M100P100Q49942F
  • License MIT

Tool for generating models and Angular services based on OpenAPIs and Swagger's JSON

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@luxbss/gengen) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    GenGen

    NPM version license GitHub contributors

    This tool generates models and Angular services based on generated Swagger JSON.

    Getting Started

    First of all you make sure that swagger.json is accessable.

    Location by default is https://localhost:5001/swagger/v1/swagger.json. You can override it. See all options

    Generate all API

    gengen g --all

    Generate a part of API

    1. Initialize empty rule set

      gengen init
    2. Generate list of available endpoints

      gengen g:c
    3. Describe endpoints who will be generated

      import { Endpoints } from './endpoints';
      
      export default new Set([Endpoints.ProductService.GetProducts, Endpoints.CategoryService.AddCategory]);
    4. Generate specified routes

      gengen g

    Options

    Option Description Type Default value
    all Generate all boolean false
    url Location of swagger.json string https://localhost:5001/swagger/v1/swagger.json
    file Local path to swagger.json string
    output Output directory string ./src/generated
    configOutput Output directory using in 'Generate a part of API' scenario string ./.generated
    aliasName Specify prefix for generated filenames. more info string
    withRequestOptions Allows to pass http request options to generated methods. more info boolean false
    utilsRelativePath Relative path to utils files. It may be useful when you have multiple generation sources string
    unstrictId Disable converting 'id' properties to strong Guid type. more info boolean false

    Option details

    aliasName

    Alias provides:

    1. Prefixes for model and service files
    2. A way to specify dynamic basePath for services.

    Example:

    gengen --aliasName myalias

    GenGen would create files myalias-models.ts, myalias-services.ts in output directory. And we could override services basePath with following code

    window.__gengen__basePathMap = {
        myalias: 'https://myexternalapi/api'
    };

    withRequestOptions

    GenGen would generate optional parameter options for each method in services. With which you could provide any additional request options from the interface below (IAngularHttpRequestOptions).

    Example:

    interface IAngularHttpRequestOptions {
        headers?: HttpHeaders | { [header: string]: string | string[] };
        observe?: 'body' | 'response';
        params?: HttpParams | { [param: string]: string | string[] };
        reportProgress?: boolean;
        responseType?: 'json' | 'blob';
        withCredentials?: boolean;
    }
    
    @Injectable({
        providedIn: 'root'
    })
    export class ExampleService extends BaseHttpService {
        // ...
    
        public methodName(options?: IAngularHttpRequestOptions): Observable<void> {
            return this.post<string>(`methodName`, options);
        }
    
        // ...
    }
    
    @Component(
        // ...
    )
    export class MyComponent {
        constructor(private exampleService: ExampleService) {
            this.exampleService.methodName({
                withCredentials: true
            });
        }
    }

    unstrictId

    By default, GenGen converts all 'id' properties from string type to custom Guid type. You can disable this behaviour by using it option

    Example:

    public static toDTO(model: Partial<Product>): IProduct {
        return {
            // ...
            id: model.id ? model.id.toString() : Guid.empty.toString(),
            // ...
        };
    }
    
    public static fromDTO(dto: IProduct): Product {
        // ...
        model.id = new Guid(dto.id);
        // ...
    }

    License and copyright

    Copyright (c) 2020-2023 Luxoft

    Licensed under the MIT license