fix(parser): add throwOnError option to surface validation failures (#878)#1182
Open
Guciolek wants to merge 2 commits into
Open
fix(parser): add throwOnError option to surface validation failures (#878)#1182Guciolek wants to merge 2 commits into
Guciolek wants to merge 2 commits into
Conversation
…syncapi#878) When parsing an invalid AsyncAPI document, the parser used to silently return a result with 'document: undefined', which made it easy for callers to miss the failure (e.g. 'result.document()' would throw a confusing 'is not a function' error). This change adds a 'throwOnError' option to ParseOptions. When enabled, the parser throws a new 'AsyncAPIParseError' carrying the diagnostics and (when available) the resolved Spectral document whenever the input fails validation with at least one error-severity diagnostic. The default behavior is preserved (no throw) to keep this fully backward compatible. Refs: asyncapi#878
🦋 Changeset detectedLatest commit: 990fa1f The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
There was a problem hiding this comment.
Welcome to AsyncAPI. Thanks a lot for creating your first pull request. Please check out our contributors guide useful for opening a pull request.
Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out this issue.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Fixes #878 by adding an opt-in
throwOnErroroption toParser#parse()that surfaces validation failures as a typedAsyncAPIParseErrorinstead of silently returning a result withdocument: undefined.Problem
When the parser encounters an invalid AsyncAPI document, it currently returns:
This silent-failure mode is easy to miss — especially for the legacy
.document()accessor which throws a confusingis not a functionerror if you don't first null-check.The original report from #878:
Fix
Added
throwOnError?: booleantoParseOptions. Whentrueand the input produces at least one error-severity diagnostic, the parser throws a newAsyncAPIParseErrorthat carries:name—'AsyncAPIParseError'message— human-readable descriptiondiagnostics— the fullDiagnostic[]from validationdocument— the resolved SpectralDocument(when available) for advanced inspectionThe default is
false, so this is fully backward compatible.Usage
Tests
test/parse.spec.tscovering:throwOnError: falsepreservedthrowOnError: truethrowsAsyncAPIParseErroron invalid inputdiagnosticsNotes
document === undefinedfor invalid inputs and many downstream consumers rely on it.