JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 339
  • Score
    100M100P100Q72210F
  • License MIT

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 JavaScript/TypeScript projects

Package Exports

  • my-utils-kit
  • my-utils-kit/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (my-utils-kit) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

๐Ÿ“ฆ 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

npm install my-utils-kit
# or
yarn add my-utils-kit

๐Ÿš€ Usage

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

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

npm run build

Uses TypeScript to compile code to the dist/ directory.


๐Ÿงช Test Locally

To test your package before publishing:

# From your package folder
npm link

# From your test project
npm link my-utils-kit

Then use it like a normal module:

import { camelCase } from 'my-utils-kit';

๐Ÿ“œ License

MIT โ€“ feel free to use and contribute.


๐Ÿ’ก Author

Made with โค๏ธ by Vinoth Madhavan