import type { ApiPropertyOptions } from '@nestjs/swagger'; import * as ValidatorJS from 'validator'; type RequireField = T & Required>; interface IFieldOptions { each?: boolean; swagger?: boolean; nullable?: boolean; group?: string[]; message?: string; skipValidation?: boolean; /** * i18n 翻译键 * 用于通过 i18n key 进行多语言转换 * * @example * // 使用 i18n key * @StringField({ * fieldI18n: 'user.username', * }) * username: string; * * // 翻译文件中定义: * // { * // "user": { * // "username": "用户名" // 或 "Username" for English * // } * // } */ fieldI18n?: string; /** * 字段标签(多语言) * 用于审计日志、验证错误消息、UI 显示等 * 注意:如果同时提供了 fieldI18n 和 fieldLabel,fieldLabel 优先级更高 */ fieldLabel?: string | { zh?: string; en?: string; [lang: string]: string | undefined; }; /** * 字段描述(多语言) * 用于 API 文档、审计日志等 * 支持两种形式: * 1. i18n key: "user.username.description" * 2. 直接多语言对象: { zh: '...', en: '...' } */ fieldDescription?: string | { zh?: string; en?: string; [lang: string]: string | undefined; }; /** * 示例值 * 用于 API 文档 */ fieldExample?: any; /** * 值标签映射(多语言) * 用于枚举、布尔值的友好显示(审计日志、UI) */ valueLabels?: { [value: string]: string | { zh?: string; en?: string; [lang: string]: string | undefined; }; }; /** * 格式化函数 * 用于自定义显示格式(审计日志) * 注意:命名为 displayFormatter 避免与 ApiPropertyOptions.format 冲突 */ displayFormatter?: (value: any, language?: string) => string; /** * 是否敏感字段 * 用于审计日志脱敏 */ sensitive?: boolean; } interface INumberFieldOptions extends IFieldOptions { min?: number; max?: number; int?: boolean; isPositive?: boolean; } interface IDateFieldOptions extends IFieldOptions { minDate?: Date | (() => Date); maxDate?: Date | (() => Date); } interface IStringFieldOptions extends IFieldOptions { minLength?: number; maxLength?: number; toLowerCase?: boolean; toUpperCase?: boolean; } interface IEmailFieldOptions { emailOptions?: ValidatorJS.IsEmailOptions; } interface IIPFieldOptions { version?: ValidatorJS.IPVersion; } interface IURLFieldOptions { urlOptions?: ValidatorJS.IsURLOptions; simpleUrl?: boolean; } interface IFQDNFieldOptions extends ValidatorJS.IsFQDNOptions { } type IClassFieldOptions = IFieldOptions; type IBooleanFieldOptions = IFieldOptions; type IEnumFieldOptions = IFieldOptions; export declare function NumberField(options?: Omit & INumberFieldOptions): PropertyDecorator; export declare function NumberFieldOptional(options?: Omit & INumberFieldOptions): PropertyDecorator; export declare function StringField(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function StringFieldOptional(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function PasswordField(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function PasswordFieldOptional(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function BooleanField(options?: Omit & IBooleanFieldOptions): PropertyDecorator; export declare function BooleanFieldOptional(options?: Omit & IBooleanFieldOptions): PropertyDecorator; export declare function TranslationsField(options: RequireField, 'type'> & IFieldOptions): PropertyDecorator; export declare function TranslationsFieldOptional(options: RequireField, 'type'> & IFieldOptions): PropertyDecorator; export declare function TmpKeyField(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function TmpKeyFieldOptional(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function getEnumDescription(enumType: any): string; export declare function EnumField(getEnum: () => TEnum, options?: Omit & IEnumFieldOptions): PropertyDecorator; export declare function ClassField(getClass: () => TClass, options?: Omit & IClassFieldOptions): PropertyDecorator; export declare function EnumFieldOptional(getEnum: () => TEnum, options?: Omit & IEnumFieldOptions): PropertyDecorator; export declare function ClassFieldOptional(getClass: () => TClass, options?: Omit & IClassFieldOptions): PropertyDecorator; export declare function EmailField(options?: Omit & IStringFieldOptions & IEmailFieldOptions): PropertyDecorator; export declare function EmailFieldOptional(options?: Omit & IStringFieldOptions & IEmailFieldOptions): PropertyDecorator; export declare function UUIDField(options?: Omit & IFieldOptions): PropertyDecorator; export declare function UUIDFieldOptional(options?: Omit & IFieldOptions): PropertyDecorator; export declare function URLField(options?: Omit & IURLFieldOptions & IStringFieldOptions): PropertyDecorator; export declare function URLFieldOptional(options?: Omit & IURLFieldOptions & IStringFieldOptions): PropertyDecorator; export declare function FQDNField(options?: Omit & IFQDNFieldOptions & IStringFieldOptions): PropertyDecorator; export declare function FQDNFieldOptional(options?: Omit & IFQDNFieldOptions & IStringFieldOptions): PropertyDecorator; export declare function DateField(options?: Omit & IDateFieldOptions): PropertyDecorator; export declare function DateFieldOptional(options?: Omit & IDateFieldOptions): PropertyDecorator; export declare function IpFieldOptional(options?: Omit & IIPFieldOptions & IStringFieldOptions): PropertyDecorator; export declare function IpField(options?: Omit & IStringFieldOptions & IIPFieldOptions): PropertyDecorator; export declare function ObjectField(options?: Omit & IFieldOptions): PropertyDecorator; export declare function ObjectFieldOptional(options?: Omit & IFieldOptions): PropertyDecorator; export declare function TimeZoneField(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function TimeZoneFieldOptional(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function LocaleField(options?: Omit & IStringFieldOptions): PropertyDecorator; export declare function LocaleFieldOptional(options?: Omit & IStringFieldOptions): PropertyDecorator; /** * @Field 装饰器 * * 用于只需要元数据(Swagger、审计、UI配置)而不需要验证的字段 * * @example * // 只需要 Swagger 文档和审计元数据,不需要验证 * @Field({ * label: { zh: '备注', en: 'Remarks' }, * description: { zh: '用户备注信息', en: 'User remarks' }, * ui: { showInList: true, showInDetail: true }, * }) * remarks: string; */ export declare function Field(options?: Omit & IFieldOptions & { type?: 'string' | 'number' | 'boolean' | 'object' | 'array'; }): PropertyDecorator; /** * @FieldOptional 装饰器 * * 可选的元数据专用字段 */ export declare function FieldOptional(options?: Omit & IFieldOptions & { type?: 'string' | 'number' | 'boolean' | 'object' | 'array'; }): PropertyDecorator; export {};