Package Exports
- swagger-angular-generator
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 (swagger-angular-generator) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Purpose
Generate minimalistic TypeScript API layer for Angular with full type reflection of backend model.
- Source: swagger scheme
- Destination: Angular-cli based Angular app.
Install
npm i swagger-angular-generator --save-dev- check usage via
./node_modules/.bin/swagger-angular-generator -h
Use
Run generator
- get the swagger scheme (typically at http(s)://[server]/[app-path]/v2/api/api-docs)
- save it to json file in input directory and optionally format it for better diff
- run via
- directly
./node_modules/.bin/swagger-angular-generator - as module
swagger-angular-generatorpackage,npm run generate"script": { "generate": "swagger-angular-generator -s src/api/scheme.json -d src/api/generated" ... }
- or programatically as a method invocation
import {generate} from 'swagger-angular-generator'; // or using CommonJS loader const {generate} = require('swagger-angular-generator'); generate('conf/api/api-docs.json', 'src/api');
- directly
The resulting API layer contains the following structure in the destination directory:
defdirectory stores all response interfaces and enumsmodel.tsfile reexports all of them together for a simple accessapidirectory stores services devided by controllers containing all API methods
When updating your code for new backend version, we recommend you to follow these steps:
git diffthe changes- run
tscfor immediate problems - adjust the code, solve problems
- commit
Use
In order to consume generated model, follow the steps 1-8 in the following example to use generated API model.
Usage in the service or component
// 1. import used response types
import {ItemDto, PageDto} from '[relative-path-to-destination-directory]/model';
// 2. import used controller service and optionally param types
import {DataService, MethodParams} from '[relative-path-to-destination-directory]/api/DataService';
@Component({})
export class MyComponent implements OnInit {
// 3. link response objects to generated API types
public items: ItemDto[] = [];
public page: PageDto;
// 4. link request params to generated API types (all params are passed together in one object)
private params: MethodParams = {
page: 0,
size: 10,
sort: ['name:asc']
};
// 5. inject the service
constructor(private dataService: DataService) {}
public ngOnInit() {
// 6. the returned observable is fully typed
this.dataService
.get(this.params)
// 7. returned data are fully typed
.subscribe(data => {
// 8. assignments type-checked
const {content, page} = data;
this.items = content;
this.page = page;
});
}
}Assumptions / limitations
- swagger file is in version 2 format, it must be json
- each endpoint must have an
operationIddefined in: headerdefinitions are ignoredgetanddeletemethods do not containbody
Development
Docker image
docker build . -t swagger-angular-generatordocker run -u $(id -u) -it -v "$PWD":/code swagger-angular-generator bashnpm i