Request body is typed but not checked at runtime
Describe the bug
It seems that the JSON schema given to .route() is purely informational despite what the documentation suggests:
const router = createRouter().route({
method: 'POST',
path: '/greetings',
schemas: {
request: {
json: {
type: 'object',
properties: {
name: { type: 'string' },
},
required: ['name'],
},
},
},
handler: async (request) => {
const { name } = await request.json();
console.log(typeof name); // Should print "string" according to TypeScript
return Response.json({ hello: name });
},
});
Running the following code will not return a server error:
fetch('http://localhost:3000/greetings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: '{}',
})
To Reproduce Steps to reproduce the behavior:
https://stackblitz.com/edit/stackblitz-starters-zhnkw4?file=index.ts
Run yarn fetch in another terminal :
Expected behavior
I'm expecting the request to fail with a 400 Bad Request error
Environment:
- fets: 0.6.6
Additional context
I'm pretty sure it's related to #799 and https://github.com/ardatan/feTS/discussions/896
I don't think this is related to those issues. It seems TypeBox validation doesn't work with regular JSON schemas.
But I'm getting the same issues, even when using the 1:1 JSON schema for params from the docs: