From 7bfab68d94ed7aef5b10829e048b5f274e403cc1 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:05:37 +0000 Subject: [PATCH] fix(#5): avoid clobbering conflicting reciprocal port connections --- src/lib/data/networkEditor.ts | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/lib/data/networkEditor.ts b/src/lib/data/networkEditor.ts index 7f81eab..691e9ff 100644 --- a/src/lib/data/networkEditor.ts +++ b/src/lib/data/networkEditor.ts @@ -113,19 +113,30 @@ function ensureReciprocalConnections(data: NetworkData) { continue; } - const targetPort = findPort(targetOwner, port.connectedTo.port); - if (!targetPort) { - delete port.connectedTo; - continue; - } + const targetPort = findPort(targetOwner, port.connectedTo.port); + if (!targetPort) { + delete port.connectedTo; + continue; + } - targetPort.connectedTo = { - device: owner.name, - port: port.portName - }; + const expectedReciprocal = { + device: owner.name, + port: port.portName + }; + if (!targetPort.connectedTo) { + targetPort.connectedTo = expectedReciprocal; + continue; + } + + const hasMatchingReciprocal = + equalsIgnoreCase(targetPort.connectedTo.device, owner.name) && + equalsIgnoreCase(targetPort.connectedTo.port, port.portName); + if (hasMatchingReciprocal) { + continue; + } + } } } -} function clearInboundReferences(data: NetworkData, predicate: (connection: Port['connectedTo']) => boolean) { for (const owner of allOwners(data)) {