This is a collection of utility functions that I keep using across different projects. I primarily created this package for myself so I don't have to re-implement certain functions over and over again, and to have a central place for testing them.
npm install @flekschas/utils --save-dev
import { debounce } from '@flekschas/utils';
const hi = debounce(() => {
console.log('I am debounced');
}, 250);
For cherry picking from a specific topic do:
import { debounce } from '@flekschas/utils/timing';
The utility functions are organized by the following topics:
- animation
- color
- conversion
- dom
- event
- functional-programming
- geometry
- map
- math
- object
- other
- sorting
- string
- timing
- type-checking
- vector
See API.md for the API docs.
Generally, I follow four core goals with this collection:
- Reusability
- Performance
- Simplicity
- No dependencies
Whenever a function is reusable in a general context I might add it. When I add a function I will make sure it's performant. Finally, every function should be implement as simple as possible without harming performance. There's always a trade-off between performance and simplicity and my philosophy is the following: if the simple and complex implementation perform roughly the same, I choose the simple implementation. If a slightly more complex implementation is much faster I will favor the complex implementation. In any case, the API should always be simple and easy to understand! Finally, I want my utils functions to have no external and as little as possible internal dependencies. Why? No matter how large this collection becomes as a whole, if you only need one function, you should only ever have to bundle a single function and not a whole forrest of depending helper functions.