{"version":3,"file":"transformers.mjs","names":[],"sources":["../../src/utils/transformers.ts"],"sourcesContent":["import { Transform, TransformationType } from 'class-transformer'\nimport type { ValidationOptions } from 'class-validator'\nimport { buildMessage, isString, ValidateBy } from 'class-validator'\n\nimport { Metadata } from '../storage/Metadata'\n\n/*\n * Decorator that transforms to and from a metadata instance.\n */\nexport function MetadataTransformer() {\n  return Transform(({ value, type }) => {\n    if (type === TransformationType.CLASS_TO_PLAIN) {\n      return { ...value.data }\n    }\n\n    if (type === TransformationType.PLAIN_TO_CLASS) {\n      return new Metadata(value)\n    }\n\n    if (type === TransformationType.CLASS_TO_CLASS) {\n      return new Metadata({ ...value.data })\n    }\n  })\n}\n\n/**\n * Decorator that transforms to and from a date instance.\n */\nexport function DateTransformer() {\n  return Transform(({ value, type }) => {\n    if (value === undefined) return undefined\n    if (type === TransformationType.CLASS_TO_PLAIN) {\n      return value.toISOString()\n    }\n\n    if (type === TransformationType.PLAIN_TO_CLASS) {\n      return new Date(value)\n    }\n\n    if (type === TransformationType.CLASS_TO_CLASS) {\n      return new Date(value.getTime())\n    }\n  })\n}\n\n/**\n * Checks if a given value is a Map\n */\nexport function IsMap(validationOptions?: ValidationOptions): PropertyDecorator {\n  return ValidateBy(\n    {\n      name: 'isMap',\n      validator: {\n        validate: (value: unknown): boolean => value instanceof Map,\n        defaultMessage: buildMessage((eachPrefix) => `${eachPrefix}$property must be a Map`, validationOptions),\n      },\n    },\n    validationOptions\n  )\n}\n\n/**\n * Checks if a given value is a string or string array.\n */\nexport function IsStringOrStringArray(validationOptions?: Omit<ValidationOptions, 'each'>): PropertyDecorator {\n  return ValidateBy(\n    {\n      name: 'isStringOrStringArray',\n      validator: {\n        validate: (value): boolean => isString(value) || (Array.isArray(value) && value.every((v) => isString(v))),\n        defaultMessage: buildMessage(\n          (eachPrefix) => `${eachPrefix}$property must be a string or string array`,\n          validationOptions\n        ),\n      },\n    },\n    validationOptions\n  )\n}\n"],"mappings":";;;;AASA,SAAgB,sBAAsB;CACpC,OAAO,WAAW,EAAE,OAAO,WAAW;EACpC,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,EAAE,GAAG,MAAM,KAAK;EAGzB,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,IAAI,SAAS,KAAK;EAG3B,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,IAAI,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC;CAEzC,CAAC;AACH;;;;AAKA,SAAgB,kBAAkB;CAChC,OAAO,WAAW,EAAE,OAAO,WAAW;EACpC,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,MAAM,YAAY;EAG3B,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,IAAI,KAAK,KAAK;EAGvB,IAAI,SAAS,mBAAmB,gBAC9B,OAAO,IAAI,KAAK,MAAM,QAAQ,CAAC;CAEnC,CAAC;AACH;;;;AAqBA,SAAgB,sBAAsB,mBAAwE;CAC5G,OAAO,WACL;EACE,MAAM;EACN,WAAW;GACT,WAAW,UAAmB,SAAS,KAAK,KAAM,MAAM,QAAQ,KAAK,KAAK,MAAM,OAAO,MAAM,SAAS,CAAC,CAAC;GACxG,gBAAgB,cACb,eAAe,GAAG,WAAW,6CAC9B,iBACF;EACF;CACF,GACA,iBACF;AACF"}