Skip to content

[BUG] Diff command doesn't work when circular reference #2093

Description

@JoniJnm

Describe the bug.

The diff command doesn't work when there is a circular reference in the structure

Expected behavior

No error exit code + skip circular properties if can not be handled by diff

Screenshots

not needed

How to Reproduce

Create a valid openapi 3.1.0 file with a circular reference:

asyncapi: 3.1.0
info:
  title: Testing
  version: 1.0.0
channels:
  my_entity_created:
    messages:
      entity-created:
        payload:
          $ref: '#/components/schemas/entity-created'
operations:
  my_entity_created:
    action: send
    channel:
      $ref: '#/channels/my_entity_created'
components:
  schemas:
    filters:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/filters'
          - type: string
    entity-created:
      type: object
      properties:
        filters:
          type: array
          items:
            $ref: '#/components/schemas/filters'

Ensure it's valid:

$ docker run -it --rm -v "$(pwd):/asyncapi" "asyncapi/cli:6.0.0" validate /asyncapi/file.yaml
# ...

File /asyncapi/file.yaml is valid! File /asyncapi/file.yaml and referenced documents don't have governance issues.

Skipping submitting anonymous metrics due to the following error: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Object'
    |     property 'items' -> object with constructor 'Object'
    |     property 'anyOf' -> object with constructor 'Array'
    --- index 0 closes the circle

$ echo $?
0

Run diff:

$ docker run -it --rm -v "$(pwd):/asyncapi" "asyncapi/cli:6.0.0" diff --log-diagnostics /asyncapi/file.yaml /asyncapi/file.yaml
Diagnostics for /asyncapi/file.yaml:

File /asyncapi/file.yaml is valid! File /asyncapi/file.yaml and referenced documents don't have governance issues.

Diagnostics for /asyncapi/file.yaml:

File /asyncapi/file.yaml is valid! File /asyncapi/file.yaml and referenced documents don't have governance issues.

ValidationError: 

There is a ValidationError with no message.

Removing the circular ref, it works:

$ yq -i 'del(.components.schemas.filters.items.anyOf[0])' file.yaml
$ docker run -it --rm -v "$(pwd):/asyncapi" "asyncapi/cli:6.0.0" diff /asyncapi/file.yaml /asyncapi/file.yaml

changes: []

🖥️ Device Information [optional]

No response

👀 Have you checked for similar open issues?

  • I checked and didn't find similar issue

🏢 Have you read the Contributing Guidelines?

Are you willing to work on this issue ?

None

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    To Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions