Skip to content

Commit 07db6f0

Browse files
Refactored PR #45 to pass all tests and be backward-compatible. This is a stop-gap fix for Issue #42.
1 parent 5f4ca4f commit 07db6f0

File tree

5 files changed

+26
-3
lines changed

5 files changed

+26
-3
lines changed

lib/bundle.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ function crawl(parent, key, path, pathFromRoot, inventory, $refs, options) {
4747
var obj = key === null ? parent : parent[key];
4848

4949
if (obj && typeof obj === 'object') {
50-
if ($Ref.is$Ref(obj)) {
50+
if ($Ref.isAllowed$Ref(obj)) {
5151
inventory$Ref(parent, key, path, pathFromRoot, inventory, $refs, options);
5252
}
5353
else {
@@ -65,7 +65,7 @@ function crawl(parent, key, path, pathFromRoot, inventory, $refs, options) {
6565
var keyPathFromRoot = Pointer.join(pathFromRoot, key);
6666
var value = obj[key];
6767

68-
if ($Ref.is$Ref(value)) {
68+
if ($Ref.isAllowed$Ref(value)) {
6969
inventory$Ref(obj, key, path, keyPathFromRoot, inventory, $refs, options);
7070
}
7171
else {

lib/ref.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,12 @@ $Ref.isExternal$Ref = function(value) {
124124
*/
125125
$Ref.isAllowed$Ref = function(value, options) {
126126
if ($Ref.is$Ref(value)) {
127-
if (value.$ref[0] === '#' && value.$ref[1] === '/' || !options || options.resolve.external && value.$ref[0] !== '#') {
127+
if (value.$ref.substr(0, 2) === '#/' || value.$ref === '#') {
128+
// It's a JSON Pointer reference, which is always allowed
129+
return true;
130+
}
131+
else if (value.$ref[0] !== '#' && (!options || options.resolve.external)) {
132+
// It's an external reference, which is allowed by the options
128133
return true;
129134
}
130135
}

test/specs/internal/internal.bundled.js

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
helper.bundled.internal =
22
{
33
"definitions": {
4+
"fragment": {
5+
"$id": "#fragment"
6+
},
47
"requiredString": {
58
"title": "requiredString",
69
"minLength": 1,
@@ -44,6 +47,9 @@ helper.bundled.internal =
4447
],
4548
"type": "object",
4649
"properties": {
50+
"fragment": {
51+
"$ref": "#fragment"
52+
},
4753
"gender": {
4854
"enum": [
4955
"male",

test/specs/internal/internal.dereferenced.js

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
helper.dereferenced.internal =
22
{
33
"definitions": {
4+
"fragment": {
5+
"$id": "#fragment"
6+
},
47
"requiredString": {
58
"title": "requiredString",
69
"minLength": 1,
@@ -46,6 +49,9 @@ helper.dereferenced.internal =
4649
],
4750
"type": "object",
4851
"properties": {
52+
"fragment": {
53+
"$ref": "#fragment"
54+
},
4955
"gender": {
5056
"enum": [
5157
"male",

test/specs/internal/internal.parsed.js

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
helper.parsed.internal =
22
{
33
"definitions": {
4+
"fragment": {
5+
"$id": "#fragment"
6+
},
47
"requiredString": {
58
"title": "requiredString",
69
"minLength": 1,
@@ -44,6 +47,9 @@ helper.parsed.internal =
4447
],
4548
"type": "object",
4649
"properties": {
50+
"fragment": {
51+
"$ref": "#fragment"
52+
},
4753
"gender": {
4854
"enum": [
4955
"male",

0 commit comments

Comments
 (0)