Utilities
Helper functions for common tasks.
String Utilities
sdk.utils.slugify(text)
Convert text to URL-friendly slug.
sdk.utils.slugify('Hello World!'); // 'hello-world'
sdk.utils.slugify('This & That'); // 'this-and-that'
sdk.utils.slugify('Café au Lait'); // 'cafe-au-lait'sdk.utils.truncate(text, length, suffix)
Truncate text to specified length.
sdk.utils.truncate('This is a long sentence', 10); // 'This is a...'
sdk.utils.truncate('This is a long sentence', 10, ' →'); // 'This is a →'sdk.utils.stripTags(html)
Remove HTML tags from string.
sdk.utils.stripTags('<p>Hello <strong>World</strong></p>'); // 'Hello World'sdk.utils.escapeHtml(text)
Escape HTML entities.
sdk.utils.escapeHtml('<script>alert("XSS")</script>');
// '<script>alert("XSS")</script>'sdk.utils.excerpt(content, length)
Generate excerpt from HTML content.
const html = '<p>First paragraph.</p><p>Second paragraph with more text.</p>';
sdk.utils.excerpt(html, 30); // 'First paragraph. Second...'Date Utilities
sdk.utils.formatDate(date, format)
Format a date.
const date = new Date('2024-03-15T10:30:00Z');
sdk.utils.formatDate(date); // 'March 15, 2024'
sdk.utils.formatDate(date, 'short'); // '3/15/24'
sdk.utils.formatDate(date, 'long'); // 'Friday, March 15, 2024'
sdk.utils.formatDate(date, 'iso'); // '2024-03-15'
sdk.utils.formatDate(date, 'YYYY-MM-DD'); // '2024-03-15'
sdk.utils.formatDate(date, 'DD/MM/YYYY'); // '15/03/2024'
sdk.utils.formatDate(date, 'MMM D, YYYY'); // 'Mar 15, 2024'sdk.utils.timeAgo(date)
Get relative time string.
const now = new Date();
const yesterday = new Date(now - 86400000);
const lastWeek = new Date(now - 604800000);
sdk.utils.timeAgo(now); // 'just now'
sdk.utils.timeAgo(yesterday); // '1 day ago'
sdk.utils.timeAgo(lastWeek); // '1 week ago'sdk.utils.parseDate(string)
Parse date string.
sdk.utils.parseDate('2024-03-15'); // Date object
sdk.utils.parseDate('March 15, 2024'); // Date object
sdk.utils.parseDate('15/03/2024', 'DD/MM/YYYY'); // Date objectNumber Utilities
sdk.utils.formatNumber(number)
Format number with locale.
sdk.utils.formatNumber(1234567); // '1,234,567'
sdk.utils.formatNumber(1234.56); // '1,234.56'sdk.utils.formatBytes(bytes)
Format bytes to human readable.
sdk.utils.formatBytes(1024); // '1 KB'
sdk.utils.formatBytes(1048576); // '1 MB'
sdk.utils.formatBytes(1073741824); // '1 GB'
sdk.utils.formatBytes(1536); // '1.5 KB'sdk.utils.formatCurrency(amount, currency)
Format currency.
sdk.utils.formatCurrency(29.99); // '$29.99'
sdk.utils.formatCurrency(29.99, 'EUR'); // '€29.99'
sdk.utils.formatCurrency(1000, 'GBP'); // '£1,000.00'ID Generation
sdk.utils.generateId()
Generate unique ID.
const id = sdk.utils.generateId(); // 'x7k2m9p4q1n8'sdk.utils.uuid()
Generate UUID v4.
const uuid = sdk.utils.uuid(); // '550e8400-e29b-41d4-a716-446655440000'URL Utilities
sdk.utils.parseUrl(url)
Parse URL into components.
const parsed = sdk.utils.parseUrl('https://example.com/path?foo=bar#section');
// {
// protocol: 'https',
// host: 'example.com',
// path: '/path',
// query: { foo: 'bar' },
// hash: 'section'
// }sdk.utils.buildUrl(base, params)
Build URL with query parameters.
sdk.utils.buildUrl('/search', { q: 'hello', page: 2 });
// '/search?q=hello&page=2'
sdk.utils.buildUrl('https://api.example.com/items', {
filter: 'active',
sort: 'name'
});
// 'https://api.example.com/items?filter=active&sort=name'sdk.utils.isAbsoluteUrl(url)
Check if URL is absolute.
sdk.utils.isAbsoluteUrl('https://example.com'); // true
sdk.utils.isAbsoluteUrl('/about'); // false
sdk.utils.isAbsoluteUrl('about.html'); // falseArray Utilities
sdk.utils.chunk(array, size)
Split array into chunks.
sdk.utils.chunk([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]]sdk.utils.unique(array)
Remove duplicates.
sdk.utils.unique([1, 2, 2, 3, 3, 3]); // [1, 2, 3]sdk.utils.shuffle(array)
Randomly shuffle array.
sdk.utils.shuffle([1, 2, 3, 4, 5]); // [3, 1, 5, 2, 4] (random order)sdk.utils.groupBy(array, key)
Group array by key.
const items = [
{ type: 'fruit', name: 'apple' },
{ type: 'fruit', name: 'banana' },
{ type: 'vegetable', name: 'carrot' }
];
sdk.utils.groupBy(items, 'type');
// {
// fruit: [{ type: 'fruit', name: 'apple' }, { type: 'fruit', name: 'banana' }],
// vegetable: [{ type: 'vegetable', name: 'carrot' }]
// }Object Utilities
sdk.utils.pick(object, keys)
Pick specific keys from object.
const user = { id: 1, name: 'John', email: '[email protected]', password: 'secret' };
sdk.utils.pick(user, ['id', 'name', 'email']);
// { id: 1, name: 'John', email: '[email protected]' }sdk.utils.omit(object, keys)
Omit specific keys from object.
sdk.utils.omit(user, ['password']);
// { id: 1, name: 'John', email: '[email protected]' }sdk.utils.deepClone(object)
Deep clone an object.
const original = { a: { b: { c: 1 } } };
const clone = sdk.utils.deepClone(original);
clone.a.b.c = 2;
console.log(original.a.b.c); // Still 1sdk.utils.merge(target, ...sources)
Deep merge objects.
const defaults = { a: 1, b: { c: 2 } };
const overrides = { b: { d: 3 } };
sdk.utils.merge(defaults, overrides);
// { a: 1, b: { c: 2, d: 3 } }Validation Utilities
sdk.utils.isEmail(string)
Validate email format.
sdk.utils.isEmail('[email protected]'); // true
sdk.utils.isEmail('invalid-email'); // falsesdk.utils.isUrl(string)
Validate URL format.
sdk.utils.isUrl('https://example.com'); // true
sdk.utils.isUrl('not a url'); // falsesdk.utils.isEmpty(value)
Check if value is empty.
sdk.utils.isEmpty(''); // true
sdk.utils.isEmpty([]); // true
sdk.utils.isEmpty({}); // true
sdk.utils.isEmpty(null); // true
sdk.utils.isEmpty(undefined); // true
sdk.utils.isEmpty('hello'); // false
sdk.utils.isEmpty([1, 2]); // falseAsync Utilities
sdk.utils.sleep(ms)
Pause execution.
await sdk.utils.sleep(1000); // Wait 1 secondsdk.utils.retry(fn, options)
Retry a function on failure.
const result = await sdk.utils.retry(
async () => {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('Failed');
return response.json();
},
{
retries: 3,
delay: 1000,
backoff: 2 // Exponential backoff multiplier
}
);sdk.utils.debounce(fn, delay)
Debounce a function.
const debouncedSearch = sdk.utils.debounce(async (query) => {
const results = await search(query);
displayResults(results);
}, 300);
// Only executes after 300ms of no calls
input.addEventListener('input', (e) => debouncedSearch(e.target.value));sdk.utils.throttle(fn, limit)
Throttle a function.
const throttledScroll = sdk.utils.throttle(() => {
updateScrollPosition();
}, 100);
// Executes at most once per 100ms
window.addEventListener('scroll', throttledScroll);