aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Error/path.ts
blob: 93835084346809716ea95222918790e4bffc7a6b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import levenshtein from "fast-levenshtein";

export const closest = (path: string, suggestions: string[]) => {
	const partialMatches = suggestions.filter((suggestion) =>
		suggestion.includes(path),
	);

	if (partialMatches.length) return partialMatches[0];

	const suggestionsWithDistance = suggestions.map((suggestion) => {
		const distance = levenshtein.get(path, suggestion);

		return { suggestion, distance };
	});

	suggestionsWithDistance.sort((a, b) => a.distance - b.distance);

	for (const suggestion of suggestionsWithDistance)
		if (suggestion.distance < suggestion.suggestion.length / 2)
			return suggestion.suggestion;

	return suggestionsWithDistance[0].suggestion;
};