lukeautry / tsoa

Build OpenAPI-compliant REST APIs using TypeScript and Node
MIT License
3.33k stars 481 forks source link

Handling parameters that include mapped types with `Date` as a generic argument #1596

Closed veiper93 closed 1 month ago

veiper93 commented 3 months ago

An error is raised by invoking npx tsoa spec-and-routes when one of the endpoints within routers has a @Body() parameter that includes a mapped type field with Date as a generic argument. The error is introduced with the tsoa 6.0.0 version. It was not present up until and including the tsoa 5.1.1 version.

Sorting

Expected Behavior

The following TypeScript code should be processed by tsoa spec-and-routes without any issue.

import { Body, Controller, Post, Route, Tags } from "tsoa";

interface Mapped<T> {
  array: T[];
}

interface DummyBody {
  field: DummyBodyField;
}

interface DummyBodyField {
  date: Mapped<Date>; // !!! date causes problem !!!
  string: Mapped<string>; // string is ok
  number: Mapped<number>; // number is ok
  boolean: Mapped<boolean>; // boolean is ok
}

@Route("dummy")
export class DummyController extends Controller {
  @Post()
  async dummy(@Body() dummyBody: DummyBody): Promise<void> {
    console.log(dummyBody);
  }
}

Current Behavior

For a TypeScript code in the Expected Behavior section, primitive types string, number, and boolean do not cause the error. I also think that custom simple JavaScript classes do not cause the error. Standard JavaScript Date type, on the other hand, seems to be causing an error.

The following error is returned by tsoa spec-and-routes.

There was a problem resolving type of 'DummyBodyField'.
There was a problem resolving type of 'DummyBody'.
Generate routes error.
 GenerateMetadataError: Cannot read properties of undefined (reading 'kind') 
 in 'DummyController.dummy'
    at /workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/methodGenerator.js:104:23
    at Array.map (<anonymous>)
    at MethodGenerator.buildParameters (/workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/methodGenerator.js:96:14)
    at MethodGenerator.Generate (/workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/methodGenerator.js:66:33)
    at /workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/controllerGenerator.js:46:41
    at Array.map (<anonymous>)
    at ControllerGenerator.buildMethods (/workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/controllerGenerator.js:46:14)
    at ControllerGenerator.Generate (/workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/controllerGenerator.js:35:27)
    at /workspaces/workspace/node_modules/@tsoa/cli/dist/metadataGeneration/metadataGenerator.js:210:41
    at Array.map (<anonymous>)

Steps to Reproduce

The bug should be easily reproducible using the code supplied in the Expected Behavior section.

There is also a devbox on codesandbox.io.

Context (Environment)

In addition to the devbox where yarn was used, the error persist on the local machine where npm was used.

Version of the library: 6.1.5 Version of NodeJS: v20.5.0

github-actions[bot] commented 3 months ago

Hello there veiper93 👋

Thank you for opening your very first issue in this project.

We will try to get back to you as soon as we can.👀

github-actions[bot] commented 1 month ago

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days