fastify / fastify-swagger

Swagger documentation generator for Fastify
MIT License
889 stars 199 forks source link

referencing #/components/schema when they don't exist #780

Open mariusflorescu opened 6 months ago

mariusflorescu commented 6 months ago

Prerequisites

Issue

I'm using a TS to JSON schema generator that basically creates JSON files with definitions of various API responses. When running the script to generate the OpenAPI file, some reference #/components/schema/*, which doesn't exist since the schema is empty.

I don't know honestly if this is because of #675.

export const options: RouteShorthandOptions = {
  schema: {
    summary: "Some Summary",
    description: "Returns a list of items",
    params: GetItemsParamsSchema,
    response: {
      200: ItemListResponseSchema,
    },
  },
}

Where ItemListReponseSchema.json looks like this:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/ItemListResponse",
  "definitions": {
    "ItemListResponse": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Item"
      }
    },
    "Item": {
      "type": "object",
      "properties": {
        // some properties
      },
      "required": [
        // some required properties
      ],
      "additionalProperties": false
    }
  }
}

The generated openAPI spec file:

components:
  schemas: {}
# ... other things
 responses:
        "200":
          description: Default Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Item"
                definitions:
                  Item:
                    type: object
                    properties:
                      # some properties

The workaround I found is to manually add the components: {schema: {}}, but this is quite inconvenient.