6
6
Source ,
7
7
type Document ,
8
8
lintDocument ,
9
+ type NormalizedProblem ,
9
10
} from "@redocly/openapi-core" ;
10
11
import { performance } from "node:perf_hooks" ;
11
12
import { Readable } from "node:stream" ;
@@ -81,6 +82,25 @@ export async function parseSchema(schema: unknown, { absoluteRef, resolver }: Pa
81
82
throw new Error ( `Expected string, object, or Buffer. Got ${ Array . isArray ( schema ) ? "Array" : typeof schema } ` ) ;
82
83
}
83
84
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
+
84
104
/**
85
105
* Validate an OpenAPI schema and flatten into a single schema using Redocly CLI
86
106
*/
@@ -127,20 +147,7 @@ export async function validateAndBundle(
127
147
config : options . redoc . styleguide ,
128
148
externalRefResolver : resolver ,
129
149
} ) ;
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 ) ;
144
151
debug ( "Linted schema" , "lint" , performance . now ( ) - redocLintT ) ;
145
152
146
153
// 3. bundle
@@ -150,21 +157,7 @@ export async function validateAndBundle(
150
157
dereference : false ,
151
158
doc : document ,
152
159
} ) ;
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 ) ;
168
161
debug ( "Bundled schema" , "bundle" , performance . now ( ) - redocBundleT ) ;
169
162
170
163
return bundled . bundle . parsed ;
0 commit comments