From 1273368c9a433d74129d7eec74e8f089e387c7a0 Mon Sep 17 00:00:00 2001 From: Mathieu Date: Fri, 15 May 2026 14:10:07 +0200 Subject: [PATCH] =?UTF-8?q?fix(arp-scanner):=20remplace=20map+filter=20nul?= =?UTF-8?q?l=20par=20flatMap=20typ=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le combo `map -> satisfies DiscoveryResult -> filter (r is …)` ne passait pas le typecheck strict de Next : le type littéral produit par `satisfies` n'était pas considéré sous-type valide du prédicat. `flatMap` retourne [] quand la ligne ne matche pas, ce qui évite la nullité intermédiaire et respecte la propriété optionnelle `macAddress?: string`. Co-Authored-By: Claude Opus 4.7 --- src/modules/discovery/scanners/arp.scanner.ts | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/modules/discovery/scanners/arp.scanner.ts b/src/modules/discovery/scanners/arp.scanner.ts index 4567c6b..4c86cb5 100644 --- a/src/modules/discovery/scanners/arp.scanner.ts +++ b/src/modules/discovery/scanners/arp.scanner.ts @@ -30,16 +30,14 @@ function parseIpNeigh(output: string): DiscoveryResult[] { .split('\n') .map((line) => line.trim()) .filter(Boolean) - .map((line) => { + .flatMap((line) => { const ipMatch = line.match(/^(\d{1,3}(?:\.\d{1,3}){3})/); + if (!ipMatch) return []; const macMatch = line.match(/lladdr\s+([0-9a-fA-F:]{17})/); - if (!ipMatch) return null; - return { - ipAddress: ipMatch[1], - macAddress: macMatch?.[1], - } satisfies DiscoveryResult; - }) - .filter((r): r is DiscoveryResult => r !== null); + const result: DiscoveryResult = { ipAddress: ipMatch[1] }; + if (macMatch) result.macAddress = macMatch[1]; + return [result]; + }); } function parseArpA(output: string): DiscoveryResult[] { @@ -48,14 +46,12 @@ function parseArpA(output: string): DiscoveryResult[] { .split('\n') .map((line) => line.trim()) .filter(Boolean) - .map((line) => { + .flatMap((line) => { const ipMatch = line.match(/\((\d{1,3}(?:\.\d{1,3}){3})\)/); + if (!ipMatch) return []; const macMatch = line.match(/([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})/); - if (!ipMatch) return null; - return { - ipAddress: ipMatch[1], - macAddress: macMatch?.[1], - } satisfies DiscoveryResult; - }) - .filter((r): r is DiscoveryResult => r !== null); + const result: DiscoveryResult = { ipAddress: ipMatch[1] }; + if (macMatch) result.macAddress = macMatch[1]; + return [result]; + }); }