From b588be680cc283b87aaae5b08e6ccb5fa3fe53d2 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sun, 12 Mar 2023 11:18:08 +0200 Subject: [PATCH] Fix analyzer crash with invalid URL Closes #1291 --- app/features/build-analyzer/analyzer-hooks.ts | 9 ++++++++- app/features/build-analyzer/core/utils.ts | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/features/build-analyzer/analyzer-hooks.ts b/app/features/build-analyzer/analyzer-hooks.ts index a012e403e..24e9c4650 100644 --- a/app/features/build-analyzer/analyzer-hooks.ts +++ b/app/features/build-analyzer/analyzer-hooks.ts @@ -12,18 +12,20 @@ import { applySpecialEffects, SPECIAL_EFFECTS } from "./core/specialEffects"; import { buildStats } from "./core/stats"; import type { SpecialEffectType } from "./analyzer-types"; import { + buildIsEmpty, buildToAbilityPoints, serializeBuild, validatedBuildFromSearchParams, validatedWeaponIdFromSearchParams, } from "./core/utils"; +import invariant from "tiny-invariant"; export function useAnalyzeBuild() { const [searchParams, setSearchParams] = useSearchParams(); const mainWeaponId = validatedWeaponIdFromSearchParams(searchParams); const build = validatedBuildFromSearchParams(searchParams); - const build2 = validatedBuildFromSearchParams(searchParams, "build2"); + const build2 = validatedBuildFromSearchParams(searchParams, "build2", build); const ldeIntensity = validatedLdeIntensityFromSearchParams(searchParams); const effects = validatedEffectsFromSearchParams({ searchParams, build }); const effects2 = validatedEffectsFromSearchParams({ @@ -32,6 +34,11 @@ export function useAnalyzeBuild() { }); const focused = validatedFocusedFromSearchParams({ searchParams }); + invariant( + !(buildIsEmpty(build) && !buildIsEmpty(build2)), + "build1 is empty but build2 isn't" + ); + const handleChange = ({ newMainWeaponId = mainWeaponId, newBuild = build, diff --git a/app/features/build-analyzer/core/utils.ts b/app/features/build-analyzer/core/utils.ts index d9bb76850..09498ba4c 100644 --- a/app/features/build-analyzer/core/utils.ts +++ b/app/features/build-analyzer/core/utils.ts @@ -191,13 +191,15 @@ function validateAbility( export function validatedBuildFromSearchParams( searchParams: URLSearchParams, - key = "build" + key = "build", + otherBuild?: BuildAbilitiesTupleWithUnknown ): BuildAbilitiesTupleWithUnknown { const abilitiesArr = searchParams.get(key) ? searchParams.get(key)?.split(",") : null; if (!abilitiesArr) return EMPTY_BUILD; + if (otherBuild && buildIsEmpty(otherBuild)) return EMPTY_BUILD; try { return [