Do you have $ref's ?
A simple way for solving $ref
values:
var deref = require('deref');
Schema dereferencing
$ = deref();
var a = {
id: 'a',
type: 'object',
properties: {
b: {
$ref: 'b'
}
}
};
var b = {
id: 'b',
type: 'string'
};
var c = {
id: 'c',
type: 'array',
items: {
$ref: 'a'
}
};
console.log($(c, [b, a]).id);
console.log($(c, [b, a], true).items.properties.b.type);
Schema normalization
var schema = {
id: 'http://x.y.z/rootschema.json#',
schema1: {
id: '#foo'
},
schema2: {
id: 'otherschema.json',
nested: {
id: '#bar'
},
alsonested: {
id: 't/inner.json#a'
}
},
schema3: {
id: 'some://where.else/completely#'
}
};
console.log(deref.util.normalizeSchema(schema).schema2.nested.id);
Schema identity
Since 0.3.0
the schema id
will always be normalized internally to #
when it's not provided.
This way the passed schema can be self-referenced using $ref
's which is the expected behavior.
I know the id
keyword is not required but while #/
is a self-reference we can assume #
as the schema-id.
deref
use that id
for store and find $ref
's, even self-references.
Without it is complex determine what to resolve. :beers:
Basic usage
The resulting function of calling deref()
can accept three arguments:
-
fakeroot (string)
Used on missing $schema
values for resolve into fully qualified URIs.
console.log($('http://example.com', { id: '#foo' }).id);
If missing will use http://json-schema.org/schema
.
-
schema (object)
The JSON-Schema object for dereferencing.
-
refs (array)
Any additional schemas used while dereferencing.
Since 0.2.4
passing an object is not longer supported.
-
ex (boolean)
Whether do full dereferencing or not, false
by default.
Since 0.6.0
all inner references are not dereferenced by default.
All other references are always dereferenced regardless the value of ex
.
Examples
$('http://example.com', schema, true);
$(schema, refs, true);
$(schema, true);
Utilities
Aside the basics of $
, this function will include:
Any refs
passed MUST be an object of normalized schemas.
Note that calling $(schema)
will not read/download any local/remote files.