rfc6902
Version:
Complete implementation of RFC6902 (patch and diff)
64 lines (56 loc) • 2.18 kB
TypeScript
/**
Unescape token part of a JSON Pointer string
`token` should *not* contain any '/' characters.
> Evaluation of each reference token begins by decoding any escaped
> character sequence. This is performed by first transforming any
> occurrence of the sequence '~1' to '/', and then transforming any
> occurrence of the sequence '~0' to '~'. By performing the
> substitutions in this order, an implementation avoids the error of
> turning '~01' first into '~1' and then into '/', which would be
> incorrect (the string '~01' correctly becomes '~1' after
> transformation).
Here's my take:
~1 is unescaped with higher priority than ~0 because it is a lower-order escape character.
I say "lower order" because '/' needs escaping due to the JSON Pointer serialization technique.
Whereas, '~' is escaped because escaping '/' uses the '~' character.
*/
export declare function unescapeToken(token: string): string;
/** Escape token part of a JSON Pointer string
> '~' needs to be encoded as '~0' and '/'
> needs to be encoded as '~1' when these characters appear in a
> reference token.
This is the exact inverse of `unescapeToken()`, so the reverse replacements must take place in reverse order.
*/
export declare function escapeToken(token: string): string;
export interface PointerEvaluation {
parent: any;
key: string;
value: any;
}
/**
JSON Pointer representation
*/
export declare class Pointer {
tokens: string[];
constructor(tokens?: string[]);
/**
`path` *must* be a properly escaped string.
*/
static fromJSON(path: string): Pointer;
toString(): string;
/**
Returns an object with 'parent', 'key', and 'value' properties.
In the special case that this Pointer's path == "",
this object will be {parent: null, key: '', value: object}.
Otherwise, parent and key will have the property such that parent[key] == value.
*/
evaluate(object: any): PointerEvaluation;
get(object: any): any;
set(object: any, value: any): void;
push(token: string): void;
/**
`token` should be a String. It'll be coerced to one anyway.
immutable (shallowly)
*/
add(token: string): Pointer;
}