@cyber-rom/nestjs-scylladb
Version:
Based on https://www.npmjs.com/package/@ouato/nestjs-express-cassandra With support columns name mapping
45 lines (36 loc) • 1.51 kB
text/typescript
import {Type} from '@nestjs/common';
import {getColumnsMapper, getPropertiesMapper} from './decorator.utils';
function assignWithMapper(dst: any, src: any, mapper: Record<string, string>) {
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<T>(target: Type<T>, entity: any[]): T[];
export function transformTo<T>(target: Type<T>, entity: any): T;
export function transformTo<T>(target: Type<T>, 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<T>(target: Type<T>, entity: any[]): T[];
export function transformFrom<T>(target: Type<T>, entity: any): T;
export function transformFrom<T>(target: Type<T>, 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);
}