UNPKG

@thisisagile/easy

Version:

Straightforward library for building domain-driven microservice architectures

58 lines (56 loc) 1.9 kB
import { entries, values } from "./chunk-H2762RTS.mjs"; import { toList } from "./chunk-A7C3XND3.mjs"; import { on, use } from "./chunk-ZPNFXK7Y.mjs"; import { isDefined } from "./chunk-DEJ7A5PY.mjs"; // src/types/Meta.ts import "reflect-metadata"; var ClassMeta = class { constructor(subject, data = (subject.prototype ?? subject).constructor) { this.subject = subject; this.data = data; } get = (key) => Reflect.getMetadata(key, this.data); set = (key, value) => { Reflect.defineMetadata(key, value, this.data); return value; }; entries = () => entries(this.subject); parse = (f, options = {}) => { const { initial = {}, skipUndefined = false } = options; return this.entries().reduce((a, [k, val]) => use(f(val), (v) => isDefined(v) || !skipUndefined ? on(a, (a2) => a2[k] = v) : a), initial); }; properties = (key) => toList([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))]).map((p) => this.property(p)).filter((p) => key ? p.get(key) : p); keys = (key) => this.properties().map((p) => p.get(key)).reduce((list, u) => u ? list.add(u) : list, toList()); values = () => values(this.subject); property = (property) => new PropertyMeta(this.subject, property); }; var PropertyMeta = class { constructor(subject, property, data = Reflect.getMetadata(property, subject)) { this.subject = subject; this.property = property; this.data = data; } get value() { return this.subject[this.property]; } get = (key) => isDefined(this.data) && isDefined(this.data[key]) ? this.data[key] : void 0; set = (key, value) => { Reflect.defineMetadata(this.property, { ...this.data, [key]: value }, this.subject); return value; }; }; var meta = (subject) => new ClassMeta(subject ?? {}); export { meta }; //# sourceMappingURL=chunk-WTFW6DLP.mjs.map