UNPKG

@itrocks/reflect

Version:

Runtime introspection of TypeScript classes and their properties, including property type

48 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReflectProperty = void 0; const property_type_1 = require("@itrocks/property-type"); const class_1 = require("./class"); class ReflectProperty { #class; name; constructor(object, name) { this.#class = object; this.name = name; } get class() { const value = (this.#class instanceof class_1.ReflectClass) ? this.#class : new class_1.ReflectClass(this.#class); Object.defineProperty(this, 'class', { configurable: true, enumerable: false, value, writable: true }); return value; } get collectionType() { const value = this.class.propertyTypes[this.name]; if (!(value instanceof property_type_1.CollectionType)) { throw 'ReflectProperty.collectionType is meant to be used exclusively on collection properties'; } Object.defineProperty(this, 'collectionType', { configurable: true, enumerable: false, value, writable: true }); return value; } get defaultValue() { const value = this.class.propertyDefaults[this.name]; Object.defineProperty(this, 'defaultValue', { configurable: true, enumerable: false, value, writable: true }); return value; } get object() { const value = this.class.object; Object.defineProperty(this, 'object', { configurable: true, enumerable: false, value, writable: true }); return value; } get type() { const value = this.class.propertyTypes[this.name]; Object.defineProperty(this, 'type', { configurable: true, enumerable: false, value, writable: true }); return value; } get value() { return this.object ? this.object[this.name] : undefined; } } exports.ReflectProperty = ReflectProperty; //# sourceMappingURL=property.js.map