More flexible `decodeStandardRoute`
This commit is contained in:
parent
f105736694
commit
8ce11ddb12
|
@ -20,6 +20,7 @@ import {
|
||||||
decode,
|
decode,
|
||||||
fromJS,
|
fromJS,
|
||||||
isEmbedded,
|
isEmbedded,
|
||||||
|
parse,
|
||||||
stringify,
|
stringify,
|
||||||
underlying,
|
underlying,
|
||||||
Embeddable,
|
Embeddable,
|
||||||
|
@ -434,10 +435,19 @@ export function unpackStandardRoute<R extends Embeddable>(route: E.StandardRoute
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We support a couple of variations here: a string containing Base64-encoded machine-oriented
|
||||||
|
// Preserves, or a string containing text-syntax Preserves.
|
||||||
export function decodeStandardRoute(s: string): G.Route | null {
|
export function decodeStandardRoute(s: string): G.Route | null {
|
||||||
try {
|
try {
|
||||||
const route = E.toStandardRoute<Ref>(decode(
|
let routeValue: AnyValue;
|
||||||
Bytes.fromBase64(s.replace(/[^-_+/A-Za-z0-9=]/g, ''))));
|
// A valid text-syntax representation of a StandardRoute must start with
|
||||||
|
// either '[' or '<', neither of which is valid Base64.
|
||||||
|
if (s[0] === '[' || s[0] === '<') {
|
||||||
|
routeValue = parse(s);
|
||||||
|
} else {
|
||||||
|
routeValue = decode(Bytes.fromBase64(s.replace(/[^-_+/A-Za-z0-9=]/g, '')));
|
||||||
|
}
|
||||||
|
const route = E.toStandardRoute(routeValue);
|
||||||
return route === void 0 ? null : unpackStandardRoute(route);
|
return route === void 0 ? null : unpackStandardRoute(route);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Decoding standard route:', e);
|
console.error('Decoding standard route:', e);
|
||||||
|
|
Loading…
Reference in New Issue