Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 1x 3x 96x 3x 3x 1x 1x 293x 293x 1x 1x 190x 190x 190x 1x 1x 9x 9x 1x 1x 8x 8x 1x 1x 38x 38x 1x 1x 7x 7x 7x 7x 1x 1x 7x 1x 1x 5x 1x 1x 1x 1x 15x 13x 18x 11x 11x 7x 13x 13x | export function generateEventId(): string {
return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {
return ((Math.random() * 16) | 0).toString(16);
});
}
export function now(): number {
return Date.now();
}
export function uuid(): string {
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
return crypto.randomUUID().replace(/-/g, '');
}
return generateEventId();
}
export function isFunction(fn: unknown): fn is (...args: unknown[]) => unknown {
return typeof fn === 'function';
}
export function isString(value: unknown): value is string {
return typeof value === 'string';
}
export function isObject(value: unknown): value is Record<string, unknown> {
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
export function safeGet<T>(fn: () => T, defaultValue: T): T {
try {
const result = fn();
return result === undefined ? defaultValue : result;
} catch {
return defaultValue;
}
}
export function truncate(str: string, maxLen: number): string {
if (str.length <= maxLen) return str;
return str.slice(0, maxLen) + '...';
}
export function matchPatterns(value: string, patterns: (string | RegExp)[]): boolean {
if (!patterns || patterns.length === 0) return false;
return patterns.some(pattern => {
if (typeof pattern === 'string') {
return value.includes(pattern);
}
return pattern.test(value);
});
}
|