From fe634389da8950614c55ff57ff1bbdba4f95d844 Mon Sep 17 00:00:00 2001 From: Nazar Misyats Date: Sat, 18 Oct 2025 01:22:24 -0700 Subject: [PATCH] Check if initials match exactly a body's name --- dist/main/solvers/sequence.js | 20 +++++++++++++------- src/main/solvers/sequence.ts | 22 +++++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/dist/main/solvers/sequence.js b/dist/main/solvers/sequence.js index 55f88f5..7b92cc8 100644 --- a/dist/main/solvers/sequence.js +++ b/dist/main/solvers/sequence.js @@ -23,19 +23,25 @@ export class FlybySequence { const initials = initialsList[i]; if (initials.length < 2) throw new Error("Body sequence initials must contain at least 2 characters."); - const bodiesWithInitials = []; + let candidateBodies = []; for (const body of system.orbiting) { - if (body.name.toLowerCase().startsWith(initials.toLowerCase())) { - bodiesWithInitials.push(body); + const bodyNameLowercase = body.name.toLowerCase(); + const initialsLowercase = initials.toLowerCase(); + if (bodyNameLowercase == initialsLowercase) { + candidateBodies = [body]; + break; + } + if (bodyNameLowercase.startsWith(initialsLowercase)) { + candidateBodies.push(body); } } - if (bodiesWithInitials.length >= 2) { - const bodyNames = bodiesWithInitials.map(body => body.name); + if (candidateBodies.length >= 2) { + const bodyNames = candidateBodies.map(body => body.name); throw new Error(`Ambiguous initials \"${initials}\": ${joinStrings(bodyNames, ", ")}.`); } - if (bodiesWithInitials.length == 0) + if (candidateBodies.length == 0) throw new Error(`Invalid custom sequence body initials \"${initials}\".`); - const body = bodiesWithInitials[0]; + const body = candidateBodies[0]; if (i == 0) { attractorId = body.attractor.id; } diff --git a/src/main/solvers/sequence.ts b/src/main/solvers/sequence.ts index 5ba6eef..3fb09c9 100644 --- a/src/main/solvers/sequence.ts +++ b/src/main/solvers/sequence.ts @@ -37,21 +37,29 @@ export class FlybySequence { if (initials.length < 2) throw new Error("Body sequence initials must contain at least 2 characters."); + let candidateBodies: OrbitingBody[] = []; // check for ambiguity and validity - const bodiesWithInitials: OrbitingBody[] = []; for (const body of system.orbiting) { - if (body.name.toLowerCase().startsWith(initials.toLowerCase())) { - bodiesWithInitials.push(body); + const bodyNameLowercase = body.name.toLowerCase(); + const initialsLowercase = initials.toLowerCase(); + // if initials match exactly the body's name, choose that body + if (bodyNameLowercase == initialsLowercase) { + candidateBodies = [body]; + break; + } + // otherwise keep track of bodies with same initials + if (bodyNameLowercase.startsWith(initialsLowercase)) { + candidateBodies.push(body); } } - if (bodiesWithInitials.length >= 2) { - const bodyNames = bodiesWithInitials.map(body => body.name); + if (candidateBodies.length >= 2) { + const bodyNames = candidateBodies.map(body => body.name); throw new Error(`Ambiguous initials \"${initials}\": ${joinStrings(bodyNames, ", ")}.`); } - if (bodiesWithInitials.length == 0) + if (candidateBodies.length == 0) throw new Error(`Invalid custom sequence body initials \"${initials}\".`); - const body = bodiesWithInitials[0]; + const body = candidateBodies[0]; // check for same attractor if (i == 0) { attractorId = body.attractor.id;