66 Source ,
77 type Document ,
88 lintDocument ,
9+ type NormalizedProblem ,
910} from "@redocly/openapi-core" ;
1011import { performance } from "node:perf_hooks" ;
1112import { Readable } from "node:stream" ;
@@ -81,6 +82,25 @@ export async function parseSchema(schema: unknown, { absoluteRef, resolver }: Pa
8182 throw new Error ( `Expected string, object, or Buffer. Got ${ Array . isArray ( schema ) ? "Array" : typeof schema } ` ) ;
8283}
8384
85+ function _processProblems ( problems : NormalizedProblem [ ] , options : { silent : boolean } ) {
86+ if ( problems . length ) {
87+ let errorMessage : string | undefined = undefined ;
88+ for ( const problem of problems ) {
89+ const problemLocation = problem . location ?. [ 0 ] . pointer ;
90+ const problemMessage = problemLocation ? `${ problem . message } at ${ problemLocation } ` : problem . message ;
91+ if ( problem . severity === "error" ) {
92+ errorMessage = problemMessage ;
93+ error ( problemMessage ) ;
94+ } else {
95+ warn ( problemMessage , options . silent ) ;
96+ }
97+ }
98+ if ( errorMessage ) {
99+ throw new Error ( errorMessage ) ;
100+ }
101+ }
102+ }
103+
84104/**
85105 * Validate an OpenAPI schema and flatten into a single schema using Redocly CLI
86106 */
@@ -127,20 +147,7 @@ export async function validateAndBundle(
127147 config : options . redoc . styleguide ,
128148 externalRefResolver : resolver ,
129149 } ) ;
130- if ( problems . length ) {
131- let errorMessage : string | undefined = undefined ;
132- for ( const problem of problems ) {
133- if ( problem . severity === "error" ) {
134- errorMessage = problem . message ;
135- error ( problem . message ) ;
136- } else {
137- warn ( problem . message , options . silent ) ;
138- }
139- }
140- if ( errorMessage ) {
141- throw new Error ( errorMessage ) ;
142- }
143- }
150+ _processProblems ( problems , options ) ;
144151 debug ( "Linted schema" , "lint" , performance . now ( ) - redocLintT ) ;
145152
146153 // 3. bundle
@@ -150,21 +157,7 @@ export async function validateAndBundle(
150157 dereference : false ,
151158 doc : document ,
152159 } ) ;
153- if ( bundled . problems . length ) {
154- let errorMessage : string | undefined = undefined ;
155- for ( const problem of bundled . problems ) {
156- if ( problem . severity === "error" ) {
157- errorMessage = problem . message ;
158- error ( problem . message ) ;
159- throw new Error ( problem . message ) ;
160- } else {
161- warn ( problem . message , options . silent ) ;
162- }
163- }
164- if ( errorMessage ) {
165- throw new Error ( errorMessage ) ;
166- }
167- }
160+ _processProblems ( bundled . problems , options ) ;
168161 debug ( "Bundled schema" , "bundle" , performance . now ( ) - redocBundleT ) ;
169162
170163 return bundled . bundle . parsed ;
0 commit comments