@@ -8,11 +8,16 @@ const resolveExternal = require("./resolve-external");
88const bundle = require ( "./bundle" ) ;
99const dereference = require ( "./dereference" ) ;
1010const url = require ( "./util/url" ) ;
11+ const { GenericError, MissingPointerError, ResolverError, ParserError, isHandledError } = require ( "./util/errors" ) ;
1112const maybe = require ( "call-me-maybe" ) ;
1213const { ono } = require ( "ono" ) ;
1314
1415module . exports = $RefParser ;
1516module . exports . YAML = require ( "./util/yaml" ) ;
17+ module . exports . GenericError = GenericError ;
18+ module . exports . MissingPointerError = MissingPointerError ;
19+ module . exports . ResolverError = ResolverError ;
20+ module . exports . ParserError = ParserError ;
1621
1722/**
1823 * This class parses a JSON schema, builds a map of its JSON references and their resolved values,
@@ -38,6 +43,25 @@ function $RefParser () {
3843 this . $refs = new $Refs ( ) ;
3944}
4045
46+ /**
47+ * List of all errors
48+ * @type {Array<GenericError | ResolverError | ParserError | MissingPointerError> }
49+ */
50+ Object . defineProperty ( $RefParser . prototype , "errors" , {
51+ get ( ) {
52+ const errors = [ ] ;
53+
54+ for ( const $ref of Object . values ( this . $refs . _$refs ) ) {
55+ if ( $ref . errors ) {
56+ errors . push ( ...$ref . errors ) ;
57+ }
58+ }
59+
60+ return errors ;
61+ } ,
62+ enumerable : true ,
63+ } ) ;
64+
4165/**
4266 * Parses the given JSON schema.
4367 * This method does not resolve any JSON references.
@@ -119,8 +143,16 @@ $RefParser.prototype.parse = async function (path, schema, options, callback) {
119143 return maybe ( args . callback , Promise . resolve ( me . schema ) ) ;
120144 }
121145 }
122- catch ( e ) {
123- return maybe ( args . callback , Promise . reject ( e ) ) ;
146+ catch ( err ) {
147+ if ( args . options . failFast || ! isHandledError ( err ) ) {
148+ return maybe ( args . callback , Promise . reject ( err ) ) ;
149+ }
150+
151+ if ( this . $refs . _$refs [ url . stripHash ( args . path ) ] ) {
152+ this . $refs . _$refs [ url . stripHash ( args . path ) ] . addError ( err ) ;
153+ }
154+
155+ return maybe ( args . callback , Promise . resolve ( null ) ) ;
124156 }
125157} ;
126158
0 commit comments