← Back
Fuzzy
web

Fuzzy

Feb 28, 2025 → Apr 10, 2025

@polgubau/fuzzy és una llibreria de cerca difusa optimitzada, dissenyada amb TypeScript des de la base. Només cal escriure una comanda i cridar una funció per tenir un cercador difús al teu projecte.

Landing de Fuzzy

Què i per què

Els filtres en JavaScript solen ser coneguts per ser lents i feixucs. El mètode natiu Array.prototype.filter no està optimitzat per al rendiment, especialment quan es treballa amb grans conjunts de dades. Aquesta llibreria ofereix una manera senzilla i eficient de realitzar cerques difuses en matrius de cadenes de text.

Et permet crear una funció de cerca difusa que es pot reutilitzar a tota l’aplicació, facilitant el filtratge de llistes basat en l’entrada de l’usuari.

Què NO és això ⚠️

  • Una llibreria per a tot que resol tots els problemes.
  • Un substitut de Lodash o Underscore.
  • Un paquet que inflarà innecessàriament la mida del teu paquet.

Què ÉS això ✅

  • Una col·lecció de petites funcions d’utilitat focalitzades.
  • Modular, “tree-shakable” i lleuger tant per a CJS com per a ESM.
  • Dissenyat per ser senzill, eficient i fàcil d’utilitzar.
  • Totalment tipat, amb definicions de TypeScript incloses.

Instal·lació

Instal·la la llibreria utilitzant el teu gestor de paquets preferit:

pnpm add @polgubau/fuzzy

Ús

import fuzzy from '@polgubau/fuzzy';

const list = ["volvo", "seat", "mercedes", "audi", "bmw"];
const queryText = "volv"; // El terme de cerca
const fuzzySearch = fuzzy(list);

// Executa això quan el terme de cerca canviï
const fuzzedList = fuzzySearch(queryText);
console.log(fuzzedList);

Adaptadors per a frameworks

El nucli de la llibreria està disponible com un paquet independent, però també oferim adaptadors per a frameworks populars com React i Vue.

Tingues en compte que la importació del nucli és @polgubau/fuzzy, mentre que els adaptadors de React i Vue s’importen des de @polgubau/fuzzy/react i @polgubau/fuzzy/vue respectivament.

L’ús d’aquesta importació et permetrà utilitzar la llibreria d’una manera independent del framework, mentre que les importacions específiques del framework proporcionaran funcionalitats addicionals adaptades a aquest framework. Així no importes els paquets de Vue o React si no els necessites.

Fas servir React?

Per simplificar la integració de la cerca difusa a les teves aplicacions React, oferim un hook personalitzat anomenat useFuzzy.

import { useFuzzy, Highlight } from '@polgubau/fuzzy/react' // Nota: ara important des de /react

const filteredList = useFuzzy({
  list: ["volvo", "seat", "mercedes", "audi", "bmw"],
  query: "volv"
})

filteredList.map(({ item, matches: [range] }) => (
  <div key={item}>
    <Highlight text={item} ranges={range} />
  </div>
))

Fas servir Vue?

El mateix enfocament està disponible per a aplicacions Vue. Oferim un “composable” anomenat useFuzzy per simplificar la integració de la cerca difusa a les teves aplicacions Vue.

<template>
  <div>
    <input v-model="query" placeholder="Cerca..." />
    <ul>
      <li v-for="(result, index) in fuzzySearch.results" :key="index">
        {{ result }}
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
import { ref } from "vue";
import { useFuzzy } from "@polgubau/fuzzy/vue";

export default {
  setup() {
    // Llista de cadenes per a la cerca
    const items = ref<string[]>(["Apple", "Banana", "Cherry", "Grape", "Pineapple"]);
    const query = ref("");

    // Utilitzant el composable
    const fuzzySearch = useFuzzy({ list: items, query });

    return {
      query,
      fuzzySearch,
    };
  },
};
</script>

Documentació

La pàgina de documentació està disponible a fuzzy.polgubau.com.

La documentació està construïda amb Fumadocs amb algunes personalitzacions.

Suport i18n

La documentació està disponible en diversos idiomes. Pots canviar entre ells utilitzant el selector d’idioma a la part superior dreta de la pàgina. Actualment, es donen suport als següents idiomes:

IdiomaSuportat
Anglès
Castellà
Català
Alemany

🛠 Desenvolupament

Construcció del projecte

La manera més fàcil de treballar amb el monorepo del projecte és executar

pnpm dev

al directori arrel. Això iniciarà una compilació en mode watch per al paquet i iniciarà un servidor local per previsualitzar la pàgina de documentació.

Execució de tests

Els tests estan escrits en TypeScript i utilitzen Vitest com a framework de proves. Executa la comanda dins del directori packages/fuzzy per executar els tests.

pnpm test

Autor i llicència

Fet amb ❤️ per Pol Gubau Amores

Aquest projecte es basa en microfuzz, creat per @Nozbe, s’han fet algunes millores al codi original i s’ha reescrit en TypeScript.

Veure tots els col·laboradors.

Aquest projecte està disponible sota la llicència MIT. Vegeu el fitxer LICENSE per a més informació.

💡 Més informació

Insígnies

Enllaços

Projectes similars

Fuzzy

© 2026 Pol Gubau Amores