src/pointerToPath.ts
import { JsonPath } from '@stoplight/types';
import { decodePointerUriFragment } from './decodePointerUriFragment';
export const pointerToPath = (pointer: string): JsonPath => {
return decodeUriFragmentIdentifier(pointer);
};
const decodeFragmentSegments = (segments: string[]): string[] => {
const len = segments.length;
const res = [];
let i = -1;
while (++i < len) {
res.push(decodePointerUriFragment(segments[i]));
}
return res;
};
const decodeUriFragmentIdentifier = (ptr: string): string[] => {
if (typeof ptr !== 'string') {
throw new TypeError('Invalid type: JSON Pointers are represented as strings.');
}
if (ptr.length === 0 || ptr[0] !== '#') {
throw new URIError('Invalid JSON Pointer syntax; URI fragment identifiers must begin with a hash.');
}
if (ptr.length === 1) {
return [];
}
if (ptr[1] !== '/') {
throw new URIError('Invalid JSON Pointer syntax.');
}
return decodeFragmentSegments(ptr.substring(2).split('/'));
};