json-sculpt
Version:
JSON Sculpt is a utility library designed to transform or "sculpt" JSON objects into your desired shape.
488 lines (487 loc) • 13.4 kB
JavaScript
var Q = /* @__PURE__ */ ((t) => (t.sculpt = "sculpt", t))(Q || {}), y = /* @__PURE__ */ ((t) => (t.self = "self.", t.state = "state.", t.root = "root.", t))(y || {}), C = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function u(t) {
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
}
var ct = Array.isArray, v = ct;
const d = /* @__PURE__ */ u(v);
var ft = typeof C == "object" && C && C.Object === Object && C, ht = ft, ut = ht, lt = typeof self == "object" && self && self.Object === Object && self, pt = ut || lt || Function("return this")(), F = pt, gt = F, _t = gt.Symbol, H = _t, L = H, tt = Object.prototype, yt = tt.hasOwnProperty, $t = tt.toString, _ = L ? L.toStringTag : void 0;
function dt(t) {
var r = yt.call(t, _), e = t[_];
try {
t[_] = void 0;
var n = !0;
} catch {
}
var a = $t.call(t);
return n && (r ? t[_] = e : delete t[_]), a;
}
var bt = dt, vt = Object.prototype, mt = vt.toString;
function St(t) {
return mt.call(t);
}
var Ct = St, J = H, Ot = bt, jt = Ct, Tt = "[object Null]", Pt = "[object Undefined]", k = J ? J.toStringTag : void 0;
function wt(t) {
return t == null ? t === void 0 ? Pt : Tt : k && k in Object(t) ? Ot(t) : jt(t);
}
var m = wt;
function Nt(t) {
return t != null && typeof t == "object";
}
var j = Nt, It = m, Dt = j, Mt = "[object Symbol]";
function xt(t) {
return typeof t == "symbol" || Dt(t) && It(t) == Mt;
}
var V = xt, Gt = v, At = V, Et = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, zt = /^\w*$/;
function Ft(t, r) {
if (Gt(t))
return !1;
var e = typeof t;
return e == "number" || e == "symbol" || e == "boolean" || t == null || At(t) ? !0 : zt.test(t) || !Et.test(t) || r != null && t in Object(r);
}
var Ht = Ft;
function Vt(t) {
var r = typeof t;
return t != null && (r == "object" || r == "function");
}
var K = Vt;
const O = /* @__PURE__ */ u(K);
var Kt = m, Rt = K, Lt = "[object AsyncFunction]", Jt = "[object Function]", kt = "[object GeneratorFunction]", Ut = "[object Proxy]";
function Bt(t) {
if (!Rt(t))
return !1;
var r = Kt(t);
return r == Jt || r == kt || r == Lt || r == Ut;
}
var rt = Bt;
const b = /* @__PURE__ */ u(rt);
var qt = F, Wt = qt["__core-js_shared__"], Xt = Wt, N = Xt, U = function() {
var t = /[^.]+$/.exec(N && N.keys && N.keys.IE_PROTO || "");
return t ? "Symbol(src)_1." + t : "";
}();
function Yt(t) {
return !!U && U in t;
}
var Zt = Yt, Qt = Function.prototype, tr = Qt.toString;
function rr(t) {
if (t != null) {
try {
return tr.call(t);
} catch {
}
try {
return t + "";
} catch {
}
}
return "";
}
var er = rr, nr = rt, ar = Zt, or = K, ir = er, sr = /[\\^$.*+?()[\]{}|]/g, cr = /^\[object .+?Constructor\]$/, fr = Function.prototype, hr = Object.prototype, ur = fr.toString, lr = hr.hasOwnProperty, pr = RegExp(
"^" + ur.call(lr).replace(sr, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
function gr(t) {
if (!or(t) || ar(t))
return !1;
var r = nr(t) ? pr : cr;
return r.test(ir(t));
}
var _r = gr;
function yr(t, r) {
return t == null ? void 0 : t[r];
}
var $r = yr, dr = _r, br = $r;
function vr(t, r) {
var e = br(t, r);
return dr(e) ? e : void 0;
}
var et = vr, mr = et, Sr = mr(Object, "create"), T = Sr, B = T;
function Cr() {
this.__data__ = B ? B(null) : {}, this.size = 0;
}
var Or = Cr;
function jr(t) {
var r = this.has(t) && delete this.__data__[t];
return this.size -= r ? 1 : 0, r;
}
var Tr = jr, Pr = T, wr = "__lodash_hash_undefined__", Nr = Object.prototype, Ir = Nr.hasOwnProperty;
function Dr(t) {
var r = this.__data__;
if (Pr) {
var e = r[t];
return e === wr ? void 0 : e;
}
return Ir.call(r, t) ? r[t] : void 0;
}
var Mr = Dr, xr = T, Gr = Object.prototype, Ar = Gr.hasOwnProperty;
function Er(t) {
var r = this.__data__;
return xr ? r[t] !== void 0 : Ar.call(r, t);
}
var zr = Er, Fr = T, Hr = "__lodash_hash_undefined__";
function Vr(t, r) {
var e = this.__data__;
return this.size += this.has(t) ? 0 : 1, e[t] = Fr && r === void 0 ? Hr : r, this;
}
var Kr = Vr, Rr = Or, Lr = Tr, Jr = Mr, kr = zr, Ur = Kr;
function l(t) {
var r = -1, e = t == null ? 0 : t.length;
for (this.clear(); ++r < e; ) {
var n = t[r];
this.set(n[0], n[1]);
}
}
l.prototype.clear = Rr;
l.prototype.delete = Lr;
l.prototype.get = Jr;
l.prototype.has = kr;
l.prototype.set = Ur;
var Br = l;
function qr() {
this.__data__ = [], this.size = 0;
}
var Wr = qr;
function Xr(t, r) {
return t === r || t !== t && r !== r;
}
var Yr = Xr, Zr = Yr;
function Qr(t, r) {
for (var e = t.length; e--; )
if (Zr(t[e][0], r))
return e;
return -1;
}
var P = Qr, te = P, re = Array.prototype, ee = re.splice;
function ne(t) {
var r = this.__data__, e = te(r, t);
if (e < 0)
return !1;
var n = r.length - 1;
return e == n ? r.pop() : ee.call(r, e, 1), --this.size, !0;
}
var ae = ne, oe = P;
function ie(t) {
var r = this.__data__, e = oe(r, t);
return e < 0 ? void 0 : r[e][1];
}
var se = ie, ce = P;
function fe(t) {
return ce(this.__data__, t) > -1;
}
var he = fe, ue = P;
function le(t, r) {
var e = this.__data__, n = ue(e, t);
return n < 0 ? (++this.size, e.push([t, r])) : e[n][1] = r, this;
}
var pe = le, ge = Wr, _e = ae, ye = se, $e = he, de = pe;
function p(t) {
var r = -1, e = t == null ? 0 : t.length;
for (this.clear(); ++r < e; ) {
var n = t[r];
this.set(n[0], n[1]);
}
}
p.prototype.clear = ge;
p.prototype.delete = _e;
p.prototype.get = ye;
p.prototype.has = $e;
p.prototype.set = de;
var be = p, ve = et, me = F, Se = ve(me, "Map"), Ce = Se, q = Br, Oe = be, je = Ce;
function Te() {
this.size = 0, this.__data__ = {
hash: new q(),
map: new (je || Oe)(),
string: new q()
};
}
var Pe = Te;
function we(t) {
var r = typeof t;
return r == "string" || r == "number" || r == "symbol" || r == "boolean" ? t !== "__proto__" : t === null;
}
var Ne = we, Ie = Ne;
function De(t, r) {
var e = t.__data__;
return Ie(r) ? e[typeof r == "string" ? "string" : "hash"] : e.map;
}
var w = De, Me = w;
function xe(t) {
var r = Me(this, t).delete(t);
return this.size -= r ? 1 : 0, r;
}
var Ge = xe, Ae = w;
function Ee(t) {
return Ae(this, t).get(t);
}
var ze = Ee, Fe = w;
function He(t) {
return Fe(this, t).has(t);
}
var Ve = He, Ke = w;
function Re(t, r) {
var e = Ke(this, t), n = e.size;
return e.set(t, r), this.size += e.size == n ? 0 : 1, this;
}
var Le = Re, Je = Pe, ke = Ge, Ue = ze, Be = Ve, qe = Le;
function g(t) {
var r = -1, e = t == null ? 0 : t.length;
for (this.clear(); ++r < e; ) {
var n = t[r];
this.set(n[0], n[1]);
}
}
g.prototype.clear = Je;
g.prototype.delete = ke;
g.prototype.get = Ue;
g.prototype.has = Be;
g.prototype.set = qe;
var We = g, nt = We, Xe = "Expected a function";
function R(t, r) {
if (typeof t != "function" || r != null && typeof r != "function")
throw new TypeError(Xe);
var e = function() {
var n = arguments, a = r ? r.apply(this, n) : n[0], o = e.cache;
if (o.has(a))
return o.get(a);
var f = t.apply(this, n);
return e.cache = o.set(a, f) || o, f;
};
return e.cache = new (R.Cache || nt)(), e;
}
R.Cache = nt;
var Ye = R, Ze = Ye, Qe = 500;
function tn(t) {
var r = Ze(t, function(n) {
return e.size === Qe && e.clear(), n;
}), e = r.cache;
return r;
}
var rn = tn, en = rn, nn = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, an = /\\(\\)?/g, on = en(function(t) {
var r = [];
return t.charCodeAt(0) === 46 && r.push(""), t.replace(nn, function(e, n, a, o) {
r.push(a ? o.replace(an, "$1") : n || e);
}), r;
}), sn = on;
function cn(t, r) {
for (var e = -1, n = t == null ? 0 : t.length, a = Array(n); ++e < n; )
a[e] = r(t[e], e, t);
return a;
}
var fn = cn, W = H, hn = fn, un = v, ln = V, pn = 1 / 0, X = W ? W.prototype : void 0, Y = X ? X.toString : void 0;
function at(t) {
if (typeof t == "string")
return t;
if (un(t))
return hn(t, at) + "";
if (ln(t))
return Y ? Y.call(t) : "";
var r = t + "";
return r == "0" && 1 / t == -pn ? "-0" : r;
}
var gn = at, _n = gn;
function yn(t) {
return t == null ? "" : _n(t);
}
var $n = yn, dn = v, bn = Ht, vn = sn, mn = $n;
function Sn(t, r) {
return dn(t) ? t : bn(t, r) ? [t] : vn(mn(t));
}
var Cn = Sn, On = V, jn = 1 / 0;
function Tn(t) {
if (typeof t == "string" || On(t))
return t;
var r = t + "";
return r == "0" && 1 / t == -jn ? "-0" : r;
}
var Pn = Tn, wn = Cn, Nn = Pn;
function In(t, r) {
r = wn(r, t);
for (var e = 0, n = r.length; t != null && e < n; )
t = t[Nn(r[e++])];
return e && e == n ? t : void 0;
}
var Dn = In, Mn = Dn;
function xn(t, r, e) {
var n = t == null ? void 0 : Mn(t, r);
return n === void 0 ? e : n;
}
var Gn = xn;
const I = /* @__PURE__ */ u(Gn);
var An = m, En = j, zn = "[object Boolean]";
function Fn(t) {
return t === !0 || t === !1 || En(t) && An(t) == zn;
}
var Hn = Fn;
const Vn = /* @__PURE__ */ u(Hn);
var Kn = m, Rn = j, Ln = "[object Number]";
function Jn(t) {
return typeof t == "number" || Rn(t) && Kn(t) == Ln;
}
var kn = Jn;
const Un = /* @__PURE__ */ u(kn);
var Bn = m, qn = v, Wn = j, Xn = "[object String]";
function Yn(t) {
return typeof t == "string" || !qn(t) && Wn(t) && Bn(t) == Xn;
}
var Zn = Yn;
const ot = /* @__PURE__ */ u(Zn), x = (t) => t && O(t) ? JSON.parse(JSON.stringify(t)) : t, Qn = (t) => ot(t) ? t : O(t) ? JSON.stringify(t) : t ? t.toString() : "", ta = (t, r) => {
const e = t.lastIndexOf(r);
return e < 0 ? "" : t.substring(e + 1);
}, it = (t, r) => {
const e = [];
for (const [n] of Object.entries(r))
t[n] === r[n] && e.push(!0);
return e.length === Object.keys(r).length;
}, na = (t, r = {}, e = {
onlyResolveSculpt: !1,
throwOnError: !1
}) => {
const n = x(t), a = x(t);
return A(n, a, r, e);
};
function aa(t, r = {}, e = {
allowPartialMatch: !1
}) {
return t.replace(/\{\{([^}]*)\}\}/g, (n, a) => {
const o = G(
a,
r,
e.allowPartialMatch
);
return o !== $ ? b(o) ? String(o(t)) : String(o) : n;
});
}
const $ = Symbol("NOT_FOUND"), G = (t, r, e = !1) => {
const n = t.split("."), a = n.shift();
if (a === void 0)
return $;
if (a in r) {
if (n.length) {
const o = r[a];
return typeof o != "object" || d(o) || b(o) || !o ? $ : G(
n.join("."),
o,
e
);
}
return r[a];
} else if (e)
for (const o in r) {
const f = [a, ...n].join("."), s = r[o];
if (typeof s != "object" || d(s) || b(s) || !s)
continue;
const i = G(
f,
s,
e
);
if (i !== $)
return i;
}
return $;
}, A = (t, r, e = {}, n, a, o = "") => {
const [f, s] = ea(t, Q.sculpt);
if (O(t) && !d(t) && f && (a = t, t = s), Un(t) || Vn(t) || !t)
return t;
if (ot(t) && (a || !n.onlyResolveSculpt) && st(t).length) {
const i = ra(
t,
r,
e,
n,
a || r
);
if (i.length === 1 && i[0].original === t)
t = i[0].value;
else if (i.length > 0) {
let c = t;
i.forEach((h) => {
c = c.replace(
h.original,
Qn(h.value)
);
}), t = c;
}
}
if (O(t) && !d(t))
for (const [i, c] of Object.entries(t))
t[`${i}`] = A(
c,
r,
e,
n,
a,
`${o}${o && "."}${i}`
);
else
d(t) && (t = t.map(
(i, c) => A(
i,
r,
e,
n,
a,
`${o}${o && "."}${c}`
)
));
return t;
}, Z = (t, r) => t.replace(r, ""), ra = (t, r, e = {}, n, a) => {
const { throwOnError: o = !1 } = n, f = st(t);
return f.length ? f.map((s) => {
const i = s.substring(2, s.length - 2);
if (i.startsWith(y.self)) {
const c = ta(i, "."), h = I(a, c);
return !h && o && D(s, a), M(h, s);
} else if (i.startsWith(y.root)) {
const c = I(r, Z(i, y.root));
return !c && o && D(s, t), M(c, s);
} else {
const c = Z(i, y.state), h = I(e, c), S = b(h) ? h(r) : h;
return !S && o && D(s, t), M(b(S) ? S(r) : S, s);
}
}) : [];
}, D = (t, r) => {
throw new Error(`Missing output: ${t} in ${r}`);
}, M = (t, r) => ({
value: t,
original: r
}), st = (t) => t.match(/{{(.*?)}}/g) ?? [], ea = (t, r) => {
if (!t)
return [];
const e = new RegExp(`^{\\$\\s*${r}\\s*\\$}$`), [n, a] = Object.entries(t).find(([o]) => e.test(o)) || [];
return [n, a];
}, oa = (t, r) => E(t, r), E = (t, r) => {
if (!(typeof t != "object" || t === null)) {
if (it(t, r))
return t;
if (Array.isArray(t))
for (const e of t) {
const n = E(e, r);
if (n)
return n;
}
else
for (const e in t) {
const n = E(t[e], r);
if (n)
return n;
}
}
}, ia = (t, r, e) => {
const n = x(t);
return z(n, r, e);
}, z = (t, r, e) => {
if (typeof t != "object" || t === null)
return t;
if (it(t, e))
return r;
if (Array.isArray(t))
return t.map((n) => z(n, r, e));
for (const n in t)
t[n] = z(t[n], r, e);
return t;
};
export {
oa as findObjectInJson,
ia as replaceObjectInJson,
na as sculptJson,
aa as sculptString
};