Description
Describe the bug
The OAS 3.1 spec states that the value of a discriminator mapping can be be a string that is the name of a component schema in the file:
The mapping entry maps a specific property value to either a different schema component name, or to a schema identified by a URI
And the spec provides examples like:
discriminator:
propertyName: petType
mapping:
dog: Dog
However when such a OAS schema is sent to the redocly cli linter or bundler it results in an error: "Can't resolve $ref"
To Reproduce
Pass this file to redocly lint
or redocly bundle
openapi: "3.1.0"
info:
title: pets
version: 1.0.0
license:
name: Apache 2.0
identifier: Apache-2.0
servers:
- url: http://not.real.com/pets.yaml
paths:
/get-pets:
get:
description: get pets
summary: get pets
operationId: get_pets
responses:
200:
description: ok
content:
application/json:
schema:
$ref: "#/components/schemas/Animals"
400:
description: not ok
components:
schemas:
Animals:
type: object
properties:
elements:
type: array
items:
oneOf:
- $ref: "#/components/schemas/Cat"
- $ref: "#/components/schemas/Dog"
discriminator:
propertyName: species
mapping:
dog: Dog
cat: Cat
Dog:
type: object
required:
- species
properties:
species:
type: string
const: dog
rating:
type: number
Cat:
type: object
required:
- species
properties:
species:
type: string
const: cat
tuxedo:
type: boolean
securitySchemes:
Bearer:
type: http
scheme: bearer
description: JWT auth0 token (without the word 'Bearer')
bearerFormat: JWT
security:
- Bearer: []
Expected behavior
The linter should not report errors.
Logs
OpenAPI description
Redocly Version(s)
1.28.0
Node.js
Version(s)
v20.18.1
OS, environment
Mac OS 14.7.2
Additional context
The linter and bundler can be made to pass by changing the file:
discriminator:
propertyName: species
mapping:
dog: "#/components/schemas/Dog"
cat: "#/components/schemas/Cat"
Activity