homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge
114 lines (112 loc) • 5.31 kB
JavaScript
;
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