UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge

114 lines (112 loc) 5.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ClassTransformer_1 = require("./ClassTransformer"); var storage_1 = require("./storage"); var TypeMetadata_1 = require("./metadata/TypeMetadata"); var ExposeMetadata_1 = require("./metadata/ExposeMetadata"); var ExcludeMetadata_1 = require("./metadata/ExcludeMetadata"); var TransformMetadata_1 = require("./metadata/TransformMetadata"); /** * Defines a custom logic for value transformation. */ function Transform(transformFn, options) { return function (target, key) { var metadata = new TransformMetadata_1.TransformMetadata(target.constructor, key, transformFn, options); storage_1.defaultMetadataStorage.addTransformMetadata(metadata); }; } exports.Transform = Transform; /** * Specifies a type of the property. * The given TypeFunction can return a constructor. A discriminator can be given in the options. */ function Type(typeFunction, options) { return function (target, key) { var type = Reflect.getMetadata("design:type", target, key); var metadata = new TypeMetadata_1.TypeMetadata(target.constructor, key, type, typeFunction, options); storage_1.defaultMetadataStorage.addTypeMetadata(metadata); }; } exports.Type = Type; /** * Marks property as included in the process of transformation. By default it includes the property for both * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types * you want to skip this property. */ function Expose(options) { return function (object, propertyName) { var metadata = new ExposeMetadata_1.ExposeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {}); storage_1.defaultMetadataStorage.addExposeMetadata(metadata); }; } exports.Expose = Expose; /** * Marks property as excluded from the process of transformation. By default it excludes the property for both * constructorToPlain and plainToConstructor transformations, however you can specify on which of transformation types * you want to skip this property. */ function Exclude(options) { return function (object, propertyName) { var metadata = new ExcludeMetadata_1.ExcludeMetadata(object instanceof Function ? object : object.constructor, propertyName, options || {}); storage_1.defaultMetadataStorage.addExcludeMetadata(metadata); }; } exports.Exclude = Exclude; /** * Transform the object from class to plain object and return only with the exposed properties. */ function TransformClassToPlain(params) { return function (target, propertyKey, descriptor) { var classTransformer = new ClassTransformer_1.ClassTransformer(); var originalMethod = descriptor.value; descriptor.value = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = originalMethod.apply(this, args); var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function"; return isPromise ? result.then(function (data) { return classTransformer.classToPlain(data, params); }) : classTransformer.classToPlain(result, params); }; }; } exports.TransformClassToPlain = TransformClassToPlain; /** * Return the class instance only with the exposed properties. */ function TransformClassToClass(params) { return function (target, propertyKey, descriptor) { var classTransformer = new ClassTransformer_1.ClassTransformer(); var originalMethod = descriptor.value; descriptor.value = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = originalMethod.apply(this, args); var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function"; return isPromise ? result.then(function (data) { return classTransformer.classToClass(data, params); }) : classTransformer.classToClass(result, params); }; }; } exports.TransformClassToClass = TransformClassToClass; /** * Return the class instance only with the exposed properties. */ function TransformPlainToClass(classType, params) { return function (target, propertyKey, descriptor) { var classTransformer = new ClassTransformer_1.ClassTransformer(); var originalMethod = descriptor.value; descriptor.value = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = originalMethod.apply(this, args); var isPromise = !!result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function"; return isPromise ? result.then(function (data) { return classTransformer.plainToClass(classType, data, params); }) : classTransformer.plainToClass(classType, result, params); }; }; } exports.TransformPlainToClass = TransformPlainToClass; //# sourceMappingURL=decorators.js.map