@chalidade/utils
Utilitas front-end kecil tanpa dependensi.
bash
pnpm add @chalidade/utils
# atau
npm install @chalidade/utilsBelum dipublish
Package ini belum dipublish ke npm. Sementara ini, salin source-nya dari GitHub.
API
debounce(fn, wait)
Menunda eksekusi fn sampai wait ms berlalu tanpa panggilan baru. Cocok untuk input pencarian, resize, dan autosave. Hasilnya punya cancel() dan flush().
ts
import { debounce } from "@chalidade/utils";
const search = debounce((q: string) => fetchResults(q), 300);
input.addEventListener("input", (e) => search(e.currentTarget.value));
search.cancel(); // batalkan panggilan yang menunggu
search.flush(); // jalankan sekarang jugaKonsep terkait: 04 JavaScript, Event Loop.
throttle(fn, wait)
Menjalankan fn paling banyak sekali setiap wait ms (leading + trailing). Cocok untuk scroll dan pointermove.
ts
import { throttle } from "@chalidade/utils";
window.addEventListener("scroll", throttle(updateProgressBar, 100), { passive: true });Konsep terkait: 16 Performance.
cx(...values)
Menggabungkan className secara kondisional. Menerima string, angka, array, dan object.
ts
import { cx } from "@chalidade/utils";
cx("btn", { "btn--active": isActive }, size && `btn--${size}`);
// → "btn btn--active btn--lg"Konsep terkait: 08 CSS Architecture.
clamp(value, min, max)
Membatasi angka ke rentang [min, max]. Melempar RangeError kalau min > max.
ts
clamp(120, 0, 100); // 100Belajar dari source-nya
Latihan yang disarankan:
- Tulis ulang
debouncetanpa melihat source-nya. - Jalankan
pnpm testuntuk mengecek implementasimu. - Bandingkan dengan
lodash.debounce(opsileading,maxWait) dan catat bedanya di catatan eksperimen.