transformable
Version:
Transforms plain objects to class instances and vice versa (a lightweight alternative to 'class-transformer')
38 lines • 1.5 kB
JavaScript
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