tryCanParseURL

This commit is contained in:
ProgrammerIn-wonderland 2024-08-11 22:09:12 -04:00
parent 77d492fffb
commit 1999996b2a
No known key found for this signature in database

View file

@ -1,12 +1,10 @@
import { rewriteJs } from "./js"; import { rewriteJs } from "./js";
function canParseUrl(url: string, origin?: URL) { function tryCanParseURL(url: string, origin?: string | URL): URL | null {
try { try {
new URL(url, origin); return new URL(url, origin);
return true;
} catch { } catch {
return false; return null;
} }
} }
@ -36,7 +34,7 @@ export function encodeUrl(url: string | URL, origin?: URL) {
return "javascript:" + rewriteJs(url.slice("javascript:".length), origin); return "javascript:" + rewriteJs(url.slice("javascript:".length), origin);
} else if (/^(#|mailto|about|data|blob)/.test(url)) { } else if (/^(#|mailto|about|data|blob)/.test(url)) {
return url; return url;
} else if (canParseUrl(url, origin)) { } else if (tryCanParseURL(url, origin)) {
return ( return (
location.origin + location.origin +
self.$scramjet.config.prefix + self.$scramjet.config.prefix +
@ -52,15 +50,16 @@ export function decodeUrl(url: string | URL) {
} }
if ( if (
canParseUrl(url) && tryCanParseURL(url)?.pathname.startsWith(
new URL(url).pathname.startsWith(self.$scramjet.config.prefix + "worker") self.$scramjet.config.prefix + "worker"
)
) { ) {
return new URL(new URL(url).searchParams.get("origin")).href; return new URL(new URL(url).searchParams.get("origin")).href;
} }
if (/^(#|about|data|mailto|javascript)/.test(url)) { if (/^(#|about|data|mailto|javascript)/.test(url)) {
return url; return url;
} else if (canParseUrl(url)) { } else if (tryCanParseURL(url)) {
return self.$scramjet.codec.decode( return self.$scramjet.codec.decode(
url.slice((location.origin + self.$scramjet.config.prefix).length) url.slice((location.origin + self.$scramjet.config.prefix).length)
); );