@kephas/reflection
Version:
Provides reflection capabilities, like TypeInfoRegistry, ITypeInfo, and IProperty.
68 lines • 9.46 kB
JavaScript
import { ReflectionError } from "./reflectionError";
import { ValueElementInfo } from "./valueElementInfo";
/**
* Provides reflection information about a property.
*
* @export
* @class PropertyInfo
* @extends {ElementInfo}
* @implements {IPropertyInfo}
*/
export class PropertyInfo extends ValueElementInfo {
/**
* Creates an instance of PropertyInfo.
*
* @param {ITypeInfo} declaringType The declaring type.
* @param {string} name The element name.
* @param {string} [fullName] Optional. The full name of the element.
* @param {DisplayInfo} [displayInfo] Optional. The display information.
* @param {ITypeInfo} [valueType] The value type.
* @param {boolean} [canRead] True if the property can be read.
* @param {boolean} [canWrite] True if the property can be written.
* @param {boolean} [isRequired] True if the property requires a value to be set.
* @param {*} [defaultValue] The default value of the property.
* @param {ITypeInfoRegistry} [registry] The root type info registry.
* @memberof PropertyInfo
*/
constructor({ declaringType, name, fullName, displayInfo, valueType, canRead, canWrite, isRequired, isStatic, defaultValue, registry, ...args }) {
super({ name, fullName, displayInfo, valueType, registry, ...args });
/**
* Gets a value indicating whether the property can be written to.
*
* @type {boolean}
* @memberof IPropertyInfo
*/
this.canWrite = true;
/**
* Gets a value indicating whether the property value can be read.
*
* @type {boolean}
* @memberof IPropertyInfo
*/
this.canRead = true;
/**
* Gets a value indicating whether a value is required for this property.
*
* @type {boolean}
* @memberof PropertyInfo
*/
this.isRequired = false;
/**
* Gets a value indicating whether this property is class bound, not instance bound.
*
* @type {boolean}
* @memberof PropertyInfo
*/
this.isStatic = false;
if (!declaringType) {
throw new ReflectionError('The declaring type is not set.');
}
this.declaringType = declaringType;
this.canRead = canRead === undefined ? true : canRead;
this.canWrite = canWrite === undefined ? true : canWrite;
this.isRequired = !!isRequired;
this.isStatic = !!isStatic;
this.defaultValue = defaultValue;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHlJbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2VwaGFzL3JlZmxlY3Rpb24vc3JjL2xpYi9wcm9wZXJ0eUluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXREOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLGdCQUFnQjtJQWtEOUM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxZQUNJLEVBQ0ksYUFBYSxFQUNiLElBQUksRUFDSixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsRUFDVixRQUFRLEVBQ1IsWUFBWSxFQUNaLFFBQVEsRUFDUixHQUFHLElBQUksRUFjVjtRQUNELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBbkZ6RTs7Ozs7V0FLRztRQUNNLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFbEM7Ozs7O1dBS0c7UUFDTSxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRWpDOzs7OztXQUtHO1FBQ00sZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVyQzs7Ozs7V0FLRztRQUNNLGFBQVEsR0FBWSxLQUFLLENBQUM7UUF1RC9CLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsTUFBTSxJQUFJLGVBQWUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzcGxheUluZm8gfSBmcm9tIFwiLi9kaXNwbGF5SW5mb1wiO1xyXG5pbXBvcnQgeyBJUHJvcGVydHlJbmZvLCBJVHlwZUluZm8sIElUeXBlSW5mb1JlZ2lzdHJ5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBSZWZsZWN0aW9uRXJyb3IgfSBmcm9tIFwiLi9yZWZsZWN0aW9uRXJyb3JcIjtcclxuaW1wb3J0IHsgVmFsdWVFbGVtZW50SW5mbyB9IGZyb20gXCIuL3ZhbHVlRWxlbWVudEluZm9cIjtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyByZWZsZWN0aW9uIGluZm9ybWF0aW9uIGFib3V0IGEgcHJvcGVydHkuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIFByb3BlcnR5SW5mb1xyXG4gKiBAZXh0ZW5kcyB7RWxlbWVudEluZm99XHJcbiAqIEBpbXBsZW1lbnRzIHtJUHJvcGVydHlJbmZvfVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFByb3BlcnR5SW5mbyBleHRlbmRzIFZhbHVlRWxlbWVudEluZm8gaW1wbGVtZW50cyBJUHJvcGVydHlJbmZvIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRlY2xhcmluZyB0eXBlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtUeXBlSW5mb31cclxuICAgICAqIEBtZW1iZXJvZiBQcm9wZXJ0eUluZm9cclxuICAgICAqL1xyXG4gICAgcmVhZG9ubHkgZGVjbGFyaW5nVHlwZTogSVR5cGVJbmZvO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgcHJvcGVydHkgY2FuIGJlIHdyaXR0ZW4gdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgSVByb3BlcnR5SW5mb1xyXG4gICAgICovXHJcbiAgICByZWFkb25seSBjYW5Xcml0ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSB2YWx1ZSBjYW4gYmUgcmVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBJUHJvcGVydHlJbmZvXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5IGNhblJlYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBhIHZhbHVlIGlzIHJlcXVpcmVkIGZvciB0aGlzIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFByb3BlcnR5SW5mb1xyXG4gICAgICovXHJcbiAgICByZWFkb25seSBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgcHJvcGVydHkgaXMgY2xhc3MgYm91bmQsIG5vdCBpbnN0YW5jZSBib3VuZC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBQcm9wZXJ0eUluZm9cclxuICAgICAqL1xyXG4gICAgcmVhZG9ubHkgaXNTdGF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHsqfVxyXG4gICAgICogQG1lbWJlcm9mIFByb3BlcnR5SW5mb1xyXG4gICAgICovXHJcbiAgICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFByb3BlcnR5SW5mby5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0lUeXBlSW5mb30gZGVjbGFyaW5nVHlwZSBUaGUgZGVjbGFyaW5nIHR5cGUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZWxlbWVudCBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmdWxsTmFtZV0gT3B0aW9uYWwuIFRoZSBmdWxsIG5hbWUgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0Rpc3BsYXlJbmZvfSBbZGlzcGxheUluZm9dIE9wdGlvbmFsLiBUaGUgZGlzcGxheSBpbmZvcm1hdGlvbi5cclxuICAgICAqIEBwYXJhbSB7SVR5cGVJbmZvfSBbdmFsdWVUeXBlXSBUaGUgdmFsdWUgdHlwZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhblJlYWRdIFRydWUgaWYgdGhlIHByb3BlcnR5IGNhbiBiZSByZWFkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2FuV3JpdGVdIFRydWUgaWYgdGhlIHByb3BlcnR5IGNhbiBiZSB3cml0dGVuLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNSZXF1aXJlZF0gVHJ1ZSBpZiB0aGUgcHJvcGVydHkgcmVxdWlyZXMgYSB2YWx1ZSB0byBiZSBzZXQuXHJcbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB7SVR5cGVJbmZvUmVnaXN0cnl9IFtyZWdpc3RyeV0gVGhlIHJvb3QgdHlwZSBpbmZvIHJlZ2lzdHJ5LlxyXG4gICAgICogQG1lbWJlcm9mIFByb3BlcnR5SW5mb1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGRlY2xhcmluZ1R5cGUsXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGZ1bGxOYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5SW5mbyxcclxuICAgICAgICAgICAgdmFsdWVUeXBlLFxyXG4gICAgICAgICAgICBjYW5SZWFkLFxyXG4gICAgICAgICAgICBjYW5Xcml0ZSxcclxuICAgICAgICAgICAgaXNSZXF1aXJlZCxcclxuICAgICAgICAgICAgaXNTdGF0aWMsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgcmVnaXN0cnksXHJcbiAgICAgICAgICAgIC4uLmFyZ3NcclxuICAgICAgICB9OiB7XHJcbiAgICAgICAgICAgIGRlY2xhcmluZ1R5cGU6IElUeXBlSW5mbztcclxuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBmdWxsTmFtZT86IHN0cmluZztcclxuICAgICAgICAgICAgZGlzcGxheUluZm8/OiBEaXNwbGF5SW5mbztcclxuICAgICAgICAgICAgdmFsdWVUeXBlPzogSVR5cGVJbmZvIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICBjYW5SZWFkPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgY2FuV3JpdGU/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgaXNTdGF0aWM/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJ5PzogSVR5cGVJbmZvUmVnaXN0cnk7XHJcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgICAgICB9KSB7XHJcbiAgICAgICAgc3VwZXIoeyBuYW1lLCBmdWxsTmFtZSwgZGlzcGxheUluZm8sIHZhbHVlVHlwZSwgcmVnaXN0cnksIC4uLmFyZ3MgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGVjbGFyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmbGVjdGlvbkVycm9yKCdUaGUgZGVjbGFyaW5nIHR5cGUgaXMgbm90IHNldC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVjbGFyaW5nVHlwZSA9IGRlY2xhcmluZ1R5cGU7XHJcbiAgICAgICAgdGhpcy5jYW5SZWFkID0gY2FuUmVhZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNhblJlYWQ7XHJcbiAgICAgICAgdGhpcy5jYW5Xcml0ZSA9IGNhbldyaXRlID09PSB1bmRlZmluZWQgPyB0cnVlIDogY2FuV3JpdGU7XHJcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkID0gISFpc1JlcXVpcmVkO1xyXG4gICAgICAgIHRoaXMuaXNTdGF0aWMgPSAhIWlzU3RhdGljO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==