@thisisagile/easy
Version:
Straightforward library for building domain-driven microservice architectures
58 lines (56 loc) • 1.9 kB
JavaScript
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