import {Type} from '@nestjs/common'; import {getColumnsMapper, getPropertiesMapper} from './decorator.utils'; function assignWithMapper(dst: any, src: any, mapper: Record) { if (!mapper) { return Object.assign(dst, src); } for (const key of Object.keys(src)) { const dstKey = mapper[key] || key; dst[dstKey] = src[key]; } return dst; } export function transformTo(target: Type, entity: any[]): T[]; export function transformTo(target: Type, entity: any): T; export function transformTo(target: Type, entity: any): T | T[] { if (!target || !(target && typeof target === 'function') || !entity) { return entity; } const mapper = getColumnsMapper(new target()); if (Array.isArray(entity)) { return entity.map((entity) => assignWithMapper(new target(), entity, mapper)); } return assignWithMapper(new target(), entity, mapper); } export function transformFrom(target: Type, entity: any[]): T[]; export function transformFrom(target: Type, entity: any): T; export function transformFrom(target: Type, entity: any): T | T[] { if (!target || !(target && typeof target === 'function') || !entity) { return entity; } const mapper = getPropertiesMapper(new target()); if (Array.isArray(entity)) { return entity.map((entity) => assignWithMapper(new target(), entity, mapper)); } return assignWithMapper(new target(), entity, mapper); }