@@ -38,6 +38,7 @@ describe('SchemaTree', () => {
3838 expandedDepth : 0 ,
3939 mergeAllOf : false ,
4040 resolveRef : void 0 ,
41+ shouldResolveEagerly : false ,
4142 } ) ;
4243
4344 tree . populate ( ) ;
@@ -139,6 +140,7 @@ describe('SchemaTree', () => {
139140 expandedDepth : 0 ,
140141 mergeAllOf : false ,
141142 resolveRef : void 0 ,
143+ shouldResolveEagerly : false ,
142144 } ) ;
143145
144146 tree . populate ( ) ;
@@ -184,6 +186,7 @@ describe('SchemaTree', () => {
184186 expandedDepth : 0 ,
185187 mergeAllOf : false ,
186188 resolveRef : void 0 ,
189+ shouldResolveEagerly : false ,
187190 } ) ;
188191
189192 tree . populate ( ) ;
@@ -199,6 +202,7 @@ describe('SchemaTree', () => {
199202 resolveRef ( ) {
200203 throw new ResolvingError ( 'Seems like you do not want this to be empty.' ) ;
201204 } ,
205+ shouldResolveEagerly : false ,
202206 } ) ;
203207
204208 tree . populate ( ) ;
@@ -236,6 +240,7 @@ describe('SchemaTree', () => {
236240 expandedDepth : 0 ,
237241 mergeAllOf : false ,
238242 resolveRef : void 0 ,
243+ shouldResolveEagerly : false ,
239244 } ) ;
240245
241246 tree . populate ( ) ;
@@ -264,6 +269,7 @@ describe('SchemaTree', () => {
264269
265270 throw new ResolvingError ( `Pointer "${ pointer } " is missing` ) ;
266271 } ,
272+ shouldResolveEagerly : false ,
267273 } ) ;
268274
269275 tree . populate ( ) ;
@@ -320,6 +326,7 @@ describe('SchemaTree', () => {
320326 expandedDepth : Infinity ,
321327 mergeAllOf : true ,
322328 resolveRef : void 0 ,
329+ shouldResolveEagerly : false ,
323330 } ) ;
324331
325332 tree . populate ( ) ;
@@ -401,6 +408,7 @@ describe('SchemaTree', () => {
401408 expandedDepth : Infinity ,
402409 mergeAllOf : true ,
403410 resolveRef : void 0 ,
411+ shouldResolveEagerly : false ,
404412 } ) ;
405413
406414 tree . populate ( ) ;
@@ -471,6 +479,7 @@ describe('SchemaTree', () => {
471479 expandedDepth : Infinity ,
472480 mergeAllOf : true ,
473481 resolveRef : void 0 ,
482+ shouldResolveEagerly : false ,
474483 } ) ;
475484
476485 expect ( tree . populate . bind ( tree ) ) . not . toThrow ( ) ;
@@ -546,6 +555,7 @@ describe('SchemaTree', () => {
546555 expandedDepth : Infinity ,
547556 mergeAllOf : true ,
548557 resolveRef : void 0 ,
558+ shouldResolveEagerly : false ,
549559 } ) ;
550560
551561 expect ( tree . populate . bind ( tree ) ) . not . toThrow ( ) ;
@@ -643,6 +653,7 @@ describe('SchemaTree', () => {
643653 expandedDepth : Infinity ,
644654 mergeAllOf : true ,
645655 resolveRef : void 0 ,
656+ shouldResolveEagerly : false ,
646657 } ) ;
647658
648659 expect ( tree . populate . bind ( tree ) ) . not . toThrow ( ) ;
@@ -751,6 +762,7 @@ describe('SchemaTree', () => {
751762 expandedDepth : Infinity ,
752763 mergeAllOf : true ,
753764 resolveRef : void 0 ,
765+ shouldResolveEagerly : false ,
754766 } ) ;
755767
756768 expect ( tree . populate . bind ( tree ) ) . not . toThrow ( ) ;
@@ -808,6 +820,7 @@ describe('SchemaTree', () => {
808820 expandedDepth : Infinity ,
809821 mergeAllOf : false ,
810822 resolveRef : void 0 ,
823+ shouldResolveEagerly : false ,
811824 } ) ;
812825 } ) ;
813826
@@ -862,4 +875,121 @@ describe('SchemaTree', () => {
862875 ] ) ;
863876 } ) ;
864877 } ) ;
878+
879+ describe ( 'eager $ref resolving' , ( ) => {
880+ test ( 'given a plain object with properties, should resolve' , ( ) => {
881+ const schema : JSONSchema4 = {
882+ type : 'object' ,
883+ properties : {
884+ foo : {
885+ $ref : '#/properties/bar' ,
886+ } ,
887+ bar : {
888+ type : 'boolean' ,
889+ } ,
890+ } ,
891+ } ;
892+
893+ const tree = new SchemaTree ( schema , new SchemaTreeState ( ) , {
894+ expandedDepth : Infinity ,
895+ mergeAllOf : true ,
896+ resolveRef : void 0 ,
897+ shouldResolveEagerly : true ,
898+ } ) ;
899+
900+ tree . populate ( ) ;
901+ expect ( printTree ( tree ) ) . toMatchInlineSnapshot ( `
902+ "└─ #
903+ ├─ type: object
904+ └─ children
905+ ├─ 0
906+ │ └─ #/properties/foo
907+ │ └─ type: boolean
908+ └─ 1
909+ └─ #/properties/bar
910+ └─ type: boolean
911+ "
912+ ` ) ;
913+ } ) ;
914+
915+ test ( 'given an array with $reffed items, should resolve' , ( ) => {
916+ const schema : JSONSchema4 = {
917+ type : 'object' ,
918+ properties : {
919+ foo : {
920+ type : 'array' ,
921+ items : {
922+ $ref : '#/properties/bar' ,
923+ } ,
924+ } ,
925+ bar : {
926+ type : 'boolean' ,
927+ } ,
928+ } ,
929+ } ;
930+
931+ const tree = new SchemaTree ( schema , new SchemaTreeState ( ) , {
932+ expandedDepth : Infinity ,
933+ mergeAllOf : true ,
934+ resolveRef : void 0 ,
935+ shouldResolveEagerly : true ,
936+ } ) ;
937+
938+ tree . populate ( ) ;
939+ expect ( printTree ( tree ) ) . toMatchInlineSnapshot ( `
940+ "└─ #
941+ ├─ type: object
942+ └─ children
943+ ├─ 0
944+ │ └─ #/properties/foo
945+ │ ├─ type: array
946+ │ └─ subtype: boolean
947+ └─ 1
948+ └─ #/properties/bar
949+ └─ type: boolean
950+ "
951+ ` ) ;
952+ } ) ;
953+
954+ test ( 'should leave broken $refs' , ( ) => {
955+ const schema : JSONSchema4 = {
956+ type : 'object' ,
957+ properties : {
958+ foo : {
959+ type : 'array' ,
960+ items : {
961+ $ref : '#/properties/baz' ,
962+ } ,
963+ } ,
964+ bar : {
965+ $ref : '#/properties/bazinga' ,
966+ } ,
967+ } ,
968+ } ;
969+
970+ const tree = new SchemaTree ( schema , new SchemaTreeState ( ) , {
971+ expandedDepth : Infinity ,
972+ mergeAllOf : true ,
973+ resolveRef : void 0 ,
974+ shouldResolveEagerly : true ,
975+ } ) ;
976+
977+ tree . populate ( ) ;
978+ expect ( printTree ( tree ) ) . toMatchInlineSnapshot ( `
979+ "└─ #
980+ ├─ type: object
981+ └─ children
982+ ├─ 0
983+ │ └─ #/properties/foo
984+ │ ├─ type: array
985+ │ ├─ subtype: $ref[#/properties/baz]
986+ │ └─ children
987+ └─ 1
988+ └─ #/properties/bar
989+ ├─ $ref: #/properties/bazinga
990+ └─ children
991+ "
992+ ` ) ;
993+ } ) ;
994+ } ) ;
865995} ) ;
0 commit comments