All files / src/utils helper.ts

96.15% Statements 50/52
95.83% Branches 23/24
100% Functions 9/9
96.15% Lines 50/52

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 531x 3x 96x 3x 3x 1x 1x 308x 308x 1x 1x 192x 192x 192x     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 18x 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);
  });
}