import { IsIn, IsObject, IsOptional, IsString, MaxLength } from 'class-validator'; /** 客户端报错严重级别 */ export const CLIENT_ERROR_LEVELS = ['fatal', 'error', 'warn'] as const; export type ClientErrorLevel = (typeof CLIENT_ERROR_LEVELS)[number]; /** 客户端报错类别 */ export const CLIENT_ERROR_CATEGORIES = [ 'js_error', 'unhandled_rejection', 'api_error', 'validation_error', 'network', 'render', 'bridge', 'other', ] as const; export type ClientErrorCategory = (typeof CLIENT_ERROR_CATEGORIES)[number]; export class ReportClientErrorDto { @IsIn(CLIENT_ERROR_LEVELS) level!: ClientErrorLevel; @IsIn(CLIENT_ERROR_CATEGORIES) category!: ClientErrorCategory; @IsString() @MaxLength(1000) message!: string; @IsOptional() @IsString() @MaxLength(4000) stack?: string; @IsOptional() @IsString() @MaxLength(128) pagePath?: string; @IsOptional() @IsString() @MaxLength(64) clientApp?: string; @IsOptional() @IsObject() extra?: Record; }