@itrocks/reflect
Version:
Runtime introspection of TypeScript classes and their properties, including property type
44 lines • 1.72 kB
JavaScript
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