-
-
Notifications
You must be signed in to change notification settings - Fork 127
Description
Environment
Apologies if I am misunderstanding something here but going crazy trying to figure out how to type serialization/deserialization for OpenAPI contracts. Below is a simple reproduction of a created Date field which I believe is incorrectly typed.
"name": "@orpc/nest-playground",
"version": "1.13.4",
"private": true,
"scripts": {
"preview": "nest build && unbuild --stub && node dist/main.mjs",
"start:dev": "nest start --watch",
"type:check": "tsc --noEmit"
},
"devDependencies": {
"@nestjs/cli": "^11.0.16",
"@nestjs/common": "^11.1.12",
"@nestjs/core": "^11.1.12",
"@nestjs/platform-express": "^11.1.12",
"@nestjs/schematics": "^11.0.9",
"@orpc/client": "next",
"@orpc/contract": "next",
"@orpc/json-schema": "next",
"@orpc/nest": "next",
"@orpc/openapi": "next",
"@orpc/openapi-client": "next",
"@orpc/tanstack-query": "next",
"@orpc/zod": "next",
"@swc/cli": "^0.7.10",
"@swc/core": "^1.15.10",
"@tanstack/react-query": "^5.90.20",
"@types/express": "^5.0.6",
"@types/node": "^22.19.3",
"globals": "^17.1.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"source-map-support": "^0.5.21",
"ts-loader": "^9.5.4",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "~5.9.3",
"unbuild": "^3.6.1",
"zod": "^4.3.6"
}
}
Reproduction
What I have setup to showcase the issue
- added a
created?: z.coerce.date()field to the planet schema - created a non
ResponseValidationPluginand aResponseValidationPluginclient in playground-client.ts
In the playground you can see that using z.coerce.date() with ResponseValidationPlugin - it still iis typed as string in the tanstack query output.
If we mean to do this when not using ResponseValidationPlugin that may make sense as the field would be a string until it is validated.
However, I would expect that when using ResponseValidationPlugin the types would match type planetOutput = OrpcOutput['planet']['find']; - in the playground you can see OrpcOutput does type it as a Date.
Describe the bug
In the playground you can see that using z.coerce.date() with ResponseValidationPlugin - it still iis typed as string in the tanstack query output through it should be Date since we are transforming it.
Additional context
No response