fix(arp-scanner): remplace map+filter null par flatMap typé
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<DiscoveryResult>` 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 <noreply@anthropic.com>
This commit is contained in:
@@ -30,16 +30,14 @@ function parseIpNeigh(output: string): DiscoveryResult[] {
|
||||
.split('\n')
|
||||
.map((line) => line.trim())
|
||||
.filter(Boolean)
|
||||
.map((line) => {
|
||||
.flatMap<DiscoveryResult>((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<DiscoveryResult>((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];
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user