UNPKG

5.31 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var ClassTransformer_1 = require("./ClassTransformer");
4var storage_1 = require("./storage");
5var TypeMetadata_1 = require("./metadata/TypeMetadata");
6var ExposeMetadata_1 = require("./metadata/ExposeMetadata");
7var ExcludeMetadata_1 = require("./metadata/ExcludeMetadata");
8var TransformMetadata_1 = require("./metadata/TransformMetadata");
9/**
10 * Defines a custom logic for value transformation.
11 */
12function Transform(transformFn, options) {
13 return function (target, key) {
14 var metadata = new TransformMetadata_1.TransformMetadata(target.constructor, key, transformFn, options);
15 storage_1.defaultMetadataStorage.addTransformMetadata(metadata);
16 };
17}
18exports.Transform = Transform;
19/**
20 * Specifies a type of the property.
21 * The given TypeFunction can return a constructor. A discriminator can be given in the options.
22 */
23function Type(typeFunction, options) {
24 return function (target, key) {
25 var type = Reflect.getMetadata("design:type", target, key);
26 var metadata = new TypeMetadata_1.TypeMetadata(target.constructor, key, type, typeFunction, options);
27 storage_1.defaultMetadataStorage.addTypeMetadata(metadata);
28 };
29}
30exports.Type = Type;
31/**
32 * Marks property as included in the process of transformation. By default it includes the property for both
33 * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types
34 * you want to skip this property.
35 */
36function Expose(options) {
37 return function (object, propertyName) {
38 var metadata = new ExposeMetadata_1.ExposeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {});
39 storage_1.defaultMetadataStorage.addExposeMetadata(metadata);
40 };
41}
42exports.Expose = Expose;
43/**
44 * Marks property as excluded from the process of transformation. By default it excludes the property for both
45 * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types
46 * you want to skip this property.
47 */
48function Exclude(options) {
49 return function (object, propertyName) {
50 var metadata = new ExcludeMetadata_1.ExcludeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {});
51 storage_1.defaultMetadataStorage.addExcludeMetadata(metadata);
52 };
53}
54exports.Exclude = Exclude;
55/**
56 * Transform the object from class to plain object and return only with the exposed properties.
57 */
58function TransformClassToPlain(params) {
59 return function (target, propertyKey, descriptor) {
60 var classTransformer = new ClassTransformer_1.ClassTransformer();
61 var originalMethod = descriptor.value;
62 descriptor.value = function () {
63 var args = [];
64 for (var _i = 0; _i < arguments.length; _i++) {
65 args[_i] = arguments[_i];
66 }
67 var result = originalMethod.apply(this, args);
68 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
69 return isPromise ? result.then(function (data) { return classTransformer.classToPlain(data, params); }) : classTransformer.classToPlain(result, params);
70 };
71 };
72}
73exports.TransformClassToPlain = TransformClassToPlain;
74/**
75 * Return the class instance only with the exposed properties.
76 */
77function TransformClassToClass(params) {
78 return function (target, propertyKey, descriptor) {
79 var classTransformer = new ClassTransformer_1.ClassTransformer();
80 var originalMethod = descriptor.value;
81 descriptor.value = function () {
82 var args = [];
83 for (var _i = 0; _i < arguments.length; _i++) {
84 args[_i] = arguments[_i];
85 }
86 var result = originalMethod.apply(this, args);
87 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
88 return isPromise ? result.then(function (data) { return classTransformer.classToClass(data, params); }) : classTransformer.classToClass(result, params);
89 };
90 };
91}
92exports.TransformClassToClass = TransformClassToClass;
93/**
94 * Return the class instance only with the exposed properties.
95 */
96function TransformPlainToClass(classType, params) {
97 return function (target, propertyKey, descriptor) {
98 var classTransformer = new ClassTransformer_1.ClassTransformer();
99 var originalMethod = descriptor.value;
100 descriptor.value = function () {
101 var args = [];
102 for (var _i = 0; _i < arguments.length; _i++) {
103 args[_i] = arguments[_i];
104 }
105 var result = originalMethod.apply(this, args);
106 var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function";
107 return isPromise ? result.then(function (data) { return classTransformer.plainToClass(classType, data, params); }) : classTransformer.plainToClass(classType, result, params);
108 };
109 };
110}
111exports.TransformPlainToClass = TransformPlainToClass;
112
113//# sourceMappingURL=decorators.js.map