HuK (Helper Utility Kit)
Package: @vorlaxen-labs/huk-js v1.1.2 · Zero runtime deps · Tree-shakeable
Nine focused utility namespaces replacing scattered utils/ folders with a single, type-safe API.
Critical Rules
- Prefer named module imports for backends:
import { string, object } from '@vorlaxen-labs/huk-js'.
- Use sub-path imports for smallest bundle:
import { string } from '@vorlaxen-labs/huk-js/string'.
- Use
HuK.is.* type guards before treating unknown values as typed — never loose typeof checks.
- HuK is not a validation framework — use Zod/Yup for schema validation; HuK for lightweight checks.
- Never reimplement utilities HuK already provides — check reference/api-reference.md first.
Import Strategies
// 1. Namespace (scripts, prototypes)
import { HuK } from '@vorlaxen-labs/huk-js';
HuK.string.slugify('Merhaba Dünya!');
// 2. Named modules (recommended for backends)
import { string, object, number } from '@vorlaxen-labs/huk-js';
string.slugify('Hello World');
object.get(user, 'profile.name', 'Anonymous');
// 3. Sub-path (smallest bundle)
import { string } from '@vorlaxen-labs/huk-js/string';
Module Overview
| Module |
Methods |
Primary Use |
string |
16 |
Slugify, mask, validate, case transforms, HTML escape |
number |
28 |
Clamp, format, currency, statistics, validation |
date |
14 |
Format, relative time, compare, manipulate |
array |
7 |
groupBy, unique, flatten, shuffle, compact |
object |
4 |
get (path access), pick, clone, merge |
is |
6 |
Runtime type guards with narrowing |
fn |
8 |
debounce, throttle, memoize, retry, sleep, pipe, compose, once |
crypto |
8 |
UUID, SHA-256 hash, base64, validate.* |
storage |
4 |
Browser localStorage wrapper |
Quick Examples
import { string, object, number, HuK } from '@vorlaxen-labs/huk-js';
// Turkish-aware slugify
string.slugify('Merhaba Dünya!'); // 'merhaba-dunya'
// PII masking
string.mask('4444555566667777', { visibleEnd: 4 });
// Input validation
string.isEmail(email);
string.isStrongPassword(password);
// Safe nested access
const page = object.get(req.query, 'page', 1);
const search = object.get(req.query, 'search');
// Type-safe query parsing
const searchQuery = object.get(req.query, 'search');
const searchTerm =
HuK.is.string(searchQuery) && searchQuery.trim().length > 0
? searchQuery.trim()
: undefined;
// Number formatting
number.currency(1234.5, { currency: 'TRY', locale: 'tr-TR' });
number.clamp(value, 0, 100);
// Array grouping
array.groupBy(orders, o => o.status);
// Async helpers
await fn.retry(() => fetchData(), 3, 1000);
const debouncedSearch = fn.debounce(search, 300);
Sub-Path Imports
| Import Path |
Module |
@vorlaxen-labs/huk-js/string |
String utilities |
@vorlaxen-labs/huk-js/number |
Number utilities |
@vorlaxen-labs/huk-js/date |
Date utilities |
@vorlaxen-labs/huk-js/array |
Array utilities |
@vorlaxen-labs/huk-js/object |
Object utilities |
@vorlaxen-labs/huk-js/is |
Type guards |
@vorlaxen-labs/huk-js/fn |
Function utilities |
@vorlaxen-labs/huk-js/crypto |
Crypto utilities |
@vorlaxen-labs/huk-js/storage |
Browser localStorage utilities |
HuK + BaR Pattern
import { object, string } from '@vorlaxen-labs/huk-js';
app.get('/api/users', async (req, res) => {
const search = object.get(req.query, 'search', '');
const sanitized = string.isEmpty(search) ? undefined : search.trim();
const users = await userService.search(sanitized);
return res.builder.as.ok(users).build();
});
When NOT to Use HuK
- Full schema validation → Zod, Yup, class-validator
- Timezone-aware dates → date-fns, Luxon, Temporal
- Entire lodash surface area → HuK is intentionally focused
Reference Documentation
| Topic |
File |
| Installation & first imports |
reference/getting-started.md |
| Complete method listing |
reference/api-reference.md |
| Import style comparison |
reference/import-strategies.md |
Type guards (HuK.is) |
reference/is-type-guards.md |
| String utilities |
reference/string-utils.md |
| Number utilities |
reference/number-utils.md |
| Object utilities |
reference/object-utils.md |
| Array utilities |
reference/array-utils.md |
| Date utilities |
reference/date-utils.md |
| Crypto utilities |
reference/crypto-utils.md |
| Function utilities |
reference/function-utils.md |
| Storage utilities |
reference/storage-utils.md |
| Production patterns |
reference/recipes.md |
| TypeScript types |
reference/typescript.md |
1---2name: huk-js3description: Zero-dependency TypeScript utility library (@vorlaxen-labs/huk-js). Nine modules: string, number, date, array, object, is, fn, crypto, storage. Tree-shakeable, Turkish-aware slugify, PII masking. Use when writing utils, validation, slugify, debounce/throttle, type guards, or replacing ad-hoc utils/ folders.4---5# HuK (Helper Utility Kit)67**Package:** `@vorlaxen-labs/huk-js` v1.1.2 · **Zero runtime deps** · **Tree-shakeable**89Nine focused utility namespaces replacing scattered `utils/` folders with a single, type-safe API.1011---1213## Critical Rules14151. **Prefer named module imports** for backends: `import { string, object } from '@vorlaxen-labs/huk-js'`.162. **Use sub-path imports** for smallest bundle: `import { string } from '@vorlaxen-labs/huk-js/string'`.173. **Use `HuK.is.*` type guards** before treating unknown values as typed — never loose `typeof` checks.184. **HuK is not a validation framework** — use Zod/Yup for schema validation; HuK for lightweight checks.195. **Never reimplement utilities HuK already provides** — check [reference/api-reference.md](reference/api-reference.md) first.2021---2223## Import Strategies2425```typescript26// 1. Namespace (scripts, prototypes)27import { HuK } from '@vorlaxen-labs/huk-js';28HuK.string.slugify('Merhaba Dünya!');2930// 2. Named modules (recommended for backends)31import { string, object, number } from '@vorlaxen-labs/huk-js';32string.slugify('Hello World');33object.get(user, 'profile.name', 'Anonymous');3435// 3. Sub-path (smallest bundle)36import { string } from '@vorlaxen-labs/huk-js/string';37```3839---4041## Module Overview4243| Module | Methods | Primary Use |44|---|---|---|45| `string` | 16 | Slugify, mask, validate, case transforms, HTML escape |46| `number` | 28 | Clamp, format, currency, statistics, validation |47| `date` | 14 | Format, relative time, compare, manipulate |48| `array` | 7 | groupBy, unique, flatten, shuffle, compact |49| `object` | 4 | get (path access), pick, clone, merge |50| `is` | 6 | Runtime type guards with narrowing |51| `fn` | 8 | debounce, throttle, memoize, retry, sleep, pipe, compose, once |52| `crypto` | 8 | UUID, SHA-256 hash, base64, validate.* |53| `storage` | 4 | Browser `localStorage` wrapper |5455---5657## Quick Examples5859```typescript60import { string, object, number, HuK } from '@vorlaxen-labs/huk-js';6162// Turkish-aware slugify63string.slugify('Merhaba Dünya!'); // 'merhaba-dunya'6465// PII masking66string.mask('4444555566667777', { visibleEnd: 4 });6768// Input validation69string.isEmail(email);70string.isStrongPassword(password);7172// Safe nested access73const page = object.get(req.query, 'page', 1);74const search = object.get(req.query, 'search');7576// Type-safe query parsing77const searchQuery = object.get(req.query, 'search');78const searchTerm =79 HuK.is.string(searchQuery) && searchQuery.trim().length > 080 ? searchQuery.trim()81 : undefined;8283// Number formatting84number.currency(1234.5, { currency: 'TRY', locale: 'tr-TR' });85number.clamp(value, 0, 100);8687// Array grouping88array.groupBy(orders, o => o.status);8990// Async helpers91await fn.retry(() => fetchData(), 3, 1000);92const debouncedSearch = fn.debounce(search, 300);93```9495---9697## Sub-Path Imports9899| Import Path | Module |100|---|---|101| `@vorlaxen-labs/huk-js/string` | String utilities |102| `@vorlaxen-labs/huk-js/number` | Number utilities |103| `@vorlaxen-labs/huk-js/date` | Date utilities |104| `@vorlaxen-labs/huk-js/array` | Array utilities |105| `@vorlaxen-labs/huk-js/object` | Object utilities |106| `@vorlaxen-labs/huk-js/is` | Type guards |107| `@vorlaxen-labs/huk-js/fn` | Function utilities |108| `@vorlaxen-labs/huk-js/crypto` | Crypto utilities |109| `@vorlaxen-labs/huk-js/storage` | Browser localStorage utilities |110111---112113## HuK + BaR Pattern114115```typescript116import { object, string } from '@vorlaxen-labs/huk-js';117118app.get('/api/users', async (req, res) => {119 const search = object.get(req.query, 'search', '');120 const sanitized = string.isEmpty(search) ? undefined : search.trim();121 const users = await userService.search(sanitized);122 return res.builder.as.ok(users).build();123});124```125126---127128## When NOT to Use HuK129130- Full schema validation → Zod, Yup, class-validator131- Timezone-aware dates → date-fns, Luxon, Temporal132- Entire lodash surface area → HuK is intentionally focused133134---135136## Reference Documentation137138| Topic | File |139|---|---|140| Installation & first imports | [reference/getting-started.md](reference/getting-started.md) |141| Complete method listing | [reference/api-reference.md](reference/api-reference.md) |142| Import style comparison | [reference/import-strategies.md](reference/import-strategies.md) |143| Type guards (`HuK.is`) | [reference/is-type-guards.md](reference/is-type-guards.md) |144| String utilities | [reference/string-utils.md](reference/string-utils.md) |145| Number utilities | [reference/number-utils.md](reference/number-utils.md) |146| Object utilities | [reference/object-utils.md](reference/object-utils.md) |147| Array utilities | [reference/array-utils.md](reference/array-utils.md) |148| Date utilities | [reference/date-utils.md](reference/date-utils.md) |149| Crypto utilities | [reference/crypto-utils.md](reference/crypto-utils.md) |150| Function utilities | [reference/function-utils.md](reference/function-utils.md) |151| Storage utilities | [reference/storage-utils.md](reference/storage-utils.md) |152| Production patterns | [reference/recipes.md](reference/recipes.md) |153| TypeScript types | [reference/typescript.md](reference/typescript.md) |