fastify / fastify/fastify-swagger
Shared JSON schema: Cannot create property 'in' on string 'object'
- Dominant language
- JavaScript
- Stars
- 1.1k
- Forks
- 219
- Avg merge
- 4h 24m
- Merged PRs (30d)
- 2
Description
### Prerequisites
- [X] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported
### Fastify version
4.26.2
### Plugin version
8.14.0
### Node.js version
20.11.1
### Operating system
Linux
### Operating system version (i.e. 20.04, 11.3, 10)
Linux Mint 23.1
### Description
When going to the documentation page (Swagger), I get:
```sh
[17:58:43 UTC] ERROR: Cannot create property 'in' on string 'object'
reqId: "req-8"
req: {
"method": "GET",
"url": "/docs/json",
"hostname": "0.0.0.0:3001",
"remoteAddress": "127.0.0.1",
"remotePort": 36828
}
res: {
"statusCode": 500
}
err: {
"type": "TypeError",
"message": "Cannot create property 'in' on string 'object'",
"stack":
TypeError: Cannot create property 'in' on string 'object'
at toSwaggerProp (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/utils.js:120:30)
at /media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/utils.js:153:14
at Array.map ()
at plainJsonObjectToSwagger2 (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/utils.js:152:6)
at resolveCommonParams (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/utils.js:204:15)
at prepareSwaggerMethod (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/utils.js:291:29)
at Object.swagger (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger/lib/spec/swagger/index.js:49:29)
at fastify.route.handler (/media/melroy/Data/Projects/erp-backend/node_modules/@fastify/swagger-ui/lib/routes.js:175:28)
at preHandlerCallback (/media/melroy/Data/Projects/erp-backend/node_modules/fastify/lib/handleRequest.js:137:37)
at next (/media/melroy/Data/Projects/erp-backend/node_modules/fastify/lib/hooks.js:233:9)
}
```
### Steps to Reproduce
Code/repo: https://github.com/melroy89/fastify-shared-schema-issue
My shared schema, I add during start-up:
```ts
fastify.addSchema({
$id: 'shared',
type: 'object',
definitions: {
genericQueryString: {
type: 'object',
properties: {
order: { type: 'string', description: 'Order by a specific field' },
limit: { type: 'number', description: 'Limit the results' },
}
}
}
})
```
Using the JSON schema in Fastify with the shared schema reference from above:
```js
{
description: 'Get all users',
tags: ['User'],
summary: 'Get users',
querystring: {
$ref: 'shared#/definitions/genericQueryString'
},
response: {
....
...
}
}
```
---
Ps. I also want to keep it extensible, so if a specific API end point needs additional querystrings I should be able to do:
```js
querystring: {
$ref: 'shared#/definitions/genericQueryString',
extra: { type: 'string', description: 'Extra query string' },
},
```
### Expected Behavior
No errors :). I think my shared schema is correct and should just work.
Contributor guide
Assessment
This issue has not been assessed yet.