diff --git a/.eslintrc.js b/.eslintrc.js index ab78852b7..453f8a4ac 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -18,7 +18,6 @@ module.exports = { default: 'array-simple', }, ], - '@typescript-eslint/ban-types': 'off', '@typescript-eslint/naming-convention': [ 'error', { diff --git a/packages/runtime/src/decorators/customAttribute.ts b/packages/runtime/src/decorators/customAttribute.ts index f2c2d4957..e3b4ee09a 100644 --- a/packages/runtime/src/decorators/customAttribute.ts +++ b/packages/runtime/src/decorators/customAttribute.ts @@ -1,4 +1,4 @@ -export function CustomAttribute(_name: string, _value: string): Function { +export function CustomAttribute(_name: string, _value: string): PropertyDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/deprecated.ts b/packages/runtime/src/decorators/deprecated.ts index fba9ecc8a..c101be558 100644 --- a/packages/runtime/src/decorators/deprecated.ts +++ b/packages/runtime/src/decorators/deprecated.ts @@ -1,7 +1,7 @@ /** * used to show a method as deprecated on swagger documentation */ -export function Deprecated(): Function { +export function Deprecated(): PropertyDecorator & ClassDecorator & ParameterDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/example.ts b/packages/runtime/src/decorators/example.ts index bbd6e16c5..7715dde96 100644 --- a/packages/runtime/src/decorators/example.ts +++ b/packages/runtime/src/decorators/example.ts @@ -1,4 +1,4 @@ -export function Example(exampleModel: T, exampleLabel?: string): Function { +export function Example(exampleModel: T, exampleLabel?: string): PropertyDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/extension.ts b/packages/runtime/src/decorators/extension.ts index afad7a6a9..f06b64dd1 100644 --- a/packages/runtime/src/decorators/extension.ts +++ b/packages/runtime/src/decorators/extension.ts @@ -1,4 +1,4 @@ -export function Extension(_name: string, _value: ExtensionType | ExtensionType[]): Function { +export function Extension(_name: string, _value: ExtensionType | ExtensionType[]): PropertyDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/methods.ts b/packages/runtime/src/decorators/methods.ts index 364383fd1..c0a50f3d3 100644 --- a/packages/runtime/src/decorators/methods.ts +++ b/packages/runtime/src/decorators/methods.ts @@ -1,40 +1,40 @@ -export function Options(value?: string): Function { +export function Options(value?: string): MethodDecorator { return () => { return; }; } -export function Get(value?: string): Function { +export function Get(value?: string): MethodDecorator { return () => { return; }; } -export function Post(value?: string): Function { +export function Post(value?: string): MethodDecorator { return () => { return; }; } -export function Put(value?: string): Function { +export function Put(value?: string): MethodDecorator { return () => { return; }; } -export function Patch(value?: string): Function { +export function Patch(value?: string): MethodDecorator { return () => { return; }; } -export function Delete(value?: string): Function { +export function Delete(value?: string): MethodDecorator { return () => { return; }; } -export function Head(value?: string): Function { +export function Head(value?: string): MethodDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/middlewares.ts b/packages/runtime/src/decorators/middlewares.ts index f9a87c575..7168b6a4b 100644 --- a/packages/runtime/src/decorators/middlewares.ts +++ b/packages/runtime/src/decorators/middlewares.ts @@ -1,6 +1,4 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -type Middleware = T; +type Middleware = T; const TSOA_MIDDLEWARES = Symbol('@tsoa:middlewares'); @@ -34,7 +32,7 @@ function decorator(fn: (value: any) => void) { * @param middlewares * @returns */ -export function Middlewares(...mws: Array>): ClassDecorator & MethodDecorator { +export function Middlewares(...mws: Array>): ClassDecorator & MethodDecorator { return decorator(target => { if (mws) { const current = fetchMiddlewares(target); @@ -49,6 +47,6 @@ export function Middlewares(...mws: Array(target: any): Array> { +export function fetchMiddlewares(target: any): Array> { return Reflect.getMetadata(TSOA_MIDDLEWARES, target) || []; } diff --git a/packages/runtime/src/decorators/operationid.ts b/packages/runtime/src/decorators/operationid.ts index e7c5a1883..3d731249f 100644 --- a/packages/runtime/src/decorators/operationid.ts +++ b/packages/runtime/src/decorators/operationid.ts @@ -1,4 +1,4 @@ -export function OperationId(value: string): Function { +export function OperationId(value: string): MethodDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/parameter.ts b/packages/runtime/src/decorators/parameter.ts index 13f92bca3..478c3b20f 100644 --- a/packages/runtime/src/decorators/parameter.ts +++ b/packages/runtime/src/decorators/parameter.ts @@ -2,7 +2,7 @@ * Inject http Body * @param {string} [name] properties name in body object */ -export function Body(): Function { +export function Body(): ParameterDecorator { return () => { return; }; @@ -13,7 +13,7 @@ export function Body(): Function { * * @param {string} [name] The name of the body parameter */ -export function BodyProp(name?: string): Function { +export function BodyProp(name?: string): ParameterDecorator { return () => { return; }; @@ -22,7 +22,7 @@ export function BodyProp(name?: string): Function { /** * Inject http request */ -export function Request(): Function { +export function Request(): ParameterDecorator { return () => { return; }; @@ -33,7 +33,7 @@ export function Request(): Function { * * @param {name} [name] The name of the request parameter */ -export function RequestProp(name?: string): Function { +export function RequestProp(name?: string): ParameterDecorator { return () => { return; }; @@ -44,7 +44,7 @@ export function RequestProp(name?: string): Function { * * @param {string} [name] The name of the path parameter */ -export function Path(name?: string): Function { +export function Path(name?: string): ParameterDecorator { return () => { return; }; @@ -55,7 +55,7 @@ export function Path(name?: string): Function { * * @param {string} [name] The name of the query parameter */ -export function Query(name?: string): Function { +export function Query(name?: string): ParameterDecorator { return () => { return; }; @@ -64,7 +64,7 @@ export function Query(name?: string): Function { /** * Inject all query values in a single object */ -export function Queries(): Function { +export function Queries(): ParameterDecorator { return () => { return; }; @@ -75,7 +75,7 @@ export function Queries(): Function { * * @param {string} [name] The name of the header parameter */ -export function Header(name?: string): Function { +export function Header(name?: string): ParameterDecorator { return () => { return; }; @@ -84,7 +84,7 @@ export function Header(name?: string): Function { /** * Mark parameter as manually injected, which will not be generated */ -export function Inject(): Function { +export function Inject(): ParameterDecorator { return () => { return; }; @@ -95,7 +95,7 @@ export function Inject(): Function { * * @param {string} [name] The name of the uploaded file parameter */ -export function UploadedFile(name?: string): Function { +export function UploadedFile(name?: string): ParameterDecorator { return () => { return; }; @@ -106,7 +106,7 @@ export function UploadedFile(name?: string): Function { * * @param {string} [name] The name of the uploaded files parameter */ -export function UploadedFiles(name?: string): Function { +export function UploadedFiles(name?: string): ParameterDecorator { return () => { return; }; @@ -117,7 +117,7 @@ export function UploadedFiles(name?: string): Function { * * @param {string} [name] The name of the uploaded files parameter */ -export function FormField(name?: string): Function { +export function FormField(name?: string): ParameterDecorator { return () => { return; }; @@ -130,7 +130,7 @@ export function FormField(name?: string): Function { * * @link https://swagger.io/docs/specification/describing-request-body/ */ -export function Consumes(value: string): Function { +export function Consumes(value: string): MethodDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/response.ts b/packages/runtime/src/decorators/response.ts index d4e57bf28..3362d0901 100644 --- a/packages/runtime/src/decorators/response.ts +++ b/packages/runtime/src/decorators/response.ts @@ -1,18 +1,18 @@ import { IsValidHeader } from '../utils/isHeaderType'; import { HttpStatusCodeLiteral, HttpStatusCodeStringLiteral, OtherValidOpenApiHttpStatusCode } from '../interfaces/response'; -export function SuccessResponse = {}>(name: string | number, description?: string, produces?: string | string[]): Function { +export function SuccessResponse = object>(name: string | number, description?: string, produces?: string | string[]): MethodDecorator { return () => { return; }; } -export function Response = {}>( +export function Response = object>( name: HttpStatusCodeLiteral | HttpStatusCodeStringLiteral | OtherValidOpenApiHttpStatusCode, description?: string, example?: ExampleType, produces?: string | string[], -): Function { +): MethodDecorator & ClassDecorator { return () => { return; }; @@ -23,7 +23,7 @@ export function Response` in order to support OpenAPI documentation. */ -export function Res(): Function { +export function Res(): ParameterDecorator { return () => { return; }; @@ -35,7 +35,7 @@ export function Res(): Function { * * @link https://swagger.io/docs/specification/media-types/ */ -export function Produces(value: string): Function { +export function Produces(value: string): MethodDecorator & ClassDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/route.ts b/packages/runtime/src/decorators/route.ts index ef3ccd850..236964ed2 100644 --- a/packages/runtime/src/decorators/route.ts +++ b/packages/runtime/src/decorators/route.ts @@ -1,4 +1,4 @@ -export function Route(name?: string): Function { +export function Route(name?: string): ClassDecorator { return () => { return; }; @@ -7,7 +7,7 @@ export function Route(name?: string): Function { /** * can be used to entirely hide an method from documentation */ -export function Hidden(): Function { +export function Hidden(): ClassDecorator & MethodDecorator & ParameterDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/security.ts b/packages/runtime/src/decorators/security.ts index d4ef43e06..01e2a47ff 100644 --- a/packages/runtime/src/decorators/security.ts +++ b/packages/runtime/src/decorators/security.ts @@ -1,7 +1,7 @@ /** * Can be used to indicate that a method requires no security. */ -export function NoSecurity(): Function { +export function NoSecurity(): ClassDecorator & MethodDecorator { return () => { return; }; @@ -10,7 +10,7 @@ export function NoSecurity(): Function { /** * @param {name} security name from securityDefinitions */ -export function Security(name: string | { [name: string]: string[] }, scopes?: string[]): Function { +export function Security(name: string | { [name: string]: string[] }, scopes?: string[]): ClassDecorator & MethodDecorator { return () => { return; }; diff --git a/packages/runtime/src/decorators/tags.ts b/packages/runtime/src/decorators/tags.ts index 4346b0194..6a2e18583 100644 --- a/packages/runtime/src/decorators/tags.ts +++ b/packages/runtime/src/decorators/tags.ts @@ -1,4 +1,4 @@ -export function Tags(...values: string[]): Function { +export function Tags(...values: string[]): MethodDecorator { return () => { return; }; diff --git a/packages/runtime/src/interfaces/response.ts b/packages/runtime/src/interfaces/response.ts index 57f58086a..b899f6c8d 100644 --- a/packages/runtime/src/interfaces/response.ts +++ b/packages/runtime/src/interfaces/response.ts @@ -65,4 +65,4 @@ export type HttpStatusCodeStringLiteral = `${HttpStatusCodeLiteral}`; export type OtherValidOpenApiHttpStatusCode = '1XX' | '2XX' | '3XX' | '4XX' | '5XX' | 'default'; -export type TsoaResponse = {}> = (status: T, data: BodyType, headers?: HeaderType) => any; +export type TsoaResponse = object> = (status: T, data: BodyType, headers?: HeaderType) => any; diff --git a/packages/runtime/src/routeGeneration/templates/express/expressTemplateService.ts b/packages/runtime/src/routeGeneration/templates/express/expressTemplateService.ts index b538c5370..a3dc4a6c3 100644 --- a/packages/runtime/src/routeGeneration/templates/express/expressTemplateService.ts +++ b/packages/runtime/src/routeGeneration/templates/express/expressTemplateService.ts @@ -8,7 +8,7 @@ import { TemplateService } from '../templateService'; type ExpressApiHandlerParameters = { methodName: string; - controller: Controller | Object; + controller: Controller | object; response: ExResponse; next: ExNext; validatedArgs: any[]; diff --git a/packages/runtime/src/routeGeneration/templates/hapi/hapiTemplateService.ts b/packages/runtime/src/routeGeneration/templates/hapi/hapiTemplateService.ts index 34df5e26f..fd153e3fc 100644 --- a/packages/runtime/src/routeGeneration/templates/hapi/hapiTemplateService.ts +++ b/packages/runtime/src/routeGeneration/templates/hapi/hapiTemplateService.ts @@ -12,7 +12,7 @@ const hapiTsoaResponsed = Symbol('@tsoa:template_service:hapi:responsed'); type HapiApiHandlerParameters = { methodName: string; - controller: Controller | Object; + controller: Controller | object; h: HResponse; validatedArgs: any[]; successStatus?: number; @@ -36,8 +36,8 @@ export class HapiTemplateService extends TemplateService = keyof Header extends string | number ? Header[keyof Header] extends string | string[] | undefined - ? {} + ? object : 'Header values must be string or string[]' : 'Header names must be of type string';