my-utils-kit
Version:
A lightweight and type-safe utility library for working with strings, objects, array Performance methods in TypeScript. Includes helpful methods for deep cloning, object transformations, safe access, query string handling, and more โ designed for modern J
313 lines (243 loc) โข 7 kB
Markdown
# ๐ฆ my-utils-kit
A lightweight utility toolkit built with TypeScript, offering a collection of **Performance**, **ViewPort**, **string**, **object**, and **array** helper methods for everyday JavaScript/TypeScript development.
---
## โจ Features
- โ
TypeScript support with full type safety
- ๐ง Useful Performance, viewport, string, object, and array manipulation utilities
- ๐ Deep clone, deep merge, flatten/unflatten, and more
- ๐ Tiny, modular, and easy to use
- ๐งช Easy to test and extend
---
## ๐ฆ Installation
```bash
npm install my-utils-kit
# or
yarn add my-utils-kit
```
---
## ๐ Usage
```ts
import { camelCase, deepCloneObj, groupBy } from 'my-utils-kit';
console.log(deepCloneObj({ a: 1 })); // โ { a: 1 }
console.log(groupBy([{ type: 'fruit', name: 'apple' }], 'type'));
```
## ๐ Performance Utilities
```ts
import { debounce, throttle, OperationBatcher, memoize } from 'my-utils-kit';
// ---------- 1. DEBOUNCE ----------
function handleInput(event: Event) {
const input = (event.target as HTMLInputElement).value;
console.log('Debounced Input:', input);
}
const debouncedInput = debounce(handleInput, 300);
document
.getElementById('searchInput')
?.addEventListener('input', debouncedInput);
// ---------- 2. THROTTLE ----------
function onScroll() {
console.log('Throttled scroll triggered');
}
const throttledScroll = throttle(onScroll, 200);
window.addEventListener('scroll', throttledScroll);
// ---------- 3. BATCH ----------
// Create an instance of the batcher
const batcher = new OperationBatcher(200); // 200ms delay between flushes
// Enqueue async or sync operations
batcher.enqueueOperation(() => apiCall1());
batcher.enqueueOperation(() => apiCall2());
// Example function definitions (for demonstration)
function apiCall1() {
console.log('API Call 1 triggered');
}
function apiCall2() {
console.log('API Call 2 triggered');
}
// ---------- 4. MEMOIZE ----------
function expensiveCalc(n: number): number {
console.log('Computing...');
return n * n;
}
const memoizedCalc = memoize(expensiveCalc);
console.log(memoizedCalc(5)); // Computes
console.log(memoizedCalc(5)); // Cached
// ----------5. loadScriptOnUserEvent -------
loadScriptOnUserEvent('https://example.com/analytics.js', {
events: ['click', 'keydown'],
timeout: 8000,
});
// ----------6. runCallbackOnUserEvent -------
runCallbackOnUserEvent(() => {
callback()
}, {
events: ['click', 'keydown'],
timeout: 7000,
});
// ----------7. observeElementOnIntersect -------
observeElementOnIntersect('.track-on-view', { threshold: 0.4 }, (entry) => {
entry.target.classList.add('visible');
console.log('Intersected:', entry.target);
});
// ----------8. Current Screen Size -------
import { getScreenSize } from 'my-utils-kit';
const size = getScreenSize();
console.log(size); // e.g., "md"
```
---
## ๐ API Overview
### โ
Function(Performance) Utilities
- `debounce(fn,delay,immediate=false)`
- `throttle(fn,delay,immediate=false)`
- `memoize(expensiveCalc)`
- `new OperationBatcher()`
- `loadScriptOnUserEvent(src,options)`
- `runCallbackOnUserEvent(callback,options)`
- `observeElementOnIntersect(el,options, callback)`
## ๐ฑ Viewport Utilities (Screen Size Detection)
- **`getScreenSize(breakpoints?)`**
- Returns the current screen size label based on breakpoints.
- If no custom breakpoints are provided, the following **default breakpoints** are used:
| Label | Min Width | Max Width |
|--------|-----------|------------|
| `xs` | 0px | 480px |
| `sm` | 481px | 640px |
| `md` | 641px | 768px |
| `lg` | 769px | 1024px |
| `xl` | 1025px | 1280px |
| `2xl` | 1281px | 1536px |
| `3xl` | 1537px | โ (Infinity) |
- **`watchScreenSize(callback, breakpoints?)`**
- Watches screen size changes and triggers the callback function.
- Returns a function to stop watching.
### โ
String Utilities
- `camelCase(str)`
- `kebabCase(str)`
- `snakeCase(str)`
- `capitalize(str)`
- `truncate(str, length)`
- `reverseString(str)`
- `capitalize(str)`
- `uncapitalize(str)`
- `padStart(str, length, char)`
- `padEnd(str, length, char)`
- `repeatString(str, times)`
- `isPalindrome(str)`
- `countOccurrences(str, char)`
- `removeSpaces(str)`
- `removeSpecialChars(str)`
- `escapeHTML(str)`
- `unescapeHTML(str)`
- `slugify(str)`
- `maskString(str, visibleChars, maskChar='*')`
- `stripTags(htmlStr)`
- `toAscii(str)`
- `toHex(str)`
- `toBase64(str)`
- `fromBase64(str)`
- `toBinary(str)`
- `fromBinary(str)`
- `randomString(length, chars?)`
- `swapCase(str)`
- `countWords(str)`
- `removeDuplicates(str)`
- `toTitleCase(str)`
- `isAnagram(str1, str2)`
- `findLongestWord(str)`
### โ
Object Utilities
- `deepCloneObj(obj)`
- `deepMerge(obj1, obj2)`
- `flattenObject(obj)`
- `unflattenObject(flatObj)`
- `getNestedValue(obj, path)`
- `setNestedValue(obj, path, value)`
- `omit(obj, keys)`
- `pick(obj, keys)`
- `invertObj(obj)`
- `isEmpty(obj)`
- `hasKey(obj, key)`
- `hasDeepKey(obj, path)`
- `isPlainObject(val)`
- `getObjectSize(obj)`
- `freeze(obj)`
- `seal(obj)`
- `isFrozen(obj)`
- `isSealed(obj)`
- `objectIntersection(obj1, obj2)`
- `objectDifference(obj1, obj2)`
- `transformObjectKeys(obj, fn)`
- `transformObjectValues(obj, fn)`
- `queryStringToObject(str)`
- `objectToQueryString(obj)`
- `isSubset(obj1, obj2)`
- `deleteKey(obj, key)`
- `getTypeOfValue(val)`
### โ
Array Utilities
- `unique(arr)`
- `flatten(arr, depth=1)`
- `chunk(arr, size)`
- `shuffle(arr)`
- `randomElement(arr)`
- `difference(arr1, arr2)`
- `intersection(arr1, arr2)`
- `union(arr1, arr2)`
- `zip(arr1, arr2)`
- `unzip(arr)`
- `partition(arr, fn)`
- `sortBy(arr, key, order='asc')`
- `moveElement(arr, fromIndex, toIndex)`
- `reverseArray(arr))`
- `rotateArray(arr, positions)`
- `deepFlatten(arr)`
- `first(arr, n=1)`
- `last(arr, n=1)`
- `compact(arr)`
- `sortNumbers(arr, order='asc')`
- `arrayToObject(arr, key)`
- `objectToArray(obj)`
- `range(start, end, step=1)`
- `sum(arr)`
- `average(arr)`
- `median(arr)`
- `mode(arr)`
- `isSorted(arr)`
- `everyNth(arr, n)`
- `findDuplicates(arr)`
- `uniqueObjects(arr, key)`
---
## ๐ Project Structure
```
my-utils-kit/
โโโ src/
โ โโโ arrayUtils.ts
โ โโโ objectUtils.ts
โ โโโ stringUtils.ts
โ โโโ functionUtils.ts
โโโ dist/
โ โโโ compiled JS files
โโโ index.ts
โโโ package.json
```
---
## ๐ง Build
```bash
npm run build
```
Uses TypeScript to compile code to the `dist/` directory.
---
## ๐งช Test Locally
To test your package before publishing:
```bash
# From your package folder
npm link
# From your test project
npm link my-utils-kit
```
Then use it like a normal module:
```ts
import { camelCase } from 'my-utils-kit';
```
---
## ๐ License
MIT โ feel free to use and contribute.
---
## ๐ก Author
Made with โค๏ธ by Vinoth Madhavan