diff --git a/composables/string.ts b/composables/string.ts new file mode 100644 index 0000000..480b397 --- /dev/null +++ b/composables/string.ts @@ -0,0 +1,37 @@ +export function useStringSort() { + const accountStore = useAccountStore(); + const localeCompare = computed(() => Intl.Collator( + accountStore.activeLocale, + { + usage: "sort", + numeric: true, + sensitivity: "base", + }, + ).compare); + return function stringSort(a: string, b: string) { + return localeCompare.value(a, b); + } +} + +export function useFuzzyMatch() { + const accountStore = useAccountStore(); + const localeCompare = computed(() => Intl.Collator( + accountStore.activeLocale, + { + usage: "search", + sensitivity: "base", + }, + ).compare); + return function fuzzyMatch(pattern: string, text: string) { + let pos = 0; + for (const char of text) { + if (localeCompare.value(char, pattern[pos]) === 0) { + pos += 1; + if (pos === pattern.length) { + return true; + } + } + } + return pos === pattern.length; + } +}