@@ -66,47 +66,58 @@ const interpret = (url, instance, { ast, dynamicAnchors, errors, annotations, ou
6666 for ( const [ keywordId , schemaUri , keywordValue ] of ast [ url ] ) {
6767 const context = { ast, dynamicAnchors, errors : [ ] , annotations : [ ] , outputFormat } ;
6868 const keywordHandler = getKeyword ( keywordId ) ;
69- if ( ! keywordHandler . interpret ( keywordValue , instance , context ) ) {
69+ const isKeywordValid = keywordHandler . interpret ( keywordValue , instance , context ) ;
70+ if ( ! isKeywordValid ) {
7071 isSchemaValid = false ;
71- if ( outputFormat === FLAG ) {
72- continue ;
73- }
74-
75- const outputUnit = {
76- keyword : keywordId ,
77- absoluteKeywordLocation : schemaUri ,
78- instanceLocation : Instance . uri ( instance )
79- } ;
80-
81- if ( outputFormat !== BASIC || ! keywordHandler . simpleApplicator ) {
82- errors . push ( outputUnit ) ;
83- }
84-
85- if ( outputFormat === DETAILED && context . errors . length > 0 ) {
86- outputUnit . errors = context . errors ;
87- } else if ( outputFormat === BASIC ) {
88- errors . push ( ...context . errors ) ;
89- }
90- } else {
91- if ( outputFormat === FLAG ) {
92- continue ;
93- }
72+ }
9473
95- if ( keywordHandler . annotation ) {
96- const outputUnit = {
97- keyword : keywordId ,
98- absoluteKeywordLocation : schemaUri ,
99- instanceLocation : Instance . uri ( instance ) ,
100- annotation : keywordHandler . annotation ( keywordValue )
101- } ;
102- schemaAnnotations . push ( outputUnit ) ;
74+ switch ( outputFormat ) {
75+ case FLAG :
76+ break ;
77+ case BASIC :
78+ if ( ! isKeywordValid ) {
79+ if ( ! keywordHandler . simpleApplicator ) {
80+ errors . push ( {
81+ keyword : keywordId ,
82+ absoluteKeywordLocation : schemaUri ,
83+ instanceLocation : Instance . uri ( instance )
84+ } ) ;
85+ }
86+ errors . push ( ...context . errors ) ;
87+ } else {
88+ if ( keywordHandler . annotation ) {
89+ const outputUnit = {
90+ keyword : keywordId ,
91+ absoluteKeywordLocation : schemaUri ,
92+ instanceLocation : Instance . uri ( instance ) ,
93+ annotation : keywordHandler . annotation ( keywordValue )
94+ } ;
95+ schemaAnnotations . push ( outputUnit ) ;
96+ }
97+ schemaAnnotations . push ( ...context . annotations ) ;
98+ }
99+ break ;
100+ case DETAILED : {
101+ if ( ! isKeywordValid ) {
102+ const outputUnit = {
103+ keyword : keywordId ,
104+ absoluteKeywordLocation : schemaUri ,
105+ instanceLocation : Instance . uri ( instance )
106+ } ;
107+
108+ errors . push ( outputUnit ) ;
109+ if ( context . errors . length > 0 ) {
110+ outputUnit . errors = context . errors ;
111+ }
112+ }
113+ break ;
103114 }
104-
105- schemaAnnotations . push ( ... context . annotations ) ;
115+ default :
116+ throw Error ( `Unsupported output format ' ${ outputFormat } '` ) ;
106117 }
107118 }
108119
109- if ( isSchemaValid ) {
120+ if ( outputFormat === BASIC && isSchemaValid ) {
110121 annotations . push ( ...schemaAnnotations ) ;
111122 }
112123
0 commit comments