src/int/references.js
"use strict";
function defaultLoader() {
throw new Error("Remote refs are not supported for now :(");
}
function detilde(s) {
return s.replace(/~0/g, "~").replace(/~1/g, "/"); //do not know how to parse it other way
}
function resolveRef(loader, schemaNode, ref) {
var remLoc = decodeURI(ref).split("#"), rem = remLoc[0], loc = remLoc[1].split("/").map(detilde), st = schemaNode, i;
if (rem !== '') {
st = (loader || defaultLoader)(rem);
}
for (i = 0; i < loc.length; i = i + 1) {
if (loc[i] === '') {
//noinspection JSLint
continue;
}
st = st[loc[i]];
if (st === undefined) {
throw new Error("Cannot find ref '" + ref + "' in schema");
}
}
return st;
}
module.exports = resolveRef;