diff --git a/library/package.json b/library/package.json index f54e7a9db..cb6227d68 100644 --- a/library/package.json +++ b/library/package.json @@ -1,6 +1,6 @@ { "name": "@asyncapi/react-component", - "version": "2.2.5", + "version": "2.3.3", "private": false, "description": "A React component for AsyncAPI specification.", "repository": { diff --git a/library/src/components/Bindings.tsx b/library/src/components/Bindings.tsx index f40deb37f..a6c8fcc39 100644 --- a/library/src/components/Bindings.tsx +++ b/library/src/components/Bindings.tsx @@ -25,9 +25,9 @@ export const Bindings: React.FunctionComponent = ({ const schemaName = (
{name} - + {protocol} - +
); return ( diff --git a/library/src/components/Schema.tsx b/library/src/components/Schema.tsx index 0ccb5bb0d..61dd88ac8 100644 --- a/library/src/components/Schema.tsx +++ b/library/src/components/Schema.tsx @@ -160,37 +160,37 @@ export const Schema: React.FunctionComponent = ({
{schema.format() && ( - + format: {schema.format()} - + )} {/* related to string */} {schema.pattern() !== undefined && ( - + must match: {schema.pattern()} - + )} {schema.contentMediaType() !== undefined && ( - + media type: {schema.contentMediaType()} - + )} {schema.contentEncoding() !== undefined && ( - + encoding: {schema.contentEncoding()} - + )} {/* constraints */} {!!constraints.length && constraints.map((c) => ( - {c} - + ))} {uid && !uid.startsWith(' = ({
)} {externalDocs && ( - + Documentation - + )} {schema.examples() && ( diff --git a/library/src/containers/Messages/Message.tsx b/library/src/containers/Messages/Message.tsx index 4d5c5fbf3..2b30b435b 100644 --- a/library/src/containers/Messages/Message.tsx +++ b/library/src/containers/Messages/Message.tsx @@ -55,12 +55,9 @@ export const Message: React.FunctionComponent = ({
{index !== undefined && ( - #{index} + #{index} )} {title && {title}} - - {messageId} -
{summary &&

{summary}

} diff --git a/library/src/containers/Operations/Operation.tsx b/library/src/containers/Operations/Operation.tsx index 26dc958d7..af98dd6c7 100644 --- a/library/src/containers/Operations/Operation.tsx +++ b/library/src/containers/Operations/Operation.tsx @@ -262,7 +262,7 @@ export const OperationReplyInfo: React.FunctionComponent = (props) => { : 'bg-blue-600 border-blue-600' } text-sm rounded-t h-8 px-4 border text-white flex items-center`} > - REPLY INFORMATION + REPLY INFORMATION
= ({
{securityProtocol && (
- + security.protocol: - - + + {securityProtocol} - +
)} {saslMechanism && (
- + sasl.mechanism: - - + + {saslMechanism} - +
)}
@@ -179,19 +179,19 @@ const SecurityItem: React.FunctionComponent = ({ key={flowName} >
- + Flow: - - + + {ServerHelpers.flowName(flowName)} - +
{authorizationUrl && (
- + Auth URL: - + {authorizationUrl} @@ -199,9 +199,9 @@ const SecurityItem: React.FunctionComponent = ({ )} {tokenUrl && (
- + Token URL: - + {tokenUrl} @@ -209,9 +209,9 @@ const SecurityItem: React.FunctionComponent = ({ )} {refreshUrl && (
- + Refresh URL: - + {refreshUrl} @@ -219,9 +219,9 @@ const SecurityItem: React.FunctionComponent = ({ )} {scopes && (
- + Scopes: - +
    {scopes && Object.entries(scopes).map(([scopeName, scopeDesc]) => ( diff --git a/library/src/containers/Servers/Server.tsx b/library/src/containers/Servers/Server.tsx index 560444ee1..233efdf9c 100644 --- a/library/src/containers/Servers/Server.tsx +++ b/library/src/containers/Servers/Server.tsx @@ -34,14 +34,14 @@ export const Server: React.FunctionComponent = ({
    {server.url()} - + {protocolVersion ? `${server.protocol()} ${protocolVersion}` : server.protocol()} - - + + {serverName} - +
    {server.hasDescription() && ( diff --git a/library/src/containers/Sidebar/Sidebar.tsx b/library/src/containers/Sidebar/Sidebar.tsx index a834a2b40..fe313624e 100644 --- a/library/src/containers/Sidebar/Sidebar.tsx +++ b/library/src/containers/Sidebar/Sidebar.tsx @@ -356,12 +356,12 @@ const OperationItem: React.FunctionComponent = ({ href={`#${operationHrefId}`} onClick={() => setShowSidebar(false)} > - {typeLabel} - + {label} diff --git a/library/src/containers/Sidebar/__tests__/SideBar.test.tsx b/library/src/containers/Sidebar/__tests__/SideBar.test.tsx index 4701a0006..6568f57e7 100644 --- a/library/src/containers/Sidebar/__tests__/SideBar.test.tsx +++ b/library/src/containers/Sidebar/__tests__/SideBar.test.tsx @@ -121,10 +121,10 @@ describe('Sidebar component', () => { 'smartylighting.streetlights.1.0.action.{streetlightId}.dim', ]; for (let i = 0; i < operations.length; i++) { + const description = operations[i].querySelector('span'); + // eslint-disable-next-line jest/no-standalone-expect - expect(operations[i].querySelectorAll('span')[1].textContent).toBe( - expectedOperationDescriptions[i], - ); + expect(description?.textContent).toBe(expectedOperationDescriptions[i]); } }); }); diff --git a/library/src/helpers/parser.ts b/library/src/helpers/parser.ts index 0ecb3cc28..83da10b6b 100644 --- a/library/src/helpers/parser.ts +++ b/library/src/helpers/parser.ts @@ -1,4 +1,9 @@ -import { Parser as AsyncapiParser, fromURL } from '@asyncapi/parser'; +import { + Parser as AsyncapiParser, + Diagnostic, + DiagnosticSeverity, + fromURL, +} from '@asyncapi/parser'; import { OpenAPISchemaParser } from '@asyncapi/openapi-schema-parser'; import { ProtoBuffSchemaParser } from '@asyncapi/protobuf-schema-parser'; import { AvroSchemaParser } from '@asyncapi/avro-schema-parser'; @@ -26,41 +31,18 @@ export class Parser { parserOptions?: any, ): Promise { try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const parseResult = await asyncapiParser.parse(content, parserOptions); - - const error: { - title: string | undefined; - validationErrors: ValidationError[] | undefined; - } = { - title: 'There are errors in your Asyncapi document', - validationErrors: [], - }; + const { document, diagnostics } = await asyncapiParser.parse( + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + content, + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + parserOptions, + ); - if (parseResult.document === undefined) { - parseResult.diagnostics.forEach((diagnostic) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison - if (diagnostic.severity == 0) { - const tempObj: ValidationError = { - title: diagnostic.message, - location: { - jsonPointer: '/' + diagnostic.path.join('/'), - startLine: diagnostic.range.start.line, - startColumn: diagnostic.range.start.character, - // as of @asyncapi/parser 3.3.0 offset of 1 correctly shows the error line - startOffset: 1, - endLine: diagnostic.range.end.line, - endColumn: diagnostic.range.end.character, - endOffset: 0, - }, - }; - error.validationErrors?.push(tempObj); - } - }); - throw error; + if (document === undefined) { + throw this.convertDiagnosticToErrorObject(diagnostics, [0]); } - return { asyncapi: parseResult.document }; + return { asyncapi: document }; } catch (err) { return this.handleError(err as ErrorObject); } @@ -79,13 +61,51 @@ export class Parser { arg.requestOptions as any, ); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const { document } = await fromResult.parse(parserOptions); - return { asyncapi: document }; + const { document, diagnostics } = await fromResult.parse(parserOptions); + + if (document == undefined) { + // this means there are errors in the document. + // so we gather all the severity 0 diagnostics and throw them as errors + throw this.convertDiagnosticToErrorObject(diagnostics, [0]); + } + + return { asyncapi: document, error: undefined }; } catch (err) { return this.handleError(err as ErrorObject); } } + static readonly convertDiagnosticToErrorObject = ( + diagnostics: Diagnostic[], + severities: DiagnosticSeverity[], + ): ErrorObject => { + const error: ErrorObject = { + title: 'There are errors in your Asyncapi document', + type: 'VALIDATION_ERRORS_TYPE', + validationErrors: [], + }; + diagnostics.forEach((diagnostic) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison + if (severities.includes(diagnostic.severity)) { + const tempObj: ValidationError = { + title: diagnostic.message, + location: { + jsonPointer: '/' + diagnostic.path.join('/'), + startLine: diagnostic.range.start.line, + startColumn: diagnostic.range.start.character, + // as of @asyncapi/parser 3.3.0 offset of 1 correctly shows the error line + startOffset: 1, + endLine: diagnostic.range.end.line, + endColumn: diagnostic.range.end.character, + endOffset: 0, + }, + }; + error.validationErrors?.push(tempObj); + } + }); + return error; + }; + private static handleError = (err: ErrorObject): ParserReturn => { if (err.type === VALIDATION_ERRORS_TYPE) { return { diff --git a/package-lock.json b/package-lock.json index 408108221..a974ab968 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ }, "library": { "name": "@asyncapi/react-component", - "version": "2.2.5", + "version": "2.3.3", "license": "Apache-2.0", "dependencies": { "@asyncapi/avro-schema-parser": "^3.0.24", @@ -27671,10 +27671,10 @@ }, "web-component": { "name": "@asyncapi/web-component", - "version": "2.2.5", + "version": "2.3.3", "license": "Apache-2.0", "dependencies": { - "@asyncapi/react-component": "^2.2.5", + "@asyncapi/react-component": "^2.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "web-react-components": "^1.4.2" diff --git a/playground/specs/dummy.ts b/playground/specs/dummy.ts index 8a9774466..e5e748efa 100644 --- a/playground/specs/dummy.ts +++ b/playground/specs/dummy.ts @@ -58,7 +58,7 @@ servers: - '5672' security: - user-password: [] - dommy-kafka: + dummy-kafka: url: http://localhost:{port} protocol: kafka description: dummy Kafka broker diff --git a/web-component/package.json b/web-component/package.json index 6d40ded27..cfd89549e 100644 --- a/web-component/package.json +++ b/web-component/package.json @@ -1,6 +1,6 @@ { "name": "@asyncapi/web-component", - "version": "2.2.5", + "version": "2.3.3", "private": false, "description": "A web component for AsyncAPI specification. Based on @asyncapi/react-component.", "repository": { @@ -44,7 +44,7 @@ "install:reactcomp": "chmod +x ./bump-react-comp.sh && ./bump-react-comp.sh" }, "dependencies": { - "@asyncapi/react-component": "^2.2.5", + "@asyncapi/react-component": "^2.3.3", "react": "^18.2.0", "react-dom": "^18.2.0", "web-react-components": "^1.4.2"