summer-glove
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

Summer-glove

npm version

Fit like a glove 🧤

Summer-glove is a route manager, providing a quick and easy way to configure an express application. Summer-glove also provides 100% automated and customizable swagger documentation.

Installation and Usage

npm i summer-glove

To create a app

npx summer-glove --create-app

Will be create

project/
├── App.ts
├── Controller.ts
├── Server.ts
├── tsconfig.json

Add the property below to your file tsconfig.json.

{
    "compilerOptions": {
        //...
        "experimentalDecorators": true
        //...
    }
}

Documentation

Below is a walkthrough of all available decorators

Frist Configuration:

  • @SwaggerInitializer - Loads Swagger in your express application | String
  • @SwaggerEndpoint - Defines the path to access documentation | String
  • @ApiDefaultPath - Defines the main path of your API | String
  • @Description - Describes your application within documenta*tion | String
  • @Title - Puts a title on your documentation | String
  • @Version - Defines API version | String
  • @GlobalAuth - Defines if the API uses JWT Tokens as a security mechanism | Boolean
    • Param:
      • AuthType.BEARER_JWT
      • AuthType.BASIC
  • @ExpressInitializer - Initializes an express app and configures its routes. You can also pass a logger configuration
    • Param:
      • LoggerConfigTypes.SHOW | LoggerConfigTypes.HIDE
      • app configuration:
        • Everything you want to pass to your express app. Example:
          • app.use( json() )
          • app.use( cors() )
        • Default configuration: app.use( json() )

Second Configuration

  • @Controller - Specifies a controller within the express context | String

Third Configuration

  • @Get - Specifies GET type endpoints | String, middlewares
  • @Post - Specifies POST type endpoints | String, middlewares
  • @Delete - Specifies DELETE type endpoints | String, middlewares
  • @Patch - Specifies PATCH type endpoints | String, middlewares
  • @Put - Specifies PUT type endpoints | String, middlewares
  • @Connect - Specifies CONNECT type endpoints | String, middlewares
  • @Head - Specifies HEAD type endpoints | String, middlewares
  • @Options - Specifies OPTIONS type endpoints | String, middlewares
  • @Trace - Specifies TRACE type endpoints | String, middlewares

Fourth Configuration

  • @StatusResponse - Adds HTTP response codes and description | number
  • @Body - Adds a Body as a request object | Object
  • @RequireAuth - Tells swagger that the route is protected by authentication
  • @ParamPath - Adds a ParamPath as a request object | Object
  • @FormData - Adds a FormData as a request objet | Object. Utilize FormDataTypes for grant types
  • @Header - Adds a Header as a request objet | object
  • @Query - Adds a Query as a request objet | object

Themes

To configure the themes, use

  • @Theme - Specifies Theme type of Swagger | If not specified, use default swagger theme
    • ThemesType.FEELING_BLUE
    • ThemesType.FLATTOP
    • ThemesType.MATERIAL
    • ThemesType.MONOKAI
    • ThemesType.MUTED
    • ThemesType.NEWS_PAPER
    • ThemesType.OUTLINE

Usage

Express & Swagger Configuration

import Express, {json} from "express";
import {
  ApiDefaultPath,
  Description,
  ExpressInitializer,
  GlobalAuth,
  AuthType,
  LoggerConfigTypes,
  SwaggerEndpoint,
  SwaggerInitializer,
  Theme,
  ThemesType,
  Title,
  Version
} from "../src/index";
import MyController from "./Controller";
import cors from "cors";
import rateLimit from "express-rate-limit";
@SwaggerInitializer
@SwaggerEndpoint("/doc")
@Description("API TEST")
@Title("TEST NAME")
@Version("1.0.0")
@ApiDefaultPath("/")
@GlobalAuth(AuthType.BEARER_JWT)
@Theme(ThemesType.NEWS_PAPER)
export default class App {

  @ExpressInitializer(LoggerConfigTypes.SHOW,
          cors(), // configuration applied in app.use()
          rateLimit({
            windowMs: 15 * 60 * 1000,
            max: 10,
            message: 'Too many requests from this IP. Please try again later.',
            standardHeaders: true,
            legacyHeaders: false,
          }), //configuration applied in app.use()
          json() //configuration applied in app.use()
  )
  private app: Express.Express;

  constructor () {
    this.initControllers();
  }
  private initControllers(){
    new MyController()
  }

  public getApp(): Express.Express {
    return this.app;
  }
}

Controller Configuration

@Controller("/controller1")
export default class MyController1 {
    
    //health-check
    @StatusResponse(200, "Check API successfully")
    @StatusResponse(400,"Check API unsuccessfully")
    @Get() // It is important to put the Http Method Decorator as the first configuration.
    public check(request: Request, response: Response): Promise<Response> {

        //... implementation

    }
}
@Controller("/controller2")
export default class MyController2 {
    
    
    @StatusResponse(202) // if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400) // if you dont pass description, express-swagger-autoconfigure add for you 
    @Body({email:"Description", password:"Description"})
    @Post("/login")// It is important to put the Http Method Decorator as the first configuration.
    public login( request: Request, response: Response): Promise<Response> {
       //... implementation
    }
    
    @StatusResponse(200) // if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @Get("/", authorizationMiddleware)// It is important to put the Http Method Decorator as the first configuration.
    public read(request: Request, response: Response): Promise<Response> {
        //... implementation
    }

    @StatusResponse(200)// if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @ParamPath({uuid: "Description"})
    @RequireAuth() // Tells swagger that the route is protected by authentication
    @Get("/find-by-uuid/{uuid}", authorizationMiddleware)// It is important to put the Http Method Decorator as the first configuration.
    public findByUuid(request: Request, response: Response): Promise<Response> {
        //... implementation
    }

    @StatusResponse(200)// if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @Body({
        name : "Description",
        email : "Description",
        password: "Description"
    })
    // Default = "/" 
    @Post() // It is important to put the Http Method Decorator as the first configuration.
    public create(request: Request, response: Response): Promise<Response> {
        //... implementation
    }
    
    @StatusResponse(200)// if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @Query({
        uuid:"Description"
    })
    // Default = "/" 
    @Post("/query-profile") // It is important to put the Http Method Decorator as the first configuration.
    public queryProfile(request: Request, response: Response): Promise<Response> {
        //... implementation
    }

    @StatusResponse(200)// if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @Header({
        profileType:"Description"
    })
    // Default = "/" 
    @Post("/type-profile") // It is important to put the Http Method Decorator as the first configuration.
    public headerProfile(request: Request, response: Response): Promise<Response> {
        //... implementation
    }

    @StatusResponse(200)// if you dont pass description, express-swagger-autoconfigure add for you 
    @StatusResponse(400)// if you dont pass description, express-swagger-autoconfigure add for you 
    @FormData({
        img: FormDataTypes.FILE,
        name: FormDataTypes.STRING,
        rules: FormDataTypes.ARRAY,
        age: FormDataTypes.NUMBER,
        isMarried:FormDataTypes.BOOLEAN

    })
    // Default = "/" 
    @Post("/create-profile") // It is important to put the Http Method Decorator as the first configuration.
    public createProfile(request: Request, response: Response): Promise<Response> {
        //... implementation
    }
}

Theme examples

  • FEELING_BLUE alt text
  • FLATTOP alt text
  • MATERIAL alt text
  • MONOKAI alt text
  • MUTED alt text
  • NEWS_PAPER alt text
  • OUTLINE alt text

Contact

victorqueiroz90@outlook.com

Package Sidebar

Install

npm i summer-glove

Weekly Downloads

69

Version

1.1.3

License

MIT

Unpacked Size

630 kB

Total Files

142

Last publish

Collaborators

  • joao-victor