@thisisagile/easy
Version:
Straightforward library for building domain-driven microservice architectures
58 lines (56 loc) • 1.84 kB
JavaScript
import {
entries
} from "./chunk-H2762RTS.mjs";
import {
ifDefined
} from "./chunk-JSON7A4X.mjs";
import {
ofGet
} from "./chunk-SJGQU3OG.mjs";
import {
isA
} from "./chunk-ZHXKBOK2.mjs";
import {
isEmpty,
isObject
} from "./chunk-DEJ7A5PY.mjs";
// src/types/Json.ts
var isJson = (subject) => isA(subject, "toJSON");
var json = {
parse: (subject) => JSON.parse(JSON.stringify(subject ?? {})),
merge: (...subjects) => json.parse(subjects.map((s) => asJson(s, (s2) => json.parse(s2))).reduce((js, j) => ({ ...js, ...j }), {})),
delete: (subject, key) => {
ifDefined(subject, () => delete subject[key]);
return subject;
},
set: (subject, key = "", value) => isEmpty(key) ? subject : value !== void 0 ? { ...subject, ...{ [key]: value } } : json.delete(subject, key),
omit: (subject, ...keys) => keys.reduce((js, k) => json.delete(js, k), json.parse(subject)),
pick: (subject, ...keys) => keys.reduce((js, k) => json.set(js, k, subject[k]), {}),
defaults: (options = {}, defaults = {}) => json.merge(defaults, options),
isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v)
};
var toJson = json.merge;
var asJson = (j, alt = {}) => isJson(j) ? j.toJSON() : isObject(j) ? j : ofGet(alt, j);
var Any = class {
constructor(value) {
this.value = value;
}
merge = (...subjects) => any(json.merge(this.value, ...subjects));
delete = (key) => any(json.delete(this.value, key));
omit = (...keys) => any(json.omit(this.value, ...keys));
set = (key, value) => any(json.set(this.value, key, value));
toJSON() {
return this.value;
}
};
var takeFirstKey = (j, alt = "") => entries(asJson(j)).first()?.[0] ?? alt;
var any = (value) => new Any(value);
export {
isJson,
json,
toJson,
asJson,
takeFirstKey,
any
};
//# sourceMappingURL=chunk-KPEGHJSZ.mjs.map