UNPKG

no-hassle

Version:

Makes Node.js route handling easy with support for [Joi schema](https://github.com/hapijs/joi) validation and automatic Swagger generation based on these schema definitions. Uses Expressjs routing mechanism.

127 lines (126 loc) 3.45 kB
import * as Joi from '@hapi/joi'; import { RequestHandler } from 'express'; import { HttpMethod } from './constants'; export interface IRouteResult { get: (path: string, options: IOptions, ...args: RequestHandler[]) => IRouteResult; post: (path: string, options: IOptions, ...args: RequestHandler[]) => IRouteResult; put: (path: string, options: IOptions, ...args: RequestHandler[]) => IRouteResult; patch: (path: string, options: IOptions, ...args: RequestHandler[]) => IRouteResult; delete: (path: string, options: IOptions, ...args: RequestHandler[]) => IRouteResult; template: (template: ITemplateRoute, ...args: RequestHandler[]) => IRouteResult; } export declare enum SchemeType { Http = "http", Https = "https", Ws = "ws", Wss = "wss" } export interface IExternalDocs { description: string; url: string; } export interface ISwaggerBaseDefinition { title: string; description: string; host: string; schemes: SchemeType[]; basePath: string; contact?: { email: string; }; version?: string; apiVersion?: string; } export interface ISwaggerDefinition { swagger: string; host: string; basePath: string; schemes: SchemeType[]; info: { description: string; version: string; title: string; contact: { email: string; }; }; externalDocs?: IExternalDocs; paths: {}; definitions: {}; } export declare enum AuthenticationTypes { BASIC = "basic", API_KEY = "apiKey" } export declare type AuthenticationType = `${AuthenticationTypes}`; interface CommonSecurityDefinition { id: string; } export interface BasicSecurityDefinition extends CommonSecurityDefinition { type: AuthenticationTypes.BASIC; } export interface ApiKeySecurityDefinition extends CommonSecurityDefinition { type: AuthenticationTypes.API_KEY; header: string; } export declare type SecurityDefinition = BasicSecurityDefinition | ApiKeySecurityDefinition; export declare type Security = string[][]; export interface Authentication { securityDefinitions?: SecurityDefinition[]; security?: Security; } export interface ISwaggerOptions { title?: string; description?: string; host?: string; schemes?: SchemeType[]; basePath?: string; apiVersion?: '2.0' | '3.0'; version?: string; auth?: Authentication; externalDocs?: IExternalDocs; } export interface IInput { body?: ISchema; query?: ISchema | object; params?: ISchema | object; headers?: ISchema | object; } export declare type IOutput = { [key: number]: ISchema | { [key: string]: ISchema; }; }; export interface IDocsOptions { input?: IInput; output?: IOutput; contentTypes?: string[]; schemaOptions?: object; tags?: string[]; description?: string; summary?: string; prefix?: string; prefixToOmit?: string; externalDocs?: IExternalDocs; security?: Security; } export interface ITemplateRoute extends IDocsOptions { method: HttpMethod; path: string; } export interface IExecOptions extends IDocsOptions { docs?: boolean; method: HttpMethod; path: string; } export interface IOptions extends IDocsOptions { docs?: boolean; } export interface IValidateResponse { isValid: boolean; errors?: Joi.ValidationErrorItem[]; } export declare type ISchema = Joi.Schema & { _meta?: []; }; export {};