import type Fuse from 'fuse.js'; // See http://fusejs.io/ for more information const DEFAULT_FUSE_OPTIONS: Fuse.IFuseOptions = { includeScore: true, includeMatches: true, threshold: 0.4, location: 0, distance: 75, minMatchCharLength: 2, }; export async function createFuzzySearch< T = string, Options extends Fuse.IFuseOptions = Fuse.IFuseOptions >(objects: T[], options: Options): Promise> { if (!options.keys) { throw new Error('You need to define `options.keys`'); } const fuseImported = await import('fuse.js'); const fuse = {Fuse: fuseImported.default}; return new fuse.Fuse(objects, { ...DEFAULT_FUSE_OPTIONS, ...options, }); } // re-export fuse type to make it easier to use export type {Fuse};