Include @mentioned names in search results
This commit is contained in:
parent
e3c6b4d9b1
commit
9c6fb29edb
14 changed files with 1052 additions and 126 deletions
53
ts/util/fuse.ts
Normal file
53
ts/util/fuse.ts
Normal file
|
@ -0,0 +1,53 @@
|
|||
// Copyright 2023 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import { removeDiacritics } from './removeDiacritics';
|
||||
|
||||
const cachedIndices: Map<
|
||||
Fuse.IFuseOptions<unknown>,
|
||||
WeakMap<ReadonlyArray<unknown>, Fuse<unknown>>
|
||||
> = new Map();
|
||||
|
||||
export function getCachedFuseIndex<T>(
|
||||
list: ReadonlyArray<T>,
|
||||
options: Fuse.IFuseOptions<T>
|
||||
): Fuse<T> {
|
||||
// Helper to retrieve a cached fuse index or create one if needed. Indices are uniquely
|
||||
// identified by their `options` and the `list` of values being indexed. Both should
|
||||
// remain referentially static in order to avoid unnecessarily re-indexing
|
||||
let indicesForOptions = cachedIndices.get(
|
||||
options as Fuse.IFuseOptions<unknown>
|
||||
);
|
||||
|
||||
if (!indicesForOptions) {
|
||||
indicesForOptions = new WeakMap();
|
||||
cachedIndices.set(options as Fuse.IFuseOptions<unknown>, indicesForOptions);
|
||||
}
|
||||
|
||||
let index = indicesForOptions.get(list);
|
||||
if (!index) {
|
||||
index = new Fuse<T>(list, options);
|
||||
indicesForOptions.set(list, index);
|
||||
}
|
||||
|
||||
// Map's types don't allow us to specify that the type of the value depends on the
|
||||
// type of the key, so we have to cast it here.
|
||||
return index as unknown as Fuse<T>;
|
||||
}
|
||||
|
||||
export const fuseGetFnRemoveDiacritics: Fuse.FuseGetFunction<unknown> = (
|
||||
...args
|
||||
) => {
|
||||
const text = Fuse.config.getFn(...args);
|
||||
if (!text) {
|
||||
return text;
|
||||
}
|
||||
|
||||
if (typeof text === 'string') {
|
||||
return removeDiacritics(text);
|
||||
}
|
||||
|
||||
return text.map(removeDiacritics);
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue