@thisisagile/easy
Version:
Straightforward library for building domain-driven microservice architectures
91 lines (89 loc) • 2.64 kB
JavaScript
import {
traverse
} from "./chunk-SSROJBD5.mjs";
import {
isEqual
} from "./chunk-ONMLG5EJ.mjs";
import {
isPageList,
toPageList
} from "./chunk-TORB7XB3.mjs";
import {
asJson,
json
} from "./chunk-KPEGHJSZ.mjs";
import {
choose
} from "./chunk-XAIHCZT4.mjs";
import {
meta
} from "./chunk-WTFW6DLP.mjs";
import {
ifDefined
} from "./chunk-JSON7A4X.mjs";
import {
isConstructor,
use
} from "./chunk-ZPNFXK7Y.mjs";
import {
isArray,
isBoolean,
isFunction,
isString
} from "./chunk-DEJ7A5PY.mjs";
// src/utils/View.ts
var ignore = Symbol("view.ignore");
var keep = Symbol("view.keep");
var toViewer = (key, value) => choose(value).is.not.defined((v) => v, { key, f: () => void 0 }).type(isBoolean, (b) => ({ key, f: () => b })).equals(ignore, { key, f: () => void 0 }).equals(keep, { key, f: (a) => traverse(a, key) }).type(isString, (s) => ({ key, f: (a) => traverse(a, s) })).type(isConstructor, (c) => ({
key,
f: (a, key2) => use(traverse(a, key2), (v) => isArray(v) ? v.map((i) => optional(c, i)) : optional(c, v))
})).type(isSimpleView, (f) => ({ key, f: (a) => f.from(traverse(a, key)) })).type(isFunction, (f) => ({ key, f })).else((v) => ({ key, f: () => v }));
var optional = (c, v) => ifDefined(
v,
(i) => new c(i),
() => v
);
var toViewers = (views2) => meta(views2).entries().map(([k, v]) => toViewer(k, v));
var View = class _View {
constructor(views2 = {}, startsFrom = "scratch", viewers = toViewers(views2)) {
this.views = views2;
this.startsFrom = startsFrom;
this.viewers = viewers;
}
get fromSource() {
return new _View(this.views, "source", this.viewers);
}
from(source) {
if (isPageList(source))
return toPageList(
source.map((s) => this.reduce(s)),
source.options
);
if (isArray(source))
return source.map((s) => this.reduce(s));
return this.reduce(source);
}
same = (one, another) => isEqual(this.from(one), this.from(another));
reduce = (source) => use(asJson(source), (src) => this.viewers.reduce((acc, v) => json.set(acc, v.key, v.f(src, v.key)), this.startsFrom === "scratch" ? {} : src));
};
var isSimpleView = (a) => a instanceof View;
var view = (views2) => new View(views2);
var views = {
ignore,
keep,
skip: ignore,
value: (value) => () => value,
or: {
key: (altKey) => (a, key) => traverse(a, key) ?? traverse(a, altKey),
value: (altValue) => (a, key) => traverse(a, key) ?? altValue,
func: (altFunc) => (a, key) => traverse(a, key) ?? altFunc(a, key)
}
};
export {
toViewer,
View,
isSimpleView,
view,
views
};
//# sourceMappingURL=chunk-6G7SOGFB.mjs.map