Astraea
Description
help developer output the typescript interfaces of api by swagger.json
or json
Install
npm install astraea
Usage
swagger
options
-
input
, swagger.json -
dir
, output directory -
opt
,-
blackList
, filterpath
-
optional
, boolean, all params are optinaol -
suffix
, file format, eg:ts
ord.ts
-
const astraea = require('astraea');
const swagger = require('./swagger.json');
astraea.swagger(
swagger,
'./example/swagger',
{
blackList: ['DELETE/pet/:petId']
}
)
json
options
-
input
, json description -
dir
, output directory -
opt
,-
blackList
, filterpath
-
optional
, boolean, all params are optinaol -
suffix
, file format, eg:ts
ord.ts
-
const astraea = require('astraea');
astraea.json(
{
get: {
'/api/persion/detail': {
a: 1,
},
'/api/pet/detail': {
a: 1,
}
},
post: {
'/api/persion/create': () => [{
a: 1,
b: [
{
v: 1
}
]
}],
}
},
'./example/json',
{
blackList: [ 'GET/api/persion/detail'],
optional: true,
}
)
scan
astraea.scan
based on astraea.json
, it will scan all .js
files of inputDir
.
options
-
inputDir
, .js dir -
outputDir
, output directory -
opt
,-
blackList
, filterpath
-
optional
, boolean, all params are optinaol -
suffix
, file format, eg:ts
ord.ts
-
const astraea = require('../index.js');
const path = require('path');
astraea.scan({
inputDir: path.resolve(__dirname, './scanData'),
outputDir: path.resolve(__dirname, '../example/scan'),
request: {
optional: true,
},
response: {},
});
How to use?
this is a simple example, you need to rework if use in prod!
import {
IGetRoutes as ISwaggerGetRoutes,
IPostRoutes as ISwaggerPostRoutes,
IPutRoutes as ISwaggerPutRoutes,
IDeleteRoutes as ISwaggerDeleteRoutes,
} from './swagger/routes';
import {
IGetRoutes as IJsonGetRoutes,
IPostRoutes as IJsonPostRoutes,
IPutRoutes as IJsonPutRoutes,
IDeleteRoutes as IJsonDeleteRoutes,
} from './json/routes';
export interface IGetRoutes extends ISwaggerGetRoutes, IJsonGetRoutes {}
export interface IPostRoutes extends ISwaggerPostRoutes, IJsonPostRoutes {}
export interface IPutRoutes extends ISwaggerPutRoutes, IJsonPutRoutes {}
export interface IDeleteRoutes extends ISwaggerDeleteRoutes, IJsonDeleteRoutes {}
const get: <K extends keyof IGetRoutes>(url: K) => IGetRoutes[K];
const post: <K extends keyof IPostRoutes>(url: K) => IPostRoutes[K];
const dl: <K extends keyof IPutRoutes>(url: K) => IPutRoutes[K];
const put: <K extends keyof IDeleteRoutes>(url: K) => IDeleteRoutes[K];
get('/pet/:petId').category.id;
post('/api/persion/create');
dl('/pet');
put('/store/order/:orderId');
Examlpe
routes.ts
import { RootObject as GetPetFindByStatus } from './GET/pet/findByStatus';
import { RootObject as GetPetFindByTags } from './GET/pet/findByTags';
import { RootObject as GetPetPetId } from './GET/pet/:petId';
import { RootObject as GetStoreInventory } from './GET/store/inventory';
import { RootObject as GetStoreOrderOrderId } from './GET/store/order/:orderId';
import { RootObject as GetUserLogin } from './GET/user/login';
import { RootObject as GetUserLogout } from './GET/user/logout';
import { RootObject as GetUserUsername } from './GET/user/:username';
import { RootObject as PostPet } from './POST/pet';
import { RootObject as PostPetPetId } from './POST/pet/:petId';
import { RootObject as PostPetPetIdUploadImage } from './POST/pet/:petId/uploadImage';
import { RootObject as PostStoreOrder } from './POST/store/order';
import { RootObject as PostUser } from './POST/user';
import { RootObject as PostUserCreateWithArray } from './POST/user/createWithArray';
import { RootObject as PostUserCreateWithList } from './POST/user/createWithList';
import { RootObject as PutPet } from './PUT/pet';
import { RootObject as PutUserUsername } from './PUT/user/:username';
import { RootObject as DeletePetPetId } from './DELETE/pet/:petId';
import { RootObject as DeleteStoreOrderOrderId } from './DELETE/store/order/:orderId';
import { RootObject as DeleteUserUsername } from './DELETE/user/:username';
export interface IGetRoutes {
'/pet/findByStatus': GetPetFindByStatus;
'/pet/findByTags': GetPetFindByTags;
'/pet/:petId': GetPetPetId;
'/store/inventory': GetStoreInventory;
'/store/order/:orderId': GetStoreOrderOrderId;
'/user/login': GetUserLogin;
'/user/logout': GetUserLogout;
'/user/:username': GetUserUsername;
}
export interface IPostRoutes {
'/pet': PostPet;
'/pet/:petId': PostPetPetId;
'/pet/:petId/uploadImage': PostPetPetIdUploadImage;
'/store/order': PostStoreOrder;
'/user': PostUser;
'/user/createWithArray': PostUserCreateWithArray;
'/user/createWithList': PostUserCreateWithList;
}
export interface IPutRoutes {
'/pet': PutPet;
'/user/:username': PutUserUsername;
}
export interface IDeleteRoutes {
'/pet/:petId': DeletePetPetId;
'/store/order/:orderId': DeleteStoreOrderOrderId;
'/user/:username': DeleteUserUsername;
}