transformable
Version:
Transforms plain objects to class instances and vice versa (a lightweight alternative to 'class-transformer')
47 lines • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExcludeOutput = exports.TransformInstances = exports.TransformInstance = exports.TransformSet = exports.TransformDate = exports.Transform = void 0;
const functions_1 = require("./functions");
const storage_1 = require("./storage");
function Transform(transformation) {
return function (targetPrototype, attributeName) {
(0, storage_1.setTransformation)(targetPrototype, attributeName, transformation);
};
}
exports.Transform = Transform;
function TransformDate() {
return Transform({
input: (sourceDate) => new Date(sourceDate)
});
}
exports.TransformDate = TransformDate;
function TransformSet() {
return Transform({
input: (sourceArray) => new Set(sourceArray),
output: (sourceSet) => Array.from(sourceSet)
});
}
exports.TransformSet = TransformSet;
function TransformInstance(classProvider, { excludeOutput = false } = {}) {
return Transform({
input: (sourcePlain, { source }) => (0, functions_1.plainToInstance)(sourcePlain, classProvider(), source),
output: (sourceInstance, { target }) => !excludeOutput ? (0, functions_1.instanceToPlain)(sourceInstance, target) : undefined
});
}
exports.TransformInstance = TransformInstance;
function TransformInstances(classProvider, { excludeOutput = false } = {}) {
return Transform({
input: (sourcePlains, { source }) => sourcePlains.map((sourcePlain) => (0, functions_1.plainToInstance)(sourcePlain, classProvider(), source)),
output: (sourceInstances, { target }) => !excludeOutput
? sourceInstances.map((sourceInstance) => (0, functions_1.instanceToPlain)(sourceInstance, target))
: undefined
});
}
exports.TransformInstances = TransformInstances;
function ExcludeOutput() {
return Transform({
output: (_sourceValue) => undefined
});
}
exports.ExcludeOutput = ExcludeOutput;
//# sourceMappingURL=decorators.js.map