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