UNPKG

@qtpy/state-management-observable

Version:

1. [Основная идея и архитектура](#основная-идея-и-архитектура) 1.1. [Прозрачная реактивность](#прозрачная-реактивность) 1.2. [Поддержка типизированных строковых ключей](#поддержка-типизированных-строковых-ключей) 1.3. [Подписки с «гранул

282 lines (281 loc) 8.47 kB
function E(t) { const e = t.match(/\((.*?)\)/); return e ? e[1].split(/\s*,\s*/).filter(Boolean) : []; } function k(t, e) { const r = e.toString().trim(), n = E(r), i = r.match( /^\s*(?:\([^)]*\)|[a-zA-Z_$][\w$]*)\s*=>\s*([\s\S]+)$/ ); if (!i) throw new Error("Invalid function format"); let c = i[1].trim(); c.startsWith("(") && c.endsWith(")") && (c = c.slice(1, -1).trim()); let s = c.replace(/\s+/g, ""); const l = /\[([^\[\]]+),([^\[\]]+)\]/; for (; l.test(s); ) s = s.replace(/\[([^\[\]]+),([^\[\]]+)\]/g, "[$1][$2]"); if (n.length < 2) { let f = s.replace(/\[['"]([^[\]]+)['"]\]/g, ".$1").replace(/\[([^[\]]+)\]/g, ".$1"); return f.startsWith(".") && (f = f.slice(1)), f; } const o = n[1], a = o.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), R = new RegExp(`${a}\\(\\s*([^\\)]+)\\s*\\)`), w = new RegExp(`${a}\\(\\s*([^\\)]+)\\s*\\)`, "g"); if (!R.test(s)) { let f = s.replace(/\[['"]([^[\]]+)['"]\]/g, ".$1").replace(/\[([^[\]]+)\]/g, ".$1"); return f.startsWith(".") && (f = f.slice(1)), f; } const $ = []; let O; for (; (O = w.exec(s)) !== null; ) $.push(O[1]); const m = []; let A = 0; function T(f) { const u = $[A]; return m.push([`${o}(${u})`, f]), A++, f; } try { e(t, T); } catch { } const _ = {}; for (const [f, u] of m) { const y = f.slice(o.length + 1, -1); _[y] = u; } let h = s.replace(w, (f, u) => { const y = _[u]; return y === void 0 ? "undefined" : String(y); }); h = h.replace(/\[['"]([^[\]]+)['"]\]/g, (f, u) => `.${u}`).replace(/\[([^[\]]+)\]/g, (f, u) => `.${u}`); const d = h.replace(/\.\./g, "."); return d.startsWith(".") ? d.slice(1) : d; } function q(t) { if (!(typeof t == "string") && !(typeof t == "function")) { const n = t === null ? "null" : typeof t, i = typeof t == "object" ? JSON.stringify(Object.keys(t)) : String(t); throw new Error(`[store] Ожидался путь (строка или функция-доступ), получено: ${n} (${i}).`); } } function v(t, e) { let r; typeof e == "string" ? r = e : r = k(t, e); let n = "$"; if (typeof e != "string") { const s = e.toString().trim(); n = E(s)[0] || "$"; } const i = `${n}.`, c = r.indexOf(i); return c >= 0 ? r.slice(c + i.length) : r; } function C(t, e) { return Array.isArray(t) ? t.map((r) => C(r, e)).filter((r) => r !== "").join(".") : typeof t == "function" ? v(e, t) : t == null ? "" : String(t); } function G(t, e) { if (t === e) return !0; if (t == null || e == null) return t === e; if (typeof t != typeof e) return !1; if (t instanceof Date && e instanceof Date) return t.getTime() === e.getTime(); if (typeof t != "object") return !1; const r = Object.keys(t), n = Object.keys(e); if (r.length !== n.length) return !1; for (let i = 0; i < r.length; i++) { const c = r[i]; if (!Object.prototype.hasOwnProperty.call(e, c) || t[c] !== e[c]) return !1; } return !0; } function D(t) { return t.split(".").map((e) => /^\d+$/.test(e) ? Number(e) : e); } function U(t, e = []) { switch (t) { case "push": case "pop": case "splice": case "shift": case "unshift": case "sort": case "reverse": return !e.length || e.includes(t); } return !1; } function p(t, e) { return t === void 0 ? !1 : e == null ? void 0 : e(); } function g(t, e, r, n, i) { typeof e == "object" && e !== null && t ? p(e, () => t.set(e, r)) : i && n.set(i, r); } function N(t, e, r, n) { if (typeof e == "object" && e !== null) return p(e, () => t.get(e)); if (n) return r == null ? void 0 : r.get(n); } function F(t, e, r, n) { typeof e == "object" && e !== null ? p(e, () => t.delete(e)) : n && r.delete(n); } function J(t) { try { if (t == null || typeof t != "object") return String(t); const e = JSON.stringify(t); let r = 5381; for (let n = 0; n < e.length; n++) { const i = e.charCodeAt(n); r = ((r << 5) + r ^ i) >>> 0; } return (r >>> 0).toString(16); } catch { return !1; } } function V() { return `${Math.floor(performance.now()).toString(36)}-${Math.random().toString(36).slice(2, 6)}`; } const z = () => typeof window > "u"; function j(t, e = "ssrStoreId_default") { const r = t; let n = Promise.resolve(); const i = r.asyncUpdate; function c(s) { return (...l) => { const o = n.then(() => s(...l)); return n = o.catch(() => { }), o; }; } return r.updateSSR = c(i), r.updateSSR.quiet = c(i.quiet), r.getIsSSR = () => z(), r.getSSRStoreId = () => e, r.snapshot = async () => { try { return await n, t.getRawStore(); } catch (s) { throw console.error("Failed to create snapshot:", s), s; } }, r.getSerializedStore = async (s) => { const l = await r.snapshot(), o = JSON.stringify(l); return { window: `window['${e}'] = ${o};`, scriptTag: `<script id="${e}" type="application/json">${o}<\/script>`, serializedData: o }[s]; }, r.hydrate = () => { if (!r.getIsSSR() && window[e]) { const s = document.getElementById(e); r.setRawStore(window[e]), delete window[e], s == null || s.remove(); } }, r.hydrateWithDocument = (s = 0, l) => { r.getIsSSR() || (window.onload = () => { setTimeout(() => { r.hydrate(), l == null || l(); }, s); }); }, r; } function M(t, e) { const r = D(e); let n = t; for (const i of r) { if (n == null || typeof n != "object") return !1; n = n[i]; } return !0; } function Z(t, e) { if (!e) return t; const r = D(e); let n = t; for (const i of r) { if (n == null) return; n = n[i]; } return n; } const P = { array: ["push", "pop", "shift", "unshift", "splice", "sort", "reverse", "fill", "copyWithin"], object: ["assign", "defineProperty", "defineProperties"] }; class x extends Array { constructor(...e) { super(...e); } } function H(t, e) { var r; return !Array.isArray(t) || (r = N(e, t)) != null && r._isWrapped || (P.array.forEach((n) => { x.prototype[n] = function(...i) { return p(this, () => { g(e, this, { _prevSignature: "CHANGED_METHOD", _mutated: !0, _isWrapped: !0 }); }), Array.prototype[n].apply(this, i); }; }), Object.setPrototypeOf(t, x.prototype), g(e, t, { _isWrapped: !0 })), t; } class S extends Object { constructor(...e) { super(...e); } } function I(t, e) { var r; return typeof t != "object" || t === null || (r = N(e, t)) != null && r._isWrapped || (P.object.forEach((n) => { n in S.prototype || (S.prototype[n] = function(...i) { return p(this, () => { g(e, this, { _prevSignature: "CHANGED_METHOD", _mutated: !0, _isWrapped: !0 }); }), Object[n](this, ...i); }); }), Object.setPrototypeOf(t, S.prototype), g(e, t, { _isWrapped: !0 })), t; } function L(t, e, r, n) { let i = t; return Array.isArray(t) ? i = H(t, n) : t && typeof t == "object" && (i = I(t, n)), i !== t && e && r != null && (e[r] = i), i; } function* W(t, e = !0, r = /* @__PURE__ */ new WeakSet(), n = "", i = null, c = null) { if (!(t == null || t == null || typeof t != "object" || r.has(t))) if (r.add(t), yield { node: t, path: n, parent: i, key: c }, Array.isArray(t)) for (let s = t.length - 1; s >= 0; s--) { const l = n ? `${n}.${s}` : String(s); (e || t[s] && typeof t[s] == "object") && (yield { node: t[s], path: l, parent: t, key: s }, t[s] && typeof t[s] == "object" && (yield* W(t[s], e, r, l, t, s))); } else { const s = Object.keys(t); for (let l = s.length - 1; l >= 0; l--) { const o = s[l], a = n ? `${n}.${o}` : o; (e || t[o] && typeof t[o] == "object") && (yield { node: t[o], path: a, parent: t, key: o }, t[o] && typeof t[o] == "object" && (yield* W(t[o], e, r, a, t, o))); } } } export { x as WrapArray, S as WrapObject, J as calculateSnapshotHash, F as deleteMetaData, Z as getByPath, z as getCheckIsSSR, N as getMetaData, V as getRandomId, k as getStringOfObject, v as getStringPath, U as isArrayMethod, M as isPathValid, W as iterateObjectTree, C as normalizeCacheKey, g as setMetaData, G as shallowEqual, D as splitPath, j as ssrStore, q as validatePath, p as withMetaSupport, H as wrapArrayMethods, L as wrapNode, I as wrapObjectMethods };