Skip to content

fix: resolve JSON Schema $ref URIs against $id base URIs#1135

Open
Shyam-Raghuwanshi wants to merge 1 commit into
asyncapi:masterfrom
Shyam-Raghuwanshi:fix/json-schema-id-ref-resolution-403
Open

fix: resolve JSON Schema $ref URIs against $id base URIs#1135
Shyam-Raghuwanshi wants to merge 1 commit into
asyncapi:masterfrom
Shyam-Raghuwanshi:fix/json-schema-id-ref-resolution-403

Conversation

@Shyam-Raghuwanshi

Copy link
Copy Markdown

Description

Per JSON Schema draft-07 (Section 8.2), the $id keyword defines a base URI
that other URI references within the schema are resolved against. The
underlying Spectral resolver (@stoplight/json-ref-resolver) does not follow
this specification behavior.

This commit adds a pre-processing step that walks the parsed document before
Spectral resolution, tracking $id base URIs, and rewrites relative $ref
values to resolve against the correct $id base URI using RFC 3986 semantics.

  • Add resolve-json-schema-id-uri.ts module for $id-based $ref rewriting
  • Integrate pre-processing into validate.ts (in-place mutation to preserve
    YAML source ranges for diagnostics)
  • Add 15 comprehensive unit tests covering basic resolution, nested $id,
    arrays, edge cases, and AsyncAPI v2/v3 document structures

Closes #403

@changeset-bot

changeset-bot Bot commented Feb 22, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 98c9224

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

This pull request has been automatically marked as stale because it has not had recent activity 😴

It will be closed in 120 days if no further activity occurs. To unstale this pull request, add a comment with detailed explanation.

There can be many reasons why some specific pull request has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

Let us figure out together how to push this pull request forward. Connect with us through one of many communication channels we established here.

Thank you for your patience ❤️

@github-actions github-actions Bot added the stale label Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JSON Schema references do not follow $id dereference behavior

1 participant