UNPKG

transformable

Version:

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

47 lines 1.99 kB
"use strict"; 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