diff options
Diffstat (limited to 'src/lib/Tools')
| -rw-r--r-- | src/lib/Tools/DumpProfile.svelte | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/lib/Tools/DumpProfile.svelte b/src/lib/Tools/DumpProfile.svelte index a876f587..88605ffc 100644 --- a/src/lib/Tools/DumpProfile.svelte +++ b/src/lib/Tools/DumpProfile.svelte @@ -2,6 +2,7 @@ import Spacer from "$lib/Layout/Spacer.svelte"; import { dumpUser } from "$lib/Data/AniList/user"; import RateLimited from "$lib/Error/RateLimited.svelte"; +import { parseJsonStringOrDefault } from "$lib/Effect/json"; import Skeleton from "$lib/Loading/Skeleton.svelte"; import InputTemplate from "./InputTemplate.svelte"; import LZString from "lz-string"; @@ -9,19 +10,23 @@ import LZString from "lz-string"; let submission = ""; // Credit: @hoh -const decodeJSON = (about: string): JSON | null => { +const decodeJSON = (about: string): unknown | null => { const match = (about || "").match(/^\[\]\(json([A-Za-z0-9+/=]+)\)/); - if (match) - try { - return JSON.parse(atob(match[1])); - } catch { - try { - return JSON.parse(LZString.decompressFromBase64(match[1])); - } catch { - return null; - } - } + if (match) { + const directDecoded = parseJsonStringOrDefault<unknown | null>( + atob(match[1]), + null, + ); + + if (directDecoded !== null) return directDecoded; + + const decompressed = LZString.decompressFromBase64(match[1]); + + if (!decompressed) return null; + + return parseJsonStringOrDefault<unknown | null>(decompressed, null); + } return null; }; |