Add JSON pointer support to $data reference.
parent
eac77bf565
commit
53e9971edd
|
@ -214,20 +214,33 @@ function getPath(currentPath, prop, jsonPointers) {
|
|||
}
|
||||
|
||||
|
||||
var JSON_POINTER = /^#|\/(?:[^~]|~0|~1)*?$/;
|
||||
var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
|
||||
function getData($data, lvl, paths) {
|
||||
var matches = $data.match(RELATIVE_JSON_POINTER);
|
||||
if (!matches) throw new Error('Invalid relative JSON-pointer: ' + $data);
|
||||
var up = +matches[1];
|
||||
var jsonPointer = matches[2];
|
||||
if (jsonPointer == '#') {
|
||||
if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);
|
||||
return paths[lvl - up];
|
||||
var up;
|
||||
var jsonPointer;
|
||||
var data;
|
||||
var matches;
|
||||
if ($data.charAt(0) == '/') {
|
||||
matches = $data.match(JSON_POINTER);
|
||||
if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);
|
||||
jsonPointer = matches[0];
|
||||
data = 'data';
|
||||
}
|
||||
else {
|
||||
matches = $data.match(RELATIVE_JSON_POINTER);
|
||||
if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);
|
||||
up = +matches[1];
|
||||
jsonPointer = matches[2];
|
||||
if (jsonPointer == '#') {
|
||||
if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);
|
||||
return paths[lvl - up];
|
||||
}
|
||||
|
||||
if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);
|
||||
var data = 'data' + ((lvl - up) || '');
|
||||
if (!jsonPointer) return data;
|
||||
if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);
|
||||
data = 'data' + ((lvl - up) || '');
|
||||
if (!jsonPointer) return data;
|
||||
}
|
||||
|
||||
var expr = data;
|
||||
var segments = jsonPointer.split('/');
|
||||
|
|
|
@ -30,7 +30,10 @@
|
|||
"properties": {
|
||||
"$data": {
|
||||
"type": "string",
|
||||
"format": "relative-json-pointer"
|
||||
"anyOf": [
|
||||
{ "format": "relative-json-pointer" },
|
||||
{ "format": "json-pointer" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
|
Loading…
Reference in New Issue