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