UNPKG

transformable

Version:

Transforms plain objects to class instances and vice versa (a lightweight alternative to 'class-transformer')

38 lines 1.5 kB
import { plainToInstance, instanceToPlain } from './functions'; import { setTransformation } from './storage'; export function Transform(transformation) { return function (targetPrototype, attributeName) { setTransformation(targetPrototype, attributeName, transformation); }; } export function TransformDate() { return Transform({ input: (sourceDate) => new Date(sourceDate) }); } export function TransformSet() { return Transform({ input: (sourceArray) => new Set(sourceArray), output: (sourceSet) => Array.from(sourceSet) }); } export function TransformInstance(classProvider, { excludeOutput = false } = {}) { return Transform({ input: (sourcePlain, { source }) => plainToInstance(sourcePlain, classProvider(), source), output: (sourceInstance, { target }) => !excludeOutput ? instanceToPlain(sourceInstance, target) : undefined }); } export function TransformInstances(classProvider, { excludeOutput = false } = {}) { return Transform({ input: (sourcePlains, { source }) => sourcePlains.map((sourcePlain) => plainToInstance(sourcePlain, classProvider(), source)), output: (sourceInstances, { target }) => !excludeOutput ? sourceInstances.map((sourceInstance) => instanceToPlain(sourceInstance, target)) : undefined }); } export function ExcludeOutput() { return Transform({ output: (_sourceValue) => undefined }); } //# sourceMappingURL=decorators.js.map