npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@hua-labs/utils

v1.1.4

Published

Common utility functions for the hua ecosystem

Readme

@hua-labs/utils

A comprehensive utility library for the hua ecosystem. Includes class name merging (Tailwind-safe), formatters, performance utilities, validation, string manipulation, and sanitization functions.

npm version npm downloads license TypeScript React

Features

  • cn() class merging — Tailwind-safe class name merging via clsx + tailwind-merge
  • Formatters — Date, number, file size, relative time
  • Performance — debounce, throttle, memoize, delay, retry
  • Validation — Email, password, URL, phone number, range checks
  • String utils — UUID, slugify, truncate, case conversion (camel/pascal/snake/kebab)
  • Sanitization — XSS prevention, HTML escaping, email masking

Installation

pnpm add @hua-labs/utils

Peer dependencies: react >=19.0.0

Quick Start

import { cn, formatTimeAgo, debounce, validateEmail, sanitizeInput } from '@hua-labs/utils';

// Tailwind class merging
const cls = cn('px-4 py-2 bg-blue-500', isActive && 'bg-blue-700', 'px-6');

// Formatting
formatTimeAgo(new Date('2026-02-07')); // "4 days ago"

// Performance
const debouncedSearch = debounce(search, 300);

// Validation & sanitization
validateEmail('[email protected]'); // true
sanitizeInput('<script>alert("xss")</script>'); // safe string

API

| Export | Type | Description | |--------|------|-------------| | cn | function | Tailwind-safe class name merging (clsx + tailwind-merge) | | formatDate | function | Format a Date or date string using Intl.DateTimeFormat with ko-KR locale. Accepts optional Intl.DateTimeFormatOptions. | | formatNumber | function | Format a number using Intl.NumberFormat with ko-KR locale. Accepts optional Intl.NumberFormatOptions. | | formatFileSize | function | Convert a byte count into a human-readable string (e.g. '1.5 MB'). | | formatTimeAgo | function | Return a Korean relative time string for a past date (e.g. '3분 전', '2일 전'). | | debounce | function | Debounce function calls with configurable delay | | throttle | function | Throttle function calls to execute at most once per interval. | | memoize | function | Cache function results by argument key. Accepts optional resolver to compute the cache key. | | delay | function | Return a Promise that resolves after the given number of milliseconds. | | retry | function | Retry an async function up to maxAttempts times with exponential back-off between attempts. | | validateEmail | function | Email format validation | | validatePassword | function | Validate a password against configurable rules (minLength, uppercase, lowercase, numbers, special chars). Returns { isValid, errors }. | | validateUrl | function | Return true if the string is a valid absolute URL (uses URL constructor). | | validatePhoneNumber | function | Validate a Korean mobile phone number (01x-xxxx-xxxx format). | | validateNumberRange | function | Return true if a number is within the inclusive [min, max] range. | | validateStringLength | function | Return true if a string length is within the inclusive [min, max] range. | | generateId | function | Generate a unique ID string with optional prefix (default: 'id'). Uses Date.now + random suffix. | | generateUUID | function | Generate a random UUID v4 string. | | slugify | function | Convert a string into a URL-friendly slug (lowercase, hyphens, no special chars). | | truncate | function | Truncate a string to the given length and append a suffix (default: '...'). Handles multi-byte characters. | | toCamelCase | function | Convert a string to camelCase. | | toPascalCase | function | Convert a string to PascalCase. | | toSnakeCase | function | Convert a string to snake_case. | | toKebabCase | function | Convert a string to kebab-case. | | capitalize | function | Capitalize the first character and lowercase the rest of a string. | | titleCase | function | Capitalize the first character of every word in a string. | | sanitizeInput | function | XSS prevention input sanitizer | | sanitizeTitle | function | Sanitize a title string — removes HTML tags and dangerous patterns, enforces optional maxLength (default: 100). | | sanitizeEmail | function | Sanitize an email address — trims whitespace and lowercases. | | sanitizeName | function | Sanitize a name string — removes HTML tags and XSS patterns. | | escapeHtml | function | Escape HTML special characters (&, <, >, ", '). Intended for email body rendering, not general React output. | | maskEmailForLog | function | Mask an email address for safe logging (GDPR/CCPA). Shows only the first N local-part characters (default: 3), e.g. 'use***@***'. |

Related Packages

License

MIT — HUA Labs