redoc/lib/utils/JsonPointer.js

69 lines
1.9 KiB
JavaScript
Raw Normal View History

2015-10-08 20:16:45 +03:00
'use strict';
import JsonPointerLib from 'json-pointer';
/**
* Wrapper for JsonPointer. Provides common operations
*/
export class JsonPointer extends JsonPointerLib {
/**
* returns last JsonPointer token
* if level > 1 returns levels last (second last/third last)
2015-10-08 20:16:45 +03:00
* @example
* // returns subpath
* JsonPointerHelper.baseName('/path/0/subpath')
* // returns foo
* JsonPointerHelper.baseName('/path/foo/subpath', 2)
2015-10-08 20:16:45 +03:00
*/
static baseName(pointer, level=1) {
let tokens = JsonPointer.parse(pointer);
2015-10-08 23:21:51 +03:00
return tokens[tokens.length - (level)];
2015-10-08 20:16:45 +03:00
}
2015-10-08 23:21:51 +03:00
2015-10-10 16:01:41 +03:00
/**
* returns dirname of pointer
* if level > 1 returns corresponding dirname in the hierarchy
* @example
* // returns /path/0
* JsonPointerHelper.dirName('/path/0/subpath')
* // returns /path
* JsonPointerHelper.dirName('/path/foo/subpath', 2)
*/
static dirName(pointer, level=1) {
let tokens = JsonPointer.parse(pointer);
return JsonPointer.compile(tokens.slice(0, tokens.length - level));
}
/**
* overridden JsonPointer original parse to take care of prefixing '#' symbol
* that is not valid JsonPointer
*/
static parse(pointer) {
let ptr = pointer;
if (ptr.charAt(0) === '#') {
ptr = ptr.substring(1);
}
2015-10-10 16:48:17 +03:00
return JsonPointerLib._origParse(ptr);
2015-10-10 16:01:41 +03:00
}
2015-10-17 21:12:46 +03:00
/**
* Creates a JSON pointer path, by joining one or more tokens to a base path.
*
* @param {string} base - The base path
* @param {string|string[]} tokens - The token(s) to append (e.g. ["name", "first"])
* @returns {string}
*/
static join(base, tokens) {
// TODO: optimize
let baseTokens = JsonPointer.parse(base);
let resTokens = baseTokens.concat(tokens);
return JsonPointer.compile(resTokens);
}
2015-10-10 16:01:41 +03:00
}
2015-10-10 16:48:17 +03:00
JsonPointerLib._origParse = JsonPointerLib.parse;
JsonPointerLib.parse = JsonPointer.parse;
Object.assign(JsonPointer, JsonPointerLib);
2015-10-08 23:21:51 +03:00
export default JsonPointer;