File tree 2 files changed +65
-1
lines changed
2 files changed +65
-1
lines changed Original file line number Diff line number Diff line change @@ -157,6 +157,7 @@ export default class Dereferencer {
157
157
const refProm = referenceResolver . resolve ( ref , this . options . rootSchema ) ;
158
158
proms . push ( refProm ) ;
159
159
fetched = await refProm as JSONSchema ;
160
+ this . refCache [ ref ] = fetched
160
161
}
161
162
162
163
if ( this . options . recursive === true && fetched !== true && fetched !== false && ref !== "#" ) {
Original file line number Diff line number Diff line change 1
- import { inspect } from 'util' ;
2
1
import Dereferencer , { NonStringRefError } from "./index" ;
3
2
import { Properties , JSONSchemaObject , JSONSchema } from "@json-schema-tools/meta-schema" ;
4
3
@@ -169,6 +168,70 @@ describe("Dereferencer", () => {
169
168
expect ( oneOfs [ 0 ] . properties . contains ) . toBe ( dereffed ) ;
170
169
} ) ;
171
170
171
+ it ( "does not get stuck on a recursive " , async ( ) => {
172
+ expect . assertions ( 1 ) ;
173
+ const dereferencer = new Dereferencer ( {
174
+ definitions : {
175
+ node : {
176
+ type : "object" ,
177
+ properties : {
178
+ name : {
179
+ type : "string"
180
+ } ,
181
+ children : {
182
+ type : "array" ,
183
+ items : {
184
+ $ref : "#/definitions/node"
185
+ }
186
+ }
187
+ }
188
+ }
189
+ } ,
190
+ type : "object" ,
191
+ properties : {
192
+ tree : {
193
+ title : "Recursive references" ,
194
+ $ref : "#/definitions/node"
195
+ }
196
+ }
197
+ } ) ;
198
+
199
+ const dereffed = await dereferencer . resolve ( ) ;
200
+
201
+
202
+ const recursiveChildren = {
203
+ type : 'array' ,
204
+ items : {
205
+ type : 'object' ,
206
+ properties : {
207
+ name : {
208
+ type : 'string'
209
+ } ,
210
+ children : { }
211
+ }
212
+ } ,
213
+ } ;
214
+ recursiveChildren . items . properties . children = recursiveChildren
215
+
216
+ const expected = {
217
+ type : "object" ,
218
+ properties : {
219
+ tree : {
220
+ title : "Recursive references" ,
221
+ type : "object" ,
222
+ properties : {
223
+ name : {
224
+ type : 'string'
225
+ } ,
226
+ children : recursiveChildren
227
+ }
228
+ } ,
229
+ }
230
+ }
231
+
232
+ expect ( dereffed ) . toStrictEqual ( expected ) ;
233
+ } ) ;
234
+
172
235
it ( "can deal with root refs-to-ref as url, metaschema on master" , async ( ) => {
173
236
expect . assertions ( 8 ) ;
174
237
const dereferencer = new Dereferencer ( {
You can’t perform that action at this time.
0 commit comments