UNPKG

@thisisagile/easy

Version:

Straightforward library for building domain-driven microservice architectures

70 lines (68 loc) 2.21 kB
import { entries, ifDefined } from "./chunk-AVHYDITZ.mjs"; import { ofGet } from "./chunk-SJGQU3OG.mjs"; import { isA } from "./chunk-D5IYAIMK.mjs"; import { isDefined, isEmpty, isObject } from "./chunk-AAND4MKF.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), split: (t, keys, prop = "extracted") => { const extracted = {}; const rest = { ...t }; keys.forEach((key) => { if (key in t) { ifDefined(t[key], (v) => extracted[key] = v); delete rest[key]; } }); return { [prop]: extracted, ...rest }; } }; 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(([, v]) => isDefined(v))?.[0] ?? alt; var takeFirst = (j) => entries(j).first(([, v]) => isDefined(v)); var any = (value) => new Any(value); export { isJson, json, toJson, asJson, takeFirstKey, takeFirst, any }; //# sourceMappingURL=chunk-A7KUHZ3A.mjs.map