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')
|
.split('\n')
|
||||||
.map((line) => line.trim())
|
.map((line) => line.trim())
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.map((line) => {
|
.flatMap<DiscoveryResult>((line) => {
|
||||||
const ipMatch = line.match(/^(\d{1,3}(?:\.\d{1,3}){3})/);
|
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})/);
|
const macMatch = line.match(/lladdr\s+([0-9a-fA-F:]{17})/);
|
||||||
if (!ipMatch) return null;
|
const result: DiscoveryResult = { ipAddress: ipMatch[1] };
|
||||||
return {
|
if (macMatch) result.macAddress = macMatch[1];
|
||||||
ipAddress: ipMatch[1],
|
return [result];
|
||||||
macAddress: macMatch?.[1],
|
});
|
||||||
} satisfies DiscoveryResult;
|
|
||||||
})
|
|
||||||
.filter((r): r is DiscoveryResult => r !== null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseArpA(output: string): DiscoveryResult[] {
|
function parseArpA(output: string): DiscoveryResult[] {
|
||||||
@@ -48,14 +46,12 @@ function parseArpA(output: string): DiscoveryResult[] {
|
|||||||
.split('\n')
|
.split('\n')
|
||||||
.map((line) => line.trim())
|
.map((line) => line.trim())
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.map((line) => {
|
.flatMap<DiscoveryResult>((line) => {
|
||||||
const ipMatch = line.match(/\((\d{1,3}(?:\.\d{1,3}){3})\)/);
|
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})/);
|
const macMatch = line.match(/([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})/);
|
||||||
if (!ipMatch) return null;
|
const result: DiscoveryResult = { ipAddress: ipMatch[1] };
|
||||||
return {
|
if (macMatch) result.macAddress = macMatch[1];
|
||||||
ipAddress: ipMatch[1],
|
return [result];
|
||||||
macAddress: macMatch?.[1],
|
});
|
||||||
} satisfies DiscoveryResult;
|
|
||||||
})
|
|
||||||
.filter((r): r is DiscoveryResult => r !== null);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user