UNPKG

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