Skip to content

fix: pass file source path to generator for proper $ref resolution#2046

Open
shengxinzhe wants to merge 1 commit intoasyncapi:masterfrom
shengxinzhe:fix/generator-ref-resolution
Open

fix: pass file source path to generator for proper $ref resolution#2046
shengxinzhe wants to merge 1 commit intoasyncapi:masterfrom
shengxinzhe:fix/generator-ref-resolution

Conversation

@shengxinzhe
Copy link

Summary

Fixes #1839

Since v3.3.0 (commit c944268), the GeneratorService.generate() method passes the entire Specification object as the path option to generateFromString(), instead of the file path string. This causes the @asyncapi/generator to fail when resolving relative $ref references to external files in the same directory.

Before (broken):

path: asyncapi,  // Specification object — not a valid path

After (fixed):

path: asyncapi.getSource(),  // file path or URL string

This is consistent with how ValidationService already handles the same scenario (commit 0a8406d fixed it there but the generator was missed).

How to test

  1. Create an AsyncAPI document in a subdirectory (e.g., src/contract/asyncapi.yaml) that references external files in the same directory via $ref:
    $ref: "other-file.yaml#/components/schemas/MySchema"
  2. Run asyncapi generate fromTemplate src/contract/asyncapi.yaml @asyncapi/html-template
  3. Verify that external $ref references are resolved correctly

…syncapi#1839)

Since v3.3.0, the generator.service.ts was passing the entire
Specification object as the `path` option to generateFromString()
instead of the file path string. This caused the @asyncapi/generator
to fail when resolving relative $ref references to external files
in the same directory.

Fix by using asyncapi.getSource() which returns the file path or
URL string, consistent with how validation.service.ts already
handles this.
@changeset-bot
Copy link

changeset-bot bot commented Mar 17, 2026

🦋 Changeset detected

Latest commit: 271f7e2

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@asyncapi/cli Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: To Triage

Development

Successfully merging this pull request may close these issues.

[BUG] external files in same directory are not resolved via $ref anymore, since v3.3.0

1 participant