This tool generates models and Angular services based on generated Swagger JSON.
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
gengen g --all
-
Initialize empty rule set
gengen init
-
Generate list of available endpoints
gengen g:c
-
Describe endpoints who will be generated
import { Endpoints } from './endpoints'; export default new Set([Endpoints.ProductService.GetProducts, Endpoints.CategoryService.AddCategory]);
-
Generate specified routes
gengen g
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 |
Alias provides:
- Prefixes for model and service files
- 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'
};
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
});
}
}
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);
// ...
}
Copyright (c) 2020-2023 Luxoft
Licensed under the MIT license