ts-convict
Version:
Model style decorators for your convict config.
49 lines (48 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class Reflector {
constructor() {
const reflectInstalled = Reflect && Reflect.getMetadata ? true : false;
if (!reflectInstalled) {
throw new Error("reflect-metadata should be installed properly");
}
this._reflect = Reflect;
}
isConstructor(target) {
return (!!target.prototype &&
!!target.prototype.constructor.name &&
target instanceof Function);
}
isConfigClass(target) {
const hasProps = this._reflect.hasMetadata("tsconvict:properties", target);
const hasSchema = this._reflect.hasMetadata("tsconvict:schema", target);
return hasProps || hasSchema;
}
getTsType(target, propertyName) {
return this._reflect.getMetadata("design:type", target, propertyName);
}
getConvictMetaForProperty(target, propertyName) {
return this._reflect.getMetadata("tsconvict:property", target, propertyName);
}
setConvictMetaForProperty(schemaObj, target, propertyName) {
return this._reflect.defineMetadata("tsconvict:property", schemaObj, target, propertyName);
}
setConvictMetaForClass(schemaObj, target) {
return this._reflect.defineMetadata("tsconvict:schema", schemaObj, target);
}
getConvictMetaForClass(target) {
return this._reflect.getMetadata("tsconvict:schema", target) || null;
}
setPropertyForClass(target, propertyName) {
let props = this.getClassProperties(target);
if (props.length === 0) {
this._reflect.defineMetadata("tsconvict:properties", [], target.constructor);
props = this.getClassProperties(target);
}
return props.push(propertyName);
}
getClassProperties(target) {
return (this._reflect.getMetadata("tsconvict:properties", target.constructor) || []);
}
}
exports.default = new Reflector();