fix(): Updated types for Specific ApiResponse decorator options to omit status
Decorators like ApiOkResponse always override the status to a specific code. Devs might think they are overriding the status but it's actually a no-op. Updated the types of the options to raise an error if status is passed.
PR Checklist
Please check if your PR fulfills the following requirements:
- [X] The commit message follows our guidelines: https://github.com/nestjs/nest/blob/master/CONTRIBUTING.md
- [X] Tests for the changes have been added (for bug fixes / features)
- [ ] Docs have been added / updated (for bug fixes / features)
PR Type
What kind of change does this PR introduce?
- [X] Bugfix
- [ ] Feature
- [ ] Code style update (formatting, local variables)
- [ ] Refactoring (no functional changes, no api changes)
- [ ] Build related changes
- [ ] CI related changes
- [ ] Other... Please describe:
What is the current behavior?
Issue Number: N/A
Someone specifying a method like
@Controller('tests/:testId')
class TestAppController {
@Get()
@ApiOkResponse({ status: 201 })
public get(@Param('testId') testId: string): string {
return testId;
}
}
Might think it will return a 201 response, But it's easy to miss the Ok in ApiOkResponse vs ApiResponse
What is the new behavior?
The code above will not compile because status is no longer an accepted option for Response decorators that override the status
Does this PR introduce a breaking change?
- [X] Yes
- [ ] No
Migration path is to remove status options on affected Response decorators as they were unused.
If the Response needed to have a different status, instead replace the decorator with ApiResponse
Other information
An alternative would be to change the decorators to
export const ApiOkResponse = (options: ApiResponseOptions= {}) =>
ApiResponse({
status: HttpStatus.OK,
...options,
});
Allowing to override the status, but that sounds even more dangerous because it would change the runtime of existing code instead of just having a compile error