fastify / fastify/fastify-swagger

Shared JSON schema: Cannot create property 'in' on string 'object'

Open
#791 6 comments 1 reaction 0 assignees View on GitHub
bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.