UNPKG

@kephas/reflection

Version:

Provides reflection capabilities, like TypeInfoRegistry, ITypeInfo, and IProperty.

58 lines 7.74 kB
import { ElementInfo } from './elementInfo'; import { TypeInfoRegistry } from './typeInfoRegistry'; import { TypeName } from './typeName'; /** * Reflective element information holding a value. * * @export * @class ValueElementInfo * @extends {ElementInfo} */ export class ValueElementInfo extends ElementInfo { /** * Creates an instance of ValueElementInfo. * * @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 {ITypeInfoRegistry} [registry] The root type info registry. * @memberof ValueElementInfo */ constructor({ name, fullName, displayInfo, valueType, registry, ...args }) { super({ name, fullName, displayInfo, registry, ...args }); if (!valueType) { this._valueTypeGetter = () => (this._valueType || (this._valueType = this.getValueType(TypeName.AnyTypeName, registry))); } else if (typeof valueType === 'string') { this._valueTypeGetter = () => (this._valueType || (this._valueType = this.getValueType(valueType, registry))); } else { this._valueType = valueType; } } /** * Gets the type of the element's value. * * @type {TypeInfo} * @memberof ValueElementInfo */ get valueType() { return this._valueType || (this._valueType = this._valueTypeGetter()); } /** * Gets the value type based on the type name. * * @protected * @param {string} valueType The name or full name of the value type. * @param {ITypeInfoRegistry} [registry] The type info registry. If not provided, TypeInfoRegistry.Instance will be used. * @returns * @memberof ValueElementInfo */ getValueType(valueType, registry) { return (registry || TypeInfoRegistry.Instance).getType(valueType); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVFbGVtZW50SW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlcGhhcy9yZWZsZWN0aW9uL3NyYy9saWIvdmFsdWVFbGVtZW50SW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxXQUFXO0lBY3REOzs7Ozs7Ozs7T0FTRztJQUNILFlBQ0ksRUFDSSxJQUFJLEVBQ0osUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEdBQUcsSUFBSSxFQVFWO1FBQ0QsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO2FBQ0ksSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQThCLEVBQUUsUUFBUSxDQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25IO2FBQ0k7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFoREQ7Ozs7O09BS0c7SUFDSCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQTBDRDs7Ozs7Ozs7T0FRRztJQUNPLFlBQVksQ0FBQyxTQUFpQixFQUFFLFFBQTRCO1FBQ2xFLE9BQU8sQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpc3BsYXlJbmZvIH0gZnJvbSAnLi9kaXNwbGF5SW5mbyc7XHJcbmltcG9ydCB7IEVsZW1lbnRJbmZvIH0gZnJvbSAnLi9lbGVtZW50SW5mbyc7XHJcbmltcG9ydCB7IElUeXBlSW5mbywgSVR5cGVJbmZvUmVnaXN0cnksIElWYWx1ZUVsZW1lbnRJbmZvIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVHlwZUluZm9SZWdpc3RyeSB9IGZyb20gJy4vdHlwZUluZm9SZWdpc3RyeSc7XHJcbmltcG9ydCB7IFR5cGVOYW1lIH0gZnJvbSAnLi90eXBlTmFtZSc7XHJcblxyXG4vKipcclxuICogUmVmbGVjdGl2ZSBlbGVtZW50IGluZm9ybWF0aW9uIGhvbGRpbmcgYSB2YWx1ZS5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVmFsdWVFbGVtZW50SW5mb1xyXG4gKiBAZXh0ZW5kcyB7RWxlbWVudEluZm99XHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsdWVFbGVtZW50SW5mbyBleHRlbmRzIEVsZW1lbnRJbmZvIGltcGxlbWVudHMgSVZhbHVlRWxlbWVudEluZm8ge1xyXG4gICAgcHJpdmF0ZSBfdmFsdWVUeXBlPzogSVR5cGVJbmZvO1xyXG4gICAgcHJpdmF0ZSBfdmFsdWVUeXBlR2V0dGVyPzogKCkgPT4gSVR5cGVJbmZvO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudCdzIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtUeXBlSW5mb31cclxuICAgICAqIEBtZW1iZXJvZiBWYWx1ZUVsZW1lbnRJbmZvXHJcbiAgICAgKi9cclxuICAgIGdldCB2YWx1ZVR5cGUoKTogSVR5cGVJbmZvIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVUeXBlIHx8ICh0aGlzLl92YWx1ZVR5cGUgPSB0aGlzLl92YWx1ZVR5cGVHZXR0ZXIhKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBWYWx1ZUVsZW1lbnRJbmZvLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBlbGVtZW50IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Z1bGxOYW1lXSBPcHRpb25hbC4gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RGlzcGxheUluZm99IFtkaXNwbGF5SW5mb10gT3B0aW9uYWwuIFRoZSBkaXNwbGF5IGluZm9ybWF0aW9uLlxyXG4gICAgICogQHBhcmFtIHtJVHlwZUluZm99IFt2YWx1ZVR5cGVdIFRoZSB2YWx1ZSB0eXBlLlxyXG4gICAgICogQHBhcmFtIHtJVHlwZUluZm9SZWdpc3RyeX0gW3JlZ2lzdHJ5XSBUaGUgcm9vdCB0eXBlIGluZm8gcmVnaXN0cnkuXHJcbiAgICAgKiBAbWVtYmVyb2YgVmFsdWVFbGVtZW50SW5mb1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGZ1bGxOYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5SW5mbyxcclxuICAgICAgICAgICAgdmFsdWVUeXBlLFxyXG4gICAgICAgICAgICByZWdpc3RyeSxcclxuICAgICAgICAgICAgLi4uYXJnc1xyXG4gICAgICAgIH06IHtcclxuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBmdWxsTmFtZT86IHN0cmluZztcclxuICAgICAgICAgICAgZGlzcGxheUluZm8/OiBEaXNwbGF5SW5mbztcclxuICAgICAgICAgICAgdmFsdWVUeXBlPzogSVR5cGVJbmZvIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICByZWdpc3RyeT86IElUeXBlSW5mb1JlZ2lzdHJ5O1xyXG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICAgICAgfSkge1xyXG4gICAgICAgIHN1cGVyKHsgbmFtZSwgZnVsbE5hbWUsIGRpc3BsYXlJbmZvLCByZWdpc3RyeSwgLi4uYXJncyB9KTtcclxuICAgICAgICBpZiAoIXZhbHVlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZVR5cGVHZXR0ZXIgPVxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuX3ZhbHVlVHlwZSB8fCAodGhpcy5fdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoVHlwZU5hbWUuQW55VHlwZU5hbWUsIHJlZ2lzdHJ5KSEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVUeXBlR2V0dGVyID1cclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLl92YWx1ZVR5cGUgfHwgKHRoaXMuX3ZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKHZhbHVlVHlwZSBhcyB1bmtub3duIGFzIHN0cmluZywgcmVnaXN0cnkpISkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVUeXBlID0gdmFsdWVUeXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHZhbHVlIHR5cGUgYmFzZWQgb24gdGhlIHR5cGUgbmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVUeXBlIFRoZSBuYW1lIG9yIGZ1bGwgbmFtZSBvZiB0aGUgdmFsdWUgdHlwZS5cclxuICAgICAqIEBwYXJhbSB7SVR5cGVJbmZvUmVnaXN0cnl9IFtyZWdpc3RyeV0gVGhlIHR5cGUgaW5mbyByZWdpc3RyeS4gSWYgbm90IHByb3ZpZGVkLCBUeXBlSW5mb1JlZ2lzdHJ5Lkluc3RhbmNlIHdpbGwgYmUgdXNlZC5cclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKiBAbWVtYmVyb2YgVmFsdWVFbGVtZW50SW5mb1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0VmFsdWVUeXBlKHZhbHVlVHlwZTogc3RyaW5nLCByZWdpc3RyeT86IElUeXBlSW5mb1JlZ2lzdHJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIChyZWdpc3RyeSB8fCBUeXBlSW5mb1JlZ2lzdHJ5Lkluc3RhbmNlKS5nZXRUeXBlKHZhbHVlVHlwZSk7XHJcbiAgICB9XHJcbn1cclxuIl19