($data, lvl, paths)
| 34616 | var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; |
| 34617 | var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; |
| 34618 | function getData($data, lvl, paths) { |
| 34619 | var up, jsonPointer, data, matches; |
| 34620 | if ($data === '') return 'rootData'; |
| 34621 | if ($data[0] == '/') { |
| 34622 | if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data); |
| 34623 | jsonPointer = $data; |
| 34624 | data = 'rootData'; |
| 34625 | } else { |
| 34626 | matches = $data.match(RELATIVE_JSON_POINTER); |
| 34627 | if (!matches) throw new Error('Invalid JSON-pointer: ' + $data); |
| 34628 | up = +matches[1]; |
| 34629 | jsonPointer = matches[2]; |
| 34630 | if (jsonPointer == '#') { |
| 34631 | if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); |
| 34632 | return paths[lvl - up]; |
| 34633 | } |
| 34634 | |
| 34635 | if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); |
| 34636 | data = 'data' + ((lvl - up) || ''); |
| 34637 | if (!jsonPointer) return data; |
| 34638 | } |
| 34639 | |
| 34640 | var expr = data; |
| 34641 | var segments = jsonPointer.split('/'); |
| 34642 | for (var i=0; i<segments.length; i++) { |
| 34643 | var segment = segments[i]; |
| 34644 | if (segment) { |
| 34645 | data += getProperty(unescapeJsonPointer(segment)); |
| 34646 | expr += ' && ' + data; |
| 34647 | } |
| 34648 | } |
| 34649 | return expr; |
| 34650 | } |
| 34651 | |
| 34652 | |
| 34653 | function joinPaths (a, b) { |
no test coverage detected