@@ -20,7 +20,7 @@ function bundle (parser, options) {
20
20
21
21
// Build an inventory of all $ref pointers in the JSON Schema
22
22
var inventory = [ ] ;
23
- crawl ( parser , 'schema' , parser . $refs . _root$Ref . path + '#' , '#' , inventory , parser . $refs , options ) ;
23
+ crawl ( parser , 'schema' , parser . $refs . _root$Ref . path + '#' , '#' , inventory , parser . $refs , 0 , options ) ;
24
24
25
25
// Remap all $ref pointers
26
26
remap ( inventory ) ;
@@ -37,12 +37,12 @@ function bundle (parser, options) {
37
37
* @param {$Refs } $refs
38
38
* @param {$RefParserOptions } options
39
39
*/
40
- function crawl ( parent , key , path , pathFromRoot , inventory , $refs , options ) {
40
+ function crawl ( parent , key , path , pathFromRoot , inventory , $refs , seq , options ) {
41
41
var obj = key === null ? parent : parent [ key ] ;
42
42
43
43
if ( obj && typeof obj === 'object' ) {
44
44
if ( $Ref . isAllowed$Ref ( obj ) ) {
45
- inventory$Ref ( parent , key , path , pathFromRoot , inventory , $refs , options ) ;
45
+ inventory$Ref ( parent , key , path , pathFromRoot , inventory , $refs , seq ++ , options ) ;
46
46
}
47
47
else {
48
48
var keys = Object . keys ( obj ) ;
@@ -60,10 +60,10 @@ function crawl (parent, key, path, pathFromRoot, inventory, $refs, options) {
60
60
var value = obj [ key ] ;
61
61
62
62
if ( $Ref . isAllowed$Ref ( value ) ) {
63
- inventory$Ref ( obj , key , path , keyPathFromRoot , inventory , $refs , options ) ;
63
+ inventory$Ref ( obj , key , path , keyPathFromRoot , inventory , $refs , seq ++ , options ) ;
64
64
}
65
65
else {
66
- crawl ( obj , key , keyPath , keyPathFromRoot , inventory , $refs , options ) ;
66
+ crawl ( obj , key , keyPath , keyPathFromRoot , inventory , $refs , seq , options ) ;
67
67
}
68
68
} ) ;
69
69
}
@@ -82,7 +82,7 @@ function crawl (parent, key, path, pathFromRoot, inventory, $refs, options) {
82
82
* @param {$Refs } $refs
83
83
* @param {$RefParserOptions } options
84
84
*/
85
- function inventory$Ref ( $refParent , $refKey , path , pathFromRoot , inventory , $refs , options ) {
85
+ function inventory$Ref ( $refParent , $refKey , path , pathFromRoot , inventory , $refs , seq , options ) {
86
86
if ( inventory . some ( function ( i ) { return i . parent === $refParent && i . key === $refKey ; } ) ) {
87
87
// This $Ref has already been inventoried, so we don't need to process it again
88
88
return ;
@@ -108,11 +108,14 @@ function inventory$Ref ($refParent, $refKey, path, pathFromRoot, inventory, $ref
108
108
value : pointer . value , // The resolved value of the $ref pointer
109
109
circular : pointer . circular , // Is this $ref pointer DIRECTLY circular? (i.e. it references itself)
110
110
extended : extended , // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to "$ref")
111
- external : external // Does this $ref pointer point to a file other than the main JSON Schema file?
111
+ external : external , // Does this $ref pointer point to a file other than the main JSON Schema file?
112
+ seq : seq // Sequence number of this $ref
112
113
} ) ;
113
114
115
+ var refPathFromRoot = external ? pathFromRoot : $ref . $ref ;
116
+
114
117
// Recursively crawl the resolved value
115
- crawl ( pointer . value , null , pointer . path , pathFromRoot , inventory , $refs , options ) ;
118
+ crawl ( pointer . value , null , pointer . path , refPathFromRoot , inventory , $refs , seq , options ) ;
116
119
}
117
120
118
121
/**
@@ -157,8 +160,8 @@ function remap (inventory) {
157
160
return a . depth - b . depth ; // Sort $refs by how close they are to the JSON Schema root
158
161
}
159
162
else {
160
- // If all else is equal, use the $ref that's in the "definitions" property
161
- return b . pathFromRoot . lastIndexOf ( '/definitions' ) - a . pathFromRoot . lastIndexOf ( '/definitions' ) ;
163
+ // If all else is equal, use the $ref that's in the "definitions" property or sequence number
164
+ return b . pathFromRoot . lastIndexOf ( '/definitions' ) - a . pathFromRoot . lastIndexOf ( '/definitions' ) || a . seq - b . seq ;
162
165
}
163
166
} ) ;
164
167
0 commit comments