UNPKG

@itrocks/reflect

Version:

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

44 lines 1.72 kB
import { CollectionType } from '@itrocks/property-type'; import { ReflectClass } from './class.js'; export class ReflectProperty { #class; name; constructor(object, name) { this.#class = object; this.name = name; } get class() { const value = (this.#class instanceof ReflectClass) ? this.#class : new 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 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; } } //# sourceMappingURL=property.js.map