aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Error/path.ts
blob: a35a4cb885a0c7d946c3d3b0d3a71c16ccd4663b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
};