Astraea icon indicating copy to clipboard operation
Astraea copied to clipboard

help developer output the typescript interfaces of api by swagger.json or json

trafficstars

Astraea

travis ci badge version license downloads downloads-month

Description

help developer output the typescript interfaces of api by swagger.json or json

Install

npm install astraea

Usage

swagger

Demo

Test

options

  • input, swagger.json
  • dir, output directory
  • opt,
    • blackList, filter path
    • optional, boolean, all params are optinaol
    • suffix, file format, eg: ts or d.ts
const astraea = require('astraea');
const swagger = require('./swagger.json');
astraea.swagger(
  swagger, 
  './example/swagger', 
  {
    blackList: ['DELETE/pet/:petId']
  }
)

json

Demo

Test

options

  • input, json description
  • dir, output directory
  • opt,
    • blackList, filter path
    • optional, boolean, all params are optinaol
    • suffix, file format, eg: ts or d.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.

Demo

Test

options

  • inputDir, .js dir
  • outputDir, output directory
  • opt,
    • blackList, filter path
    • optional, boolean, all params are optinaol
    • suffix, file format, eg: ts or d.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

here

routes.ts

click here

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;
}