@xuda.io/runtime-bundle
Version:
The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform.
40,160 lines • 1.66 MB
JavaScript
/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (ie, e) { "use strict"; var oe = [], r = Object.getPrototypeOf, ae = oe.slice, g = oe.flat ? function (e) { return oe.flat.call(e) } : function (e) { return oe.concat.apply([], e) }, s = oe.push, se = oe.indexOf, n = {}, i = n.toString, ue = n.hasOwnProperty, o = ue.toString, a = o.call(Object), le = {}, v = function (e) { return "function" == typeof e && "number" != typeof e.nodeType && "function" != typeof e.item }, y = function (e) { return null != e && e === e.window }, C = ie.document, u = { type: !0, src: !0, nonce: !0, noModule: !0 }; function m(e, t, n) { var r, i, o = (n = n || C).createElement("script"); if (o.text = e, t) for (r in u) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); n.head.appendChild(o).parentNode.removeChild(o) } function x(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[i.call(e)] || "object" : typeof e } var t = "3.7.1", l = /HTML$/i, ce = function (e, t) { return new ce.fn.init(e, t) }; function c(e) { var t = !!e && "length" in e && e.length, n = x(e); return !v(e) && !y(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) } function fe(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } ce.fn = ce.prototype = { jquery: t, constructor: ce, length: 0, toArray: function () { return ae.call(this) }, get: function (e) { return null == e ? ae.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = ce.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return ce.each(this, e) }, map: function (n) { return this.pushStack(ce.map(this, function (e, t) { return n.call(e, t, e) })) }, slice: function () { return this.pushStack(ae.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, even: function () { return this.pushStack(ce.grep(this, function (e, t) { return (t + 1) % 2 })) }, odd: function () { return this.pushStack(ce.grep(this, function (e, t) { return t % 2 })) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(0 <= n && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: s, sort: oe.sort, splice: oe.splice }, ce.extend = ce.fn.extend = function () { var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1; for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || v(a) || (a = {}), s === u && (a = this, s--); s < u; s++)if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (ce.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || ce.isPlainObject(n) ? n : {}, i = !1, a[t] = ce.extend(l, o, r)) : void 0 !== r && (a[t] = r)); return a }, ce.extend({ expando: "jQuery" + (t + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== i.call(e)) && (!(t = r(e)) || "function" == typeof (n = ue.call(t, "constructor") && t.constructor) && o.call(n) === a) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e, t, n) { m(e, { nonce: t && t.nonce }, n) }, each: function (e, t) { var n, r = 0; if (c(e)) { for (n = e.length; r < n; r++)if (!1 === t.call(e[r], r, e[r])) break } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e }, text: function (e) { var t, n = "", r = 0, i = e.nodeType; if (!i) while (t = e[r++]) n += ce.text(t); return 1 === i || 11 === i ? e.textContent : 9 === i ? e.documentElement.textContent : 3 === i || 4 === i ? e.nodeValue : n }, makeArray: function (e, t) { var n = t || []; return null != e && (c(Object(e)) ? ce.merge(n, "string" == typeof e ? [e] : e) : s.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : se.call(t, e, n) }, isXMLDoc: function (e) { var t = e && e.namespaceURI, n = e && (e.ownerDocument || e).documentElement; return !l.test(t || n && n.nodeName || "HTML") }, merge: function (e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++)e[i++] = t[r]; return e.length = i, e }, grep: function (e, t, n) { for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)!t(e[i], i) !== a && r.push(e[i]); return r }, map: function (e, t, n) { var r, i, o = 0, a = []; if (c(e)) for (r = e.length; o < r; o++)null != (i = t(e[o], o, n)) && a.push(i); else for (o in e) null != (i = t(e[o], o, n)) && a.push(i); return g(a) }, guid: 1, support: le }), "function" == typeof Symbol && (ce.fn[Symbol.iterator] = oe[Symbol.iterator]), ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { n["[object " + t + "]"] = t.toLowerCase() }); var pe = oe.pop, de = oe.sort, he = oe.splice, ge = "[\\x20\\t\\r\\n\\f]", ve = new RegExp("^" + ge + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ge + "+$", "g"); ce.contains = function (e, t) { var n = t && t.parentNode; return e === n || !(!n || 1 !== n.nodeType || !(e.contains ? e.contains(n) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(n))) }; var f = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; function p(e, t) { return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e } ce.escapeSelector = function (e) { return (e + "").replace(f, p) }; var ye = C, me = s; !function () { var e, b, w, o, a, T, r, C, d, i, k = me, S = ce.expando, E = 0, n = 0, s = W(), c = W(), u = W(), h = W(), l = function (e, t) { return e === t && (a = !0), 0 }, f = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", t = "(?:\\\\[\\da-fA-F]{1,6}" + ge + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", p = "\\[" + ge + "*(" + t + ")(?:" + ge + "*([*^$|!~]?=)" + ge + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + t + "))|)" + ge + "*\\]", g = ":(" + t + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + p + ")*)|.*)\\)|)", v = new RegExp(ge + "+", "g"), y = new RegExp("^" + ge + "*," + ge + "*"), m = new RegExp("^" + ge + "*([>+~]|" + ge + ")" + ge + "*"), x = new RegExp(ge + "|>"), j = new RegExp(g), A = new RegExp("^" + t + "$"), D = { ID: new RegExp("^#(" + t + ")"), CLASS: new RegExp("^\\.(" + t + ")"), TAG: new RegExp("^(" + t + "|[*])"), ATTR: new RegExp("^" + p), PSEUDO: new RegExp("^" + g), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ge + "*(even|odd|(([+-]|)(\\d*)n|)" + ge + "*(?:([+-]|)" + ge + "*(\\d+)|))" + ge + "*\\)|)", "i"), bool: new RegExp("^(?:" + f + ")$", "i"), needsContext: new RegExp("^" + ge + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ge + "*((?:-\\d)?\\d*)" + ge + "*\\)|)(?=[^-]|$)", "i") }, N = /^(?:input|select|textarea|button)$/i, q = /^h\d$/i, L = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, H = /[+~]/, O = new RegExp("\\\\[\\da-fA-F]{1,6}" + ge + "?|\\\\([^\\r\\n\\f])", "g"), P = function (e, t) { var n = "0x" + e.slice(1) - 65536; return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320)) }, M = function () { V() }, R = J(function (e) { return !0 === e.disabled && fe(e, "fieldset") }, { dir: "parentNode", next: "legend" }); try { k.apply(oe = ae.call(ye.childNodes), ye.childNodes), oe[ye.childNodes.length].nodeType } catch (e) { k = { apply: function (e, t) { me.apply(e, ae.call(t)) }, call: function (e) { me.apply(e, ae.call(arguments, 1)) } } } function I(t, e, n, r) { var i, o, a, s, u, l, c, f = e && e.ownerDocument, p = e ? e.nodeType : 9; if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n; if (!r && (V(e), e = e || T, C)) { if (11 !== p && (u = L.exec(t))) if (i = u[1]) { if (9 === p) { if (!(a = e.getElementById(i))) return n; if (a.id === i) return k.call(n, a), n } else if (f && (a = f.getElementById(i)) && I.contains(e, a) && a.id === i) return k.call(n, a), n } else { if (u[2]) return k.apply(n, e.getElementsByTagName(t)), n; if ((i = u[3]) && e.getElementsByClassName) return k.apply(n, e.getElementsByClassName(i)), n } if (!(h[t + " "] || d && d.test(t))) { if (c = t, f = e, 1 === p && (x.test(t) || m.test(t))) { (f = H.test(t) && U(e.parentNode) || e) == e && le.scope || ((s = e.getAttribute("id")) ? s = ce.escapeSelector(s) : e.setAttribute("id", s = S)), o = (l = Y(t)).length; while (o--) l[o] = (s ? "#" + s : ":scope") + " " + Q(l[o]); c = l.join(",") } try { return k.apply(n, f.querySelectorAll(c)), n } catch (e) { h(t, !0) } finally { s === S && e.removeAttribute("id") } } } return re(t.replace(ve, "$1"), e, n, r) } function W() { var r = []; return function e(t, n) { return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n } } function F(e) { return e[S] = !0, e } function $(e) { var t = T.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function B(t) { return function (e) { return fe(e, "input") && e.type === t } } function _(t) { return function (e) { return (fe(e, "input") || fe(e, "button")) && e.type === t } } function z(t) { return function (e) { return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && R(e) === t : e.disabled === t : "label" in e && e.disabled === t } } function X(a) { return F(function (o) { return o = +o, F(function (e, t) { var n, r = a([], e.length, o), i = r.length; while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n])) }) }) } function U(e) { return e && "undefined" != typeof e.getElementsByTagName && e } function V(e) { var t, n = e ? e.ownerDocument || e : ye; return n != T && 9 === n.nodeType && n.documentElement && (r = (T = n).documentElement, C = !ce.isXMLDoc(T), i = r.matches || r.webkitMatchesSelector || r.msMatchesSelector, r.msMatchesSelector && ye != T && (t = T.defaultView) && t.top !== t && t.addEventListener("unload", M), le.getById = $(function (e) { return r.appendChild(e).id = ce.expando, !T.getElementsByName || !T.getElementsByName(ce.expando).length }), le.disconnectedMatch = $(function (e) { return i.call(e, "*") }), le.scope = $(function () { return T.querySelectorAll(":scope") }), le.cssHas = $(function () { try { return T.querySelector(":has(*,:jqfake)"), !1 } catch (e) { return !0 } }), le.getById ? (b.filter.ID = function (e) { var t = e.replace(O, P); return function (e) { return e.getAttribute("id") === t } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && C) { var n = t.getElementById(e); return n ? [n] : [] } }) : (b.filter.ID = function (e) { var n = e.replace(O, P); return function (e) { var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return t && t.value === n } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && C) { var n, r, i, o = t.getElementById(e); if (o) { if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; i = t.getElementsByName(e), r = 0; while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o] } return [] } }), b.find.TAG = function (e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : t.querySelectorAll(e) }, b.find.CLASS = function (e, t) { if ("undefined" != typeof t.getElementsByClassName && C) return t.getElementsByClassName(e) }, d = [], $(function (e) { var t; r.appendChild(e).innerHTML = "<a id='" + S + "' href='' disabled='disabled'></a><select id='" + S + "-\r\\' disabled='disabled'><option selected=''></option></select>", e.querySelectorAll("[selected]").length || d.push("\\[" + ge + "*(?:value|" + f + ")"), e.querySelectorAll("[id~=" + S + "-]").length || d.push("~="), e.querySelectorAll("a#" + S + "+*").length || d.push(".#.+[+~]"), e.querySelectorAll(":checked").length || d.push(":checked"), (t = T.createElement("input")).setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), r.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && d.push(":enabled", ":disabled"), (t = T.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || d.push("\\[" + ge + "*name" + ge + "*=" + ge + "*(?:''|\"\")") }), le.cssHas || d.push(":has"), d = d.length && new RegExp(d.join("|")), l = function (e, t) { if (e === t) return a = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !le.sortDetached && t.compareDocumentPosition(e) === n ? e === T || e.ownerDocument == ye && I.contains(ye, e) ? -1 : t === T || t.ownerDocument == ye && I.contains(ye, t) ? 1 : o ? se.call(o, e) - se.call(o, t) : 0 : 4 & n ? -1 : 1) }), T } for (e in I.matches = function (e, t) { return I(e, null, null, t) }, I.matchesSelector = function (e, t) { if (V(e), C && !h[t + " "] && (!d || !d.test(t))) try { var n = i.call(e, t); if (n || le.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n } catch (e) { h(t, !0) } return 0 < I(t, T, null, [e]).length }, I.contains = function (e, t) { return (e.ownerDocument || e) != T && V(e), ce.contains(e, t) }, I.attr = function (e, t) { (e.ownerDocument || e) != T && V(e); var n = b.attrHandle[t.toLowerCase()], r = n && ue.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !C) : void 0; return void 0 !== r ? r : e.getAttribute(t) }, I.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e) }, ce.uniqueSort = function (e) { var t, n = [], r = 0, i = 0; if (a = !le.sortStable, o = !le.sortStable && ae.call(e, 0), de.call(e, l), a) { while (t = e[i++]) t === e[i] && (r = n.push(i)); while (r--) he.call(e, n[r], 1) } return o = null, e }, ce.fn.uniqueSort = function () { return this.pushStack(ce.uniqueSort(ae.apply(this))) }, (b = ce.expr = { cacheLength: 50, createPseudo: F, match: D, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(O, P), e[3] = (e[3] || e[4] || e[5] || "").replace(O, P), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function (e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || I.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && I.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return D.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && j.test(n) && (t = Y(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function (e) { var t = e.replace(O, P).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return fe(e, t) } }, CLASS: function (e) { var t = s[e + " "]; return t || (t = new RegExp("(^|" + ge + ")" + e + "(" + ge + "|$)")) && s(e, function (e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function (n, r, i) { return function (e) { var t = I.attr(e, n); return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(v, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-")) } }, CHILD: function (d, e, t, h, g) { var v = "nth" !== d.slice(0, 3), y = "last" !== d.slice(-4), m = "of-type" === e; return 1 === h && 0 === g ? function (e) { return !!e.parentNode } : function (e, t, n) { var r, i, o, a, s, u = v !== y ? "nextSibling" : "previousSibling", l = e.parentNode, c = m && e.nodeName.toLowerCase(), f = !n && !m, p = !1; if (l) { if (v) { while (u) { o = e; while (o = o[u]) if (m ? fe(o, c) : 1 === o.nodeType) return !1; s = u = "only" === d && !s && "nextSibling" } return !0 } if (s = [y ? l.firstChild : l.lastChild], y && f) { p = (a = (r = (i = l[S] || (l[S] = {}))[d] || [])[0] === E && r[1]) && r[2], o = a && l.childNodes[a]; while (o = ++a && o && o[u] || (p = a = 0) || s.pop()) if (1 === o.nodeType && ++p && o === e) { i[d] = [E, a, p]; break } } else if (f && (p = a = (r = (i = e[S] || (e[S] = {}))[d] || [])[0] === E && r[1]), !1 === p) while (o = ++a && o && o[u] || (p = a = 0) || s.pop()) if ((m ? fe(o, c) : 1 === o.nodeType) && ++p && (f && ((i = o[S] || (o[S] = {}))[d] = [E, p]), o === e)) break; return (p -= g) === h || p % h == 0 && 0 <= p / h } } }, PSEUDO: function (e, o) { var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || I.error("unsupported pseudo: " + e); return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? F(function (e, t) { var n, r = a(e, o), i = r.length; while (i--) e[n = se.call(e, r[i])] = !(t[n] = r[i]) }) : function (e) { return a(e, 0, t) }) : a } }, pseudos: { not: F(function (e) { var r = [], i = [], s = ne(e.replace(ve, "$1")); return s[S] ? F(function (e, t, n, r) { var i, o = s(e, null, r, []), a = e.length; while (a--) (i = o[a]) && (e[a] = !(t[a] = i)) }) : function (e, t, n) { return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop() } }), has: F(function (t) { return function (e) { return 0 < I(t, e).length } }), contains: F(function (t) { return t = t.replace(O, P), function (e) { return -1 < (e.textContent || ce.text(e)).indexOf(t) } }), lang: F(function (n) { return A.test(n || "") || I.error("unsupported lang: " + n), n = n.replace(O, P).toLowerCase(), function (e) { var t; do { if (t = C ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") } while ((e = e.parentNode) && 1 === e.nodeType); return !1 } }), target: function (e) { var t = ie.location && ie.location.hash; return t && t.slice(1) === e.id }, root: function (e) { return e === r }, focus: function (e) { return e === function () { try { return T.activeElement } catch (e) { } }() && T.hasFocus() && !!(e.type || e.href || ~e.tabIndex) }, enabled: z(!1), disabled: z(!0), checked: function (e) { return fe(e, "input") && !!e.checked || fe(e, "option") && !!e.selected }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6) return !1; return !0 }, parent: function (e) { return !b.pseudos.empty(e) }, header: function (e) { return q.test(e.nodeName) }, input: function (e) { return N.test(e.nodeName) }, button: function (e) { return fe(e, "input") && "button" === e.type || fe(e, "button") }, text: function (e) { var t; return fe(e, "input") && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, first: X(function () { return [0] }), last: X(function (e, t) { return [t - 1] }), eq: X(function (e, t, n) { return [n < 0 ? n + t : n] }), even: X(function (e, t) { for (var n = 0; n < t; n += 2)e.push(n); return e }), odd: X(function (e, t) { for (var n = 1; n < t; n += 2)e.push(n); return e }), lt: X(function (e, t, n) { var r; for (r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;)e.push(r); return e }), gt: X(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t;)e.push(r); return e }) } }).pseudos.nth = b.pseudos.eq, { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) b.pseudos[e] = B(e); for (e in { submit: !0, reset: !0 }) b.pseudos[e] = _(e); function G() { } function Y(e, t) { var n, r, i, o, a, s, u, l = c[e + " "]; if (l) return t ? 0 : l.slice(0); a = e, s = [], u = b.preFilter; while (a) { for (o in n && !(r = y.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = m.exec(a)) && (n = r.shift(), i.push({ value: n, type: r[0].replace(ve, " ") }), a = a.slice(n.length)), b.filter) !(r = D[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({ value: n, type: o, matches: r }), a = a.slice(n.length)); if (!n) break } return t ? a.length : a ? I.error(e) : c(e, s).slice(0) } function Q(e) { for (var t = 0, n = e.length, r = ""; t < n; t++)r += e[t].value; return r } function J(a, e, t) { var s = e.dir, u = e.next, l = u || s, c = t && "parentNode" === l, f = n++; return e.first ? function (e, t, n) { while (e = e[s]) if (1 === e.nodeType || c) return a(e, t, n); return !1 } : function (e, t, n) { var r, i, o = [E, f]; if (n) { while (e = e[s]) if ((1 === e.nodeType || c) && a(e, t, n)) return !0 } else while (e = e[s]) if (1 === e.nodeType || c) if (i = e[S] || (e[S] = {}), u && fe(e, u)) e = e[s] || e; else { if ((r = i[l]) && r[0] === E && r[1] === f) return o[2] = r[2]; if ((i[l] = o)[2] = a(e, t, n)) return !0 } return !1 } } function K(i) { return 1 < i.length ? function (e, t, n) { var r = i.length; while (r--) if (!i[r](e, t, n)) return !1; return !0 } : i[0] } function Z(e, t, n, r, i) { for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s))); return a } function ee(d, h, g, v, y, e) { return v && !v[S] && (v = ee(v)), y && !y[S] && (y = ee(y, e)), F(function (e, t, n, r) { var i, o, a, s, u = [], l = [], c = t.length, f = e || function (e, t, n) { for (var r = 0, i = t.length; r < i; r++)I(e, t[r], n); return n }(h || "*", n.nodeType ? [n] : n, []), p = !d || !e && h ? f : Z(f, u, d, n, r); if (g ? g(p, s = y || (e ? d : c || v) ? [] : t, n, r) : s = p, v) { i = Z(s, l), v(i, [], n, r), o = i.length; while (o--) (a = i[o]) && (s[l[o]] = !(p[l[o]] = a)) } if (e) { if (y || d) { if (y) { i = [], o = s.length; while (o--) (a = s[o]) && i.push(p[o] = a); y(null, s = [], i, r) } o = s.length; while (o--) (a = s[o]) && -1 < (i = y ? se.call(e, a) : u[o]) && (e[i] = !(t[i] = a)) } } else s = Z(s === t ? s.splice(c, s.length) : s), y ? y(null, t, s, r) : k.apply(t, s) }) } function te(e) { for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = J(function (e) { return e === i }, a, !0), l = J(function (e) { return -1 < se.call(i, e) }, a, !0), c = [function (e, t, n) { var r = !o && (n || t != w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); return i = null, r }]; s < r; s++)if (t = b.relative[e[s].type]) c = [J(K(c), t)]; else { if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { for (n = ++s; n < r; n++)if (b.relative[e[n].type]) break; return ee(1 < s && K(c), 1 < s && Q(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace(ve, "$1"), t, s < n && te(e.slice(s, n)), n < r && te(e = e.slice(n)), n < r && Q(e)) } c.push(t) } return K(c) } function ne(e, t) { var n, v, y, m, x, r, i = [], o = [], a = u[e + " "]; if (!a) { t || (t = Y(e)), n = t.length; while (n--) (a = te(t[n]))[S] ? i.push(a) : o.push(a); (a = u(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) { var o, a, s, u = 0, l = "0", c = e && [], f = [], p = w, d = e || x && b.find.TAG("*", i), h = E += null == p ? 1 : Math.random() || .1, g = d.length; for (i && (w = t == T || t || i); l !== g && null != (o = d[l]); l++) { if (x && o) { a = 0, t || o.ownerDocument == T || (V(o), n = !C); while (s = v[a++]) if (s(o, t || T, n)) { k.call(r, o); break } i && (E = h) } m && ((o = !s && o) && u--, e && c.push(o)) } if (u += l, m && l !== u) { a = 0; while (s = y[a++]) s(c, f, t, n); if (e) { if (0 < u) while (l--) c[l] || f[l] || (f[l] = pe.call(r)); f = Z(f) } k.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && ce.uniqueSort(r) } return i && (E = h, w = p), c }, m ? F(r) : r))).selector = e } return a } function re(e, t, n, r) { var i, o, a, s, u, l = "function" == typeof e && e, c = !r && Y(e = l.selector || e); if (n = n || [], 1 === c.length) { if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && C && b.relative[o[1].type]) { if (!(t = (b.find.ID(a.matches[0].replace(O, P), t) || [])[0])) return n; l && (t = t.parentNode), e = e.slice(o.shift().value.length) } i = D.needsContext.test(e) ? 0 : o.length; while (i--) { if (a = o[i], b.relative[s = a.type]) break; if ((u = b.find[s]) && (r = u(a.matches[0].replace(O, P), H.test(o[0].type) && U(t.parentNode) || t))) { if (o.splice(i, 1), !(e = r.length && Q(o))) return k.apply(n, r), n; break } } } return (l || ne(e, c))(r, t, !C, n, !t || H.test(e) && U(t.parentNode) || t), n } G.prototype = b.filters = b.pseudos, b.setFilters = new G, le.sortStable = S.split("").sort(l).join("") === S, V(), le.sortDetached = $(function (e) { return 1 & e.compareDocumentPosition(T.createElement("fieldset")) }), ce.find = I, ce.expr[":"] = ce.expr.pseudos, ce.unique = ce.uniqueSort, I.compile = ne, I.select = re, I.setDocument = V, I.tokenize = Y, I.escape = ce.escapeSelector, I.getText = ce.text, I.isXML = ce.isXMLDoc, I.selectors = ce.expr, I.support = ce.support, I.uniqueSort = ce.uniqueSort }(); var d = function (e, t, n) { var r = [], i = void 0 !== n; while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) { if (i && ce(e).is(n)) break; r.push(e) } return r }, h = function (e, t) { for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e); return n }, b = ce.expr.match.needsContext, w = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; function T(e, n, r) { return v(n) ? ce.grep(e, function (e, t) { return !!n.call(e, t, e) !== r }) : n.nodeType ? ce.grep(e, function (e) { return e === n !== r }) : "string" != typeof n ? ce.grep(e, function (e) { return -1 < se.call(n, e) !== r }) : ce.filter(n, e, r) } ce.filter = function (e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? ce.find.matchesSelector(r, e) ? [r] : [] : ce.find.matches(e, ce.grep(t, function (e) { return 1 === e.nodeType })) }, ce.fn.extend({ find: function (e) { var t, n, r = this.length, i = this; if ("string" != typeof e) return this.pushStack(ce(e).filter(function () { for (t = 0; t < r; t++)if (ce.contains(i[t], this)) return !0 })); for (n = this.pushStack([]), t = 0; t < r; t++)ce.find(e, i[t], n); return 1 < r ? ce.uniqueSort(n) : n }, filter: function (e) { return this.pushStack(T(this, e || [], !1)) }, not: function (e) { return this.pushStack(T(this, e || [], !0)) }, is: function (e) { return !!T(this, "string" == typeof e && b.test(e) ? ce(e) : e || [], !1).length } }); var k, S = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (ce.fn.init = function (e, t, n) { var r, i; if (!e) return this; if (n = n || k, "string" == typeof e) { if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : S.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (t = t instanceof ce ? t[0] : t, ce.merge(this, ce.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : C, !0)), w.test(r[1]) && ce.isPlainObject(t)) for (r in t) v(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this } return (i = C.getElementById(r[2])) && (this[0] = i, this.length = 1), this } return e.nodeType ? (this[0] = e, this.length = 1, this) : v(e) ? void 0 !== n.ready ? n.ready(e) : e(ce) : ce.makeArray(e, this) }).prototype = ce.fn, k = ce(C); var E = /^(?:parents|prev(?:Until|All))/, j = { children: !0, contents: !0, next: !0, prev: !0 }; function A(e, t) { while ((e = e[t]) && 1 !== e.nodeType); return e } ce.fn.extend({ has: function (e) { var t = ce(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++)if (ce.contains(this, t[e])) return !0 }) }, closest: function (e, t) { var n, r = 0, i = this.length, o = [], a = "string" != typeof e && ce(e); if (!b.test(e)) for (; r < i; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && ce.find.matchesSelector(n, e))) { o.push(n); break } return this.pushStack(1 < o.length ? ce.uniqueSort(o) : o) }, index: function (e) { return e ? "string" == typeof e ? se.call(ce(e), this[0]) : se.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (e, t) { return this.pushStack(ce.uniqueSort(ce.merge(this.get(), ce(e, t)))) }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }), ce.each({ parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function (e) { return d(e, "parentNode") }, parentsUntil: function (e, t, n) { return d(e, "parentNode", n) }, next: function (e) { return A(e, "nextSibling") }, prev: function (e) { return A(e, "previousSibling") }, nextAll: function (e) { return d(e, "nextSibling") }, prevAll: function (e) { return d(e, "previousSibling") }, nextUntil: function (e, t, n) { return d(e, "nextSibling", n) }, prevUntil: function (e, t, n) { return d(e, "previousSibling", n) }, siblings: function (e) { return h((e.parentNode || {}).firstChild, e) }, children: function (e) { return h(e.firstChild) }, contents: function (e) { return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (fe(e, "template") && (e = e.content || e), ce.merge([], e.childNodes)) } }, function (r, i) { ce.fn[r] = function (e, t) { var n = ce.map(this, i, e); return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = ce.filter(t, n)), 1 < this.length && (j[r] || ce.uniqueSort(n), E.test(r) && n.reverse()), this.pushStack(n) } }); var D = /[^\x20\t\r\n\f]+/g; function N(e) { return e } function q(e) { throw e } function L(e, t, n, r) { var i; try { e && v(i = e.promise) ? i.call(e).done(t).fail(n) : e && v(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) } catch (e) { n.apply(void 0, [e]) } } ce.Callbacks = function (r) { var e, n; r = "string" == typeof r ? (e = r, n = {}, ce.each(e.match(D) || [], function (e, t) { n[t] = !0 }), n) : ce.extend({}, r); var i, t, o, a, s = [], u = [], l = -1, c = function () { for (a = a || r.once, o = i = !0; u.length; l = -1) { t = u.shift(); while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1) } r.memory || (t = !1), i = !1, a && (s = t ? [] : "") }, f = { add: function () { return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) { ce.each(e, function (e, t) { v(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== x(t) && n(t) }) }(arguments), t && !i && c()), this }, remove: function () { return ce.each(arguments, function (e, t) { var n; while (-1 < (n = ce.inArray(t, s, n))) s.splice(n, 1), n <= l && l-- }), this }, has: function (e) { return e ? -1 < ce.inArray(e, s) : 0 < s.length }, empty: function () { return s && (s = []), this }, disable: function () { return a = u = [], s = t = "", this }, disabled: function () { return !s }, lock: function () { return a = u = [], t || i || (s = t = ""), this }, locked: function () { return !!a }, fireWith: function (e, t) { return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this }, fire: function () { return f.fireWith(this, arguments), this }, fired: function () { return !!o } }; return f }, ce.extend({ Deferred: function (e) { var o = [["notify", "progress", ce.Callbacks("memory"), ce.Callbacks("memory"), 2], ["resolve", "done", ce.Callbacks("once memory"), ce.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", ce.Callbacks("once memory"), ce.Callbacks("once memory"), 1, "rejected"]], i = "pending", a = { state: function () { return i }, always: function () { return s.done(arguments).fail(arguments), this }, "catch": function (e) { return a.then(null, e) }, pipe: function () { var i = arguments; return ce.Deferred(function (r) { ce.each(o, function (e, t) { var n = v(i[t[4]]) && i[t[4]]; s[t[1]](function () { var e = n && n.apply(this, arguments); e && v(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments) }) }), i = null }).promise() }, then: function (t, n, r) { var u = 0; function l(i, o, a, s) { return function () { var n = this, r = arguments, e = function () { var e, t; if (!(i < u)) { if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution"); t = e && ("object" == typeof e || "function" == typeof e) && e.then, v(t) ? s ? t.call(e, l(u, o, N, s), l(u, o, q, s)) : (u++, t.call(e, l(u, o, N, s), l(u, o, q, s), l(u, o, N, o.notifyWith))) : (a !== N && (n = void 0, r = [e]), (s || o.resolveWith)(n, r)) } }, t = s ? e : function () { try { e() } catch (e) { ce.Deferred.exceptionHook && ce.Deferred.exceptionHook(e, t.error), u <= i + 1 && (a !== q && (n = void 0, r = [e]), o.rejectWith(n, r)) } }; i ? t() : (ce.Deferred.getErrorHook ? t.error = ce.Deferred.getErrorHook() : ce.Deferred.getStackHook && (t.error = ce.Deferred.getStackHook()), ie.setTimeout(t)) } } return ce.Deferred(function (e) { o[0][3].add(l(0, e, v(r) ? r : N, e.notifyWith)), o[1][3].add(l(0, e, v(t) ? t : N)), o[2][3].add(l(0, e, v(n) ? n : q)) }).promise() }, promise: function (e) { return null != e ? ce.extend(e, a) : a } }, s = {}; return ce.each(o, function (e, t) { var n = t[2], r = t[5]; a[t[1]] = n.add, r && n.add(function () { i = r }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () { return s[t[0] + "With"](this === s ? void 0 : this, arguments), this }, s[t[0] + "With"] = n.fireWith }), a.promise(s), e && e.call(s, s), s }, when: function (e) { var n = arguments.length, t = n, r = Array(t), i = ae.call(arguments), o = ce.Deferred(), a = function (t) { return function (e) { r[t] = this, i[t] = 1 < arguments.length ? ae.call(arguments) : e, --n || o.resolveWith(r, i) } }; if (n <= 1 && (L(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || v(i[t] && i[t].then))) return o.then(); while (t--) L(i[t], a(t), o.reject); return o.promise() } }); var H = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; ce.Deferred.exceptionHook = function (e, t) { ie.console && ie.console.warn && e && H.test(e.name) && ie.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) }, ce.readyException = function (e) { ie.setTimeout(function () { throw e }) }; var O = ce.Deferred(); function P() { C.removeEventListener("DOMContentLoaded", P), ie.removeEventListener("load", P), ce.ready() } ce.fn.ready = function (e) { return O.then(e)["catch"](function (e) { ce.readyException(e) }), this }, ce.extend({ isReady: !1, readyWait: 1, ready: function (e) { (!0 === e ? --ce.readyWait : ce.isReady) || (ce.isReady = !0) !== e && 0 < --ce.readyWait || O.resolveWith(C, [ce]) } }), ce.ready.then = O.then, "complete" === C.readyState || "loading" !== C.readyState && !C.documentElement.doScroll ? ie.setTimeout(ce.ready) : (C.addEventListener("DOMContentLoaded", P), ie.addEventListener("load", P)); var M = function (e, t, n, r, i, o, a) { var s = 0, u = e.length, l = null == n; if ("object" === x(n)) for (s in i = !0, n) M(e, t, s, n[s], !0, o, a); else if (void 0 !== r && (i = !0, v(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { return l.call(ce(e), n) })), t)) for (; s < u; s++)t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); return i ? e : l ? t.call(e) : u ? t(e[0], n) : o }, R = /^-ms-/, I = /-([a-z])/g; function W(e, t) { return t.toUpperCase() } function F(e) { return e.replace(R, "ms-").replace(I, W) } var $ = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType }; function B() { this.expando = ce.expando + B.uid++ } B.uid = 1, B.prototype = { cache: function (e) { var t = e[this.expando]; return t || (t = {}, $(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, set: function (e, t, n) { var r, i = this.cache(e); if ("string" == typeof t) i[F(t)] = n; else for (r in t) i[F(r)] = t[r]; return i }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][F(t)] }, access: function (e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, remove: function (e, t) { var n, r = e[this.expando]; if (void 0 !== r) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(F) : (t = F(t)) in r ? [t] : t.match(D) || []).length; while (n--) delete r[t[n]] } (void 0 === t || ce.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !ce.isEmptyObject(t) } }; var _ = new B, z = new B, X = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, U = /[A-Z]/g; function V(e, t, n) { var r, i; if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(U, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) { try { n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : X.test(i) ? JSON.parse(i) : i) } catch (e) { } z.set(e, t, n) } else n = void 0; return n } ce.extend({ hasData: function (e) { return z.hasData(e) || _.hasData(e) }, data: function (e, t, n) { return z.access(e, t, n) }, removeData: function (e, t) { z.remove(e, t) }, _data: function (e, t, n) { return _.access(e, t, n) }, _removeData: function (e, t) { _.remove(e, t) } }), ce.fn.extend({ data: function (n, e) { var t, r, i, o = this[0], a = o && o.attributes; if (void 0 === n) { if (this.length && (i = z.get(o), 1 === o.nodeType && !_.get(o, "hasDataAttrs"))) { t = a.length; while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = F(r.slice(5)), V(o, r, i[r])); _.set(o, "hasDataAttrs", !0) } return i } return "object" == typeof n ? this.each(function () { z.set(this, n) }) : M(this, function (e) { var t; if (o && void 0 === e) return void 0 !== (t = z.get(o, n)) ? t : void 0 !== (t = V(o, n)) ? t : void 0; this.each(function () { z.set(this, n, e) }) }, null, e, 1 < arguments.length, null, !0) }, removeData: function (e) { return this.each(function () { z.remove(this, e) }) } }), ce.extend({ queue: function (e, t, n) { var r; if (e) return t = (t || "fx") + "queue", r = _.get(e, t), n && (!r || Array.isArray(n) ? r = _.access(e, t, ce.makeArray(n)) : r.push(n)), r || [] }, dequeue: function (e, t) { t = t || "fx"; var n = ce.queue(e, t), r = n.length, i = n.shift(), o = ce._queueHooks(e, t); "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () { ce.dequeue(e, t) }, o)), !r && o && o.empty.fire() }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return _.get(e, n) || _.access(e, n, { empty: ce.Callbacks("once memory").add(function () { _.remove(e, [t + "queue", n]) }) }) } }), ce.fn.extend({ queue: function (t, n) { var e = 2; return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? ce.queue(this[0], t) : void 0 === n ? this : this.each(function () { var e = ce.queue(this, t, n); ce._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && ce.dequeue(this, t) }) }, dequeue: function (e) { return this.each(function () { ce.dequeue(this, e) }) }, clearQueue: function (e) { return this.queue(e || "fx", []) }, promise: function (e, t) { var n, r = 1, i = ce.Deferred(), o = this, a = this.length, s = function () { --r || i.resolveWith(o, [o]) }; "string" != typeof e && (t = e, e = void 0), e = e || "fx"; while (a--) (n = _.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); return s(), i.promise(t) } }); var G = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, Y = new RegExp("^(?:([+-])=|)(" + G + ")([a-z%]*)$", "i"), Q = ["Top", "Right", "Bottom", "Left"], J = C.documentElement, K = function (e) { return ce.contains(e.ownerDocument, e) }, Z = { composed: !0 }; J.getRootNode && (K = function (e) { return ce.contains(e.ownerDocument, e) || e.getRootNode(Z) === e.ownerDocument }); var ee = function (e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && K(e) && "none" === ce.css(e, "display") }; function te(e, t, n, r) { var i, o, a = 20, s = r ? function () { return r.cur() } : function () { return ce.css(e, t, "") }, u = s(), l = n && n[3] || (ce.cssNumber[t] ? "" : "px"), c = e.nodeType && (ce.cssNumber[t] || "px" !== l && +u) && Y.exec(ce.css(e, t)); if (c && c[3] !== l) { u /= 2, l = l || c[3], c = +u || 1; while (a--) ce.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o; c *= 2, ce.style(e, t, c + l), n = n || [] } return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i } var ne = {}; function re(e, t) { for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = _.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ee(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ne[s]) || (o = a.body.appendChild(a.createElement(s)), u = ce.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ne[s] = u)))) : "none" !== n && (l[c] = "none", _.set(r, "display", n))); for (c = 0; c < f; c++)null != l[c] && (e[c].style.display = l[c]); return e } ce.fn.extend({ show: function () { return re(this, !0) }, hide: function () { return re(this) }, toggle: function (e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { ee(this) ? ce(this).show() : ce(this).hide() }) } }); var xe, be, we = /^(?:checkbox|radio)$/i, Te = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, Ce = /^$|^module$|\/(?:java|ecma)script/i; xe = C.createDocumentFragment().appendChild(C.createElement("div")), (be = C.createElement("input")).setAttribute("type", "radio"), be.setAttribute("checked", "checked"), be.setAttribute("name", "t"), xe.appendChild(be), le.checkClone = xe.cloneNode(!0).cloneNode(!0).lastChild.checked, xe.innerHTML = "<textarea>x</textarea>", le.noCloneChecked = !!xe.cloneNode(!0).lastChild.defaultValue, xe.innerHTML = "<option></option>", le.option = !!xe.lastChild; var ke = { thead: [1, "<table>", "</table>"], col: [2, "<table><colgroup>", "</colgroup></table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: [0, "", ""] }; function Se(e, t) { var n; return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && fe(e, t) ? ce.merge([e], n) : n } function Ee(e, t) { for (var n = 0, r = e.length; n < r; n++)_.set(e[n], "globalEval", !t || _.get(t[n], "globalEval")) } ke.tbody = ke.tfoot = ke.colgroup = ke.caption = ke.thead, ke.th = ke.td, le.option || (ke.optgroup = ke.option = [1, "<select multiple='multiple'>", "</select>"]); var je = /<|&#?\w+;/; function Ae(e, t, n, r, i) { for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)if ((o = e[d]) || 0 === o) if ("object" === x(o)) ce.merge(p, o.nodeType ? [o] : o); else if (je.test(o)) { a = a || f.appendChild(t.createElement("div")), s = (Te.exec(o) || ["", ""])[1].toLowerCase(), u = ke[s] || ke._default, a.innerHTML = u[1] + ce.htmlPrefilter(o) + u[2], c = u[0]; while (c--) a = a.lastChild; ce.merge(p, a.childNodes), (a = f.firstChild).textContent = "" } else p.push(t.createTextNode(o)); f.textContent = "", d = 0; while (o = p[d++]) if (r && -1 < ce.inArray(o, r)) i && i.push(o); else if (l = K(o), a = Se(f.appendChild(o), "script"), l && Ee(a), n) { c = 0; while (o = a[c++]) Ce.test(o.type || "") && n.push(o) } return f } var De = /^([^.]*)(?:\.(.+)|)/; function Ne() { return !0 } function qe() { return !1 } function Le(e, t, n, r, i, o) { var a, s; if ("object" == typeof t) { for (s in "string" != typeof n && (r = r || n, n = void 0), t) Le(e, s, n, r, t[s], o); return e } if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = qe; else if (!i) return e; return 1 === o && (a = i, (i = function (e) { return ce().off(e), a.apply(this, arguments) }).guid = a.guid || (a.guid = ce.guid++)), e.each(function () { ce.event.add(this, t, i, r, n) }) } function He(e, r, t) { t ? (_.set(e, r, !1), ce.event.add(e, r, { namespace: !1, handler: function (e) { var t, n = _.get(this, r); if (1 & e.isTrigger && this[r]) { if (n) (ce.event.special[r] || {}).delegateType && e.stopPropagation(); else if (n = ae.call(arguments), _.set(this, r, n), this[r](), t = _.get(this, r), _.set(this, r, !1), n !== t) return e.stopImmediatePropagation(), e.preventDefault(), t } else n && (_.set(this, r, ce.event.trigger(n[0], n.slice(1), this)), e.stopPropagation(), e.isImmediatePropagationStopped = Ne) } })) : void 0 === _.get(e, r) && ce.event.add(e, r, Ne) } ce.event = { global: {}, add: function (t, e, n, r, i) { var o, a, s, u, l, c, f, p, d, h, g, v = _.get(t); if ($(t)) { n.handler && (n = (o = n).handler, i = o.selector), i && ce.find.matchesSelector(J, i), n.guid || (n.guid = ce.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function (e) { return "undefined" != typeof ce && ce.event.triggered !== e.type ? ce.event.dispatch.apply(t, arguments) : void 0 }), l = (e = (e || "").match(D) || [""]).length; while (l--) d = g = (s = De.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = ce.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = ce.event.special[d] || {}, c = ce.extend({ type: d, origType: g, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && ce.expr.match.needsContext.test(i), namespace: h.join(".") }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), ce.event.global[d] = !0) } }, remove: function (e, t, n, r, i) { var o, a, s, u, l, c, f, p, d, h, g, v = _.hasData(e) && _.get(e); if (v && (u = v.events)) { l = (t = (t || "").match(D) || [""]).length; while (l--) if (d = g = (s = De.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) { f = ce.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length; while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c)); a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || ce.removeEvent(e, d, v.handle), delete u[d]) } else for (d in u) ce.event.remove(e, d + t[l], n, r, !0); ce.isEmptyObject(u) && _.remove(e, "handle events") } }, dispatch: function (e) { var t, n, r, i, o, a, s = new Array(arguments.length), u = ce.event.fix(e), l = (_.get(this, "events") || Object.create(null))[u.type] || [], c = ce.event.special[u.type] || {}; for (s[0] = u, t = 1; t < arguments.length; t++)s[t] = arguments[t]; if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) { a = ce.event.handlers.call(this, u, l), t = 0; while ((i = a[t++]) && !u.isPropagationStopped()) { u.currentTarget = i.elem, n = 0; while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((ce.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation())) } return c.postDispatch && c.postDispatch.call(this, u), u.result } }, handlers: function (e, t) { var n, r, i, o, a, s = [], u = t.delegateCount, l = e.target; if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) for (; l !== this; l = l.parentNode || this)if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { for (o = [], a = {}, n = 0; n < u; n++)void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < ce(i, this).index(l) : ce.find(i, this, null, [l]).length), a[i] && o.push(r); o.length && s.push({ elem: l, handlers: o }) } return l = this, u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s }, addProp: function (t, e) { Object.defineProperty(ce.Event.prototype, t, { enumerable: !0, configurable: !0, get: v(e) ? function () { if (this.originalEvent) return e(this.originalEvent) } : function () { if (this.originalEvent) return this.originalEvent[t] }, set: function (e) { Object.defineProperty(this, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) } }) }, fix: function (e) { return e[ce.expando] ? e : new ce.Event(e) }, special: { load: { noBubble: !0 }, click: { setup: function (e) { var t = this || e; return we.test(t.type) && t.click && fe(t, "input") && He(t, "click", !0), !1 }, trigger: function (e) { var t = this || e; return we.test(t.type) && t.click && fe(t, "input") && He(t, "click"), !0 }, _default: function (e) { var t = e.target; return we.test(t.type) && t.click && fe(t, "input") && _.get(t, "click") || fe(t, "a") } }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } } }, ce.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n) }, ce.Event = function (e, t) { if (!(this instanceof ce.Event)) return new ce.Event(e, t); e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ne : qe, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && ce.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[ce.expando] = !0 }, ce.Event.prototype = { constructor: ce.Event, isDefaultPrevented: qe, isPropagationStopped: qe, isImmediatePropagationStopped: qe, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; this.isDefaultPrevented = Ne, e && !this.isSimulated && e.preventDefault() }, stopPropagation: function () { var e = this.originalEvent; this.isPropagationStopped = Ne, e && !this.isSimulated && e.stopPropagation() }, stopImmediatePropagation: function () { var e = this.originalEvent; this.isImmediatePropagationStopped = Ne, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() } }, ce.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, "char": !0, code: !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: !0 }, ce.event.addProp), ce.each({ focus: "focusin", blur: "focusout" }, function (r, i) { function o(e) { if (C.documentMode) { var t = _.get(this, "handle"), n = ce.event.fix(e); n.type = "focusin" === e.type ? "focus" : "blur", n.isSimulated = !0, t(e), n.target === n.currentTarget && t(n) } else ce.event.simulate(i, e.target, ce.event.fix(e)) } ce.event.special[r] = { setup: function () { var e; if (He(this, r, !0), !C.documentMode) return !1; (e = _.get(this, i)) || this.addEventListener(i, o), _.set(this, i, (e || 0) + 1) }, trigger: function () { return He(this, r), !0 }, teardown: function () { var e; if (!C.documentMode) return !1; (e = _.get(this, i) - 1) ? _.set(this, i, e) : (this.removeEventListener(i, o), _.remove(this, i)) }, _default: function (e) { return _.get(e.target, r) }, delegateType: i }, ce.event.special[i] = { setup: function () { var e = this.ownerDocument || this.document || this, t = C.documentMode ? this : e, n = _.get(t, i); n || (C.documentMode ? this.addEventListener(i, o) : e.addEventListener(r, o, !0)), _.set(t, i, (n || 0) + 1) }, teardown: function () { var e = this.ownerDocument || this.document || this, t = C.documentMode ? this : e, n = _.get(t, i) - 1; n ? _.set(t, i, n) : (C.documentMode ? this.removeEventListener(i, o) : e.removeEventListener(r, o, !0), _.remove(t, i)) } } }), ce.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, i) { ce.event.special[e] = { delegateType: i, bindType: i, handle: function (e) { var t, n = e.relatedTarget, r = e.handleObj; return n && (n === this || ce.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t } } }), ce.fn.extend({ on: function (e, t, n, r) { return Le(this, e, t, n, r) }, one: function (e, t, n, r) { return Le(this, e, t, n, r, 1) }, off: function (e, t, n) { var r, i; if (e && e.preventDefault && e.handleObj) return r = e.handleObj, ce(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (i in e) this.off(i, t, e[i]); return this } return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = qe), this.each(function () { ce.event.remove(this, e, n, t) }) } }); var Oe = /<script|<style|<link/i, Pe = /checked\s*(?:[^=]|=\s*.checked.)/i, Me = /^\s*<!\[CDATA\[|\]\]>\s*$/g; function Re(e, t) { return fe(e, "table") && fe(11 !== t.nodeType ? t : t.firstChild, "tr") && ce(e).children("tbody")[0] || e } function Ie(e) { return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e } function We(e) { return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e } function Fe(e, t) { var n, r, i, o, a, s; if (1 === t.nodeType) { if (_.hasData(e) && (s = _.get(e).events)) for (i in _.remove(t, "handle events"), s) for (n = 0, r = s[i].length; n < r; n++)ce.event.add(t, i, s[i][n]); z.hasData(e) && (o = z.access(e), a = ce.extend({}, o), z.set(t, a)) } } function $e(n, r, i, o) { r = g(r); var e, t, a, s, u, l, c = 0, f = n.length, p = f - 1, d = r[0], h = v(d); if (h || 1 < f && "string" == typeof d && !le.checkClone && Pe.test(d)) return n.each(function (e) { var t = n.eq(e); h && (r[0] = d.call(this, e, t.html())), $e(t, r, i, o) }); if (f && (t = (e = Ae(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) { for (s = (a = ce.map(Se(e, "script"), Ie)).length; c < f; c++)u = e, c !== p && (u = ce.clone(u, !0, !0), s && ce.merge(a, Se(u, "script"))), i.call(n[c], u, c); if (s) for (l = a[a.length - 1].ownerDocument, ce.map(a, We), c = 0; c < s; c++)u = a[c], Ce.test(u.type || "") && !_.access(u, "globalEval") && ce.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? ce._evalUrl && !u.noModule && ce._evalUrl(u.src, { nonce: u.nonce || u.getAttribute("nonce") }, l) : m(u.textContent.replace(Me, ""), u, l)) } return n } function Be(e, t, n) { for (var r, i = t ? ce.filter(t, e) : e, o = 0; null != (r = i[o]); o++)n || 1 !== r.nodeType || ce.cleanData(Se(r)), r.parentNode && (n && K(r) && Ee(Se(r, "script")), r.parentNode.removeChild(r)); return e } ce.extend({ htmlPrefilter: function (e) { return e }, clone: function (e, t, n) { var r, i, o, a, s, u, l, c = e.cloneNode(!0), f = K(e); if (!(le.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ce.isXMLDoc(e))) for (a = Se(c), r = 0, i = (o = Se(e)).length; r < i; r++)s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && we.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue); if (t) if (n) for (o = o || Se(e), a = a || Se(c), r = 0, i = o.length; r < i; r++)Fe(o[r], a[r]); else Fe(e, c); return 0 < (a = Se(c, "script")).length && Ee(a, !f && Se(e, "script")), c }, cleanData: function (e) { for (var t, n, r, i = ce.event.special, o = 0; void 0 !== (n = e[o]); o++)if ($(n)) { if (t = n[_.expando]) { if (t.events) for (r in t.events) i[r] ? ce.event.remove(n, r) : ce.removeEvent(n, r, t.handle); n[_.expando] = void 0 } n[z.expando] && (n[z.expando] = void 0) } } }), ce.fn.extend({ detach: function (e) { return Be(this, e, !0) }, remove: function (e) { return Be(this, e) }, text: function (e) { return M(this, function (e) { return void 0 === e ? ce.text(this) : this.empty().each(function () { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) }) }, null, e, arguments.length) }, append: function () { return $e(this, arguments, function (e) { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || Re(this, e).appendChild(e) }) }, prepend: function () { return $e(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = Re(this, e); t.insertBefore(e, t.firstChild) } }) }, before: function () { return $e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, after: function () { return $e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++)1 === e.nodeType && (ce.cleanData(Se(e, !1)), e.textContent = ""); return this }, clone: function (e, t) { return e = null != e && e, t = null == t ? e : t, this.map(function () { return ce.clone(this, e, t) }) }, html: function (e) { return M(this, function (e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !Oe.test(e) && !ke[(Te.exec(e) || ["", ""])[1].toLowerCase()]) { e = ce.htmlPrefilter(e); try { for (; n < r; n++)1 === (t = this[n] || {}).nodeType && (ce.cleanData(Se(t, !1)), t.innerHTML = e); t = 0 } catch (e) { } } t && this.empty().append(e) }, null, e, arguments.length) }, replaceWith: function () { var n = []; return $e(this, arguments, function (e) { var t = this.parentNode; ce.inArray(this, n) < 0 && (ce.cleanData(Se(this)), t && t.replaceChild(e, this)) }, n) } }), ce.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, a) { ce.fn[e] = function (e) { for (var t, n = [], r = ce(e), i = r.length - 1, o = 0; o <= i; o++)t = o === i ? this : this.clone(!0), ce(r[o])[a](t), s.apply(n, t.get()); return this.pushStack(n) } }); var _e = new RegExp("^(" + G + ")(?!px)[a-z%]+$", "i"), ze = /^--/, Xe = function (e) { var t = e.ownerDocument.defaultView; return t && t.opener || (t = ie), t.getComputedStyle(e) }, Ue = function (e, t, n) { var r, i, o = {}; for (i in t) o[i] = e.style[i], e.style[i] = t[i]; for (i in r = n.call(e), t) e.style[i] = o[i]; return r }, Ve = new RegExp(Q.join("|"), "i"); function Ge(e, t, n) { var r, i, o, a, s = ze.test(t), u = e.style; return (n = n || Xe(e)) && (a = n.getPropertyValue(t) || n[t], s && a && (a = a.replace(ve, "$1") || void 0), "" !== a || K(e) || (a = ce.style(e, t)), !le.pixelBoxStyles() && _e.test(a) && Ve.test(t) && (r = u.width, i = u.minWidth, o = u.maxWidth, u.minWidth = u.maxWidth = u.width = a, a = n.width, u.width = r, u.minWidth = i, u.maxWidth = o)), void 0 !== a ? a + "" : a } function Ye(e, t) { return { get: function () { if (!e()) return (this.get = t).apply(this, arguments); delete this.get } } } !function () { function e() { if (l) { u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", J.appendChild(u).appendChild(l); var e = ie.getComputedStyle(l); n = "1%" !== e.top, s = 12 === t(e.marginLeft), l.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), l.style.position = "absolute", i = 12 === t(l.offsetWidth / 3), J.removeChild(u), l = null } } function t(e) { return Math.round(parseFloat(e)) } var n, r, i, o, a, s, u = C.createElement("div"), l = C.createElement("div"); l.style && (l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", le.clearCloneStyle = "content-box" === l.style.backgroundClip, ce.extend(le, { boxSizingReliable: function () { return e(), r }, pixelBoxStyles: function () { return e(), o }, pixelPosition: function () { return e(), n }, reliableMarginLeft: function () { return e(), s }, scrollboxSize: function () { return e(), i }, reliableTrDimensions: function () { var e, t, n, r; return null == a && (e = C.createElement("table"), t = C.createElement("tr"), n = C.createElement("div"), e.style.cssText = "position:absolute;left:-11111px;border-collapse:separate", t.style.cssText = "box-sizing:content-box;border:1px solid", t.style.height = "1px", n.style.height = "9px", n.style.display = "block", J.appendChild(e).appendChild(t).appendChild(n), r = ie.getComputedStyle(t), a = parseInt(r.height, 10) + parseInt(r.borderTopWidth, 10) + parseInt(r.borderBottomWidth, 10) === t.offsetHeight, J.removeChild(e)), a } })) }(); var Qe = ["Webkit", "Moz", "ms"], Je = C.createElement("div").style, Ke = {}; function Ze(e) { var t = ce.cssProps[e] || Ke[e]; return t || (e in Je ? e : Ke[e] = function (e) { var t = e[0].toUpperCase() + e.slice(1), n = Qe.length; while (n--) if ((e = Qe[n] + t) in Je) return e }(e) || e) } var et = /^(none|table(?!-c[ea]).+)/, tt = { position: "absolute", visibility: "hidden", display: "block" }, nt = { letterSpacing: "0", fontWeight: "400" }; function rt(e, t, n) { var r = Y.exec(t); return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t } function it(e, t, n, r, i, o) { var a = "width" === t ? 1 : 0, s = 0, u = 0, l = 0; if (n === (r ? "border" : "content")) return 0; for (; a < 4; a += 2)"margin" === n && (l += ce.css(e, n + Q[a], !0, i)), r ? ("content" === n && (u -= ce.css(e, "padding" + Q[a], !0, i)), "margin" !== n && (u -= ce.css(e, "border" + Q[a] + "Width", !0, i))) : (u += ce.css(e, "padding" + Q[a], !0, i), "padding" !== n ? u += ce.css(e, "border" + Q[a] + "Width", !0, i) : s += ce.css(e, "border" + Q[a] + "Width", !0, i)); return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u + l } function ot(e, t, n) { var r = Xe(e), i = (!le.boxSizingReliable() || n) && "border-box" === ce.css(e, "boxSizing", !1, r), o = i, a = Ge(e, t, r), s = "offset" + t[0].toUpperCase() + t.slice(1); if (_e.test(a)) { if (!n) return a; a = "auto" } return (!le.boxSizingReliable() && i || !le.reliableTrDimensions() && fe(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === ce.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === ce.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + it(e, t, n || (i ? "border" : "content"), o, r, a) + "px" } function at(e, t, n, r, i) { return new at.prototype.init(e, t, n, r, i) } ce.extend({ cssHooks: { opacity: { get: function (e, t) { if (t) { var n = Ge(e, "opacity"); return "" === n ? "1" : n } } } }, cssNumber: { animationIterationCount: !0, aspectRatio: !0, borderImageSlice: !0, columnCount: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, gridArea: !0, gridColumn: !0, gridColumnEnd: !0, gridColumnStart: !0, gridRow: !0, gridRowEnd: !0, gridRowStart: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, scale: !0, widows: !0, zIndex: !0, zoom: !0, fillOpacity: !0, floodOpacity: !0, stopOpacity: !0, strokeMiterlimit: !0, strokeOpacity: !0 }, cssProps: {}, style: function (e, t, n, r) { if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { var i, o, a, s = F(t), u = ze.test(t), l = e.style; if (u || (t = Ze(s)), a = ce.cssHooks[t] || ce.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; "string" === (o = typeof n) && (i = Y.exec(n)) && i[1] && (n = te(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (ce.cssNumber[s] ? "" : "px")), le.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n)) } }, css: function (e, t, n, r) { var i, o, a, s = F(t); return ze.test(t) || (t = Ze(s)), (a = ce.cssHooks[t] || ce.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Ge(e, t, r)), "normal" === i && t in nt && (i = nt[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i } }), ce.each(["height", "width"], function (e, u) { ce.cssHooks[u] = { get: function (e, t, n) { if (t) return !et.test(ce.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? ot(e, u, n) : Ue(e, tt, function () { return ot(e, u, n) }) }, set: function (e, t, n) { var r, i = Xe(e), o = !le.scrollboxSize() && "absolute" === i.position, a = (o || n) && "border-box" === ce.css(e, "boxSizing", !1, i), s = n ? it(e, u, n, a, i) : 0; return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - it(e, u, "border", !1, i) - .5)), s && (r = Y.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = ce.css(e, u)), rt(0, t, s) } } }), ce.cssHooks.marginLeft = Ye(le.reliableMarginLeft, function (e, t) { if (t) return (parseFloat(Ge(e, "marginLeft")) || e.getBoundingClientRect().left - Ue(e, { marginLeft: 0 }, function () { return e.getBoundingClientRect().left })) + "px" }), ce.each({ margin: "", padding: "", border: "Width" }, function (i, o) { ce.cssHooks[i + o] = { expand: function (e) { for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++)n[i + Q[t] + o] = r[t] || r[t - 2] || r[0]; return n } }, "margin" !== i && (ce.cssHooks[i + o].set = rt) }), ce.fn.extend({ css: function (e, t) { return M(this, function (e, t, n) { var r, i, o = {}, a = 0; if (Array.isArray(t)) { for (r = Xe(e), i = t.length; a < i; a++)o[t[a]] = ce.css(e, t[a], !1, r); return o } return void 0 !== n ? ce.style(e, t, n) : ce.css(e, t) }, e, t, 1 < arguments.length) } }), ((ce.Tween = at).prototype = { constructor: at, init: function (e, t, n, r, i, o) { this.elem = e, this.prop = n, this.easing = i || ce.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (ce.cssNumber[n] ? "" : "px") }, cur: function () { var e = at.propHooks[this.prop]; return e && e.get ? e.get(this) : at.propHooks._default.get(this) }, run: function (e) { var t, n = at.propHooks[this.prop]; return this.options.duration ? this.pos = t = ce.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : at.propHooks._default.set(this), this } }).init.prototype = at.prototype, (at.propHooks = { _default: { get: function (e) { var t; return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = ce.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 }, set: function (e) { ce.fx.step[e.prop] ? ce.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !ce.cssHooks[e.prop] && null == e.elem.style[Ze(e.prop)] ? e.elem[e.prop] = e.now : ce.style(e.elem, e.prop, e.now + e.unit) } } }).scrollTop = at.propHooks.scrollLeft = { set: function (e) { e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) } }, ce.easing = { linear: function (e) { return e }, swing: function (e) { return .5 - Math.cos(e * Math.PI) / 2 }, _default: "swing" }, ce.fx = at.prototype.init, ce.fx.step = {}; var st, ut, lt, ct, ft = /^(?:toggle|show|hide)$/, pt = /queueHooks$/; function dt() { ut && (!1 === C.hidden && ie.requestAnimationFrame ? ie.requestAnimationFrame(dt) : ie.setTimeout(dt, ce.fx.interval), ce.fx.tick()) } function ht() { return ie.setTimeout(function () { st = void 0 }), st = Date.now() } function gt(e, t) { var n, r = 0, i = { height: e }; for (t = t ? 1 : 0; r < 4; r += 2 - t)i["margin" + (n = Q[r])] = i["padding" + n] = e; return t && (i.opacity = i.width = e), i } function vt(e, t, n) { for (var r, i = (yt.tweeners[t] || []).concat(yt.tweeners["*"]), o = 0, a = i.length; o < a; o++)if (r = i[o].call(n, t, e)) return r } function yt(o, e, t) { var n, a, r = 0, i = yt.prefilters.length, s = ce.Deferred().always(function () { delete u.elem }), u = function () { if (a) return !1; for (var e = st || ht(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++)l.tweens[r].run(n); return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) }, l = s.promise({ elem: o, props: ce.extend({}, e), opts: ce.extend(!0, { specialEasing: {}, easing: ce.easing._default }, t), originalProperties: e, originalOptions: t, startTime: st || ht(), duration: t.duration, tweens: [], createTween: function (e, t) { var n = ce.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing); return l.tweens.push(n), n }, stop: function (e) { var t = 0, n = e ? l.tweens.length : 0; if (a) return this; for (a = !0; t < n; t++)l.tweens[t].run(1); return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this } }), c = l.props; for (!function (e, t) { var n, r, i, o, a; for (n in e) if (i = t[r = F(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = ce.cssHooks[r]) && "expand" in a) for (n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i); else t[r] = i }(c, l.opts.specialEasing); r < i; r++)if (n = yt.prefilters[r].call(l, o, c, l.opts)) return v(n.stop) && (ce._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n; return ce.map(c, vt, l), v(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), ce.fx.timer(ce.extend(u, { elem: o, anim: l, queue: l.opts.queue })), l } ce.Animation = ce.extend(yt, { tweeners: { "*": [function (e, t) { var n = this.createTween(e, t); return te(n.elem, e, Y.exec(t), n), n }] }, tweener: function (e, t) { v(e) ? (t = e, e = ["*"]) : e = e.match(D); for (var n, r = 0, i = e.length; r < i; r++)n = e[r], yt.tweeners[n] = yt.tweeners[n] || [], yt.tweeners[n].unshift(t) }, prefilters: [function (e, t, n) { var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t, p = this, d = {}, h = e.style, g = e.nodeType && ee(e), v = _.get(e, "fxshow"); for (r in n.queue || (null == (a = ce._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () { a.unqueued || s() }), a.unqueued++, p.always(function () { p.always(function () { a.unqueued--, ce.queue(e, "fx").length || a.empty.fire() }) })), t) if (i = t[r], ft.test(i)) { if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) { if ("show" !== i || !v || void 0 === v[r]) continue; g = !0 } d[r] = v && v[r] || ce.style(e, r) } if ((u = !ce.isEmptyObject(t)) || !ce.isEmptyObject(d)) for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = _.get(e, "display")), "none" === (c = ce.css(e, "display")) && (l ? c = l : (re([e], !0), l = e.style.display || l, c = ce.css(e, "display"), re([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === ce.css(e, "float") && (u || (p.done(function () { h.display = l }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () { h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2] })), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = _.access(e, "fxshow", { display: l }), o && (v.hidden = !g), g && re([e], !0), p.done(function () { for (r in g || re([e]), _.remove(e, "fxshow"), d) ce.style(e, r, d[r]) })), u = vt(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0)) }], prefilter: function (e, t) { t ? yt.prefilters.unshift(e) : yt.prefilters.push(e) } }), ce.speed = function (e, t, n) { var r = e && "object" == typeof e ? ce.extend({}, e) : { complete: n || !n && t || v(e) && e, duration: e, easing: n && t || t && !v(t) && t }; return ce.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in ce.fx.speeds ? r.duration = ce.fx.speeds[r.duration] : r.duration = ce.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function () { v(r.old) && r.old.call(this), r.queue && ce.dequeue(this, r.queue) }, r }, ce.fn.extend({ fadeTo: function (e, t, n, r) { return this.filter(ee).css("opacity", 0).show().end().animate({ opacity: t }, e, n, r) }, animate: function (t, e, n, r) { var i = ce.isEmptyObject(t), o = ce.speed(e, n, r), a = function () { var e = yt(this, ce.extend({}, t), o); (i || _.get(this, "finish")) && e.stop(!0) }; return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) }, stop: function (i, e, o) { var a = function (e) { var t = e.stop; delete e.stop, t(o) }; return "string" != typeof i && (o = e, e = i, i = void 0), e && this.queue(i || "fx", []), this.each(function () { var e = !0, t = null != i && i + "queueHooks", n = ce.timers, r = _.get(this); if (t) r[t] && r[t].stop && a(r[t]); else for (t in r) r[t] && r[t].stop && pt.test(t) && a(r[t]); for (t = n.length; t--;)n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1)); !e && o || ce.dequeue(this, i) }) }, finish: function (a) { return !1 !== a && (a = a || "fx"), this.each(function () { var e, t = _.get(this), n = t[a + "queue"], r = t[a + "queueHooks"], i = ce.timers, o = n ? n.length : 0; for (t.finish = !0, ce.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;)i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1)); for (e = 0; e < o; e++)n[e] && n[e].finish && n[e].finish.call(this); delete t.finish }) } }), ce.each(["toggle", "show", "hide"], function (e, r) { var i = ce.fn[r]; ce.fn[r] = function (e, t, n) { return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(gt(r, !0), e, t, n) } }), ce.each({ slideDown: gt("show"), slideUp: gt("hide"), slideToggle: gt("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function (e, r) { ce.fn[e] = function (e, t, n) { return this.animate(r, e, t, n) } }), ce.timers = [], ce.fx.tick = function () { var e, t = 0, n = ce.timers; for (st = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1); n.length || ce.fx.stop(), st = void 0 }, ce.fx.timer = function (e) { ce.timers.push(e), ce.fx.start() }, ce.fx.interval = 13, ce.fx.start = function () { ut || (ut = !0, dt()) }, ce.fx.stop = function () { ut = null }, ce.fx.speeds = { slow: 600, fast: 200, _default: 400 }, ce.fn.delay = function (r, e) { return r = ce.fx && ce.fx.speeds[r] || r, e = e || "fx", this.queue(e, function (e, t) { var n = ie.setTimeout(e, r); t.stop = function () { ie.clearTimeout(n) } }) }, lt = C.createElement("input"), ct = C.createElement("select").appendChild(C.createElement("option")), lt.type = "checkbox", le.checkOn = "" !== lt.value, le.optSelected = ct.selected, (lt = C.createElement("input")).value = "t", lt.type = "radio", le.radioValue = "t" === lt.value; var mt, xt = ce.expr.attrHandle; ce.fn.extend({ attr: function (e, t) { return M(this, ce.attr, e, t, 1 < arguments.length) }, removeAttr: function (e) { return this.each(function () { ce.removeAttr(this, e) }) } }), ce.extend({ attr: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? ce.prop(e, t, n) : (1 === o && ce.isXMLDoc(e) || (i = ce.attrHooks[t.toLowerCase()] || (ce.expr.match.bool.test(t) ? mt : void 0)), void 0 !== n ? null === n ? void ce.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = ce.find.attr(e, t)) ? void 0 : r) }, attrHooks: { type: { set: function (e, t) { if (!le.radioValue && "radio" === t && fe(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } }, removeAttr: function (e, t) { var n, r = 0, i = t && t.match(D); if (i && 1 === e.nodeType) while (n = i[r++]) e.removeAttribute(n) } }), mt = { set: function (e, t, n) { return !1 === t ? ce.removeAttr(e, n) : e.setAttribute(n, n), n } }, ce.each(ce.expr.match.bool.source.match(/\w+/g), function (e, t) { var a = xt[t] || ce.find.attr; xt[t] = function (e, t, n) { var r, i, o = t.toLowerCase(); return n || (i = xt[o], xt[o] = r, r = null != a(e, t, n) ? o : null, xt[o] = i), r } }); var bt = /^(?:input|select|textarea|button)$/i, wt = /^(?:a|area)$/i; function Tt(e) { return (e.match(D) || []).join(" ") } function Ct(e) { return e.getAttribute && e.getAttribute("class") || "" } function kt(e) { return Array.isArray(e) ? e : "string" == typeof e && e.match(D) || [] } ce.fn.extend({ prop: function (e, t) { return M(this, ce.prop, e, t, 1 < arguments.length) }, removeProp: function (e) { return this.each(function () { delete this[ce.propFix[e] || e] }) } }), ce.extend({ prop: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return 1 === o && ce.isXMLDoc(e) || (t = ce.propFix[t] || t, i = ce.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] }, propHooks: { tabIndex: { get: function (e) { var t = ce.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : bt.test(e.nodeName) || wt.test(e.nodeName) && e.href ? 0 : -1 } } }, propFix: { "for": "htmlFor", "class": "className" } }), le.optSelected || (ce.propHooks.selected = { get: function (e) { var t = e.parentNode; return t && t.parentNode && t.parentNode.selectedIndex, null }, set: function (e) { var t = e.parentNode; t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) } }), ce.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { ce.propFix[this.toLowerCase()] = this }), ce.fn.extend({ addClass: function (t) { var e, n, r, i, o, a; return v(t) ? this.each(function (e) { ce(this).addClass(t.call(this, e, Ct(this))) }) : (e = kt(t)).length ? this.each(function () { if (r = Ct(this), n = 1 === this.nodeType && " " + Tt(r) + " ") { for (o = 0; o < e.length; o++)i = e[o], n.indexOf(" " + i + " ") < 0 && (n += i + " "); a = Tt(n), r !== a && this.setAttribute("class", a) } }) : this }, removeClass: function (t) { var e, n, r, i, o, a; return v(t) ? this.each(function (e) { ce(this).removeClass(t.call(this, e, Ct(this))) }) : arguments.length ? (e = kt(t)).length ? this.each(function () { if (r = Ct(this), n = 1 === this.nodeType && " " + Tt(r) + " ") { for (o = 0; o < e.length; o++) { i = e[o]; while (-1 < n.indexOf(" " + i + " ")) n = n.replace(" " + i + " ", " ") } a = Tt(n), r !== a && this.setAttribute("class", a) } }) : this : this.attr("class", "") }, toggleClass: function (t, n) { var e, r, i, o, a = typeof t, s = "string" === a || Array.isArray(t); return v(t) ? this.each(function (e) { ce(this).toggleClass(t.call(this, e, Ct(this), n), n) }) : "boolean" == typeof n && s ? n ? this.addClass(t) : this.removeClass(t) : (e = kt(t), this.each(function () { if (s) for (o = ce(this), i = 0; i < e.length; i++)r = e[i], o.hasClass(r) ? o.removeClass(r) : o.addClass(r); else void 0 !== t && "boolean" !== a || ((r = Ct(this)) && _.set(this, "__className__", r), this.setAttribute && this.setAttribute("class", r || !1 === t ? "" : _.get(this, "__className__") || "")) })) }, hasClass: function (e) { var t, n, r = 0; t = " " + e + " "; while (n = this[r++]) if (1 === n.nodeType && -1 < (" " + Tt(Ct(n)) + " ").indexOf(t)) return !0; return !1 } }); var St = /\r/g; ce.fn.extend({ val: function (n) { var r, e, i, t = this[0]; return arguments.length ? (i = v(n), this.each(function (e) { var t; 1 === this.nodeType && (null == (t = i ? n.call(this, e, ce(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = ce.map(t, function (e) { return null == e ? "" : e + "" })), (r = ce.valHooks[this.type] || ce.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t)) })) : t ? (r = ce.valHooks[t.type] || ce.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof (e = t.value) ? e.replace(St, "") : null == e ? "" : e : void 0 } }), ce.extend({ valHooks: { option: { get: function (e) { var t = ce.find.attr(e, "value"); return null != t ? t : Tt(ce.text(e)) } }, select: { get: function (e) { var t, n, r, i = e.options, o = e.selectedIndex, a = "select-one" === e.type, s = a ? null : [], u = a ? o + 1 : i.length; for (r = o < 0 ? u : a ? o : 0; r < u; r++)if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !fe(n.parentNode, "optgroup"))) { if (t = ce(n).val(), a) return t; s.push(t) } return s }, set: function (e, t) { var n, r, i = e.options, o = ce.makeArray(t), a = i.length; while (a--) ((r = i[a]).selected = -1 < ce.inArray(ce.valHooks.option.get(r), o)) && (n = !0); return n || (e.selectedIndex = -1), o } } } }), ce.each(["radio", "checkbox"], function () { ce.valHooks[this] = { set: function (e, t) { if (Array.isArray(t)) return e.checked = -1 < ce.inArray(ce(e).val(), t) } }, le.checkOn || (ce.valHooks[this].get = function (e) { return null === e.getAttribute("value") ? "on" : e.value }) }); var Et = ie.location, jt = { guid: Date.now() }, At = /\?/; ce.parseXML = function (e) { var t, n; if (!e || "string" != typeof e) return null; try { t = (new ie.DOMParser).parseFromString(e, "text/xml") } catch (e) { } return n = t && t.getElementsByTagName("parsererror")[0], t && !n || ce.error("Invalid XML: " + (n ? ce.map(n.childNodes, function (e) { return e.textContent }).join("\n") : e)), t }; var Dt = /^(?:focusinfocus|focusoutblur)$/, Nt = function (e) { e.stopPropagation() }; ce.extend(ce.event, { trigger: function (e, t, n, r) { var i, o, a, s, u, l, c, f, p = [n || C], d = ue.call(e, "type") ? e.type : e, h = ue.call(e, "namespace") ? e.namespace.split(".") : []; if (o = f = a = n = n || C, 3 !== n.nodeType && 8 !== n.nodeType && !Dt.test(d + ce.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[ce.expando] ? e : new ce.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : ce.makeArray(t, [e]), c = ce.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) { if (!r && !c.noBubble && !y(n)) { for (s = c.delegateType || d, Dt.test(s + d) || (o = o.parentNode); o; o = o.parentNode)p.push(o), a = o; a === (n.ownerDocument || C) && p.push(a.defaultView || a.parentWindow || ie) } i = 0; while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (_.get(o, "events") || Object.create(null))[e.type] && _.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && $(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault()); return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !$(n) || u && v(n[d]) && !y(n) && ((a = n[u]) && (n[u] = null), ce.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, Nt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, Nt), ce.event.triggered = void 0, a && (n[u] = a)), e.result } }, simulate: function (e, t, n) { var r = ce.extend(new ce.Event, n, { type: e, isSimulated: !0 }); ce.event.trigger(r, null, t) } }), ce.fn.extend({ trigger: function (e, t) { return this.each(function () { ce.event.trigger(e, t, this) }) }, triggerHandler: function (e, t) { var n = this[0]; if (n) return ce.event.trigger(e, t, n, !0) } }); var qt = /\[\]$/, Lt = /\r?\n/g, Ht = /^(?:submit|button|image|reset|file)$/i, Ot = /^(?:input|select|textarea|keygen)/i; function Pt(n, e, r, i) { var t; if (Array.isArray(e)) ce.each(e, function (e, t) { r || qt.test(n) ? i(n, t) : Pt(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i) }); else if (r || "object" !== x(e)) i(n, e); else for (t in e) Pt(n + "[" + t + "]", e[t], r, i) } ce.param = function (e, t) { var n, r = [], i = function (e, t) { var n = v(t) ? t() : t; r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) }; if (null == e) return ""; if (Array.isArray(e) || e.jquery && !ce.isPlainObject(e)) ce.each(e, function () { i(this.name, this.value) }); else for (n in e) Pt(n, e[n], t, i); return r.join("&") }, ce.fn.extend({ serialize: function () { return ce.param(this.serializeArray()) }, serializeArray: function () { return this.map(function () { var e = ce.prop(this, "elements"); return e ? ce.makeArray(e) : this }).filter(function () { var e = this.type; return this.name && !ce(this).is(":disabled") && Ot.test(this.nodeName) && !Ht.test(e) && (this.checked || !we.test(e)) }).map(function (e, t) { var n = ce(this).val(); return null == n ? null : Array.isArray(n) ? ce.map(n, function (e) { return { name: t.name, value: e.replace(Lt, "\r\n") } }) : { name: t.name, value: n.replace(Lt, "\r\n") } }).get() } }); var Mt = /%20/g, Rt = /#.*$/, It = /([?&])_=[^&]*/, Wt = /^(.*?):[ \t]*([^\r\n]*)$/gm, Ft = /^(?:GET|HEAD)$/, $t = /^\/\//, Bt = {}, _t = {}, zt = "*/".concat("*"), Xt = C.createElement("a"); function Ut(o) { return function (e, t) { "string" != typeof e && (t = e, e = "*"); var n, r = 0, i = e.toLowerCase().match(D) || []; if (v(t)) while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t) } } function Vt(t, i, o, a) { var s = {}, u = t === _t; function l(e) { var r; return s[e] = !0, ce.each(t[e] || [], function (e, t) { var n = t(i, o, a); return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1) }), r } return l(i.dataTypes[0]) || !s["*"] && l("*") } function Gt(e, t) { var n, r, i = ce.ajaxSettings.flatOptions || {}; for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]); return r && ce.extend(!0, e, r), e } Xt.href = Et.href, ce.extend({ active: 0, lastModified: {}, etag: {}, ajaxSettings: { url: Et.href, type: "GET", isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": zt, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": JSON.parse, "text xml": ce.parseXML }, flatOptions: { url: !0, context: !0 } }, ajaxSetup: function (e, t) { return t ? Gt(Gt(e, ce.ajaxSettings), t) : Gt(ce.ajaxSettings, e) }, ajaxPrefilter: Ut(Bt), ajaxTransport: Ut(_t), ajax: function (e, t) { "object" == typeof e && (t = e, e = void 0), t = t || {}; var c, f, p, n, d, r, h, g, i, o, v = ce.ajaxSetup({}, t), y = v.context || v, m = v.context && (y.nodeType || y.jquery) ? ce(y) : ce.event, x = ce.Deferred(), b = ce.Callbacks("once memory"), w = v.statusCode || {}, a = {}, s = {}, u = "canceled", T = { readyState: 0, getResponseHeader: function (e) { var t; if (h) { if (!n) { n = {}; while (t = Wt.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]) } t = n[e.toLowerCase() + " "] } return null == t ? null : t.join(", ") }, getAllResponseHeaders: function () { return h ? p : null }, setRequestHeader: function (e, t) { return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this }, overrideMimeType: function (e) { return null == h && (v.mimeType = e), this }, statusCode: function (e) { var t; if (e) if (h) T.always(e[T.status]); else for (t in e) w[t] = [w[t], e[t]]; return this }, abort: function (e) { var t = e || u; return c && c.abort(t), l(0, t), this } }; if (x.promise(T), v.url = ((e || v.url || Et.href) + "").replace($t, Et.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(D) || [""], null == v.crossDomain) { r = C.createElement("a"); try { r.href = v.url, r.href = r.href, v.crossDomain = Xt.protocol + "//" + Xt.host != r.protocol + "//" + r.host } catch (e) { v.crossDomain = !0 } } if (v.data && v.processData && "string" != typeof v.data && (v.data = ce.param(v.data, v.traditional)), Vt(Bt, v, t, T), h) return T; for (i in (g = ce.event && v.global) && 0 == ce.active++ && ce.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Ft.test(v.type), f = v.url.replace(Rt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(Mt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (At.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(It, "$1"), o = (At.test(f) ? "&" : "?") + "_=" + jt.guid++ + o), v.url = f + o), v.ifModified && (ce.lastModified[f] && T.setRequestHeader("If-Modified-Since", ce.lastModified[f]), ce.etag[f] && T.setRequestHeader("If-None-Match", ce.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + zt + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]); if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort(); if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Vt(_t, v, t, T)) { if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T; v.async && 0 < v.timeout && (d = ie.setTimeout(function () { T.abort("timeout") }, v.timeout)); try { h = !1, c.send(a, l) } catch (e) { if (h) throw e; l(-1, e) } } else l(-1, "No Transport"); function l(e, t, n, r) { var i, o, a, s, u, l = t; h || (h = !0, d && ie.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) { var r, i, o, a, s = e.contents, u = e.dataTypes; while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type")); if (r) for (i in s) if (s[i] && s[i].test(r)) { u.unshift(i); break } if (u[0] in n) o = u[0]; else { for (i in n) { if (!u[0] || e.converters[i + " " + u[0]]) { o = i; break } a || (a = i) } o = o || a } if (o) return o !== u[0] && u.unshift(o), n[o] }(v, T, n)), !i && -1 < ce.inArray("script", v.dataTypes) && ce.inArray("json", v.dataTypes) < 0 && (v.converters["text script"] = function () { }), s = function (e, t, n, r) { var i, o, a, s, u, l = {}, c = e.dataTypes.slice(); if (c[1]) for (a in e.converters) l[a.toLowerCase()] = e.converters[a]; o = c.shift(); while (o) if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) if ("*" === o) o = u; else if ("*" !== u && u !== o) { if (!(a = l[u + " " + o] || l["* " + o])) for (i in l) if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) { !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1])); break } if (!0 !== a) if (a && e["throws"]) t = a(t); else try { t = a(t) } catch (e) { return { state: "parsererror", error: a ? e : "No conversion from " + u + " to " + o } } } return { state: "success", data: t } }(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (ce.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (ce.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --ce.active || ce.event.trigger("ajaxStop"))) } return T }, getJSON: function (e, t, n) { return ce.get(e, t, n, "json") }, getScript: function (e, t) { return ce.get(e, void 0, t, "script") } }), ce.each(["get", "post"], function (e, i) { ce[i] = function (e, t, n, r) { return v(t) && (r = r || n, n = t, t = void 0), ce.ajax(ce.extend({ url: e, type: i, dataType: r, data: t, success: n }, ce.isPlainObject(e) && e)) } }), ce.ajaxPrefilter(function (e) { var t; for (t in e.headers) "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "") }), ce._evalUrl = function (e, t, n) { return ce.ajax({ url: e, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, converters: { "text script": function () { } }, dataFilter: function (e) { ce.globalEval(e, t, n) } }) }, ce.fn.extend({ wrapAll: function (e) { var t; return this[0] && (v(e) && (e = e.call(this[0])), t = ce(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () { var e = this; while (e.firstElementChild) e = e.firstElementChild; return e }).append(this)), this }, wrapInner: function (n) { return v(n) ? this.each(function (e) { ce(this).wrapInner(n.call(this, e)) }) : this.each(function () { var e = ce(this), t = e.contents(); t.length ? t.wrapAll(n) : e.append(n) }) }, wrap: function (t) { var n = v(t); return this.each(function (e) { ce(this).wrapAll(n ? t.call(this, e) : t) }) }, unwrap: function (e) { return this.parent(e).not("body").each(function () { ce(this).replaceWith(this.childNodes) }), this } }), ce.expr.pseudos.hidden = function (e) { return !ce.expr.pseudos.visible(e) }, ce.expr.pseudos.visible = function (e) { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, ce.ajaxSettings.xhr = function () { try { return new ie.XMLHttpRequest } catch (e) { } }; var Yt = { 0: 200, 1223: 204 }, Qt = ce.ajaxSettings.xhr(); le.cors = !!Qt && "withCredentials" in Qt, le.ajax = Qt = !!Qt, ce.ajaxTransport(function (i) { var o, a; if (le.cors || Qt && !i.crossDomain) return { send: function (e, t) { var n, r = i.xhr(); if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields) for (n in i.xhrFields) r[n] = i.xhrFields[n]; for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]); o = function (e) { return function () { o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(Yt[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? { binary: r.response } : { text: r.responseText }, r.getAllResponseHeaders())) } }, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function () { 4 === r.readyState && ie.setTimeout(function () { o && a() }) }, o = o("abort"); try { r.send(i.hasContent && i.data || null) } catch (e) { if (o) throw e } }, abort: function () { o && o() } } }), ce.ajaxPrefilter(function (e) { e.crossDomain && (e.contents.script = !1) }), ce.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function (e) { return ce.globalEval(e), e } } }), ce.ajaxPrefilter("script", function (e) { void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET") }), ce.ajaxTransport("script", function (n) { var r, i; if (n.crossDomain || n.scriptAttrs) return { send: function (e, t) { r = ce("<script>").attr(n.scriptAttrs || {}).prop({ charset: n.scriptCharset, src: n.url }).on("load error", i = function (e) { r.remove(), i = null, e && t("error" === e.type ? 404 : 200, e.type) }), C.head.appendChild(r[0]) }, abort: function () { i && i() } } }); var Jt, Kt = [], Zt = /(=)\?(?=&|$)|\?\?/; ce.ajaxSetup({ jsonp: "callback", jsonpCallback: function () { var e = Kt.pop() || ce.expando + "_" + jt.guid++; return this[e] = !0, e } }), ce.ajaxPrefilter("json jsonp", function (e, t, n) { var r, i, o, a = !1 !== e.jsonp && (Zt.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Zt.test(e.data) && "data"); if (a || "jsonp" === e.dataTypes[0]) return r = e.jsonpCallback = v(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Zt, "$1" + r) : !1 !== e.jsonp && (e.url += (At.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function () { return o || ce.error(r + " was not called"), o[0] }, e.dataTypes[0] = "json", i = ie[r], ie[r] = function () { o = arguments }, n.always(function () { void 0 === i ? ce(ie).removeProp(r) : ie[r] = i, e[r] && (e.jsonpCallback = t.jsonpCallback, Kt.push(r)), o && v(i) && i(o[0]), o = i = void 0 }), "script" }), le.createHTMLDocument = ((Jt = C.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === Jt.childNodes.length), ce.parseHTML = function (e, t, n) { return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (le.createHTMLDocument ? ((r = (t = C.implementation.createHTMLDocument("")).createElement("base")).href = C.location.href, t.head.appendChild(r)) : t = C), o = !n && [], (i = w.exec(e)) ? [t.createElement(i[1])] : (i = Ae([e], t, o), o && o.length && ce(o).remove(), ce.merge([], i.childNodes))); var r, i, o }, ce.fn.load = function (e, t, n) { var r, i, o, a = this, s = e.indexOf(" "); return -1 < s && (r = Tt(e.slice(s)), e = e.slice(0, s)), v(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"), 0 < a.length && ce.ajax({ url: e, type: i || "GET", dataType: "html", data: t }).done(function (e) { o = arguments, a.html(r ? ce("<div>").append(ce.parseHTML(e)).find(r) : e) }).always(n && function (e, t) { a.each(function () { n.apply(this, o || [e.responseText, t, e]) }) }), this }, ce.expr.pseudos.animated = function (t) { return ce.grep(ce.timers, function (e) { return t === e.elem }).length }, ce.offset = { setOffset: function (e, t, n) { var r, i, o, a, s, u, l = ce.css(e, "position"), c = ce(e), f = {}; "static" === l && (e.style.position = "relative"), s = c.offset(), o = ce.css(e, "top"), u = ce.css(e, "left"), ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0), v(t) && (t = t.call(e, n, ce.extend({}, s))), null != t.top && (f.top = t.top - s.top + a), null != t.left && (f.left = t.left - s.left + i), "using" in t ? t.using.call(e, f) : c.css(f) } }, ce.fn.extend({ offset: function (t) { if (arguments.length) return void 0 === t ? this : this.each(function (e) { ce.offset.setOffset(this, t, e) }); var e, n, r = this[0]; return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset }) : { top: 0, left: 0 } : void 0 }, position: function () { if (this[0]) { var e, t, n, r = this[0], i = { top: 0, left: 0 }; if ("fixed" === ce.css(r, "position")) t = r.getBoundingClientRect(); else { t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement; while (e && (e === n.body || e === n.documentElement) && "static" === ce.css(e, "position")) e = e.parentNode; e && e !== r && 1 === e.nodeType && ((i = ce(e).offset()).top += ce.css(e, "borderTopWidth", !0), i.left += ce.css(e, "borderLeftWidth", !0)) } return { top: t.top - i.top - ce.css(r, "marginTop", !0), left: t.left - i.left - ce.css(r, "marginLeft", !0) } } }, offsetParent: function () { return this.map(function () { var e = this.offsetParent; while (e && "static" === ce.css(e, "position")) e = e.offsetParent; return e || J }) } }), ce.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (t, i) { var o = "pageYOffset" === i; ce.fn[t] = function (e) { return M(this, function (e, t, n) { var r; if (y(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n) return r ? r[i] : e[t]; r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n }, t, e, arguments.length) } }), ce.each(["top", "left"], function (e, n) { ce.cssHooks[n] = Ye(le.pixelPosition, function (e, t) { if (t) return t = Ge(e, n), _e.test(t) ? ce(e).position()[n] + "px" : t }) }), ce.each({ Height: "height", Width: "width" }, function (a, s) { ce.each({ padding: "inner" + a, content: s, "": "outer" + a }, function (r, o) { ce.fn[o] = function (e, t) { var n = arguments.length && (r || "boolean" != typeof e), i = r || (!0 === e || !0 === t ? "margin" : "border"); return M(this, function (e, t, n) { var r; return y(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" + a], r["offset" + a], r["client" + a])) : void 0 === n ? ce.css(e, t, i) : ce.style(e, t, n, i) }, s, n ? e : void 0, n) } }) }), ce.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) { ce.fn[t] = function (e) { return this.on(t, e) } }), ce.fn.extend({ bind: function (e, t, n) { return this.on(e, null, t, n) }, unbind: function (e, t) { return this.off(e, null, t) }, delegate: function (e, t, n, r) { return this.on(t, e, n, r) }, undelegate: function (e, t, n) { return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n) }, hover: function (e, t) { return this.on("mouseenter", e).on("mouseleave", t || e) } }), ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, n) { ce.fn[n] = function (e, t) { return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n) } }); var en = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; ce.proxy = function (e, t) { var n, r, i; if ("string" == typeof t && (n = e[t], t = e, e = n), v(e)) return r = ae.call(arguments, 2), (i = function () { return e.apply(t || this, r.concat(ae.call(arguments))) }).guid = e.guid = e.guid || ce.guid++, i }, ce.holdReady = function (e) { e ? ce.readyWait++ : ce.ready(!0) }, ce.isArray = Array.isArray, ce.parseJSON = JSON.parse, ce.nodeName = fe, ce.isFunction = v, ce.isWindow = y, ce.camelCase = F, ce.type = x, ce.now = Date.now, ce.isNumeric = function (e) { var t = ce.type(e); return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e)) }, ce.trim = function (e) { return null == e ? "" : (e + "").replace(en, "$1") }, "function" == typeof define && define.amd && define("jquery", [], function () { return ce }); var tn = ie.jQuery, nn = ie.$; return ce.noConflict = function (e) { return ie.$ === ce && (ie.$ = nn), e && ie.jQuery === ce && (ie.jQuery = tn), ce }, "undefined" == typeof e && (ie.jQuery = ie.$ = ce), ce });
/*! css.js 27-02-2018 */
!(function (e) {
"use strict";
var t = function () {
(this.cssImportStatements = []),
(this.cssKeyframeStatements = []),
(this.cssRegex = new RegExp("([\\s\\S]*?){([\\s\\S]*?)}", "gi")),
(this.cssMediaQueryRegex = "((@media [\\s\\S]*?){([\\s\\S]*?}\\s*?)})"),
(this.cssKeyframeRegex =
"((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})"),
(this.combinedCSSRegex =
"((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})"),
(this.cssCommentsRegex = "(\\/\\*[\\s\\S]*?\\*\\/)"),
(this.cssImportStatementRegex = new RegExp("@import .*?;", "gi"));
};
(t.prototype.stripComments = function (e) {
var t = new RegExp(this.cssCommentsRegex, "gi");
return e.replace(t, "");
}),
(t.prototype.parseCSS = function (e) {
if (void 0 === e) return [];
for (var t = []; ; ) {
var s = this.cssImportStatementRegex.exec(e);
if (null === s) break;
this.cssImportStatements.push(s[0]),
t.push({ selector: "@imports", type: "imports", styles: s[0] });
}
e = e.replace(this.cssImportStatementRegex, "");
for (
var r, i = new RegExp(this.cssKeyframeRegex, "gi");
null !== (r = i.exec(e));
)
t.push({ selector: "@keyframes", type: "keyframes", styles: r[0] });
e = e.replace(i, "");
for (
var n = new RegExp(this.combinedCSSRegex, "gi");
null !== (r = n.exec(e));
) {
var o = "";
o =
void 0 === r[2]
? r[5].split("\r\n").join("\n").trim()
: r[2].split("\r\n").join("\n").trim();
var l = new RegExp(this.cssCommentsRegex, "gi"),
p = l.exec(o);
if (
(null !== p && (o = o.replace(l, "").trim()),
-1 !== (o = o.replace(/\n+/, "\n")).indexOf("@media"))
) {
var a = {
selector: o,
type: "media",
subStyles: this.parseCSS(r[3] + "\n}"),
};
null !== p && (a.comments = p[0]), t.push(a);
} else {
var c = { selector: o, rules: this.parseRules(r[6]) };
"@font-face" === o && (c.type = "font-face"),
null !== p && (c.comments = p[0]),
t.push(c);
}
}
return t;
}),
(t.prototype.parseRules = function (e) {
var t = [];
e = (e = e.split("\r\n").join("\n")).split(";");
for (var s = 0; s < e.length; s++) {
var r = e[s];
if (-1 !== (r = r.trim()).indexOf(":")) {
var i = (r = r.split(":"))[0].trim(),
n = r.slice(1).join(":").trim();
if (i.length < 1 || n.length < 1) continue;
t.push({ directive: i, value: n });
} else
"base64," === r.trim().substr(0, 7)
? (t[t.length - 1].value += r.trim())
: r.length > 0 &&
t.push({ directive: "", value: r, defective: !0 });
}
return t;
}),
(t.prototype.findCorrespondingRule = function (e, t, s) {
void 0 === s && (s = !1);
for (
var r = !1, i = 0;
i < e.length &&
(e[i].directive !== t || ((r = e[i]), s !== e[i].value));
i++
);
return r;
}),
(t.prototype.findBySelector = function (e, t, s) {
void 0 === s && (s = !1);
for (var r = [], i = 0; i < e.length; i++)
!1 === s
? e[i].selector === t && r.push(e[i])
: -1 !== e[i].selector.indexOf(t) && r.push(e[i]);
if ("@imports" === t || r.length < 2) return r;
var n = r[0];
for (i = 1; i < r.length; i++) this.intelligentCSSPush([n], r[i]);
return [n];
}),
(t.prototype.deleteBySelector = function (e, t) {
for (var s = [], r = 0; r < e.length; r++)
e[r].selector !== t && s.push(e[r]);
return s;
}),
(t.prototype.compressCSS = function (e) {
for (var t = [], s = {}, r = 0; r < e.length; r++) {
var i = e[r];
if (!0 !== s[i.selector]) {
var n = this.findBySelector(e, i.selector);
0 !== n.length && ((t = t.concat(n)), (s[i.selector] = !0));
}
}
return t;
}),
(t.prototype.cssDiff = function (e, t) {
if (e.selector !== t.selector) return !1;
if ("media" === e.type || "media" === t.type) return !1;
for (
var s, r, i = { selector: e.selector, rules: [] }, n = 0;
n < e.rules.length;
n++
)
(s = e.rules[n]),
!1 === (r = this.findCorrespondingRule(t.rules, s.directive, s.value))
? i.rules.push(s)
: s.value !== r.value && i.rules.push(s);
for (var o = 0; o < t.rules.length; o++)
(r = t.rules[o]),
!1 === (s = this.findCorrespondingRule(e.rules, r.directive)) &&
((r.type = "DELETED"), i.rules.push(r));
return 0 !== i.rules.length && i;
}),
(t.prototype.intelligentMerge = function (e, t, s) {
void 0 === s && (s = !1);
for (var r = 0; r < t.length; r++) this.intelligentCSSPush(e, t[r], s);
for (r = 0; r < e.length; r++) {
var i = e[r];
"media" !== i.type &&
"keyframes" !== i.type &&
(i.rules = this.compactRules(i.rules));
}
}),
(t.prototype.intelligentCSSPush = function (e, t, s) {
var r = t.selector,
i = !1;
if ((void 0 === s && (s = !1), !1 === s)) {
for (var n = 0; n < e.length; n++)
if (e[n].selector === r) {
i = e[n];
break;
}
} else
for (var o = e.length - 1; o > -1; o--)
if (e[o].selector === r) {
i = e[o];
break;
}
if (!1 === i) e.push(t);
else if ("media" !== t.type)
for (var l = 0; l < t.rules.length; l++) {
var p = t.rules[l],
a = this.findCorrespondingRule(i.rules, p.directive);
!1 === a
? i.rules.push(p)
: "DELETED" === p.type
? (a.type = "DELETED")
: (a.value = p.value);
}
else i.subStyles = i.subStyles.concat(t.subStyles);
}),
(t.prototype.compactRules = function (e) {
for (var t = [], s = 0; s < e.length; s++)
"DELETED" !== e[s].type && t.push(e[s]);
return t;
}),
(t.prototype.getCSSForEditor = function (e, t) {
void 0 === t && (t = 0);
var s = "";
void 0 === e && (e = this.css);
for (var r = 0; r < e.length; r++)
"imports" === e[r].type && (s += e[r].styles + "\n\n");
for (r = 0; r < e.length; r++) {
var i = e[r];
if (void 0 !== i.selector) {
var n = "";
void 0 !== i.comments && (n = i.comments + "\n"),
"media" === i.type
? ((s += n + i.selector + "{\n"),
(s += this.getCSSForEditor(i.subStyles, t + 1)),
(s += "}\n\n"))
: "keyframes" !== i.type &&
"imports" !== i.type &&
((s += this.getSpaces(t) + n + i.selector + " {\n"),
(s += this.getCSSOfRules(i.rules, t + 1)),
(s += this.getSpaces(t) + "}\n\n"));
}
}
for (r = 0; r < e.length; r++)
"keyframes" === e[r].type && (s += e[r].styles + "\n\n");
return s;
}),
(t.prototype.getImports = function (e) {
for (var t = [], s = 0; s < e.length; s++)
"imports" === e[s].type && t.push(e[s].styles);
return t;
}),
(t.prototype.getCSSOfRules = function (e, t) {
for (var s = "", r = 0; r < e.length; r++)
void 0 !== e[r] &&
(void 0 === e[r].defective
? (s +=
this.getSpaces(t) + e[r].directive + ": " + e[r].value + ";\n")
: (s += this.getSpaces(t) + e[r].value + ";\n"));
return s || "\n";
}),
(t.prototype.getSpaces = function (e) {
for (var t = "", s = 0; s < 4 * e; s++) t += " ";
return t;
}),
(t.prototype.applyNamespacing = function (e, t) {
var s = e,
r = "." + this.cssPreviewNamespace;
void 0 !== t && (r = t), "string" == typeof e && (s = this.parseCSS(e));
for (var i = 0; i < s.length; i++) {
var n = s[i];
if (
!(
n.selector.indexOf("@font-face") > -1 ||
n.selector.indexOf("keyframes") > -1 ||
n.selector.indexOf("@import") > -1 ||
n.selector.indexOf(".form-all") > -1 ||
n.selector.indexOf("#stage") > -1
)
)
if ("media" !== n.type) {
for (
var o = n.selector.split(","), l = [], p = 0;
p < o.length;
p++
)
-1 === o[p].indexOf(".supernova")
? l.push(r + " " + o[p])
: l.push(o[p]);
n.selector = l.join(",");
} else n.subStyles = this.applyNamespacing(n.subStyles, t);
}
return s;
}),
(t.prototype.clearNamespacing = function (e, t) {
void 0 === t && (t = !1);
var s = e,
r = "." + this.cssPreviewNamespace;
"string" == typeof e && (s = this.parseCSS(e));
for (var i = 0; i < s.length; i++) {
var n = s[i];
if ("media" !== n.type) {
for (var o = n.selector.split(","), l = [], p = 0; p < o.length; p++)
l.push(o[p].split(r + " ").join(""));
n.selector = l.join(",");
} else n.subStyles = this.clearNamespacing(n.subStyles, !0);
}
return !1 === t ? this.getCSSForEditor(s) : s;
}),
(t.prototype.createStyleElement = function (e, t, s) {
if (
(void 0 === s && (s = !1),
!1 === this.testMode &&
"nonamespace" !== s &&
(t = this.applyNamespacing(t)),
"string" != typeof t && (t = this.getCSSForEditor(t)),
!0 === s && (t = this.getCSSForEditor(this.parseCSS(t))),
!1 !== this.testMode)
)
return this.testMode("create style #" + e, t);
var r = document.getElementById(e);
r && r.parentNode.removeChild(r);
var i = document.head || document.getElementsByTagName("head")[0],
n = document.createElement("style");
(n.id = e),
(n.type = "text/css"),
i.appendChild(n),
n.styleSheet && !n.sheet
? (n.styleSheet.cssText = t)
: n.appendChild(document.createTextNode(t));
}),
(e.cssjs = t);
})(this);
// PouchDB 9.0.0
//
// (c) 2012-2024 Dale Harvey and the PouchDB team
// PouchDB may be freely distributed under the Apache license, version 2.0.
// For all details and documentation:
// http://pouchdb.com
!(function (e) {
if ("object" == typeof exports && "undefined" != typeof module)
module.exports = e();
else if ("function" == typeof define && define.amd) define([], e);
else {
("undefined" != typeof window
? window
: "undefined" != typeof global
? global
: "undefined" != typeof self
? self
: this
).PouchDB = e();
}
})(function () {
return (function e(t, n, r) {
function i(s, a) {
if (!n[s]) {
if (!t[s]) {
var c = "function" == typeof require && require;
if (!a && c) return c(s, !0);
if (o) return o(s, !0);
var u = new Error("Cannot find module '" + s + "'");
throw ((u.code = "MODULE_NOT_FOUND"), u);
}
var f = (n[s] = { exports: {} });
t[s][0].call(
f.exports,
function (e) {
return i(t[s][1][e] || e);
},
f,
f.exports,
e,
t,
n,
r
);
}
return n[s].exports;
}
for (
var o = "function" == typeof require && require, s = 0;
s < r.length;
s++
)
i(r[s]);
return i;
})(
{
1: [
function (e, t, n) {
var r =
Object.create ||
function (e) {
var t = function () {};
return (t.prototype = e), new t();
},
i =
Object.keys ||
function (e) {
var t = [];
for (var n in e)
Object.prototype.hasOwnProperty.call(e, n) && t.push(n);
return n;
},
o =
Function.prototype.bind ||
function (e) {
var t = this;
return function () {
return t.apply(e, arguments);
};
};
function s() {
(this._events &&
Object.prototype.hasOwnProperty.call(this, "_events")) ||
((this._events = r(null)), (this._eventsCount = 0)),
(this._maxListeners = this._maxListeners || void 0);
}
(t.exports = s),
(s.EventEmitter = s),
(s.prototype._events = void 0),
(s.prototype._maxListeners = void 0);
var a,
c = 10;
try {
var u = {};
Object.defineProperty &&
Object.defineProperty(u, "x", { value: 0 }),
(a = 0 === u.x);
} catch (e) {
a = !1;
}
function f(e) {
return void 0 === e._maxListeners
? s.defaultMaxListeners
: e._maxListeners;
}
function l(e, t, n) {
if (t) e.call(n);
else
for (var r = e.length, i = w(e, r), o = 0; o < r; ++o)
i[o].call(n);
}
function d(e, t, n, r) {
if (t) e.call(n, r);
else
for (var i = e.length, o = w(e, i), s = 0; s < i; ++s)
o[s].call(n, r);
}
function h(e, t, n, r, i) {
if (t) e.call(n, r, i);
else
for (var o = e.length, s = w(e, o), a = 0; a < o; ++a)
s[a].call(n, r, i);
}
function p(e, t, n, r, i, o) {
if (t) e.call(n, r, i, o);
else
for (var s = e.length, a = w(e, s), c = 0; c < s; ++c)
a[c].call(n, r, i, o);
}
function v(e, t, n, r) {
if (t) e.apply(n, r);
else
for (var i = e.length, o = w(e, i), s = 0; s < i; ++s)
o[s].apply(n, r);
}
function _(e, t, n, i) {
var o, s, a;
if ("function" != typeof n)
throw new TypeError('"listener" argument must be a function');
if (
((s = e._events)
? (s.newListener &&
(e.emit("newListener", t, n.listener ? n.listener : n),
(s = e._events)),
(a = s[t]))
: ((s = e._events = r(null)), (e._eventsCount = 0)),
a)
) {
if (
("function" == typeof a
? (a = s[t] = i ? [n, a] : [a, n])
: i
? a.unshift(n)
: a.push(n),
!a.warned && (o = f(e)) && o > 0 && a.length > o)
) {
a.warned = !0;
var c = new Error(
"Possible EventEmitter memory leak detected. " +
a.length +
' "' +
String(t) +
'" listeners added. Use emitter.setMaxListeners() to increase limit.'
);
(c.name = "MaxListenersExceededWarning"),
(c.emitter = e),
(c.type = t),
(c.count = a.length),
"object" == typeof console &&
console.warn &&
console.warn("%s: %s", c.name, c.message);
}
} else (a = s[t] = n), ++e._eventsCount;
return e;
}
function y() {
if (!this.fired)
switch (
(this.target.removeListener(this.type, this.wrapFn),
(this.fired = !0),
arguments.length)
) {
case 0:
return this.listener.call(this.target);
case 1:
return this.listener.call(this.target, arguments[0]);
case 2:
return this.listener.call(
this.target,
arguments[0],
arguments[1]
);
case 3:
return this.listener.call(
this.target,
arguments[0],
arguments[1],
arguments[2]
);
default:
for (
var e = new Array(arguments.length), t = 0;
t < e.length;
++t
)
e[t] = arguments[t];
this.listener.apply(this.target, e);
}
}
function g(e, t, n) {
var r = {
fired: !1,
wrapFn: void 0,
target: e,
type: t,
listener: n,
},
i = o.call(y, r);
return (i.listener = n), (r.wrapFn = i), i;
}
function m(e, t, n) {
var r = e._events;
if (!r) return [];
var i = r[t];
return i
? "function" == typeof i
? n
? [i.listener || i]
: [i]
: n
? (function (e) {
for (var t = new Array(e.length), n = 0; n < t.length; ++n)
t[n] = e[n].listener || e[n];
return t;
})(i)
: w(i, i.length)
: [];
}
function b(e) {
var t = this._events;
if (t) {
var n = t[e];
if ("function" == typeof n) return 1;
if (n) return n.length;
}
return 0;
}
function w(e, t) {
for (var n = new Array(t), r = 0; r < t; ++r) n[r] = e[r];
return n;
}
a
? Object.defineProperty(s, "defaultMaxListeners", {
enumerable: !0,
get: function () {
return c;
},
set: function (e) {
if ("number" != typeof e || e < 0 || e != e)
throw new TypeError(
'"defaultMaxListeners" must be a positive number'
);
c = e;
},
})
: (s.defaultMaxListeners = c),
(s.prototype.setMaxListeners = function (e) {
if ("number" != typeof e || e < 0 || isNaN(e))
throw new TypeError('"n" argument must be a positive number');
return (this._maxListeners = e), this;
}),
(s.prototype.getMaxListeners = function () {
return f(this);
}),
(s.prototype.emit = function (e) {
var t,
n,
r,
i,
o,
s,
a = "error" === e;
if ((s = this._events)) a = a && null == s.error;
else if (!a) return !1;
if (a) {
if (
(arguments.length > 1 && (t = arguments[1]),
t instanceof Error)
)
throw t;
var c = new Error('Unhandled "error" event. (' + t + ")");
throw ((c.context = t), c);
}
if (!(n = s[e])) return !1;
var u = "function" == typeof n;
switch ((r = arguments.length)) {
case 1:
l(n, u, this);
break;
case 2:
d(n, u, this, arguments[1]);
break;
case 3:
h(n, u, this, arguments[1], arguments[2]);
break;
case 4:
p(n, u, this, arguments[1], arguments[2], arguments[3]);
break;
default:
for (i = new Array(r - 1), o = 1; o < r; o++)
i[o - 1] = arguments[o];
v(n, u, this, i);
}
return !0;
}),
(s.prototype.addListener = function (e, t) {
return _(this, e, t, !1);
}),
(s.prototype.on = s.prototype.addListener),
(s.prototype.prependListener = function (e, t) {
return _(this, e, t, !0);
}),
(s.prototype.once = function (e, t) {
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
return this.on(e, g(this, e, t)), this;
}),
(s.prototype.prependOnceListener = function (e, t) {
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
return this.prependListener(e, g(this, e, t)), this;
}),
(s.prototype.removeListener = function (e, t) {
var n, i, o, s, a;
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
if (!(i = this._events)) return this;
if (!(n = i[e])) return this;
if (n === t || n.listener === t)
0 == --this._eventsCount
? (this._events = r(null))
: (delete i[e],
i.removeListener &&
this.emit("removeListener", e, n.listener || t));
else if ("function" != typeof n) {
for (o = -1, s = n.length - 1; s >= 0; s--)
if (n[s] === t || n[s].listener === t) {
(a = n[s].listener), (o = s);
break;
}
if (o < 0) return this;
0 === o
? n.shift()
: (function (e, t) {
for (
var n = t, r = n + 1, i = e.length;
r < i;
n += 1, r += 1
)
e[n] = e[r];
e.pop();
})(n, o),
1 === n.length && (i[e] = n[0]),
i.removeListener && this.emit("removeListener", e, a || t);
}
return this;
}),
(s.prototype.removeAllListeners = function (e) {
var t, n, o;
if (!(n = this._events)) return this;
if (!n.removeListener)
return (
0 === arguments.length
? ((this._events = r(null)), (this._eventsCount = 0))
: n[e] &&
(0 == --this._eventsCount
? (this._events = r(null))
: delete n[e]),
this
);
if (0 === arguments.length) {
var s,
a = i(n);
for (o = 0; o < a.length; ++o)
"removeListener" !== (s = a[o]) && this.removeAllListeners(s);
return (
this.removeAllListeners("removeListener"),
(this._events = r(null)),
(this._eventsCount = 0),
this
);
}
if ("function" == typeof (t = n[e])) this.removeListener(e, t);
else if (t)
for (o = t.length - 1; o >= 0; o--)
this.removeListener(e, t[o]);
return this;
}),
(s.prototype.listeners = function (e) {
return m(this, e, !0);
}),
(s.prototype.rawListeners = function (e) {
return m(this, e, !1);
}),
(s.listenerCount = function (e, t) {
return "function" == typeof e.listenerCount
? e.listenerCount(t)
: b.call(e, t);
}),
(s.prototype.listenerCount = b),
(s.prototype.eventNames = function () {
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
});
},
{},
],
2: [
function (e, t, n) {
var r,
i,
o = (t.exports = {});
function s() {
throw new Error("setTimeout has not been defined");
}
function a() {
throw new Error("clearTimeout has not been defined");
}
function c(e) {
if (r === setTimeout) return setTimeout(e, 0);
if ((r === s || !r) && setTimeout)
return (r = setTimeout), setTimeout(e, 0);
try {
return r(e, 0);
} catch (t) {
try {
return r.call(null, e, 0);
} catch (t) {
return r.call(this, e, 0);
}
}
}
!(function () {
try {
r = "function" == typeof setTimeout ? setTimeout : s;
} catch (e) {
r = s;
}
try {
i = "function" == typeof clearTimeout ? clearTimeout : a;
} catch (e) {
i = a;
}
})();
var u,
f = [],
l = !1,
d = -1;
function h() {
l &&
u &&
((l = !1),
u.length ? (f = u.concat(f)) : (d = -1),
f.length && p());
}
function p() {
if (!l) {
var e = c(h);
l = !0;
for (var t = f.length; t; ) {
for (u = f, f = []; ++d < t; ) u && u[d].run();
(d = -1), (t = f.length);
}
(u = null),
(l = !1),
(function (e) {
if (i === clearTimeout) return clearTimeout(e);
if ((i === a || !i) && clearTimeout)
return (i = clearTimeout), clearTimeout(e);
try {
i(e);
} catch (t) {
try {
return i.call(null, e);
} catch (t) {
return i.call(this, e);
}
}
})(e);
}
}
function v(e, t) {
(this.fun = e), (this.array = t);
}
function _() {}
(o.nextTick = function (e) {
var t = new Array(arguments.length - 1);
if (arguments.length > 1)
for (var n = 1; n < arguments.length; n++)
t[n - 1] = arguments[n];
f.push(new v(e, t)), 1 !== f.length || l || c(p);
}),
(v.prototype.run = function () {
this.fun.apply(null, this.array);
}),
(o.title = "browser"),
(o.browser = !0),
(o.env = {}),
(o.argv = []),
(o.version = ""),
(o.versions = {}),
(o.on = _),
(o.addListener = _),
(o.once = _),
(o.off = _),
(o.removeListener = _),
(o.removeAllListeners = _),
(o.emit = _),
(o.prependListener = _),
(o.prependOnceListener = _),
(o.listeners = function (e) {
return [];
}),
(o.binding = function (e) {
throw new Error("process.binding is not supported");
}),
(o.cwd = function () {
return "/";
}),
(o.chdir = function (e) {
throw new Error("process.chdir is not supported");
}),
(o.umask = function () {
return 0;
});
},
{},
],
3: [
function (e, t, n) {
!(function (e) {
if ("object" == typeof n) t.exports = e();
else {
var r;
try {
r = window;
} catch (e) {
r = self;
}
r.SparkMD5 = e();
}
})(function (e) {
"use strict";
var t = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f",
];
function n(e, t) {
var n = e[0],
r = e[1],
i = e[2],
o = e[3];
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & i) | (~r & o)) + t[0] - 680876936) | 0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & i)) +
t[1] -
389564586) |
0) <<
12) |
(o >>> 20)) +
n) |
0) &
n) |
(~o & r)) +
t[2] +
606105819) |
0) <<
17) |
(i >>> 15)) +
o) |
0) &
o) |
(~i & n)) +
t[3] -
1044525330) |
0) <<
22) |
(r >>> 10)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & i) | (~r & o)) + t[4] - 176418897) |
0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & i)) +
t[5] +
1200080426) |
0) <<
12) |
(o >>> 20)) +
n) |
0) &
n) |
(~o & r)) +
t[6] -
1473231341) |
0) <<
17) |
(i >>> 15)) +
o) |
0) &
o) |
(~i & n)) +
t[7] -
45705983) |
0) <<
22) |
(r >>> 10)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & i) | (~r & o)) + t[8] + 1770035416) |
0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & i)) +
t[9] -
1958414417) |
0) <<
12) |
(o >>> 20)) +
n) |
0) &
n) |
(~o & r)) +
t[10] -
42063) |
0) <<
17) |
(i >>> 15)) +
o) |
0) &
o) |
(~i & n)) +
t[11] -
1990404162) |
0) <<
22) |
(r >>> 10)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & i) | (~r & o)) + t[12] + 1804603682) |
0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & i)) +
t[13] -
40341101) |
0) <<
12) |
(o >>> 20)) +
n) |
0) &
n) |
(~o & r)) +
t[14] -
1502002290) |
0) <<
17) |
(i >>> 15)) +
o) |
0) &
o) |
(~i & n)) +
t[15] +
1236535329) |
0) <<
22) |
(r >>> 10)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & o) | (i & ~o)) + t[1] - 165796510) |
0) <<
5) |
(n >>> 27)) +
r) |
0) &
i) |
(r & ~i)) +
t[6] -
1069501632) |
0) <<
9) |
(o >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[11] +
643717713) |
0) <<
14) |
(i >>> 18)) +
o) |
0) &
n) |
(o & ~n)) +
t[0] -
373897302) |
0) <<
20) |
(r >>> 12)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & o) | (i & ~o)) + t[5] - 701558691) |
0) <<
5) |
(n >>> 27)) +
r) |
0) &
i) |
(r & ~i)) +
t[10] +
38016083) |
0) <<
9) |
(o >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[15] -
660478335) |
0) <<
14) |
(i >>> 18)) +
o) |
0) &
n) |
(o & ~n)) +
t[4] -
405537848) |
0) <<
20) |
(r >>> 12)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & o) | (i & ~o)) + t[9] + 568446438) |
0) <<
5) |
(n >>> 27)) +
r) |
0) &
i) |
(r & ~i)) +
t[14] -
1019803690) |
0) <<
9) |
(o >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[3] -
187363961) |
0) <<
14) |
(i >>> 18)) +
o) |
0) &
n) |
(o & ~n)) +
t[8] +
1163531501) |
0) <<
20) |
(r >>> 12)) +
i) |
0),
(r =
((((r +=
((((i =
((((i +=
((((o =
((((o +=
((((n =
((((n +=
(((r & o) | (i & ~o)) + t[13] - 1444681467) |
0) <<
5) |
(n >>> 27)) +
r) |
0) &
i) |
(r & ~i)) +
t[2] -
51403784) |
0) <<
9) |
(o >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[7] +
1735328473) |
0) <<
14) |
(i >>> 18)) +
o) |
0) &
n) |
(o & ~n)) +
t[12] -
1926607734) |
0) <<
20) |
(r >>> 12)) +
i) |
0),
(r =
((((r +=
(((i =
((((i +=
(((o =
((((o +=
(((n =
((((n += ((r ^ i ^ o) + t[5] - 378558) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
i) +
t[8] -
2022574463) |
0) <<
11) |
(o >>> 21)) +
n) |
0) ^
n ^
r) +
t[11] +
1839030562) |
0) <<
16) |
(i >>> 16)) +
o) |
0) ^
o ^
n) +
t[14] -
35309556) |
0) <<
23) |
(r >>> 9)) +
i) |
0),
(r =
((((r +=
(((i =
((((i +=
(((o =
((((o +=
(((n =
((((n += ((r ^ i ^ o) + t[1] - 1530992060) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
i) +
t[4] +
1272893353) |
0) <<
11) |
(o >>> 21)) +
n) |
0) ^
n ^
r) +
t[7] -
155497632) |
0) <<
16) |
(i >>> 16)) +
o) |
0) ^
o ^
n) +
t[10] -
1094730640) |
0) <<
23) |
(r >>> 9)) +
i) |
0),
(r =
((((r +=
(((i =
((((i +=
(((o =
((((o +=
(((n =
((((n += ((r ^ i ^ o) + t[13] + 681279174) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
i) +
t[0] -
358537222) |
0) <<
11) |
(o >>> 21)) +
n) |
0) ^
n ^
r) +
t[3] -
722521979) |
0) <<
16) |
(i >>> 16)) +
o) |
0) ^
o ^
n) +
t[6] +
76029189) |
0) <<
23) |
(r >>> 9)) +
i) |
0),
(r =
((((r +=
(((i =
((((i +=
(((o =
((((o +=
(((n =
((((n += ((r ^ i ^ o) + t[9] - 640364487) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
i) +
t[12] -
421815835) |
0) <<
11) |
(o >>> 21)) +
n) |
0) ^
n ^
r) +
t[15] +
530742520) |
0) <<
16) |
(i >>> 16)) +
o) |
0) ^
o ^
n) +
t[2] -
995338651) |
0) <<
23) |
(r >>> 9)) +
i) |
0),
(r =
((((r +=
(((o =
((((o +=
((r ^
((n =
((((n += ((i ^ (r | ~o)) + t[0] - 198630844) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~i)) +
t[7] +
1126891415) |
0) <<
10) |
(o >>> 22)) +
n) |
0) ^
((i =
((((i += ((n ^ (o | ~r)) + t[14] - 1416354905) | 0) <<
15) |
(i >>> 17)) +
o) |
0) |
~n)) +
t[5] -
57434055) |
0) <<
21) |
(r >>> 11)) +
i) |
0),
(r =
((((r +=
(((o =
((((o +=
((r ^
((n =
((((n +=
((i ^ (r | ~o)) + t[12] + 1700485571) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~i)) +
t[3] -
1894986606) |
0) <<
10) |
(o >>> 22)) +
n) |
0) ^
((i =
((((i += ((n ^ (o | ~r)) + t[10] - 1051523) | 0) <<
15) |
(i >>> 17)) +
o) |
0) |
~n)) +
t[1] -
2054922799) |
0) <<
21) |
(r >>> 11)) +
i) |
0),
(r =
((((r +=
(((o =
((((o +=
((r ^
((n =
((((n +=
((i ^ (r | ~o)) + t[8] + 1873313359) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~i)) +
t[15] -
30611744) |
0) <<
10) |
(o >>> 22)) +
n) |
0) ^
((i =
((((i += ((n ^ (o | ~r)) + t[6] - 1560198380) | 0) <<
15) |
(i >>> 17)) +
o) |
0) |
~n)) +
t[13] +
1309151649) |
0) <<
21) |
(r >>> 11)) +
i) |
0),
(r =
((((r +=
(((o =
((((o +=
((r ^
((n =
((((n += ((i ^ (r | ~o)) + t[4] - 145523070) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~i)) +
t[11] -
1120210379) |
0) <<
10) |
(o >>> 22)) +
n) |
0) ^
((i =
((((i += ((n ^ (o | ~r)) + t[2] + 718787259) | 0) <<
15) |
(i >>> 17)) +
o) |
0) |
~n)) +
t[9] -
343485551) |
0) <<
21) |
(r >>> 11)) +
i) |
0),
(e[0] = (n + e[0]) | 0),
(e[1] = (r + e[1]) | 0),
(e[2] = (i + e[2]) | 0),
(e[3] = (o + e[3]) | 0);
}
function r(e) {
var t,
n = [];
for (t = 0; t < 64; t += 4)
n[t >> 2] =
e.charCodeAt(t) +
(e.charCodeAt(t + 1) << 8) +
(e.charCodeAt(t + 2) << 16) +
(e.charCodeAt(t + 3) << 24);
return n;
}
function i(e) {
var t,
n = [];
for (t = 0; t < 64; t += 4)
n[t >> 2] =
e[t] + (e[t + 1] << 8) + (e[t + 2] << 16) + (e[t + 3] << 24);
return n;
}
function o(e) {
var t,
i,
o,
s,
a,
c,
u = e.length,
f = [1732584193, -271733879, -1732584194, 271733878];
for (t = 64; t <= u; t += 64) n(f, r(e.substring(t - 64, t)));
for (
i = (e = e.substring(t - 64)).length,
o = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
t = 0;
t < i;
t += 1
)
o[t >> 2] |= e.charCodeAt(t) << (t % 4 << 3);
if (((o[t >> 2] |= 128 << (t % 4 << 3)), t > 55))
for (n(f, o), t = 0; t < 16; t += 1) o[t] = 0;
return (
(s = (s = 8 * u).toString(16).match(/(.*?)(.{0,8})$/)),
(a = parseInt(s[2], 16)),
(c = parseInt(s[1], 16) || 0),
(o[14] = a),
(o[15] = c),
n(f, o),
f
);
}
function s(e) {
var n,
r = "";
for (n = 0; n < 4; n += 1)
r += t[(e >> (8 * n + 4)) & 15] + t[(e >> (8 * n)) & 15];
return r;
}
function a(e) {
var t;
for (t = 0; t < e.length; t += 1) e[t] = s(e[t]);
return e.join("");
}
function c(e) {
return (
/[\u0080-\uFFFF]/.test(e) &&
(e = unescape(encodeURIComponent(e))),
e
);
}
function u(e) {
var t,
n = [],
r = e.length;
for (t = 0; t < r - 1; t += 2)
n.push(parseInt(e.substr(t, 2), 16));
return String.fromCharCode.apply(String, n);
}
function f() {
this.reset();
}
return (
"5d41402abc4b2a76b9719d911017c592" !== a(o("hello")) &&
function (e, t) {
var n = (65535 & e) + (65535 & t);
return (
(((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n)
);
},
"undefined" == typeof ArrayBuffer ||
ArrayBuffer.prototype.slice ||
(function () {
function t(e, t) {
return (e = 0 | e || 0) < 0
? Math.max(e + t, 0)
: Math.min(e, t);
}
ArrayBuffer.prototype.slice = function (n, r) {
var i,
o,
s,
a,
c = this.byteLength,
u = t(n, c),
f = c;
return (
r !== e && (f = t(r, c)),
u > f
? new ArrayBuffer(0)
: ((i = f - u),
(o = new ArrayBuffer(i)),
(s = new Uint8Array(o)),
(a = new Uint8Array(this, u, i)),
s.set(a),
o)
);
};
})(),
(f.prototype.append = function (e) {
return this.appendBinary(c(e)), this;
}),
(f.prototype.appendBinary = function (e) {
(this._buff += e), (this._length += e.length);
var t,
i = this._buff.length;
for (t = 64; t <= i; t += 64)
n(this._hash, r(this._buff.substring(t - 64, t)));
return (this._buff = this._buff.substring(t - 64)), this;
}),
(f.prototype.end = function (e) {
var t,
n,
r = this._buff,
i = r.length,
o = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (t = 0; t < i; t += 1)
o[t >> 2] |= r.charCodeAt(t) << (t % 4 << 3);
return (
this._finish(o, i),
(n = a(this._hash)),
e && (n = u(n)),
this.reset(),
n
);
}),
(f.prototype.reset = function () {
return (
(this._buff = ""),
(this._length = 0),
(this._hash = [
1732584193, -271733879, -1732584194, 271733878,
]),
this
);
}),
(f.prototype.getState = function () {
return {
buff: this._buff,
length: this._length,
hash: this._hash.slice(),
};
}),
(f.prototype.setState = function (e) {
return (
(this._buff = e.buff),
(this._length = e.length),
(this._hash = e.hash),
this
);
}),
(f.prototype.destroy = function () {
delete this._hash, delete this._buff, delete this._length;
}),
(f.prototype._finish = function (e, t) {
var r,
i,
o,
s = t;
if (((e[s >> 2] |= 128 << (s % 4 << 3)), s > 55))
for (n(this._hash, e), s = 0; s < 16; s += 1) e[s] = 0;
(r = (r = 8 * this._length)
.toString(16)
.match(/(.*?)(.{0,8})$/)),
(i = parseInt(r[2], 16)),
(o = parseInt(r[1], 16) || 0),
(e[14] = i),
(e[15] = o),
n(this._hash, e);
}),
(f.hash = function (e, t) {
return f.hashBinary(c(e), t);
}),
(f.hashBinary = function (e, t) {
var n = a(o(e));
return t ? u(n) : n;
}),
(f.ArrayBuffer = function () {
this.reset();
}),
(f.ArrayBuffer.prototype.append = function (e) {
var t,
r,
o,
s,
a,
c =
((r = this._buff.buffer),
(o = e),
(s = !0),
(a = new Uint8Array(r.byteLength + o.byteLength)).set(
new Uint8Array(r)
),
a.set(new Uint8Array(o), r.byteLength),
s ? a : a.buffer),
u = c.length;
for (this._length += e.byteLength, t = 64; t <= u; t += 64)
n(this._hash, i(c.subarray(t - 64, t)));
return (
(this._buff =
t - 64 < u
? new Uint8Array(c.buffer.slice(t - 64))
: new Uint8Array(0)),
this
);
}),
(f.ArrayBuffer.prototype.end = function (e) {
var t,
n,
r = this._buff,
i = r.length,
o = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (t = 0; t < i; t += 1) o[t >> 2] |= r[t] << (t % 4 << 3);
return (
this._finish(o, i),
(n = a(this._hash)),
e && (n = u(n)),
this.reset(),
n
);
}),
(f.ArrayBuffer.prototype.reset = function () {
return (
(this._buff = new Uint8Array(0)),
(this._length = 0),
(this._hash = [
1732584193, -271733879, -1732584194, 271733878,
]),
this
);
}),
(f.ArrayBuffer.prototype.getState = function () {
var e,
t = f.prototype.getState.call(this);
return (
(t.buff =
((e = t.buff),
String.fromCharCode.apply(null, new Uint8Array(e)))),
t
);
}),
(f.ArrayBuffer.prototype.setState = function (e) {
return (
(e.buff = (function (e, t) {
var n,
r = e.length,
i = new ArrayBuffer(r),
o = new Uint8Array(i);
for (n = 0; n < r; n += 1) o[n] = e.charCodeAt(n);
return t ? o : i;
})(e.buff, !0)),
f.prototype.setState.call(this, e)
);
}),
(f.ArrayBuffer.prototype.destroy = f.prototype.destroy),
(f.ArrayBuffer.prototype._finish = f.prototype._finish),
(f.ArrayBuffer.hash = function (e, t) {
var r = a(
(function (e) {
var t,
r,
o,
s,
a,
c,
u = e.length,
f = [1732584193, -271733879, -1732584194, 271733878];
for (t = 64; t <= u; t += 64)
n(f, i(e.subarray(t - 64, t)));
for (
r = (e =
t - 64 < u ? e.subarray(t - 64) : new Uint8Array(0))
.length,
o = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
t = 0;
t < r;
t += 1
)
o[t >> 2] |= e[t] << (t % 4 << 3);
if (((o[t >> 2] |= 128 << (t % 4 << 3)), t > 55))
for (n(f, o), t = 0; t < 16; t += 1) o[t] = 0;
return (
(s = (s = 8 * u).toString(16).match(/(.*?)(.{0,8})$/)),
(a = parseInt(s[2], 16)),
(c = parseInt(s[1], 16) || 0),
(o[14] = a),
(o[15] = c),
n(f, o),
f
);
})(new Uint8Array(e))
);
return t ? u(r) : r;
}),
f
);
});
},
{},
],
4: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
Object.defineProperty(n, "v1", {
enumerable: !0,
get: function () {
return r.default;
},
}),
Object.defineProperty(n, "v3", {
enumerable: !0,
get: function () {
return i.default;
},
}),
Object.defineProperty(n, "v4", {
enumerable: !0,
get: function () {
return o.default;
},
}),
Object.defineProperty(n, "v5", {
enumerable: !0,
get: function () {
return s.default;
},
}),
Object.defineProperty(n, "NIL", {
enumerable: !0,
get: function () {
return a.default;
},
}),
Object.defineProperty(n, "version", {
enumerable: !0,
get: function () {
return c.default;
},
}),
Object.defineProperty(n, "validate", {
enumerable: !0,
get: function () {
return u.default;
},
}),
Object.defineProperty(n, "stringify", {
enumerable: !0,
get: function () {
return f.default;
},
}),
Object.defineProperty(n, "parse", {
enumerable: !0,
get: function () {
return l.default;
},
});
var r = d(e("./v1.js")),
i = d(e("./v3.js")),
o = d(e("./v4.js")),
s = d(e("./v5.js")),
a = d(e("./nil.js")),
c = d(e("./version.js")),
u = d(e("./validate.js")),
f = d(e("./stringify.js")),
l = d(e("./parse.js"));
function d(e) {
return e && e.__esModule ? e : { default: e };
}
},
{
"./nil.js": 6,
"./parse.js": 7,
"./stringify.js": 11,
"./v1.js": 12,
"./v3.js": 13,
"./v4.js": 15,
"./v5.js": 16,
"./validate.js": 17,
"./version.js": 18,
},
],
5: [
function (e, t, n) {
"use strict";
function r(e) {
return 14 + (((e + 64) >>> 9) << 4) + 1;
}
function i(e, t) {
const n = (65535 & e) + (65535 & t);
return (((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n);
}
function o(e, t, n, r, o, s) {
return i(
((a = i(i(t, e), i(r, s))) << (c = o)) | (a >>> (32 - c)),
n
);
var a, c;
}
function s(e, t, n, r, i, s, a) {
return o((t & n) | (~t & r), e, t, i, s, a);
}
function a(e, t, n, r, i, s, a) {
return o((t & r) | (n & ~r), e, t, i, s, a);
}
function c(e, t, n, r, i, s, a) {
return o(t ^ n ^ r, e, t, i, s, a);
}
function u(e, t, n, r, i, s, a) {
return o(n ^ (t | ~r), e, t, i, s, a);
}
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var f = function (e) {
if ("string" == typeof e) {
const t = unescape(encodeURIComponent(e));
e = new Uint8Array(t.length);
for (let n = 0; n < t.length; ++n) e[n] = t.charCodeAt(n);
}
return (function (e) {
const t = [],
n = 32 * e.length;
for (let r = 0; r < n; r += 8) {
const n = (e[r >> 5] >>> r % 32) & 255,
i = parseInt(
"0123456789abcdef".charAt((n >>> 4) & 15) +
"0123456789abcdef".charAt(15 & n),
16
);
t.push(i);
}
return t;
})(
(function (e, t) {
(e[t >> 5] |= 128 << t % 32), (e[r(t) - 1] = t);
let n = 1732584193,
o = -271733879,
f = -1732584194,
l = 271733878;
for (let t = 0; t < e.length; t += 16) {
const r = n,
d = o,
h = f,
p = l;
(n = s(n, o, f, l, e[t], 7, -680876936)),
(l = s(l, n, o, f, e[t + 1], 12, -389564586)),
(f = s(f, l, n, o, e[t + 2], 17, 606105819)),
(o = s(o, f, l, n, e[t + 3], 22, -1044525330)),
(n = s(n, o, f, l, e[t + 4], 7, -176418897)),
(l = s(l, n, o, f, e[t + 5], 12, 1200080426)),
(f = s(f, l, n, o, e[t + 6], 17, -1473231341)),
(o = s(o, f, l, n, e[t + 7], 22, -45705983)),
(n = s(n, o, f, l, e[t + 8], 7, 1770035416)),
(l = s(l, n, o, f, e[t + 9], 12, -1958414417)),
(f = s(f, l, n, o, e[t + 10], 17, -42063)),
(o = s(o, f, l, n, e[t + 11], 22, -1990404162)),
(n = s(n, o, f, l, e[t + 12], 7, 1804603682)),
(l = s(l, n, o, f, e[t + 13], 12, -40341101)),
(f = s(f, l, n, o, e[t + 14], 17, -1502002290)),
(o = s(o, f, l, n, e[t + 15], 22, 1236535329)),
(n = a(n, o, f, l, e[t + 1], 5, -165796510)),
(l = a(l, n, o, f, e[t + 6], 9, -1069501632)),
(f = a(f, l, n, o, e[t + 11], 14, 643717713)),
(o = a(o, f, l, n, e[t], 20, -373897302)),
(n = a(n, o, f, l, e[t + 5], 5, -701558691)),
(l = a(l, n, o, f, e[t + 10], 9, 38016083)),
(f = a(f, l, n, o, e[t + 15], 14, -660478335)),
(o = a(o, f, l, n, e[t + 4], 20, -405537848)),
(n = a(n, o, f, l, e[t + 9], 5, 568446438)),
(l = a(l, n, o, f, e[t + 14], 9, -1019803690)),
(f = a(f, l, n, o, e[t + 3], 14, -187363961)),
(o = a(o, f, l, n, e[t + 8], 20, 1163531501)),
(n = a(n, o, f, l, e[t + 13], 5, -1444681467)),
(l = a(l, n, o, f, e[t + 2], 9, -51403784)),
(f = a(f, l, n, o, e[t + 7], 14, 1735328473)),
(o = a(o, f, l, n, e[t + 12], 20, -1926607734)),
(n = c(n, o, f, l, e[t + 5], 4, -378558)),
(l = c(l, n, o, f, e[t + 8], 11, -2022574463)),
(f = c(f, l, n, o, e[t + 11], 16, 1839030562)),
(o = c(o, f, l, n, e[t + 14], 23, -35309556)),
(n = c(n, o, f, l, e[t + 1], 4, -1530992060)),
(l = c(l, n, o, f, e[t + 4], 11, 1272893353)),
(f = c(f, l, n, o, e[t + 7], 16, -155497632)),
(o = c(o, f, l, n, e[t + 10], 23, -1094730640)),
(n = c(n, o, f, l, e[t + 13], 4, 681279174)),
(l = c(l, n, o, f, e[t], 11, -358537222)),
(f = c(f, l, n, o, e[t + 3], 16, -722521979)),
(o = c(o, f, l, n, e[t + 6], 23, 76029189)),
(n = c(n, o, f, l, e[t + 9], 4, -640364487)),
(l = c(l, n, o, f, e[t + 12], 11, -421815835)),
(f = c(f, l, n, o, e[t + 15], 16, 530742520)),
(o = c(o, f, l, n, e[t + 2], 23, -995338651)),
(n = u(n, o, f, l, e[t], 6, -198630844)),
(l = u(l, n, o, f, e[t + 7], 10, 1126891415)),
(f = u(f, l, n, o, e[t + 14], 15, -1416354905)),
(o = u(o, f, l, n, e[t + 5], 21, -57434055)),
(n = u(n, o, f, l, e[t + 12], 6, 1700485571)),
(l = u(l, n, o, f, e[t + 3], 10, -1894986606)),
(f = u(f, l, n, o, e[t + 10], 15, -1051523)),
(o = u(o, f, l, n, e[t + 1], 21, -2054922799)),
(n = u(n, o, f, l, e[t + 8], 6, 1873313359)),
(l = u(l, n, o, f, e[t + 15], 10, -30611744)),
(f = u(f, l, n, o, e[t + 6], 15, -1560198380)),
(o = u(o, f, l, n, e[t + 13], 21, 1309151649)),
(n = u(n, o, f, l, e[t + 4], 6, -145523070)),
(l = u(l, n, o, f, e[t + 11], 10, -1120210379)),
(f = u(f, l, n, o, e[t + 2], 15, 718787259)),
(o = u(o, f, l, n, e[t + 9], 21, -343485551)),
(n = i(n, r)),
(o = i(o, d)),
(f = i(f, h)),
(l = i(l, p));
}
return [n, o, f, l];
})(
(function (e) {
if (0 === e.length) return [];
const t = 8 * e.length,
n = new Uint32Array(r(t));
for (let r = 0; r < t; r += 8)
n[r >> 5] |= (255 & e[r / 8]) << r % 32;
return n;
})(e),
8 * e.length
)
);
};
n.default = f;
},
{},
],
6: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
n.default = "00000000-0000-0000-0000-000000000000";
},
{},
],
7: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
i = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
var o = function (e) {
if (!(0, i.default)(e)) throw TypeError("Invalid UUID");
let t;
const n = new Uint8Array(16);
return (
(n[0] = (t = parseInt(e.slice(0, 8), 16)) >>> 24),
(n[1] = (t >>> 16) & 255),
(n[2] = (t >>> 8) & 255),
(n[3] = 255 & t),
(n[4] = (t = parseInt(e.slice(9, 13), 16)) >>> 8),
(n[5] = 255 & t),
(n[6] = (t = parseInt(e.slice(14, 18), 16)) >>> 8),
(n[7] = 255 & t),
(n[8] = (t = parseInt(e.slice(19, 23), 16)) >>> 8),
(n[9] = 255 & t),
(n[10] =
((t = parseInt(e.slice(24, 36), 16)) / 1099511627776) & 255),
(n[11] = (t / 4294967296) & 255),
(n[12] = (t >>> 24) & 255),
(n[13] = (t >>> 16) & 255),
(n[14] = (t >>> 8) & 255),
(n[15] = 255 & t),
n
);
};
n.default = o;
},
{ "./validate.js": 17 },
],
8: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
n.default =
/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
},
{},
],
9: [
function (e, t, n) {
"use strict";
let r;
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = function () {
if (
!r &&
((r =
("undefined" != typeof crypto &&
crypto.getRandomValues &&
crypto.getRandomValues.bind(crypto)) ||
("undefined" != typeof msCrypto &&
"function" == typeof msCrypto.getRandomValues &&
msCrypto.getRandomValues.bind(msCrypto))),
!r)
)
throw new Error(
"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"
);
return r(i);
});
const i = new Uint8Array(16);
},
{},
],
10: [
function (e, t, n) {
"use strict";
function r(e, t, n, r) {
switch (e) {
case 0:
return (t & n) ^ (~t & r);
case 1:
return t ^ n ^ r;
case 2:
return (t & n) ^ (t & r) ^ (n & r);
case 3:
return t ^ n ^ r;
}
}
function i(e, t) {
return (e << t) | (e >>> (32 - t));
}
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var o = function (e) {
const t = [1518500249, 1859775393, 2400959708, 3395469782],
n = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];
if ("string" == typeof e) {
const t = unescape(encodeURIComponent(e));
e = [];
for (let n = 0; n < t.length; ++n) e.push(t.charCodeAt(n));
} else Array.isArray(e) || (e = Array.prototype.slice.call(e));
e.push(128);
const o = e.length / 4 + 2,
s = Math.ceil(o / 16),
a = new Array(s);
for (let t = 0; t < s; ++t) {
const n = new Uint32Array(16);
for (let r = 0; r < 16; ++r)
n[r] =
(e[64 * t + 4 * r] << 24) |
(e[64 * t + 4 * r + 1] << 16) |
(e[64 * t + 4 * r + 2] << 8) |
e[64 * t + 4 * r + 3];
a[t] = n;
}
(a[s - 1][14] = (8 * (e.length - 1)) / Math.pow(2, 32)),
(a[s - 1][14] = Math.floor(a[s - 1][14])),
(a[s - 1][15] = (8 * (e.length - 1)) & 4294967295);
for (let e = 0; e < s; ++e) {
const o = new Uint32Array(80);
for (let t = 0; t < 16; ++t) o[t] = a[e][t];
for (let e = 16; e < 80; ++e)
o[e] = i(o[e - 3] ^ o[e - 8] ^ o[e - 14] ^ o[e - 16], 1);
let s = n[0],
c = n[1],
u = n[2],
f = n[3],
l = n[4];
for (let e = 0; e < 80; ++e) {
const n = Math.floor(e / 20),
a = (i(s, 5) + r(n, c, u, f) + l + t[n] + o[e]) >>> 0;
(l = f), (f = u), (u = i(c, 30) >>> 0), (c = s), (s = a);
}
(n[0] = (n[0] + s) >>> 0),
(n[1] = (n[1] + c) >>> 0),
(n[2] = (n[2] + u) >>> 0),
(n[3] = (n[3] + f) >>> 0),
(n[4] = (n[4] + l) >>> 0);
}
return [
(n[0] >> 24) & 255,
(n[0] >> 16) & 255,
(n[0] >> 8) & 255,
255 & n[0],
(n[1] >> 24) & 255,
(n[1] >> 16) & 255,
(n[1] >> 8) & 255,
255 & n[1],
(n[2] >> 24) & 255,
(n[2] >> 16) & 255,
(n[2] >> 8) & 255,
255 & n[2],
(n[3] >> 24) & 255,
(n[3] >> 16) & 255,
(n[3] >> 8) & 255,
255 & n[3],
(n[4] >> 24) & 255,
(n[4] >> 16) & 255,
(n[4] >> 8) & 255,
255 & n[4],
];
};
n.default = o;
},
{},
],
11: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
i = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
const o = [];
for (let e = 0; e < 256; ++e)
o.push((e + 256).toString(16).substr(1));
var s = function (e, t = 0) {
const n = (
o[e[t + 0]] +
o[e[t + 1]] +
o[e[t + 2]] +
o[e[t + 3]] +
"-" +
o[e[t + 4]] +
o[e[t + 5]] +
"-" +
o[e[t + 6]] +
o[e[t + 7]] +
"-" +
o[e[t + 8]] +
o[e[t + 9]] +
"-" +
o[e[t + 10]] +
o[e[t + 11]] +
o[e[t + 12]] +
o[e[t + 13]] +
o[e[t + 14]] +
o[e[t + 15]]
).toLowerCase();
if (!(0, i.default)(n))
throw TypeError("Stringified UUID is invalid");
return n;
};
n.default = s;
},
{ "./validate.js": 17 },
],
12: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = o(e("./rng.js")),
i = o(e("./stringify.js"));
function o(e) {
return e && e.__esModule ? e : { default: e };
}
let s,
a,
c = 0,
u = 0;
var f = function (e, t, n) {
let o = (t && n) || 0;
const f = t || new Array(16);
let l = (e = e || {}).node || s,
d = void 0 !== e.clockseq ? e.clockseq : a;
if (null == l || null == d) {
const t = e.random || (e.rng || r.default)();
null == l && (l = s = [1 | t[0], t[1], t[2], t[3], t[4], t[5]]),
null == d && (d = a = 16383 & ((t[6] << 8) | t[7]));
}
let h = void 0 !== e.msecs ? e.msecs : Date.now(),
p = void 0 !== e.nsecs ? e.nsecs : u + 1;
const v = h - c + (p - u) / 1e4;
if (
(v < 0 && void 0 === e.clockseq && (d = (d + 1) & 16383),
(v < 0 || h > c) && void 0 === e.nsecs && (p = 0),
p >= 1e4)
)
throw new Error(
"uuid.v1(): Can't create more than 10M uuids/sec"
);
(c = h), (u = p), (a = d), (h += 122192928e5);
const _ = (1e4 * (268435455 & h) + p) % 4294967296;
(f[o++] = (_ >>> 24) & 255),
(f[o++] = (_ >>> 16) & 255),
(f[o++] = (_ >>> 8) & 255),
(f[o++] = 255 & _);
const y = ((h / 4294967296) * 1e4) & 268435455;
(f[o++] = (y >>> 8) & 255),
(f[o++] = 255 & y),
(f[o++] = ((y >>> 24) & 15) | 16),
(f[o++] = (y >>> 16) & 255),
(f[o++] = (d >>> 8) | 128),
(f[o++] = 255 & d);
for (let e = 0; e < 6; ++e) f[o + e] = l[e];
return t || (0, i.default)(f);
};
n.default = f;
},
{ "./rng.js": 9, "./stringify.js": 11 },
],
13: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = o(e("./v35.js")),
i = o(e("./md5.js"));
function o(e) {
return e && e.__esModule ? e : { default: e };
}
var s = (0, r.default)("v3", 48, i.default);
n.default = s;
},
{ "./md5.js": 5, "./v35.js": 14 },
],
14: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = function (e, t, n) {
function o(e, o, s, a) {
if (
("string" == typeof e &&
(e = (function (e) {
e = unescape(encodeURIComponent(e));
const t = [];
for (let n = 0; n < e.length; ++n)
t.push(e.charCodeAt(n));
return t;
})(e)),
"string" == typeof o && (o = (0, i.default)(o)),
16 !== o.length)
)
throw TypeError(
"Namespace must be array-like (16 iterable integer values, 0-255)"
);
let c = new Uint8Array(16 + e.length);
if (
(c.set(o),
c.set(e, o.length),
(c = n(c)),
(c[6] = (15 & c[6]) | t),
(c[8] = (63 & c[8]) | 128),
s)
) {
a = a || 0;
for (let e = 0; e < 16; ++e) s[a + e] = c[e];
return s;
}
return (0, r.default)(c);
}
try {
o.name = e;
} catch (e) {}
return (o.DNS = s), (o.URL = a), o;
}),
(n.URL = n.DNS = void 0);
var r = o(e("./stringify.js")),
i = o(e("./parse.js"));
function o(e) {
return e && e.__esModule ? e : { default: e };
}
const s = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
n.DNS = s;
const a = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
n.URL = a;
},
{ "./parse.js": 7, "./stringify.js": 11 },
],
15: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = o(e("./rng.js")),
i = o(e("./stringify.js"));
function o(e) {
return e && e.__esModule ? e : { default: e };
}
var s = function (e, t, n) {
const o = (e = e || {}).random || (e.rng || r.default)();
if (((o[6] = (15 & o[6]) | 64), (o[8] = (63 & o[8]) | 128), t)) {
n = n || 0;
for (let e = 0; e < 16; ++e) t[n + e] = o[e];
return t;
}
return (0, i.default)(o);
};
n.default = s;
},
{ "./rng.js": 9, "./stringify.js": 11 },
],
16: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = o(e("./v35.js")),
i = o(e("./sha1.js"));
function o(e) {
return e && e.__esModule ? e : { default: e };
}
var s = (0, r.default)("v5", 80, i.default);
n.default = s;
},
{ "./sha1.js": 10, "./v35.js": 14 },
],
17: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
i = (r = e("./regex.js")) && r.__esModule ? r : { default: r };
var o = function (e) {
return "string" == typeof e && i.default.test(e);
};
n.default = o;
},
{ "./regex.js": 8 },
],
18: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
i = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
var o = function (e) {
if (!(0, i.default)(e)) throw TypeError("Invalid UUID");
return parseInt(e.substr(14, 1), 16);
};
n.default = o;
},
{ "./validate.js": 17 },
],
19: [
function (e, t, n) {
"use strict";
function r(e, t, n) {
var r = n[n.length - 1];
e === r.element && (n.pop(), (r = n[n.length - 1]));
var i = r.element,
o = r.index;
if (Array.isArray(i)) i.push(e);
else if (o === t.length - 2) {
i[t.pop()] = e;
} else t.push(e);
}
(n.stringify = function (e) {
var t = [];
t.push({ obj: e });
for (var n, r, i, o, s, a, c, u, f, l, d = ""; (n = t.pop()); )
if (((r = n.obj), (d += n.prefix || ""), (i = n.val || "")))
d += i;
else if ("object" != typeof r)
d += void 0 === r ? null : JSON.stringify(r);
else if (null === r) d += "null";
else if (Array.isArray(r)) {
for (t.push({ val: "]" }), o = r.length - 1; o >= 0; o--)
(s = 0 === o ? "" : ","), t.push({ obj: r[o], prefix: s });
t.push({ val: "[" });
} else {
for (c in ((a = []), r)) r.hasOwnProperty(c) && a.push(c);
for (t.push({ val: "}" }), o = a.length - 1; o >= 0; o--)
(f = r[(u = a[o])]),
(l = o > 0 ? "," : ""),
(l += JSON.stringify(u) + ":"),
t.push({ obj: f, prefix: l });
t.push({ val: "{" });
}
return d;
}),
(n.parse = function (e) {
for (var t, n, i, o, s, a, c, u, f, l = [], d = [], h = 0; ; )
if ("}" !== (t = e[h++]) && "]" !== t && void 0 !== t)
switch (t) {
case " ":
case "\t":
case "\n":
case ":":
case ",":
break;
case "n":
(h += 3), r(null, l, d);
break;
case "t":
(h += 3), r(!0, l, d);
break;
case "f":
(h += 4), r(!1, l, d);
break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case "-":
for (n = "", h--; ; ) {
if (((i = e[h++]), !/[\d\.\-e\+]/.test(i))) {
h--;
break;
}
n += i;
}
r(parseFloat(n), l, d);
break;
case '"':
for (
o = "", s = void 0, a = 0;
'"' !== (c = e[h++]) || ("\\" === s && a % 2 == 1);
)
(o += c), "\\" === (s = c) ? a++ : (a = 0);
r(JSON.parse('"' + o + '"'), l, d);
break;
case "[":
(u = { element: [], index: l.length }),
l.push(u.element),
d.push(u);
break;
case "{":
(f = { element: {}, index: l.length }),
l.push(f.element),
d.push(f);
break;
default:
throw new Error(
"unexpectedly reached end of input: " + t
);
}
else {
if (1 === l.length) return l.pop();
r(l.pop(), l, d);
}
});
},
{},
],
20: [
function (e, t, n) {
(function (n) {
(function () {
"use strict";
function r(e) {
return e && "object" == typeof e && "default" in e
? e.default
: e;
}
var i = r(e("spark-md5")),
o = e("uuid"),
s = r(e("vuvuzela")),
a = r(e("events"));
var c = Function.prototype.toString,
u = c.call(Object);
function f(e) {
var t, n, r;
if (!e || "object" != typeof e) return e;
if (Array.isArray(e)) {
for (t = [], n = 0, r = e.length; n < r; n++) t[n] = f(e[n]);
return t;
}
if (e instanceof Date && isFinite(e)) return e.toISOString();
if (
(function (e) {
return (
("undefined" != typeof ArrayBuffer &&
e instanceof ArrayBuffer) ||
("undefined" != typeof Blob && e instanceof Blob)
);
})(e)
)
return (function (e) {
return e instanceof ArrayBuffer
? e.slice(0)
: e.slice(0, e.size, e.type);
})(e);
if (
!(function (e) {
var t = Object.getPrototypeOf(e);
if (null === t) return !0;
var n = t.constructor;
return (
"function" == typeof n && n instanceof n && c.call(n) == u
);
})(e)
)
return e;
for (n in ((t = {}), e))
if (Object.prototype.hasOwnProperty.call(e, n)) {
var i = f(e[n]);
void 0 !== i && (t[n] = i);
}
return t;
}
function l(e) {
var t = !1;
return function (...n) {
if (t) throw new Error("once called more than once");
(t = !0), e.apply(this, n);
};
}
function d(e) {
return function (...t) {
t = f(t);
var n = this,
r = "function" == typeof t[t.length - 1] && t.pop(),
i = new Promise(function (r, i) {
var o;
try {
var s = l(function (e, t) {
e ? i(e) : r(t);
});
t.push(s),
(o = e.apply(n, t)) &&
"function" == typeof o.then &&
r(o);
} catch (e) {
i(e);
}
});
return (
r &&
i.then(function (e) {
r(null, e);
}, r),
i
);
};
}
function h(e, t) {
return d(function (...n) {
if (this._closed)
return Promise.reject(new Error("database is closed"));
if (this._destroyed)
return Promise.reject(new Error("database is destroyed"));
var r = this;
return (
(function (e, t, n) {
if (e.constructor.listeners("debug").length) {
for (
var r = ["api", e.name, t], i = 0;
i < n.length - 1;
i++
)
r.push(n[i]);
e.constructor.emit("debug", r);
var o = n[n.length - 1];
n[n.length - 1] = function (n, r) {
var i = ["api", e.name, t];
(i = i.concat(n ? ["error", n] : ["success", r])),
e.constructor.emit("debug", i),
o(n, r);
};
}
})(r, e, n),
this.taskqueue.isReady
? t.apply(this, n)
: new Promise(function (t, i) {
r.taskqueue.addTask(function (o) {
o ? i(o) : t(r[e].apply(r, n));
});
})
);
});
}
function p(e, t) {
for (var n = {}, r = 0, i = t.length; r < i; r++) {
var o = t[r];
o in e && (n[o] = e[o]);
}
return n;
}
var v;
function _(e) {
return e;
}
function y(e) {
return [{ ok: e }];
}
function g(e, t, n) {
var r = t.docs,
i = new Map();
r.forEach(function (e) {
i.has(e.id) ? i.get(e.id).push(e) : i.set(e.id, [e]);
});
var o = i.size,
s = 0,
a = new Array(o);
function c() {
var e;
++s === o &&
((e = []),
a.forEach(function (t) {
t.docs.forEach(function (n) {
e.push({ id: t.id, docs: [n] });
});
}),
n(null, { results: e }));
}
var u = [];
i.forEach(function (e, t) {
u.push(t);
});
var f = 0;
function l() {
if (!(f >= u.length)) {
var n = Math.min(f + 6, u.length),
r = u.slice(f, n);
!(function (n, r) {
n.forEach(function (n, o) {
var s = r + o,
u = i.get(n),
f = p(u[0], ["atts_since", "attachments"]);
(f.open_revs = u.map(function (e) {
return e.rev;
})),
(f.open_revs = f.open_revs.filter(_));
var d = _;
0 === f.open_revs.length &&
(delete f.open_revs, (d = y)),
[
"revs",
"attachments",
"binary",
"ajax",
"latest",
].forEach(function (e) {
e in t && (f[e] = t[e]);
}),
e.get(n, f, function (e, t) {
var r, i, o;
(r = e ? [{ error: e }] : d(t)),
(i = n),
(o = r),
(a[s] = { id: i, docs: o }),
c(),
l();
});
});
})(r, f),
(f += r.length);
}
}
l();
}
try {
localStorage.setItem("_pouch_check_localstorage", 1),
(v = !!localStorage.getItem("_pouch_check_localstorage"));
} catch (e) {
v = !1;
}
function m() {
return v;
}
const b =
"function" == typeof queueMicrotask
? queueMicrotask
: function (e) {
Promise.resolve().then(e);
};
function w(e) {
if (
"undefined" != typeof console &&
"function" == typeof console[e]
) {
var t = Array.prototype.slice.call(arguments, 1);
console[e].apply(console, t);
}
}
function k(e) {
var t = 0;
return (
e || (t = 2e3),
(function (e, t) {
return (
(e = parseInt(e, 10) || 0),
(t = parseInt(t, 10)) != t || t <= e
? (t = (e || 1) << 1)
: (t += 1),
t > 6e5 && ((e = 3e5), (t = 6e5)),
~~((t - e) * Math.random() + e)
);
})(e, t)
);
}
function j(e, t) {
w("info", "The above " + e + " is totally normal. " + t);
}
class q extends Error {
constructor(e, t, n) {
super(),
(this.status = e),
(this.name = t),
(this.message = n),
(this.error = !0);
}
toString() {
return JSON.stringify({
status: this.status,
name: this.name,
message: this.message,
reason: this.reason,
});
}
}
new q(401, "unauthorized", "Name or password is incorrect.");
var O = new q(400, "bad_request", "Missing JSON list of 'docs'"),
A = new q(404, "not_found", "missing"),
S = new q(409, "conflict", "Document update conflict"),
x = new q(
400,
"bad_request",
"_id field must contain a string"
),
P = new q(412, "missing_id", "_id is required for puts"),
C = new q(
400,
"bad_request",
"Only reserved document ids may start with underscore."
),
E =
(new q(412, "precondition_failed", "Database not open"),
new q(
500,
"unknown_error",
"Database encountered an unknown error"
)),
$ = new q(500, "badarg", "Some query argument is invalid"),
I =
(new q(400, "invalid_request", "Request was invalid"),
new q(
400,
"query_parse_error",
"Some query parameter is invalid"
)),
L = new q(500, "doc_validation", "Bad special document member"),
D = new q(
400,
"bad_request",
"Something wrong with the request"
),
T = new q(400, "bad_request", "Document must be a JSON object"),
B =
(new q(404, "not_found", "Database not found"),
new q(500, "indexed_db_went_bad", "unknown")),
M =
(new q(500, "web_sql_went_bad", "unknown"),
new q(500, "levelDB_went_went_bad", "unknown"),
new q(
403,
"forbidden",
"Forbidden by design doc validate_doc_update function"
),
new q(400, "bad_request", "Invalid rev format")),
R =
(new q(
412,
"file_exists",
"The database could not be created, the file already exists."
),
new q(
412,
"missing_stub",
"A pre-existing attachment stub wasn't found"
));
new q(413, "invalid_url", "Provided URL is invalid");
function N(e, t) {
function n(t) {
for (
var n = Object.getOwnPropertyNames(e), r = 0, i = n.length;
r < i;
r++
)
"function" != typeof e[n[r]] && (this[n[r]] = e[n[r]]);
void 0 === this.stack && (this.stack = new Error().stack),
void 0 !== t && (this.reason = t);
}
return (n.prototype = q.prototype), new n(t);
}
function U(e) {
if ("object" != typeof e) {
var t = e;
(e = E).data = t;
}
return (
"error" in e &&
"conflict" === e.error &&
((e.name = "conflict"), (e.status = 409)),
"name" in e || (e.name = e.error || "unknown"),
"status" in e || (e.status = 500),
"message" in e || (e.message = e.message || e.reason),
"stack" in e || (e.stack = new Error().stack),
e
);
}
function F(e) {
var t = {},
n = e.filter && "function" == typeof e.filter;
return (
(t.query = e.query_params),
function (r) {
r.doc || (r.doc = {});
var i =
n &&
(function (e, t, n) {
try {
return !e(t, n);
} catch (e) {
var r = "Filter function threw: " + e.toString();
return N(D, r);
}
})(e.filter, r.doc, t);
if ("object" == typeof i) return i;
if (i) return !1;
if (e.include_docs) {
if (!e.attachments)
for (var o in r.doc._attachments)
Object.prototype.hasOwnProperty.call(
r.doc._attachments,
o
) && (r.doc._attachments[o].stub = !0);
} else delete r.doc;
return !0;
}
);
}
function K(e) {
var t;
if (
(e
? "string" != typeof e
? (t = N(x))
: /^_/.test(e) &&
!/^_(design|local)/.test(e) &&
(t = N(C))
: (t = N(P)),
t)
)
throw t;
}
function J(e) {
return "boolean" == typeof e._remote
? e._remote
: "function" == typeof e.type &&
(w(
"warn",
"db.type() is deprecated and will be removed in a future version of PouchDB"
),
"http" === e.type());
}
function z(e) {
if (!e) return null;
var t = e.split("/");
return 2 === t.length ? t : 1 === t.length ? [e, e] : null;
}
function V(e) {
var t = z(e);
return t ? t.join("/") : null;
}
var G = [
"source",
"protocol",
"authority",
"userInfo",
"user",
"password",
"host",
"port",
"relative",
"path",
"directory",
"file",
"query",
"anchor",
],
Q = /(?:^|&)([^&=]*)=?([^&]*)/g,
W =
/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
function Y(e) {
for (var t = W.exec(e), n = {}, r = 14; r--; ) {
var i = G[r],
o = t[r] || "",
s = -1 !== ["user", "password"].indexOf(i);
n[i] = s ? decodeURIComponent(o) : o;
}
return (
(n.queryKey = {}),
n[G[12]].replace(Q, function (e, t, r) {
t && (n.queryKey[t] = r);
}),
n
);
}
function H(e, t) {
var n = [],
r = [];
for (var i in t)
Object.prototype.hasOwnProperty.call(t, i) &&
(n.push(i), r.push(t[i]));
return n.push(e), Function.apply(null, n).apply(null, r);
}
function X(e, t, n) {
return e
.get(t)
.catch(function (e) {
if (404 !== e.status) throw e;
return {};
})
.then(function (r) {
var i = r._rev,
o = n(r);
return o
? ((o._id = t),
(o._rev = i),
(function (e, t, n) {
return e.put(t).then(
function (e) {
return { updated: !0, rev: e.rev };
},
function (r) {
if (409 !== r.status) throw r;
return X(e, t._id, n);
}
);
})(e, o, n))
: { updated: !1, rev: i };
});
}
var Z = function (e) {
return atob(e);
},
ee = function (e) {
return btoa(e);
};
function te(e, t) {
(e = e || []), (t = t || {});
try {
return new Blob(e, t);
} catch (i) {
if ("TypeError" !== i.name) throw i;
for (
var n = new (
"undefined" != typeof BlobBuilder
? BlobBuilder
: "undefined" != typeof MSBlobBuilder
? MSBlobBuilder
: "undefined" != typeof MozBlobBuilder
? MozBlobBuilder
: WebKitBlobBuilder
)(),
r = 0;
r < e.length;
r += 1
)
n.append(e[r]);
return n.getBlob(t.type);
}
}
function ne(e) {
for (
var t = e.length,
n = new ArrayBuffer(t),
r = new Uint8Array(n),
i = 0;
i < t;
i++
)
r[i] = e.charCodeAt(i);
return n;
}
function re(e, t) {
return te([ne(e)], { type: t });
}
function ie(e, t) {
return re(Z(e), t);
}
function oe(e, t) {
var n = new FileReader(),
r = "function" == typeof n.readAsBinaryString;
(n.onloadend = function (e) {
var n = e.target.result || "";
if (r) return t(n);
t(
(function (e) {
for (
var t = "",
n = new Uint8Array(e),
r = n.byteLength,
i = 0;
i < r;
i++
)
t += String.fromCharCode(n[i]);
return t;
})(n)
);
}),
r ? n.readAsBinaryString(e) : n.readAsArrayBuffer(e);
}
function se(e, t) {
oe(e, function (e) {
t(e);
});
}
function ae(e, t) {
se(e, function (e) {
t(ee(e));
});
}
var ce = self.setImmediate || self.setTimeout;
function ue(e, t, n, r, i) {
(n > 0 || r < t.size) && (t = t.slice(n, r)),
(function (e, t) {
var n = new FileReader();
(n.onloadend = function (e) {
var n = e.target.result || new ArrayBuffer(0);
t(n);
}),
n.readAsArrayBuffer(e);
})(t, function (t) {
e.append(t), i();
});
}
function fe(e, t, n, r, i) {
(n > 0 || r < t.length) && (t = t.substring(n, r)),
e.appendBinary(t),
i();
}
function le(e, t) {
var n = "string" == typeof e,
r = n ? e.length : e.size,
o = Math.min(32768, r),
s = Math.ceil(r / o),
a = 0,
c = n ? new i() : new i.ArrayBuffer(),
u = n ? fe : ue;
function f() {
ce(d);
}
function l() {
var e = (function (e) {
return ee(e);
})(c.end(!0));
t(e), c.destroy();
}
function d() {
var t = a * o,
n = t + o;
a++, u(c, e, t, n, a < s ? f : l);
}
d();
}
function de(e) {
return i.hash(e);
}
function he(e, t) {
if (!t) return o.v4().replace(/-/g, "").toLowerCase();
var n = Object.assign({}, e);
return delete n._rev_tree, de(JSON.stringify(n));
}
var pe = o.v4;
function ve(e) {
for (var t, n, r, i, o = e.rev_tree.slice(); (i = o.pop()); ) {
var s = i.ids,
a = s[2],
c = i.pos;
if (a.length)
for (var u = 0, f = a.length; u < f; u++)
o.push({ pos: c + 1, ids: a[u] });
else {
var l = !!s[1].deleted,
d = s[0];
(t && !(r !== l ? r : n !== c ? n < c : t < d)) ||
((t = d), (n = c), (r = l));
}
}
return n + "-" + t;
}
function _e(e, t) {
for (var n, r = e.slice(); (n = r.pop()); )
for (
var i = n.pos,
o = n.ids,
s = o[2],
a = t(0 === s.length, i, o[0], n.ctx, o[1]),
c = 0,
u = s.length;
c < u;
c++
)
r.push({ pos: i + 1, ids: s[c], ctx: a });
}
function ye(e, t) {
return e.pos - t.pos;
}
function ge(e) {
var t = [];
_e(e, function (e, n, r, i, o) {
e && t.push({ rev: n + "-" + r, pos: n, opts: o });
}),
t.sort(ye).reverse();
for (var n = 0, r = t.length; n < r; n++) delete t[n].pos;
return t;
}
function me(e) {
for (
var t = ve(e),
n = ge(e.rev_tree),
r = [],
i = 0,
o = n.length;
i < o;
i++
) {
var s = n[i];
s.rev === t || s.opts.deleted || r.push(s.rev);
}
return r;
}
function be(e) {
for (var t, n = [], r = e.slice(); (t = r.pop()); ) {
var i = t.pos,
o = t.ids,
s = o[0],
a = o[1],
c = o[2],
u = 0 === c.length,
f = t.history ? t.history.slice() : [];
f.push({ id: s, opts: a }),
u && n.push({ pos: i + 1 - f.length, ids: f });
for (var l = 0, d = c.length; l < d; l++)
r.push({ pos: i + 1, ids: c[l], history: f });
}
return n.reverse();
}
function we(e, t) {
return e.pos - t.pos;
}
function ke(e, t, n) {
var r = (function (e, t, n) {
for (var r, i = 0, o = e.length; i < o; )
n(e[(r = (i + o) >>> 1)], t) < 0 ? (i = r + 1) : (o = r);
return i;
})(e, t, n);
e.splice(r, 0, t);
}
function je(e, t) {
for (var n, r, i = t, o = e.length; i < o; i++) {
var s = e[i],
a = [s.id, s.opts, []];
r ? (r[2].push(a), (r = a)) : (n = r = a);
}
return n;
}
function qe(e, t) {
return e[0] < t[0] ? -1 : 1;
}
function Oe(e, t) {
for (var n = [{ tree1: e, tree2: t }], r = !1; n.length > 0; ) {
var i = n.pop(),
o = i.tree1,
s = i.tree2;
(o[1].status || s[1].status) &&
(o[1].status =
"available" === o[1].status || "available" === s[1].status
? "available"
: "missing");
for (var a = 0; a < s[2].length; a++)
if (o[2][0]) {
for (var c = !1, u = 0; u < o[2].length; u++)
o[2][u][0] === s[2][a][0] &&
(n.push({ tree1: o[2][u], tree2: s[2][a] }),
(c = !0));
c || ((r = "new_branch"), ke(o[2], s[2][a], qe));
} else (r = "new_leaf"), (o[2][0] = s[2][a]);
}
return { conflicts: r, tree: e };
}
function Ae(e, t, n) {
var r,
i = [],
o = !1,
s = !1;
if (!e.length) return { tree: [t], conflicts: "new_leaf" };
for (var a = 0, c = e.length; a < c; a++) {
var u = e[a];
if (u.pos === t.pos && u.ids[0] === t.ids[0])
(r = Oe(u.ids, t.ids)),
i.push({ pos: u.pos, ids: r.tree }),
(o = o || r.conflicts),
(s = !0);
else if (!0 !== n) {
var f = u.pos < t.pos ? u : t,
l = u.pos < t.pos ? t : u,
d = l.pos - f.pos,
h = [],
p = [];
for (
p.push({
ids: f.ids,
diff: d,
parent: null,
parentIdx: null,
});
p.length > 0;
) {
var v = p.pop();
if (0 !== v.diff)
for (var _ = v.ids[2], y = 0, g = _.length; y < g; y++)
p.push({
ids: _[y],
diff: v.diff - 1,
parent: v.ids,
parentIdx: y,
});
else v.ids[0] === l.ids[0] && h.push(v);
}
var m = h[0];
m
? ((r = Oe(m.ids, l.ids)),
(m.parent[2][m.parentIdx] = r.tree),
i.push({ pos: f.pos, ids: f.ids }),
(o = o || r.conflicts),
(s = !0))
: i.push(u);
} else i.push(u);
}
return (
s || i.push(t),
i.sort(we),
{ tree: i, conflicts: o || "internal_node" }
);
}
function Se(e, t, n) {
var r = Ae(e, t),
i = (function (e, t) {
for (var n, r, i = be(e), o = 0, s = i.length; o < s; o++) {
var a,
c = i[o],
u = c.ids;
if (u.length > t) {
n || (n = {});
var f = u.length - t;
a = { pos: c.pos + f, ids: je(u, f) };
for (var l = 0; l < f; l++) {
var d = c.pos + l + "-" + u[l].id;
n[d] = !0;
}
} else a = { pos: c.pos, ids: je(u, 0) };
r = r ? Ae(r, a, !0).tree : [a];
}
return (
n &&
_e(r, function (e, t, r) {
delete n[t + "-" + r];
}),
{ tree: r, revs: n ? Object.keys(n) : [] }
);
})(r.tree, n);
return {
tree: i.tree,
stemmedRevs: i.revs,
conflicts: r.conflicts,
};
}
function xe(e) {
return e.ids;
}
function Pe(e, t) {
t || (t = ve(e));
for (
var n,
r = t.substring(t.indexOf("-") + 1),
i = e.rev_tree.map(xe);
(n = i.pop());
) {
if (n[0] === r) return !!n[1].deleted;
i = i.concat(n[2]);
}
}
function Ce(e) {
return "string" == typeof e && e.startsWith("_local/");
}
function Ee(e, t, n) {
var r = [{ rev: e._rev }];
"all_docs" === n.style &&
(r = ge(t.rev_tree).map(function (e) {
return { rev: e.rev };
}));
var i = { id: t.id, changes: r, doc: e };
return (
Pe(t, e._rev) && (i.deleted = !0),
n.conflicts &&
((i.doc._conflicts = me(t)),
i.doc._conflicts.length || delete i.doc._conflicts),
i
);
}
class $e extends a {
constructor(e, t, n) {
super(), (this.db = e);
var r = ((t = t ? f(t) : {}).complete = l((t, n) => {
var r, o;
t
? ((o = "error"),
("listenerCount" in (r = this)
? r.listenerCount(o)
: a.listenerCount(r, o)) > 0 && this.emit("error", t))
: this.emit("complete", n),
this.removeAllListeners(),
e.removeListener("destroyed", i);
}));
n &&
(this.on("complete", function (e) {
n(null, e);
}),
this.on("error", n));
const i = () => {
this.cancel();
};
e.once("destroyed", i),
(t.onChange = (e, t, n) => {
this.isCancelled ||
(function (e, t, n, r) {
try {
e.emit("change", t, n, r);
} catch (e) {
w("error", 'Error in .on("change", function):', e);
}
})(this, e, t, n);
});
var o = new Promise(function (e, n) {
t.complete = function (t, r) {
t ? n(t) : e(r);
};
});
this.once("cancel", function () {
e.removeListener("destroyed", i),
t.complete(null, { status: "cancelled" });
}),
(this.then = o.then.bind(o)),
(this.catch = o.catch.bind(o)),
this.then(function (e) {
r(null, e);
}, r),
e.taskqueue.isReady
? this.validateChanges(t)
: e.taskqueue.addTask((e) => {
e
? t.complete(e)
: this.isCancelled
? this.emit("cancel")
: this.validateChanges(t);
});
}
cancel() {
(this.isCancelled = !0),
this.db.taskqueue.isReady && this.emit("cancel");
}
validateChanges(e) {
var t = e.complete;
Ke._changesFilterPlugin
? Ke._changesFilterPlugin.validate(e, (n) => {
if (n) return t(n);
this.doChanges(e);
})
: this.doChanges(e);
}
doChanges(e) {
var t = e.complete;
if (
("live" in (e = f(e)) &&
!("continuous" in e) &&
(e.continuous = e.live),
(e.processChange = Ee),
"latest" === e.since && (e.since = "now"),
e.since || (e.since = 0),
"now" !== e.since)
) {
if (Ke._changesFilterPlugin) {
if (
(Ke._changesFilterPlugin.normalize(e),
Ke._changesFilterPlugin.shouldFilter(this, e))
)
return Ke._changesFilterPlugin.filter(this, e);
} else
["doc_ids", "filter", "selector", "view"].forEach(
function (t) {
t in e &&
w(
"warn",
'The "' +
t +
'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.'
);
}
);
"descending" in e || (e.descending = !1),
(e.limit = 0 === e.limit ? 1 : e.limit),
(e.complete = t);
var n = this.db._changes(e);
if (n && "function" == typeof n.cancel) {
const e = this.cancel;
this.cancel = (...t) => {
n.cancel(), e.apply(this, t);
};
}
} else
this.db.info().then((n) => {
this.isCancelled
? t(null, { status: "cancelled" })
: ((e.since = n.update_seq), this.doChanges(e));
}, t);
}
}
function Ie(e, t) {
return function (n, r) {
n || (r[0] && r[0].error)
? (((n = n || r[0]).docId = t), e(n))
: e(null, r.length ? r[0] : r);
};
}
function Le(e, t) {
if (e._id === t._id) {
return (
(e._revisions ? e._revisions.start : 0) -
(t._revisions ? t._revisions.start : 0)
);
}
return e._id < t._id ? -1 : 1;
}
function De(e, t, n) {
return e
.get("_local/purges")
.then(function (e) {
const r = e.purgeSeq + 1;
return (
e.purges.push({ docId: t, rev: n, purgeSeq: r }),
e.purges.length > self.purged_infos_limit &&
e.purges.splice(
0,
e.purges.length - self.purged_infos_limit
),
(e.purgeSeq = r),
e
);
})
.catch(function (e) {
if (404 !== e.status) throw e;
return {
_id: "_local/purges",
purges: [{ docId: t, rev: n, purgeSeq: 0 }],
purgeSeq: 0,
};
})
.then(function (t) {
return e.put(t);
});
}
function Te(e) {
return null === e || "object" != typeof e || Array.isArray(e);
}
const Be = /^\d+-[^-]*$/;
function Me(e) {
return "string" == typeof e && Be.test(e);
}
class Re extends a {
_setup() {
(this.post = h("post", function (e, t, n) {
if (("function" == typeof t && ((n = t), (t = {})), Te(e)))
return n(N(T));
this.bulkDocs({ docs: [e] }, t, Ie(n, e._id));
}).bind(this)),
(this.put = h("put", function (e, t, n) {
if (
("function" == typeof t && ((n = t), (t = {})), Te(e))
)
return n(N(T));
if ((K(e._id), "_rev" in e && !Me(e._rev)))
return n(N(M));
if (Ce(e._id) && "function" == typeof this._putLocal)
return e._deleted
? this._removeLocal(e, n)
: this._putLocal(e, n);
const r = (n) => {
"function" == typeof this._put && !1 !== t.new_edits
? this._put(e, t, n)
: this.bulkDocs({ docs: [e] }, t, Ie(n, e._id));
};
var i, o, s, a;
t.force && e._rev
? ((i = e._rev.split("-")),
(o = i[1]),
(s = parseInt(i[0], 10) + 1),
(a = he()),
(e._revisions = { start: s, ids: [a, o] }),
(e._rev = s + "-" + a),
(t.new_edits = !1),
r(function (t) {
var r = t
? null
: { ok: !0, id: e._id, rev: e._rev };
n(t, r);
}))
: r(n);
}).bind(this)),
(this.putAttachment = h(
"putAttachment",
function (e, t, n, r, i) {
var o = this;
function s(e) {
var n = "_rev" in e ? parseInt(e._rev, 10) : 0;
return (
(e._attachments = e._attachments || {}),
(e._attachments[t] = {
content_type: i,
data: r,
revpos: ++n,
}),
o.put(e)
);
}
return (
"function" == typeof i &&
((i = r), (r = n), (n = null)),
void 0 === i && ((i = r), (r = n), (n = null)),
i ||
w(
"warn",
"Attachment",
t,
"on document",
e,
"is missing content_type"
),
o.get(e).then(
function (e) {
if (e._rev !== n) throw N(S);
return s(e);
},
function (t) {
if (t.reason === A.message) return s({ _id: e });
throw t;
}
)
);
}
).bind(this)),
(this.removeAttachment = h(
"removeAttachment",
function (e, t, n, r) {
this.get(e, (e, i) => {
if (e) r(e);
else if (i._rev === n) {
if (!i._attachments) return r();
delete i._attachments[t],
0 === Object.keys(i._attachments).length &&
delete i._attachments,
this.put(i, r);
} else r(N(S));
});
}
).bind(this)),
(this.remove = h("remove", function (e, t, n, r) {
var i;
"string" == typeof t
? ((i = { _id: e, _rev: t }),
"function" == typeof n && ((r = n), (n = {})))
: ((i = e),
"function" == typeof t
? ((r = t), (n = {}))
: ((r = n), (n = t))),
((n = n || {}).was_delete = !0);
var o = {
_id: i._id,
_rev: i._rev || n.rev,
_deleted: !0,
};
if (Ce(o._id) && "function" == typeof this._removeLocal)
return this._removeLocal(i, r);
this.bulkDocs({ docs: [o] }, n, Ie(r, o._id));
}).bind(this)),
(this.revsDiff = h("revsDiff", function (e, t, n) {
"function" == typeof t && ((n = t), (t = {}));
var r = Object.keys(e);
if (!r.length) return n(null, {});
var i = 0,
o = new Map();
function s(e, t) {
o.has(e) || o.set(e, { missing: [] }),
o.get(e).missing.push(t);
}
r.forEach(function (t) {
this._getRevisionTree(t, function (a, c) {
if (a && 404 === a.status && "missing" === a.message)
o.set(t, { missing: e[t] });
else {
if (a) return n(a);
!(function (t, n) {
var r = e[t].slice(0);
_e(n, function (e, n, i, o, a) {
var c = n + "-" + i,
u = r.indexOf(c);
-1 !== u &&
(r.splice(u, 1),
"available" !== a.status && s(t, c));
}),
r.forEach(function (e) {
s(t, e);
});
})(t, c);
}
if (++i === r.length) {
var u = {};
return (
o.forEach(function (e, t) {
u[t] = e;
}),
n(null, u)
);
}
});
}, this);
}).bind(this)),
(this.bulkGet = h("bulkGet", function (e, t) {
g(this, e, t);
}).bind(this)),
(this.compactDocument = h(
"compactDocument",
function (e, t, n) {
this._getRevisionTree(e, (r, i) => {
if (r) return n(r);
var o = (function (e) {
var t = {},
n = [];
return (
_e(e, function (e, r, i, o) {
var s = r + "-" + i;
return (
e && (t[s] = 0),
void 0 !== o && n.push({ from: o, to: s }),
s
);
}),
n.reverse(),
n.forEach(function (e) {
void 0 === t[e.from]
? (t[e.from] = 1 + t[e.to])
: (t[e.from] = Math.min(
t[e.from],
1 + t[e.to]
));
}),
t
);
})(i),
s = [],
a = [];
Object.keys(o).forEach(function (e) {
o[e] > t && s.push(e);
}),
_e(i, function (e, t, n, r, i) {
var o = t + "-" + n;
"available" === i.status &&
-1 !== s.indexOf(o) &&
a.push(o);
}),
this._doCompaction(e, a, n);
});
}
).bind(this)),
(this.compact = h("compact", function (e, t) {
"function" == typeof e && ((t = e), (e = {})),
(e = e || {}),
(this._compactionQueue = this._compactionQueue || []),
this._compactionQueue.push({ opts: e, callback: t }),
1 === this._compactionQueue.length &&
(function e(t) {
var n = t._compactionQueue[0],
r = n.opts,
i = n.callback;
t.get("_local/compaction")
.catch(function () {
return !1;
})
.then(function (n) {
n && n.last_seq && (r.last_seq = n.last_seq),
t._compact(r, function (n, r) {
n ? i(n) : i(null, r),
b(function () {
t._compactionQueue.shift(),
t._compactionQueue.length && e(t);
});
});
});
})(this);
}).bind(this)),
(this.get = h("get", function (e, t, n) {
if (
("function" == typeof t && ((n = t), (t = {})),
(t = t || {}),
"string" != typeof e)
)
return n(N(x));
if (Ce(e) && "function" == typeof this._getLocal)
return this._getLocal(e, n);
var r = [];
const i = () => {
var i = [],
o = r.length;
if (!o) return n(null, i);
r.forEach((r) => {
this.get(
e,
{
rev: r,
revs: t.revs,
latest: t.latest,
attachments: t.attachments,
binary: t.binary,
},
function (e, t) {
if (e) i.push({ missing: r });
else {
for (var s, a = 0, c = i.length; a < c; a++)
if (i[a].ok && i[a].ok._rev === t._rev) {
s = !0;
break;
}
s || i.push({ ok: t });
}
--o || n(null, i);
}
);
});
};
if (!t.open_revs)
return this._get(e, t, (r, i) => {
if (r) return (r.docId = e), n(r);
var o = i.doc,
s = i.metadata,
a = i.ctx;
if (t.conflicts) {
var c = me(s);
c.length && (o._conflicts = c);
}
if (
(Pe(s, o._rev) && (o._deleted = !0),
t.revs || t.revs_info)
) {
for (
var u = o._rev.split("-"),
f = parseInt(u[0], 10),
l = u[1],
d = be(s.rev_tree),
h = null,
p = 0;
p < d.length;
p++
) {
var v = d[p];
const e = v.ids.findIndex((e) => e.id === l);
(e === f - 1 || (!h && -1 !== e)) && (h = v);
}
if (!h)
return (
((r = new Error("invalid rev tree")).docId = e),
n(r)
);
const i = o._rev.split("-")[1],
a = h.ids.findIndex((e) => e.id === i) + 1;
var _ = h.ids.length - a;
if (
(h.ids.splice(a, _),
h.ids.reverse(),
t.revs &&
(o._revisions = {
start: h.pos + h.ids.length - 1,
ids: h.ids.map(function (e) {
return e.id;
}),
}),
t.revs_info)
) {
var y = h.pos + h.ids.length;
o._revs_info = h.ids.map(function (e) {
return {
rev: --y + "-" + e.id,
status: e.opts.status,
};
});
}
}
if (t.attachments && o._attachments) {
var g = o._attachments,
m = Object.keys(g).length;
if (0 === m) return n(null, o);
Object.keys(g).forEach((e) => {
this._getAttachment(
o._id,
e,
g[e],
{ binary: t.binary, metadata: s, ctx: a },
function (t, r) {
var i = o._attachments[e];
(i.data = r),
delete i.stub,
delete i.length,
--m || n(null, o);
}
);
});
} else {
if (o._attachments)
for (var b in o._attachments)
Object.prototype.hasOwnProperty.call(
o._attachments,
b
) && (o._attachments[b].stub = !0);
n(null, o);
}
});
if ("all" === t.open_revs)
this._getRevisionTree(e, function (e, t) {
if (e) return n(e);
(r = ge(t).map(function (e) {
return e.rev;
})),
i();
});
else {
if (!Array.isArray(t.open_revs))
return n(N(E, "function_clause"));
r = t.open_revs;
for (var o = 0; o < r.length; o++) {
if (!Me(r[o])) return n(N(M));
}
i();
}
}).bind(this)),
(this.getAttachment = h(
"getAttachment",
function (e, t, n, r) {
n instanceof Function && ((r = n), (n = {})),
this._get(e, n, (i, o) =>
i
? r(i)
: o.doc._attachments && o.doc._attachments[t]
? ((n.ctx = o.ctx),
(n.binary = !0),
(n.metadata = o.metadata),
void this._getAttachment(
e,
t,
o.doc._attachments[t],
n,
r
))
: r(N(A))
);
}
).bind(this)),
(this.allDocs = h("allDocs", function (e, t) {
if (
("function" == typeof e && ((t = e), (e = {})),
(e.skip = void 0 !== e.skip ? e.skip : 0),
e.start_key && (e.startkey = e.start_key),
e.end_key && (e.endkey = e.end_key),
"keys" in e)
) {
if (!Array.isArray(e.keys))
return t(
new TypeError("options.keys must be an array")
);
var n = ["startkey", "endkey", "key"].filter(function (
t
) {
return t in e;
})[0];
if (n)
return void t(
N(
I,
"Query parameter `" +
n +
"` is not compatible with multi-get"
)
);
if (
!J(this) &&
((function (e) {
var t =
"limit" in e
? e.keys.slice(e.skip, e.limit + e.skip)
: e.skip > 0
? e.keys.slice(e.skip)
: e.keys;
(e.keys = t),
(e.skip = 0),
delete e.limit,
e.descending &&
(t.reverse(), (e.descending = !1));
})(e),
0 === e.keys.length)
)
return this._allDocs({ limit: 0 }, t);
}
return this._allDocs(e, t);
}).bind(this)),
(this.close = h("close", function (e) {
return (
(this._closed = !0), this.emit("closed"), this._close(e)
);
}).bind(this)),
(this.info = h("info", function (e) {
this._info((t, n) => {
if (t) return e(t);
(n.db_name = n.db_name || this.name),
(n.auto_compaction = !(
!this.auto_compaction || J(this)
)),
(n.adapter = this.adapter),
e(null, n);
});
}).bind(this)),
(this.id = h("id", function (e) {
return this._id(e);
}).bind(this)),
(this.bulkDocs = h("bulkDocs", function (e, t, n) {
if (
("function" == typeof t && ((n = t), (t = {})),
(t = t || {}),
Array.isArray(e) && (e = { docs: e }),
!e || !e.docs || !Array.isArray(e.docs))
)
return n(N(O));
for (var r = 0; r < e.docs.length; ++r) {
const t = e.docs[r];
if (Te(t)) return n(N(T));
if ("_rev" in t && !Me(t._rev)) return n(N(M));
}
var i;
if (
(e.docs.forEach(function (e) {
e._attachments &&
Object.keys(e._attachments).forEach(function (t) {
(i =
i ||
(function (e) {
return (
"_" === e.charAt(0) &&
e +
" is not a valid attachment name, attachment names cannot start with '_'"
);
})(t)),
e._attachments[t].content_type ||
w(
"warn",
"Attachment",
t,
"on document",
e._id,
"is missing content_type"
);
});
}),
i)
)
return n(N(D, i));
"new_edits" in t ||
(t.new_edits = !("new_edits" in e) || e.new_edits);
var o = this;
t.new_edits || J(o) || e.docs.sort(Le),
(function (e) {
for (var t = 0; t < e.length; t++) {
var n = e[t];
if (n._deleted) delete n._attachments;
else if (n._attachments)
for (
var r = Object.keys(n._attachments), i = 0;
i < r.length;
i++
) {
var o = r[i];
n._attachments[o] = p(n._attachments[o], [
"data",
"digest",
"content_type",
"length",
"revpos",
"stub",
]);
}
}
})(e.docs);
var s = e.docs.map(function (e) {
return e._id;
});
this._bulkDocs(e, t, function (e, r) {
if (e) return n(e);
if (
(t.new_edits ||
(r = r.filter(function (e) {
return e.error;
})),
!J(o))
)
for (var i = 0, a = r.length; i < a; i++)
r[i].id = r[i].id || s[i];
n(null, r);
});
}).bind(this)),
(this.registerDependentDatabase = h(
"registerDependentDatabase",
function (e, t) {
var n = f(this.__opts);
this.__opts.view_adapter &&
(n.adapter = this.__opts.view_adapter);
var r = new this.constructor(e, n);
X(this, "_local/_pouch_dependentDbs", function (t) {
return (
(t.dependentDbs = t.dependentDbs || {}),
!t.dependentDbs[e] && ((t.dependentDbs[e] = !0), t)
);
})
.then(function () {
t(null, { db: r });
})
.catch(t);
}
).bind(this)),
(this.destroy = h("destroy", function (e, t) {
"function" == typeof e && ((t = e), (e = {}));
var n = !("use_prefix" in this) || this.use_prefix;
const r = () => {
this._destroy(e, (e, n) => {
if (e) return t(e);
(this._destroyed = !0),
this.emit("destroyed"),
t(null, n || { ok: !0 });
});
};
if (J(this)) return r();
this.get("_local/_pouch_dependentDbs", (e, i) => {
if (e) return 404 !== e.status ? t(e) : r();
var o = i.dependentDbs,
s = this.constructor,
a = Object.keys(o).map((e) => {
var t = n
? e.replace(new RegExp("^" + s.prefix), "")
: e;
return new s(t, this.__opts).destroy();
});
Promise.all(a).then(r, t);
});
}).bind(this));
}
_compact(e, t) {
var n,
r = {
return_docs: !1,
last_seq: e.last_seq || 0,
since: e.last_seq || 0,
},
i = [],
o = 0;
const s = (e) => {
this.activeTasks.update(n, { completed_items: ++o }),
i.push(this.compactDocument(e.id, 0));
},
a = (e) => {
this.activeTasks.remove(n, e), t(e);
},
c = (e) => {
var r = e.last_seq;
Promise.all(i)
.then(() =>
X(
this,
"_local/compaction",
(e) =>
(!e.last_seq || e.last_seq < r) &&
((e.last_seq = r), e)
)
)
.then(() => {
this.activeTasks.remove(n), t(null, { ok: !0 });
})
.catch(a);
};
this.info().then((e) => {
(n = this.activeTasks.add({
name: "database_compaction",
total_items: e.update_seq - r.last_seq,
})),
this.changes(r)
.on("change", s)
.on("complete", c)
.on("error", a);
});
}
changes(e, t) {
return (
"function" == typeof e && ((t = e), (e = {})),
((e = e || {}).return_docs =
"return_docs" in e ? e.return_docs : !e.live),
new $e(this, e, t)
);
}
type() {
return "function" == typeof this._type
? this._type()
: this.adapter;
}
}
Re.prototype.purge = h("_purge", function (e, t, n) {
if (void 0 === this._purge)
return n(
N(
E,
"Purge is not implemented in the " +
this.adapter +
" adapter."
)
);
var r = this;
r._getRevisionTree(e, (i, o) => {
if (i) return n(i);
if (!o) return n(N(A));
let s;
try {
s = (function (e, t) {
let n = [];
const r = e.slice();
let i;
for (; (i = r.pop()); ) {
const { pos: e, ids: o } = i,
s = `${e}-${o[0]}`,
a = o[2];
if ((n.push(s), s === t)) {
if (0 !== a.length)
throw new Error(
"The requested revision is not a leaf"
);
return n.reverse();
}
(0 === a.length || a.length > 1) && (n = []);
for (let t = 0, n = a.length; t < n; t++)
r.push({ pos: e + 1, ids: a[t] });
}
if (0 === n.length)
throw new Error(
"The requested revision does not exist"
);
return n.reverse();
})(o, t);
} catch (i) {
return n(i.message || i);
}
r._purge(e, s, (i, o) => {
if (i) return n(i);
De(r, e, t).then(function () {
return n(null, o);
});
});
});
});
class Ne {
constructor() {
(this.isReady = !1), (this.failed = !1), (this.queue = []);
}
execute() {
var e;
if (this.failed)
for (; (e = this.queue.shift()); ) e(this.failed);
else for (; (e = this.queue.shift()); ) e();
}
fail(e) {
(this.failed = e), this.execute();
}
ready(e) {
(this.isReady = !0), (this.db = e), this.execute();
}
addTask(e) {
this.queue.push(e), this.failed && this.execute();
}
}
function Ue(e, t) {
let n = function (...e) {
if (!(this instanceof n)) return new n(...e);
t.apply(this, e);
};
var r, i;
return (
(i = e),
((r = n).prototype = Object.create(i.prototype, {
constructor: { value: r },
})),
n
);
}
class Fe extends Re {
constructor(e, t) {
super(), this._setup(e, t);
}
_setup(e, t) {
if (
(super._setup(),
(t = t || {}),
e &&
"object" == typeof e &&
((e = (t = e).name), delete t.name),
void 0 === t.deterministic_revs &&
(t.deterministic_revs = !0),
(this.__opts = t = f(t)),
(this.auto_compaction = t.auto_compaction),
(this.purged_infos_limit = t.purged_infos_limit || 1e3),
(this.prefix = Ke.prefix),
"string" != typeof e)
)
throw new Error("Missing/invalid DB name");
var n = (function (e, t) {
var n = e.match(/([a-z-]*):\/\/(.*)/);
if (n)
return {
name: /https?/.test(n[1]) ? n[1] + "://" + n[2] : n[2],
adapter: n[1],
};
var r = Ke.adapters,
i = Ke.preferredAdapters,
o = Ke.prefix,
s = t.adapter;
if (!s)
for (
var a = 0;
a < i.length &&
"idb" === (s = i[a]) &&
"websql" in r &&
m() &&
localStorage["_pouch__websqldb_" + o + e];
++a
)
w(
"log",
'PouchDB is downgrading "' +
e +
'" to WebSQL to avoid data loss, because it was already opened with WebSQL.'
);
var c = r[s];
return {
name:
!c || !("use_prefix" in c) || c.use_prefix ? o + e : e,
adapter: s,
};
})((t.prefix || "") + e, t);
if (
((t.name = n.name),
(t.adapter = t.adapter || n.adapter),
(this.name = e),
(this._adapter = t.adapter),
Ke.emit("debug", [
"adapter",
"Picked adapter: ",
t.adapter,
]),
!Ke.adapters[t.adapter] || !Ke.adapters[t.adapter].valid())
)
throw new Error("Invalid Adapter: " + t.adapter);
if (
t.view_adapter &&
(!Ke.adapters[t.view_adapter] ||
!Ke.adapters[t.view_adapter].valid())
)
throw new Error("Invalid View Adapter: " + t.view_adapter);
(this.taskqueue = new Ne()),
(this.adapter = t.adapter),
Ke.adapters[t.adapter].call(this, t, (e) => {
if (e) return this.taskqueue.fail(e);
!(function (e) {
function t(t) {
e.removeListener("closed", n),
t || e.constructor.emit("destroyed", e.name);
}
function n() {
e.removeListener("destroyed", t),
e.constructor.emit("unref", e);
}
e.once("destroyed", t),
e.once("closed", n),
e.constructor.emit("ref", e);
})(this),
this.emit("created", this),
Ke.emit("created", this.name),
this.taskqueue.ready(this);
});
}
}
const Ke = Ue(Fe, function (e, t) {
Fe.prototype._setup.call(this, e, t);
});
var Je = fetch,
ze = Headers;
(Ke.adapters = {}),
(Ke.preferredAdapters = []),
(Ke.prefix = "_pouch_");
var Ve = new a();
!(function (e) {
Object.keys(a.prototype).forEach(function (t) {
"function" == typeof a.prototype[t] &&
(e[t] = Ve[t].bind(Ve));
});
var t = (e._destructionListeners = new Map());
e.on("ref", function (e) {
t.has(e.name) || t.set(e.name, []), t.get(e.name).push(e);
}),
e.on("unref", function (e) {
if (t.has(e.name)) {
var n = t.get(e.name),
r = n.indexOf(e);
r < 0 ||
(n.splice(r, 1),
n.length > 1 ? t.set(e.name, n) : t.delete(e.name));
}
}),
e.on("destroyed", function (e) {
if (t.has(e)) {
var n = t.get(e);
t.delete(e),
n.forEach(function (e) {
e.emit("destroyed", !0);
});
}
});
})(Ke),
(Ke.adapter = function (e, t, n) {
t.valid() &&
((Ke.adapters[e] = t), n && Ke.preferredAdapters.push(e));
}),
(Ke.plugin = function (e) {
if ("function" == typeof e) e(Ke);
else {
if ("object" != typeof e || 0 === Object.keys(e).length)
throw new Error(
'Invalid plugin: got "' +
e +
'", expected an object or a function'
);
Object.keys(e).forEach(function (t) {
Ke.prototype[t] = e[t];
});
}
return (
this.__defaults &&
(Ke.__defaults = Object.assign({}, this.__defaults)),
Ke
);
}),
(Ke.defaults = function (e) {
let t = Ue(Ke, function (e, n) {
(n = n || {}),
e &&
"object" == typeof e &&
((e = (n = e).name), delete n.name),
(n = Object.assign({}, t.__defaults, n)),
Ke.call(this, e, n);
});
return (
(t.preferredAdapters = Ke.preferredAdapters.slice()),
Object.keys(Ke).forEach(function (e) {
e in t || (t[e] = Ke[e]);
}),
(t.__defaults = Object.assign({}, this.__defaults, e)),
t
);
}),
(Ke.fetch = function (e, t) {
return Je(e, t);
}),
(Ke.prototype.activeTasks = Ke.activeTasks =
new (class {
constructor() {
this.tasks = {};
}
list() {
return Object.values(this.tasks);
}
add(e) {
const t = o.v4();
return (
(this.tasks[t] = {
id: t,
name: e.name,
total_items: e.total_items,
created_at: new Date().toJSON(),
}),
t
);
}
get(e) {
return this.tasks[e];
}
remove(e, t) {
return delete this.tasks[e], this.tasks;
}
update(e, t) {
const n = this.tasks[e];
if (void 0 !== n) {
const r = {
id: n.id,
name: n.name,
created_at: n.created_at,
total_items: t.total_items || n.total_items,
completed_items:
t.completed_items || n.completed_items,
updated_at: new Date().toJSON(),
};
this.tasks[e] = r;
}
return this.tasks;
}
})());
function Ge(e, t) {
for (var n = e, r = 0, i = t.length; r < i; r++) {
if (!(n = n[t[r]])) break;
}
return n;
}
function Qe(e) {
for (var t = [], n = "", r = 0, i = e.length; r < i; r++) {
var o = e[r];
r > 0 && "\\" === e[r - 1] && ("$" === o || "." === o)
? (n = n.substring(0, n.length - 1) + o)
: "." === o
? (t.push(n), (n = ""))
: (n += o);
}
return t.push(n), t;
}
var We = ["$or", "$nor", "$not"];
function Ye(e) {
return We.indexOf(e) > -1;
}
function He(e) {
return Object.keys(e)[0];
}
function Xe(e) {
var t = {},
n = { $or: !0, $nor: !0 };
return (
e.forEach(function (e) {
Object.keys(e).forEach(function (r) {
var i = e[r];
if (("object" != typeof i && (i = { $eq: i }), Ye(r)))
if (i instanceof Array) {
if (n[r]) return (n[r] = !1), void (t[r] = i);
var o = [];
t[r].forEach(function (e) {
Object.keys(i).forEach(function (t) {
var n = i[t],
r = Math.max(
Object.keys(e).length,
Object.keys(n).length
),
s = Xe([e, n]);
Object.keys(s).length <= r || o.push(s);
});
}),
(t[r] = o);
} else t[r] = Xe([i]);
else {
var s = (t[r] = t[r] || {});
Object.keys(i).forEach(function (e) {
var t = i[e];
return "$gt" === e || "$gte" === e
? (function (e, t, n) {
if (void 0 !== n.$eq) return;
void 0 !== n.$gte
? "$gte" === e
? t > n.$gte && (n.$gte = t)
: t >= n.$gte &&
(delete n.$gte, (n.$gt = t))
: void 0 !== n.$gt
? "$gte" === e
? t > n.$gt && (delete n.$gt, (n.$gte = t))
: t > n.$gt && (n.$gt = t)
: (n[e] = t);
})(e, t, s)
: "$lt" === e || "$lte" === e
? (function (e, t, n) {
if (void 0 !== n.$eq) return;
void 0 !== n.$lte
? "$lte" === e
? t < n.$lte && (n.$lte = t)
: t <= n.$lte &&
(delete n.$lte, (n.$lt = t))
: void 0 !== n.$lt
? "$lte" === e
? t < n.$lt && (delete n.$lt, (n.$lte = t))
: t < n.$lt && (n.$lt = t)
: (n[e] = t);
})(e, t, s)
: "$ne" === e
? (function (e, t) {
"$ne" in t ? t.$ne.push(e) : (t.$ne = [e]);
})(t, s)
: "$eq" === e
? (function (e, t) {
delete t.$gt,
delete t.$gte,
delete t.$lt,
delete t.$lte,
delete t.$ne,
(t.$eq = e);
})(t, s)
: "$regex" === e
? (function (e, t) {
"$regex" in t
? t.$regex.push(e)
: (t.$regex = [e]);
})(t, s)
: void (s[e] = t);
});
}
});
}),
t
);
}
function Ze(e) {
var t = f(e);
(function e(t, n) {
for (var r in t) {
"$and" === r && (n = !0);
var i = t[r];
"object" == typeof i && (n = e(i, n));
}
return n;
})(t, !1) &&
"$and" in
(t = (function e(t) {
for (var n in t) {
if (Array.isArray(t))
for (var r in t) t[r].$and && (t[r] = Xe(t[r].$and));
var i = t[n];
"object" == typeof i && e(i);
}
return t;
})(t)) &&
(t = Xe(t.$and)),
["$or", "$nor"].forEach(function (e) {
e in t &&
t[e].forEach(function (e) {
for (var t = Object.keys(e), n = 0; n < t.length; n++) {
var r = t[n],
i = e[r];
("object" == typeof i && null !== i) ||
(e[r] = { $eq: i });
}
});
}),
"$not" in t && (t.$not = Xe([t.$not]));
for (var n = Object.keys(t), r = 0; r < n.length; r++) {
var i = n[r],
o = t[i];
("object" == typeof o && null !== o) || (o = { $eq: o }),
(t[i] = o);
}
return (
(function e(t) {
Object.keys(t).forEach(function (n) {
var r = t[n];
Array.isArray(r)
? r.forEach(function (t) {
t && "object" == typeof t && e(t);
})
: "$ne" === n
? (t.$ne = [r])
: "$regex" === n
? (t.$regex = [r])
: r && "object" == typeof r && e(r);
});
})(t),
t
);
}
function et(e, t) {
if (e === t) return 0;
(e = tt(e)), (t = tt(t));
var n = st(e),
r = st(t);
if (n - r != 0) return n - r;
switch (typeof e) {
case "number":
return e - t;
case "boolean":
return e < t ? -1 : 1;
case "string":
return (function (e, t) {
return e === t ? 0 : e > t ? 1 : -1;
})(e, t);
}
return Array.isArray(e)
? (function (e, t) {
for (
var n = Math.min(e.length, t.length), r = 0;
r < n;
r++
) {
var i = et(e[r], t[r]);
if (0 !== i) return i;
}
return e.length === t.length
? 0
: e.length > t.length
? 1
: -1;
})(e, t)
: (function (e, t) {
for (
var n = Object.keys(e),
r = Object.keys(t),
i = Math.min(n.length, r.length),
o = 0;
o < i;
o++
) {
var s = et(n[o], r[o]);
if (0 !== s) return s;
if (0 !== (s = et(e[n[o]], t[r[o]]))) return s;
}
return n.length === r.length
? 0
: n.length > r.length
? 1
: -1;
})(e, t);
}
function tt(e) {
switch (typeof e) {
case "undefined":
return null;
case "number":
return e === 1 / 0 || e === -1 / 0 || isNaN(e) ? null : e;
case "object":
var t = e;
if (Array.isArray(e)) {
var n = e.length;
e = new Array(n);
for (var r = 0; r < n; r++) e[r] = tt(t[r]);
} else {
if (e instanceof Date) return e.toJSON();
if (null !== e)
for (var i in ((e = {}), t))
if (Object.prototype.hasOwnProperty.call(t, i)) {
var o = t[i];
void 0 !== o && (e[i] = tt(o));
}
}
}
return e;
}
function nt(e) {
if (null !== e)
switch (typeof e) {
case "boolean":
return e ? 1 : 0;
case "number":
return (function (e) {
if (0 === e) return "1";
var t = e.toExponential().split(/e\+?/),
n = parseInt(t[1], 10),
r = e < 0,
i = r ? "0" : "2",
o =
((s = ((r ? -n : n) - -324).toString()),
(a = "0"),
(c = 3),
(function (e, t, n) {
for (var r = "", i = n - e.length; r.length < i; )
r += t;
return r;
})(s, a, c) + s);
var s, a, c;
i += "" + o;
var u = Math.abs(parseFloat(t[0]));
r && (u = 10 - u);
var f = u.toFixed(20);
return (f = f.replace(/\.?0+$/, "")), (i += "" + f);
})(e);
case "string":
return e
.replace(/\u0002/g, "\x02\x02")
.replace(/\u0001/g, "\x01\x02")
.replace(/\u0000/g, "\x01\x01");
case "object":
var t = Array.isArray(e),
n = t ? e : Object.keys(e),
r = -1,
i = n.length,
o = "";
if (t) for (; ++r < i; ) o += rt(n[r]);
else
for (; ++r < i; ) {
var s = n[r];
o += rt(s) + rt(e[s]);
}
return o;
}
return "";
}
function rt(e) {
return st((e = tt(e))) + "" + nt(e) + "\0";
}
function it(e, t) {
var n,
r = t;
if ("1" === e[t]) (n = 0), t++;
else {
var i = "0" === e[t];
t++;
var o = "",
s = e.substring(t, t + 3),
a = parseInt(s, 10) + -324;
for (i && (a = -a), t += 3; ; ) {
var c = e[t];
if ("\0" === c) break;
(o += c), t++;
}
(n =
1 === (o = o.split(".")).length
? parseInt(o, 10)
: parseFloat(o[0] + "." + o[1])),
i && (n -= 10),
0 !== a && (n = parseFloat(n + "e" + a));
}
return { num: n, length: t - r };
}
function ot(e, t) {
var n = e.pop();
if (t.length) {
var r = t[t.length - 1];
n === r.element && (t.pop(), (r = t[t.length - 1]));
var i = r.element,
o = r.index;
if (Array.isArray(i)) i.push(n);
else if (o === e.length - 2) {
i[e.pop()] = n;
} else e.push(n);
}
}
function st(e) {
var t = ["boolean", "number", "string", "object"].indexOf(
typeof e
);
return ~t
? null === e
? 1
: Array.isArray(e)
? 5
: t < 3
? t + 2
: t + 3
: Array.isArray(e)
? 5
: void 0;
}
function at(e, t, n) {
if (
((e = e.filter(function (e) {
return ct(e.doc, t.selector, n);
})),
t.sort)
) {
var r = (function (e) {
function t(t) {
return e.map(function (e) {
var n = Qe(He(e));
return Ge(t, n);
});
}
return function (e, n) {
var r,
i,
o = et(t(e.doc), t(n.doc));
return 0 !== o
? o
: ((r = e.doc._id),
(i = n.doc._id),
r < i ? -1 : r > i ? 1 : 0);
};
})(t.sort);
(e = e.sort(r)),
"string" != typeof t.sort[0] &&
"desc" === (i = t.sort[0])[He(i)] &&
(e = e.reverse());
}
var i;
if ("limit" in t || "skip" in t) {
var o = t.skip || 0,
s = ("limit" in t ? t.limit : e.length) + o;
e = e.slice(o, s);
}
return e;
}
function ct(e, t, n) {
return n.every(function (n) {
var r = t[n],
i = Qe(n),
o = Ge(e, i);
return Ye(n)
? (function (e, t, n) {
if ("$or" === e)
return t.some(function (e) {
return ct(n, e, Object.keys(e));
});
if ("$not" === e) return !ct(n, t, Object.keys(t));
return !t.find(function (e) {
return ct(n, e, Object.keys(e));
});
})(n, r, e)
: ut(r, e, i, o);
});
}
function ut(e, t, n, r) {
return (
!e ||
("object" == typeof e
? Object.keys(e).every(function (i) {
var o = e[i];
if (0 === i.indexOf("$")) return ft(i, t, o, n, r);
var s = Qe(i);
if (
void 0 === r &&
"object" != typeof o &&
s.length > 0
)
return !1;
var a = Ge(r, s);
return "object" == typeof o
? ut(o, t, n, a)
: ft("$eq", t, o, s, a);
})
: e === r)
);
}
function ft(e, t, n, r, i) {
if (!pt[e])
throw new Error(
'unknown operator "' +
e +
'" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all'
);
return pt[e](t, n, r, i);
}
function lt(e) {
return null != e;
}
function dt(e) {
return void 0 !== e;
}
function ht(e, t) {
return t.some(function (t) {
return e instanceof Array
? e.some(function (e) {
return 0 === et(t, e);
})
: 0 === et(t, e);
});
}
var pt = {
$elemMatch: function (e, t, n, r) {
return (
!!Array.isArray(r) &&
0 !== r.length &&
("object" == typeof r[0] && null !== r[0]
? r.some(function (e) {
return ct(e, t, Object.keys(t));
})
: r.some(function (r) {
return ut(t, e, n, r);
}))
);
},
$allMatch: function (e, t, n, r) {
return (
!!Array.isArray(r) &&
0 !== r.length &&
("object" == typeof r[0] && null !== r[0]
? r.every(function (e) {
return ct(e, t, Object.keys(t));
})
: r.every(function (r) {
return ut(t, e, n, r);
}))
);
},
$eq: function (e, t, n, r) {
return dt(r) && 0 === et(r, t);
},
$gte: function (e, t, n, r) {
return dt(r) && et(r, t) >= 0;
},
$gt: function (e, t, n, r) {
return dt(r) && et(r, t) > 0;
},
$lte: function (e, t, n, r) {
return dt(r) && et(r, t) <= 0;
},
$lt: function (e, t, n, r) {
return dt(r) && et(r, t) < 0;
},
$exists: function (e, t, n, r) {
return t ? dt(r) : !dt(r);
},
$mod: function (e, t, n, r) {
return (
lt(r) &&
(function (e, t) {
return (
"number" == typeof e &&
parseInt(e, 10) === e &&
e % t[0] === t[1]
);
})(r, t)
);
},
$ne: function (e, t, n, r) {
return t.every(function (e) {
return 0 !== et(r, e);
});
},
$in: function (e, t, n, r) {
return lt(r) && ht(r, t);
},
$nin: function (e, t, n, r) {
return lt(r) && !ht(r, t);
},
$size: function (e, t, n, r) {
return (
lt(r) &&
Array.isArray(r) &&
(function (e, t) {
return e.length === t;
})(r, t)
);
},
$all: function (e, t, n, r) {
return (
Array.isArray(r) &&
(function (e, t) {
return t.every(function (t) {
return e.some(function (e) {
return 0 === et(t, e);
});
});
})(r, t)
);
},
$regex: function (e, t, n, r) {
return (
lt(r) &&
"string" == typeof r &&
t.every(function (e) {
return (function (e, t) {
return new RegExp(t).test(e);
})(r, e);
})
);
},
$type: function (e, t, n, r) {
return (function (e, t) {
switch (t) {
case "null":
return null === e;
case "boolean":
return "boolean" == typeof e;
case "number":
return "number" == typeof e;
case "string":
return "string" == typeof e;
case "array":
return e instanceof Array;
case "object":
return "[object Object]" === {}.toString.call(e);
}
})(r, t);
},
};
function vt(e, t) {
if (e.selector && e.filter && "_selector" !== e.filter) {
var n = "string" == typeof e.filter ? e.filter : "function";
return t(
new Error('selector invalid for filter "' + n + '"')
);
}
t();
}
function _t(e) {
e.view && !e.filter && (e.filter = "_view"),
e.selector && !e.filter && (e.filter = "_selector"),
e.filter &&
"string" == typeof e.filter &&
("_view" === e.filter
? (e.view = V(e.view))
: (e.filter = V(e.filter)));
}
function yt(e, t) {
return (
t.filter &&
"string" == typeof t.filter &&
!t.doc_ids &&
!J(e.db)
);
}
function gt(e, t) {
var n = t.complete;
if ("_view" === t.filter) {
if (!t.view || "string" != typeof t.view) {
var r = N(
D,
"`view` filter parameter not found or invalid."
);
return n(r);
}
var i = z(t.view);
e.db.get("_design/" + i[0], function (r, o) {
if (e.isCancelled) return n(null, { status: "cancelled" });
if (r) return n(U(r));
var s = o && o.views && o.views[i[1]] && o.views[i[1]].map;
if (!s)
return n(
N(
A,
o.views
? "missing json key: " + i[1]
: "missing json key: views"
)
);
(t.filter = H(
[
"return function(doc) {",
' "use strict";',
" var emitted = false;",
" var emit = function (a, b) {",
" emitted = true;",
" };",
" var view = " + s + ";",
" view(doc);",
" if (emitted) {",
" return true;",
" }",
"};",
].join("\n"),
{}
)),
e.doChanges(t);
});
} else if (t.selector)
(t.filter = function (e) {
return (function (e, t) {
if ("object" != typeof t)
throw new Error(
"Selector error: expected a JSON object"
);
var n = at(
[{ doc: e }],
{ selector: (t = Ze(t)) },
Object.keys(t)
);
return n && 1 === n.length;
})(e, t.selector);
}),
e.doChanges(t);
else {
var o = z(t.filter);
e.db.get("_design/" + o[0], function (r, i) {
if (e.isCancelled) return n(null, { status: "cancelled" });
if (r) return n(U(r));
var s = i && i.filters && i.filters[o[1]];
if (!s)
return n(
N(
A,
i && i.filters
? "missing json key: " + o[1]
: "missing json key: filters"
)
);
(t.filter = H('"use strict";\nreturn ' + s + ";", {})),
e.doChanges(t);
});
}
}
function mt(e) {
return e.reduce(function (e, t) {
return (e[t] = !0), e;
}, {});
}
Ke.plugin(function (e) {
e._changesFilterPlugin = {
validate: vt,
normalize: _t,
shouldFilter: yt,
filter: gt,
};
}),
(Ke.version = "9.0.0");
var bt = mt([
"_id",
"_rev",
"_access",
"_attachments",
"_deleted",
"_revisions",
"_revs_info",
"_conflicts",
"_deleted_conflicts",
"_local_seq",
"_rev_tree",
"_replication_id",
"_replication_state",
"_replication_state_time",
"_replication_state_reason",
"_replication_stats",
"_removed",
]),
wt = mt([
"_access",
"_attachments",
"_replication_id",
"_replication_state",
"_replication_state_time",
"_replication_state_reason",
"_replication_stats",
]);
function kt(e) {
if (!/^\d+-/.test(e)) return N(M);
var t = e.indexOf("-"),
n = e.substring(0, t),
r = e.substring(t + 1);
return { prefix: parseInt(n, 10), id: r };
}
function jt(e, t, n) {
var r, i, o;
n || (n = { deterministic_revs: !0 });
var s = { status: "available" };
if ((e._deleted && (s.deleted = !0), t))
if (
(e._id || (e._id = pe()),
(i = he(e, n.deterministic_revs)),
e._rev)
) {
if ((o = kt(e._rev)).error) return o;
(e._rev_tree = [
{
pos: o.prefix,
ids: [o.id, { status: "missing" }, [[i, s, []]]],
},
]),
(r = o.prefix + 1);
} else (e._rev_tree = [{ pos: 1, ids: [i, s, []] }]), (r = 1);
else if (
(e._revisions &&
((e._rev_tree = (function (e, t) {
for (
var n = e.start - e.ids.length + 1,
r = e.ids,
i = [r[0], t, []],
o = 1,
s = r.length;
o < s;
o++
)
i = [r[o], { status: "missing" }, [i]];
return [{ pos: n, ids: i }];
})(e._revisions, s)),
(r = e._revisions.start),
(i = e._revisions.ids[0])),
!e._rev_tree)
) {
if ((o = kt(e._rev)).error) return o;
(r = o.prefix),
(i = o.id),
(e._rev_tree = [{ pos: r, ids: [i, s, []] }]);
}
K(e._id), (e._rev = r + "-" + i);
var a = { metadata: {}, data: {} };
for (var c in e)
if (Object.prototype.hasOwnProperty.call(e, c)) {
var u = "_" === c[0];
if (u && !bt[c]) {
var f = N(L, c);
throw ((f.message = L.message + ": " + c), f);
}
u && !wt[c]
? (a.metadata[c.slice(1)] = e[c])
: (a.data[c] = e[c]);
}
return a;
}
function qt(e, t, n) {
var r = (function (e) {
try {
return Z(e);
} catch (e) {
return {
error: N($, "Attachment is not a valid base64 string"),
};
}
})(e.data);
if (r.error) return n(r.error);
(e.length = r.length),
(e.data =
"blob" === t
? re(r, e.content_type)
: "base64" === t
? ee(r)
: r),
le(r, function (t) {
(e.digest = "md5-" + t), n();
});
}
function Ot(e, t, n) {
if (e.stub) return n();
"string" == typeof e.data
? qt(e, t, n)
: (function (e, t, n) {
le(e.data, function (r) {
(e.digest = "md5-" + r),
(e.length = e.data.size || e.data.length || 0),
"binary" === t
? se(e.data, function (t) {
(e.data = t), n();
})
: "base64" === t
? ae(e.data, function (t) {
(e.data = t), n();
})
: n();
});
})(e, t, n);
}
function At(e, t, n, r, i, o, s, a) {
if (
(function (e, t) {
for (
var n,
r = e.slice(),
i = t.split("-"),
o = parseInt(i[0], 10),
s = i[1];
(n = r.pop());
) {
if (n.pos === o && n.ids[0] === s) return !0;
for (var a = n.ids[2], c = 0, u = a.length; c < u; c++)
r.push({ pos: n.pos + 1, ids: a[c] });
}
return !1;
})(t.rev_tree, n.metadata.rev) &&
!a
)
return (r[i] = n), o();
var c = t.winningRev || ve(t),
u = "deleted" in t ? t.deleted : Pe(t, c),
f =
"deleted" in n.metadata
? n.metadata.deleted
: Pe(n.metadata),
l = /^1-/.test(n.metadata.rev);
if (u && !f && a && l) {
var d = n.data;
(d._rev = c), (d._id = n.metadata.id), (n = jt(d, a));
}
var h = Se(t.rev_tree, n.metadata.rev_tree[0], e);
if (
a &&
((u && f && "new_leaf" !== h.conflicts) ||
(!u && "new_leaf" !== h.conflicts) ||
(u && !f && "new_branch" === h.conflicts))
) {
var p = N(S);
return (r[i] = p), o();
}
var v = n.metadata.rev;
(n.metadata.rev_tree = h.tree),
(n.stemmedRevs = h.stemmedRevs || []),
t.rev_map && (n.metadata.rev_map = t.rev_map);
var _ = ve(n.metadata),
y = Pe(n.metadata, _),
g = u === y ? 0 : u < y ? -1 : 1;
s(n, _, y, v === _ ? y : Pe(n.metadata, v), !0, g, i, o);
}
function St(e, t, n, r, i, o, s, a, c) {
e = e || 1e3;
var u = a.new_edits,
f = new Map(),
l = 0,
d = t.length;
function h() {
++l === d && c && c();
}
t.forEach(function (e, t) {
if (e._id && Ce(e._id)) {
var r = e._deleted ? "_removeLocal" : "_putLocal";
n[r](e, { ctx: i }, function (e, n) {
(o[t] = e || n), h();
});
} else {
var s = e.metadata.id;
f.has(s)
? (d--, f.get(s).push([e, t]))
: f.set(s, [[e, t]]);
}
}),
f.forEach(function (t, n) {
var i = 0;
function c() {
++i < t.length ? f() : h();
}
function f() {
var f = t[i],
l = f[0],
d = f[1];
if (r.has(n)) At(e, r.get(n), l, o, d, c, s, u);
else {
var h = Se([], l.metadata.rev_tree[0], e);
(l.metadata.rev_tree = h.tree),
(l.stemmedRevs = h.stemmedRevs || []),
(function (e, t, n) {
var r = ve(e.metadata),
i = Pe(e.metadata, r);
if ("was_delete" in a && i)
return (o[t] = N(A, "deleted")), n();
if (
u &&
(function (e) {
return (
"missing" ===
e.metadata.rev_tree[0].ids[1].status
);
})(e)
) {
var c = N(S);
return (o[t] = c), n();
}
s(e, r, i, i, !1, i ? 0 : 1, t, n);
})(l, d, c);
}
}
f();
});
}
var xt = "document-store",
Pt = "meta-store";
function Ct(e) {
try {
return JSON.stringify(e);
} catch (t) {
return s.stringify(e);
}
}
function Et(e) {
return function (t) {
var n = "unknown_error";
t.target &&
t.target.error &&
(n = t.target.error.name || t.target.error.message),
e(N(B, n, t.type));
};
}
function $t(e, t, n) {
return {
data: Ct(e),
winningRev: t,
deletedOrLocal: n ? "1" : "0",
seq: e.seq,
id: e.id,
};
}
function It(e) {
if (!e) return null;
var t = (function (e) {
try {
return JSON.parse(e);
} catch (t) {
return s.parse(e);
}
})(e.data);
return (
(t.winningRev = e.winningRev),
(t.deleted = "1" === e.deletedOrLocal),
(t.seq = e.seq),
t
);
}
function Lt(e) {
if (!e) return e;
var t = e._doc_id_rev.lastIndexOf(":");
return (
(e._id = e._doc_id_rev.substring(0, t - 1)),
(e._rev = e._doc_id_rev.substring(t + 1)),
delete e._doc_id_rev,
e
);
}
function Dt(e, t, n, r) {
n
? r(
e
? "string" != typeof e
? e
: ie(e, t)
: te([""], { type: t })
)
: e
? "string" != typeof e
? oe(e, function (e) {
r(ee(e));
})
: r(e)
: r("");
}
function Tt(e, t, n, r) {
var i = Object.keys(e._attachments || {});
if (!i.length) return r && r();
var o = 0;
function s() {
++o === i.length && r && r();
}
i.forEach(function (r) {
t.attachments && t.include_docs
? (function (e, t) {
var r = e._attachments[t],
i = r.digest;
n.objectStore("attach-store").get(i).onsuccess =
function (e) {
(r.body = e.target.result.body), s();
};
})(e, r)
: ((e._attachments[r].stub = !0), s());
});
}
function Bt(e, t) {
return Promise.all(
e.map(function (e) {
if (e.doc && e.doc._attachments) {
var n = Object.keys(e.doc._attachments);
return Promise.all(
n.map(function (n) {
var r = e.doc._attachments[n];
if ("body" in r) {
var i = r.body,
o = r.content_type;
return new Promise(function (s) {
Dt(i, o, t, function (t) {
(e.doc._attachments[n] = Object.assign(
p(r, ["digest", "content_type"]),
{ data: t }
)),
s();
});
});
}
})
);
}
})
);
}
function Mt(e, t, n) {
var r = [],
i = n.objectStore("by-sequence"),
o = n.objectStore("attach-store"),
s = n.objectStore("attach-seq-store"),
a = e.length;
function c() {
--a ||
(function () {
if (!r.length) return;
r.forEach(function (e) {
s
.index("digestSeq")
.count(
IDBKeyRange.bound(e + "::", e + "::\uffff", !1, !1)
).onsuccess = function (t) {
t.target.result || o.delete(e);
};
});
})();
}
e.forEach(function (e) {
var n = i.index("_doc_id_rev"),
o = t + "::" + e;
n.getKey(o).onsuccess = function (e) {
var t = e.target.result;
if ("number" != typeof t) return c();
i.delete(t),
(s
.index("seq")
.openCursor(IDBKeyRange.only(t)).onsuccess = function (
e
) {
var t = e.target.result;
if (t) {
var n = t.value.digestSeq.split("::")[0];
r.push(n), s.delete(t.primaryKey), t.continue();
} else c();
});
};
});
}
function Rt(e, t, n) {
try {
return { txn: e.transaction(t, n) };
} catch (e) {
return { error: e };
}
}
var Nt = new (class extends a {
constructor() {
super(),
(this._listeners = {}),
m() &&
addEventListener("storage", (e) => {
this.emit(e.key);
});
}
addListener(e, t, n, r) {
if (!this._listeners[t]) {
var i = !1,
o = this;
(this._listeners[t] = s), this.on(e, s);
}
function s() {
if (o._listeners[t])
if (i) i = "waiting";
else {
i = !0;
var e = p(r, [
"style",
"include_docs",
"attachments",
"conflicts",
"filter",
"doc_ids",
"view",
"since",
"query_params",
"binary",
"return_docs",
]);
n.changes(e)
.on("change", function (e) {
e.seq > r.since &&
!r.cancelled &&
((r.since = e.seq), r.onChange(e));
})
.on("complete", function () {
"waiting" === i && b(s), (i = !1);
})
.on("error", function () {
i = !1;
});
}
}
}
removeListener(e, t) {
t in this._listeners &&
(super.removeListener(e, this._listeners[t]),
delete this._listeners[t]);
}
notifyLocalWindows(e) {
m() &&
(localStorage[e] = "a" === localStorage[e] ? "b" : "a");
}
notify(e) {
this.emit(e), this.notifyLocalWindows(e);
}
})();
function Ut(e, t, n, r, i, o) {
for (
var s, a, c, u, f, l, d, h, p = t.docs, v = 0, _ = p.length;
v < _;
v++
) {
var y = p[v];
(y._id && Ce(y._id)) ||
((y = p[v] = jt(y, n.new_edits, e)).error && !d && (d = y));
}
if (d) return o(d);
var g = !1,
m = 0,
b = new Array(p.length),
w = new Map(),
k = !1,
j = r._meta.blobSupport ? "blob" : "base64";
function q() {
(g = !0), O();
}
function O() {
h && g && ((h.docCount += m), l.put(h));
}
function A() {
k || (Nt.notify(r._meta.name), o(null, b));
}
function S(e, t, n, r, i, o, s, a) {
(e.metadata.winningRev = t), (e.metadata.deleted = n);
var c = e.data;
if (
((c._id = e.metadata.id),
(c._rev = e.metadata.rev),
r && (c._deleted = !0),
c._attachments && Object.keys(c._attachments).length)
)
return (function (e, t, n, r, i, o) {
var s = e.data,
a = 0,
c = Object.keys(s._attachments);
function f() {
a === c.length && x(e, t, n, r, i, o);
}
function l() {
a++, f();
}
c.forEach(function (n) {
var r = e.data._attachments[n];
if (r.stub) a++, f();
else {
var i = r.data;
delete r.data,
(r.revpos = parseInt(t, 10)),
(function (e, t, n) {
u.count(e).onsuccess = function (r) {
if (r.target.result) return n();
var i = { digest: e, body: t };
u.put(i).onsuccess = n;
};
})(r.digest, i, l);
}
});
})(e, t, n, i, s, a);
(m += o), O(), x(e, t, n, i, s, a);
}
function x(e, t, n, i, o, u) {
var l = e.data,
d = e.metadata;
function h(o) {
var c = e.stemmedRevs || [];
i &&
r.auto_compaction &&
(c = c.concat(
(function (e) {
var t = [];
return (
_e(e.rev_tree, function (e, n, r, i, o) {
"available" !== o.status ||
e ||
(t.push(n + "-" + r), (o.status = "missing"));
}),
t
);
})(e.metadata)
)),
c && c.length && Mt(c, e.metadata.id, s),
(d.seq = o.target.result);
var u = $t(d, t, n);
a.put(u).onsuccess = p;
}
function p() {
(b[o] = { ok: !0, id: d.id, rev: d.rev }),
w.set(e.metadata.id, e.metadata),
(function (e, t, n) {
var r = 0,
i = Object.keys(e.data._attachments || {});
if (!i.length) return n();
function o() {
++r === i.length && n();
}
function s(n) {
var r = e.data._attachments[n].digest,
i = f.put({ seq: t, digestSeq: r + "::" + t });
(i.onsuccess = o),
(i.onerror = function (e) {
e.preventDefault(), e.stopPropagation(), o();
});
}
for (var a = 0; a < i.length; a++) s(i[a]);
})(e, d.seq, u);
}
(l._doc_id_rev = d.id + "::" + d.rev),
delete l._id,
delete l._rev;
var v = c.put(l);
(v.onsuccess = h),
(v.onerror = function (e) {
e.preventDefault(),
e.stopPropagation(),
(c
.index("_doc_id_rev")
.getKey(l._doc_id_rev).onsuccess = function (e) {
c.put(l, e.target.result).onsuccess = h;
});
});
}
!(function (e, t, n) {
if (!e.length) return n();
var r,
i = 0;
function o() {
i++, e.length === i && (r ? n(r) : n());
}
e.forEach(function (e) {
var n =
e.data && e.data._attachments
? Object.keys(e.data._attachments)
: [],
i = 0;
if (!n.length) return o();
function s(e) {
(r = e), ++i === n.length && o();
}
for (var a in e.data._attachments)
Object.prototype.hasOwnProperty.call(
e.data._attachments,
a
) && Ot(e.data._attachments[a], t, s);
});
})(p, j, function (t) {
if (t) return o(t);
!(function () {
var t = Rt(
i,
[
xt,
"by-sequence",
"attach-store",
"local-store",
"attach-seq-store",
Pt,
],
"readwrite"
);
if (t.error) return o(t.error);
((s = t.txn).onabort = Et(o)),
(s.ontimeout = Et(o)),
(s.oncomplete = A),
(a = s.objectStore(xt)),
(c = s.objectStore("by-sequence")),
(u = s.objectStore("attach-store")),
(f = s.objectStore("attach-seq-store")),
((l = s.objectStore(Pt)).get(Pt).onsuccess = function (
e
) {
(h = e.target.result), O();
}),
(function (e) {
var t = [];
if (
(p.forEach(function (e) {
e.data &&
e.data._attachments &&
Object.keys(e.data._attachments).forEach(
function (n) {
var r = e.data._attachments[n];
r.stub && t.push(r.digest);
}
);
}),
!t.length)
)
return e();
var n,
r = 0;
t.forEach(function (i) {
!(function (e, t) {
u.get(e).onsuccess = function (n) {
if (n.target.result) t();
else {
var r = N(
R,
"unknown stub attachment with digest " + e
);
(r.status = 412), t(r);
}
};
})(i, function (i) {
i && !n && (n = i), ++r === t.length && e(n);
});
});
})(function (t) {
if (t) return (k = !0), o(t);
!(function () {
if (!p.length) return;
var t = 0;
function i() {
++t === p.length &&
St(e.revs_limit, p, r, w, s, b, S, n, q);
}
function o(e) {
var t = It(e.target.result);
t && w.set(t.id, t), i();
}
for (var c = 0, u = p.length; c < u; c++) {
var f = p[c];
if (f._id && Ce(f._id)) i();
else a.get(f.metadata.id).onsuccess = o;
}
})();
});
})();
});
}
function Ft(e, t, n, r, i) {
var o, s, a;
function c(e) {
(s = e.target.result), o && i(o, s, a);
}
function u(e) {
(o = e.target.result), s && i(o, s, a);
}
function f(e) {
var t = e.target.result;
if (!t) return i();
i([t.key], [t.value], t);
}
-1 === r && (r = 1e3),
"function" == typeof e.getAll &&
"function" == typeof e.getAllKeys &&
r > 1 &&
!n
? ((a = {
continue: function () {
if (!o.length) return i();
var n,
a = o[o.length - 1];
if (t && t.upper)
try {
n = IDBKeyRange.bound(
a,
t.upper,
!0,
t.upperOpen
);
} catch (e) {
if ("DataError" === e.name && 0 === e.code)
return i();
}
else n = IDBKeyRange.lowerBound(a, !0);
(t = n),
(o = null),
(s = null),
(e.getAll(t, r).onsuccess = c),
(e.getAllKeys(t, r).onsuccess = u);
},
}),
(e.getAll(t, r).onsuccess = c),
(e.getAllKeys(t, r).onsuccess = u))
: n
? (e.openCursor(t, "prev").onsuccess = f)
: (e.openCursor(t).onsuccess = f);
}
function Kt(e, t, n) {
var r,
i,
o = "startkey" in e && e.startkey,
s = "endkey" in e && e.endkey,
a = "key" in e && e.key,
c = "keys" in e && e.keys,
u = e.skip || 0,
f = "number" == typeof e.limit ? e.limit : -1,
l = !1 !== e.inclusive_end;
if (
!c &&
(i =
(r = (function (e, t, n, r, i) {
try {
if (e && t)
return i
? IDBKeyRange.bound(t, e, !n, !1)
: IDBKeyRange.bound(e, t, !1, !n);
if (e)
return i
? IDBKeyRange.upperBound(e)
: IDBKeyRange.lowerBound(e);
if (t)
return i
? IDBKeyRange.lowerBound(t, !n)
: IDBKeyRange.upperBound(t, !n);
if (r) return IDBKeyRange.only(r);
} catch (e) {
return { error: e };
}
return null;
})(o, s, l, a, e.descending)) && r.error) &&
("DataError" !== i.name || 0 !== i.code)
)
return n(N(B, i.name, i.message));
var d = [xt, "by-sequence", Pt];
e.attachments && d.push("attach-store");
var h = Rt(t, d, "readonly");
if (h.error) return n(h.error);
var p = h.txn;
(p.oncomplete = function () {
e.attachments ? Bt(w, e.binary).then(O) : O();
}),
(p.onabort = Et(n));
var v,
_,
y = p.objectStore(xt),
g = p.objectStore("by-sequence"),
m = p.objectStore(Pt),
b = g.index("_doc_id_rev"),
w = [];
function k(t, n) {
var r = { id: n.id, key: n.id, value: { rev: t } };
n.deleted
? c && (w.push(r), (r.value.deleted = !0), (r.doc = null))
: u-- <= 0 &&
(w.push(r),
e.include_docs &&
(function (t, n, r) {
var i = t.id + "::" + r;
b.get(i).onsuccess = function (r) {
if (
((n.doc = Lt(r.target.result) || {}), e.conflicts)
) {
var i = me(t);
i.length && (n.doc._conflicts = i);
}
Tt(n.doc, e, p);
};
})(n, r, t));
}
function j(e) {
for (var t = 0, n = e.length; t < n && w.length !== f; t++) {
var r = e[t];
if (r.error && c) w.push(r);
else {
var i = It(r);
k(i.winningRev, i);
}
}
}
function q(e, t, n) {
n && (j(t), w.length < f && n.continue());
}
function O() {
var t = { total_rows: v, offset: e.skip, rows: w };
e.update_seq && void 0 !== _ && (t.update_seq = _),
n(null, t);
}
return (
(m.get(Pt).onsuccess = function (e) {
v = e.target.result.docCount;
}),
e.update_seq &&
(g.openKeyCursor(null, "prev").onsuccess = (e) => {
var t = e.target.result;
t && t.key && (_ = t.key);
}),
i || 0 === f
? void 0
: c
? (function (e, t, n) {
var r = new Array(e.length),
i = 0;
e.forEach(function (o, s) {
t.get(o).onsuccess = function (t) {
t.target.result
? (r[s] = t.target.result)
: (r[s] = { key: o, error: "not_found" }),
++i === e.length && n(e, r, {});
};
});
})(c, y, q)
: -1 === f
? (function (e, t, n) {
if ("function" != typeof e.getAll) {
var r = [];
e.openCursor(t).onsuccess = function (e) {
var t = e.target.result;
t
? (r.push(t.value), t.continue())
: n({ target: { result: r } });
};
} else e.getAll(t).onsuccess = n;
})(y, r, function (t) {
var n = t.target.result;
e.descending && (n = n.reverse()), j(n);
})
: void Ft(y, r, e.descending, f + u, q)
);
}
var Jt = !1,
zt = [];
function Vt() {
!Jt && zt.length && ((Jt = !0), zt.shift()());
}
function Gt(e, t, n, r) {
if ((e = f(e)).continuous) {
var i = n + ":" + pe();
return (
Nt.addListener(n, i, t, e),
Nt.notify(n),
{
cancel: function () {
Nt.removeListener(n, i);
},
}
);
}
var o = e.doc_ids && new Set(e.doc_ids);
e.since = e.since || 0;
var s = e.since,
a = "limit" in e ? e.limit : -1;
0 === a && (a = 1);
var c,
u,
l,
d,
h = [],
p = 0,
v = F(e),
_ = new Map();
function y(e, t, n, r) {
if (n.seq !== t) return r();
if (n.winningRev === e._rev) return r(n, e);
var i = e._id + "::" + n.winningRev;
d.get(i).onsuccess = function (e) {
r(n, Lt(e.target.result));
};
}
function g() {
e.complete(null, { results: h, last_seq: s });
}
var m = [xt, "by-sequence"];
e.attachments && m.push("attach-store");
var b = Rt(r, m, "readonly");
if (b.error) return e.complete(b.error);
((c = b.txn).onabort = Et(e.complete)),
(c.oncomplete = function () {
!e.continuous && e.attachments ? Bt(h).then(g) : g();
}),
(u = c.objectStore("by-sequence")),
(l = c.objectStore(xt)),
(d = u.index("_doc_id_rev")),
Ft(
u,
e.since && !e.descending
? IDBKeyRange.lowerBound(e.since, !0)
: null,
e.descending,
a,
function (t, n, r) {
if (r && t.length) {
var i = new Array(t.length),
u = new Array(t.length),
f = 0;
n.forEach(function (n, s) {
!(function (e, t, n) {
if (o && !o.has(e._id)) return n();
var r = _.get(e._id);
if (r) return y(e, t, r, n);
l.get(e._id).onsuccess = function (i) {
(r = It(i.target.result)),
_.set(e._id, r),
y(e, t, r, n);
};
})(Lt(n), t[s], function (n, o) {
(u[s] = n),
(i[s] = o),
++f === t.length &&
(function () {
for (
var t = [], n = 0, o = i.length;
n < o && p !== a;
n++
) {
var s = i[n];
if (s) {
var c = u[n];
t.push(d(c, s));
}
}
Promise.all(t)
.then(function (t) {
for (var n = 0, r = t.length; n < r; n++)
t[n] && e.onChange(t[n]);
})
.catch(e.complete),
p !== a && r.continue();
})();
});
});
}
function d(t, n) {
var r = e.processChange(n, t, e);
s = r.seq = t.seq;
var i = v(r);
return "object" == typeof i
? Promise.reject(i)
: i
? (p++,
e.return_docs && h.push(r),
e.attachments && e.include_docs
? new Promise(function (t) {
Tt(n, e, c, function () {
Bt([r], e.binary).then(function () {
t(r);
});
});
})
: Promise.resolve(r))
: Promise.resolve();
}
}
);
}
var Qt,
Wt = new Map(),
Yt = new Map();
function Ht(e, t) {
var n = this;
!(function (e, t, n) {
zt.push(function () {
e(function (e, r) {
!(function (e, t, n, r) {
try {
e(t, n);
} catch (t) {
r.emit("error", t);
}
})(t, e, r, n),
(Jt = !1),
b(function () {
Vt();
});
});
}),
Vt();
})(
function (t) {
!(function (e, t, n) {
var r = t.name,
i = null,
o = null;
function s(e) {
return function (t, n) {
t &&
t instanceof Error &&
!t.reason &&
o &&
(t.reason = o),
e(t, n);
};
}
function a(e, t) {
var n = e.objectStore(xt);
n.createIndex("deletedOrLocal", "deletedOrLocal", {
unique: !1,
}),
(n.openCursor().onsuccess = function (e) {
var r = e.target.result;
if (r) {
var i = r.value,
o = Pe(i);
(i.deletedOrLocal = o ? "1" : "0"),
n.put(i),
r.continue();
} else t();
});
}
function c(e, t) {
var n = e.objectStore("local-store"),
r = e.objectStore(xt),
i = e.objectStore("by-sequence");
r.openCursor().onsuccess = function (e) {
var o = e.target.result;
if (o) {
var s = o.value,
a = s.id,
c = Ce(a),
u = ve(s);
if (c) {
var f = a + "::" + u,
l = a + "::",
d = a + "::~",
h = i.index("_doc_id_rev"),
p = IDBKeyRange.bound(l, d, !1, !1),
v = h.openCursor(p);
v.onsuccess = function (e) {
if ((v = e.target.result)) {
var t = v.value;
t._doc_id_rev === f && n.put(t),
i.delete(v.primaryKey),
v.continue();
} else r.delete(o.primaryKey), o.continue();
};
} else o.continue();
} else t && t();
};
}
function u(e, t) {
var n = e.objectStore("by-sequence"),
r = e.objectStore("attach-store"),
i = e.objectStore("attach-seq-store");
r.count().onsuccess = function (e) {
if (!e.target.result) return t();
n.openCursor().onsuccess = function (e) {
var n = e.target.result;
if (!n) return t();
for (
var r = n.value,
o = n.primaryKey,
s = Object.keys(r._attachments || {}),
a = {},
c = 0;
c < s.length;
c++
) {
a[r._attachments[s[c]].digest] = !0;
}
var u = Object.keys(a);
for (c = 0; c < u.length; c++) {
var f = u[c];
i.put({ seq: o, digestSeq: f + "::" + o });
}
n.continue();
};
};
}
function f(e) {
var t = e.objectStore("by-sequence"),
n = e.objectStore(xt);
n.openCursor().onsuccess = function (e) {
var r = e.target.result;
if (r) {
var i,
o = (i = r.value).data
? It(i)
: ((i.deleted = "1" === i.deletedOrLocal), i);
if (((o.winningRev = o.winningRev || ve(o)), o.seq))
return s();
!(function () {
var e = o.id + "::",
n = o.id + "::\uffff",
r = t
.index("_doc_id_rev")
.openCursor(IDBKeyRange.bound(e, n)),
i = 0;
r.onsuccess = function (e) {
var t = e.target.result;
if (!t) return (o.seq = i), s();
var n = t.primaryKey;
n > i && (i = n), t.continue();
};
})();
}
function s() {
var e = $t(o, o.winningRev, o.deleted);
n.put(e).onsuccess = function () {
r.continue();
};
}
};
}
(e._meta = null),
(e._remote = !1),
(e.type = function () {
return "idb";
}),
(e._id = d(function (t) {
t(null, e._meta.instanceId);
})),
(e._bulkDocs = function (n, r, o) {
Ut(t, n, r, e, i, s(o));
}),
(e._get = function (e, t, n) {
var r,
o,
s,
a = t.ctx;
if (!a) {
var c = Rt(
i,
[xt, "by-sequence", "attach-store"],
"readonly"
);
if (c.error) return n(c.error);
a = c.txn;
}
function u() {
n(s, { doc: r, metadata: o, ctx: a });
}
a.objectStore(xt).get(e).onsuccess = function (e) {
if (!(o = It(e.target.result)))
return (s = N(A, "missing")), u();
var n;
if (t.rev)
n = t.latest
? (function (e, t) {
for (
var n, r = t.rev_tree.slice();
(n = r.pop());
) {
var i = n.pos,
o = n.ids,
s = o[0],
a = o[1],
c = o[2],
u = 0 === c.length,
f = n.history ? n.history.slice() : [];
if (
(f.push({ id: s, pos: i, opts: a }), u)
)
for (
var l = 0, d = f.length;
l < d;
l++
) {
var h = f[l];
if (h.pos + "-" + h.id === e)
return i + "-" + s;
}
for (var p = 0, v = c.length; p < v; p++)
r.push({
pos: i + 1,
ids: c[p],
history: f,
});
}
throw new Error(
"Unable to resolve latest revision for id " +
t.id +
", rev " +
e
);
})(t.rev, o)
: t.rev;
else if (((n = o.winningRev), Pe(o)))
return (s = N(A, "deleted")), u();
var i = a.objectStore("by-sequence"),
c = o.id + "::" + n;
i.index("_doc_id_rev").get(c).onsuccess = function (
e
) {
if (((r = e.target.result) && (r = Lt(r)), !r))
return (s = N(A, "missing")), u();
u();
};
};
}),
(e._getAttachment = function (e, t, n, r, o) {
var s;
if (r.ctx) s = r.ctx;
else {
var a = Rt(
i,
[xt, "by-sequence", "attach-store"],
"readonly"
);
if (a.error) return o(a.error);
s = a.txn;
}
var c = n.digest,
u = n.content_type;
s.objectStore("attach-store").get(c).onsuccess =
function (e) {
Dt(
e.target.result.body,
u,
r.binary,
function (e) {
o(null, e);
}
);
};
}),
(e._info = function (t) {
var n,
r,
o = Rt(i, [Pt, "by-sequence"], "readonly");
if (o.error) return t(o.error);
var s = o.txn;
(s.objectStore(Pt).get(Pt).onsuccess = function (e) {
r = e.target.result.docCount;
}),
(s
.objectStore("by-sequence")
.openKeyCursor(null, "prev").onsuccess =
function (e) {
var t = e.target.result;
n = t ? t.key : 0;
}),
(s.oncomplete = function () {
t(null, {
doc_count: r,
update_seq: n,
idb_attachment_format: e._meta.blobSupport
? "binary"
: "base64",
});
});
}),
(e._allDocs = function (e, t) {
Kt(e, i, s(t));
}),
(e._changes = function (t) {
return Gt(t, e, r, i);
}),
(e._close = function (e) {
i.close(), Wt.delete(r), e();
}),
(e._getRevisionTree = function (e, t) {
var n = Rt(i, [xt], "readonly");
if (n.error) return t(n.error);
n.txn.objectStore(xt).get(e).onsuccess = function (
e
) {
var n = It(e.target.result);
n ? t(null, n.rev_tree) : t(N(A));
};
}),
(e._doCompaction = function (e, t, n) {
var r = Rt(
i,
[
xt,
"by-sequence",
"attach-store",
"attach-seq-store",
],
"readwrite"
);
if (r.error) return n(r.error);
var o = r.txn;
(o.objectStore(xt).get(e).onsuccess = function (n) {
var r = It(n.target.result);
_e(r.rev_tree, function (e, n, r, i, o) {
var s = n + "-" + r;
-1 !== t.indexOf(s) && (o.status = "missing");
}),
Mt(t, e, o);
var i = r.winningRev,
s = r.deleted;
o.objectStore(xt).put($t(r, i, s));
}),
(o.onabort = Et(n)),
(o.oncomplete = function () {
n();
});
}),
(e._getLocal = function (e, t) {
var n = Rt(i, ["local-store"], "readonly");
if (n.error) return t(n.error);
var r = n.txn.objectStore("local-store").get(e);
(r.onerror = Et(t)),
(r.onsuccess = function (e) {
var n = e.target.result;
n ? (delete n._doc_id_rev, t(null, n)) : t(N(A));
});
}),
(e._putLocal = function (e, t, n) {
"function" == typeof t && ((n = t), (t = {})),
delete e._revisions;
var r = e._rev,
o = e._id;
e._rev = r
? "0-" + (parseInt(r.split("-")[1], 10) + 1)
: "0-1";
var s,
a = t.ctx;
if (!a) {
var c = Rt(i, ["local-store"], "readwrite");
if (c.error) return n(c.error);
((a = c.txn).onerror = Et(n)),
(a.oncomplete = function () {
s && n(null, s);
});
}
var u,
f = a.objectStore("local-store");
r
? ((u = f.get(o)).onsuccess = function (i) {
var o = i.target.result;
o && o._rev === r
? (f.put(e).onsuccess = function () {
(s = { ok: !0, id: e._id, rev: e._rev }),
t.ctx && n(null, s);
})
: n(N(S));
})
: (((u = f.add(e)).onerror = function (e) {
n(N(S)),
e.preventDefault(),
e.stopPropagation();
}),
(u.onsuccess = function () {
(s = { ok: !0, id: e._id, rev: e._rev }),
t.ctx && n(null, s);
}));
}),
(e._removeLocal = function (e, t, n) {
"function" == typeof t && ((n = t), (t = {}));
var r,
o = t.ctx;
if (!o) {
var s = Rt(i, ["local-store"], "readwrite");
if (s.error) return n(s.error);
(o = s.txn).oncomplete = function () {
r && n(null, r);
};
}
var a = e._id,
c = o.objectStore("local-store"),
u = c.get(a);
(u.onerror = Et(n)),
(u.onsuccess = function (i) {
var o = i.target.result;
o && o._rev === e._rev
? (c.delete(a),
(r = { ok: !0, id: a, rev: "0-0" }),
t.ctx && n(null, r))
: n(N(A));
});
}),
(e._destroy = function (e, t) {
Nt.removeAllListeners(r);
var n = Yt.get(r);
n && n.result && (n.result.close(), Wt.delete(r));
var i = indexedDB.deleteDatabase(r);
(i.onsuccess = function () {
Yt.delete(r),
m() &&
r in localStorage &&
delete localStorage[r],
t(null, { ok: !0 });
}),
(i.onerror = Et(t));
});
var l = Wt.get(r);
if (l)
return (
(i = l.idb),
(e._meta = l.global),
b(function () {
n(null, e);
})
);
var h = indexedDB.open(r, 5);
Yt.set(r, h),
(h.onupgradeneeded = function (e) {
var t = e.target.result;
if (e.oldVersion < 1)
return (function (e) {
var t = e.createObjectStore(xt, {
keyPath: "id",
});
e
.createObjectStore("by-sequence", {
autoIncrement: !0,
})
.createIndex("_doc_id_rev", "_doc_id_rev", {
unique: !0,
}),
e.createObjectStore("attach-store", {
keyPath: "digest",
}),
e.createObjectStore(Pt, {
keyPath: "id",
autoIncrement: !1,
}),
e.createObjectStore("detect-blob-support"),
t.createIndex(
"deletedOrLocal",
"deletedOrLocal",
{ unique: !1 }
),
e.createObjectStore("local-store", {
keyPath: "_id",
});
var n = e.createObjectStore("attach-seq-store", {
autoIncrement: !0,
});
n.createIndex("seq", "seq"),
n.createIndex("digestSeq", "digestSeq", {
unique: !0,
});
})(t);
var n = e.currentTarget.transaction;
e.oldVersion < 3 &&
(function (e) {
e.createObjectStore("local-store", {
keyPath: "_id",
}).createIndex("_doc_id_rev", "_doc_id_rev", {
unique: !0,
});
})(t),
e.oldVersion < 4 &&
(function (e) {
var t = e.createObjectStore(
"attach-seq-store",
{ autoIncrement: !0 }
);
t.createIndex("seq", "seq"),
t.createIndex("digestSeq", "digestSeq", {
unique: !0,
});
})(t);
var r = [a, c, u, f],
i = e.oldVersion;
!(function e() {
var t = r[i - 1];
i++, t && t(n, e);
})();
}),
(h.onsuccess = function (t) {
((i = t.target.result).onversionchange = function () {
i.close(), Wt.delete(r);
}),
(i.onabort = function (e) {
w(
"error",
"Database has a global failure",
e.target.error
),
(o = e.target.error),
i.close(),
Wt.delete(r);
});
var s,
a,
c,
u,
f = i.transaction(
[Pt, "detect-blob-support", xt],
"readwrite"
),
l = !1;
function d() {
void 0 !== c &&
l &&
((e._meta = {
name: r,
instanceId: u,
blobSupport: c,
}),
Wt.set(r, { idb: i, global: e._meta }),
n(null, e));
}
function h() {
if (void 0 !== a && void 0 !== s) {
var e = r + "_id";
e in s ? (u = s[e]) : (s[e] = u = pe()),
(s.docCount = a),
f.objectStore(Pt).put(s);
}
}
(f.objectStore(Pt).get(Pt).onsuccess = function (e) {
(s = e.target.result || { id: Pt }), h();
}),
(function (e, t) {
e
.objectStore(xt)
.index("deletedOrLocal")
.count(IDBKeyRange.only("0")).onsuccess =
function (e) {
t(e.target.result);
};
})(f, function (e) {
(a = e), h();
}),
Qt ||
(Qt = (function (e, t, n) {
return new Promise(function (r) {
var i = te([""]);
let o;
if ("function" == typeof n) {
const r = n(i);
o = e.objectStore(t).put(r);
} else {
const r = n;
o = e.objectStore(t).put(i, r);
}
(o.onsuccess = function () {
var e =
navigator.userAgent.match(
/Chrome\/(\d+)/
),
t = navigator.userAgent.match(/Edge\//);
r(t || !e || parseInt(e[1], 10) >= 43);
}),
(o.onerror = e.onabort =
function (e) {
e.preventDefault(),
e.stopPropagation(),
r(!1);
});
}).catch(function () {
return !1;
});
})(f, "detect-blob-support", "key")),
Qt.then(function (e) {
(c = e), d();
}),
(f.oncomplete = function () {
(l = !0), d();
}),
(f.onabort = Et(n));
}),
(h.onerror = function (e) {
var t = e.target.error && e.target.error.message;
t
? -1 !==
t.indexOf(
"stored database is a higher version"
) &&
(t = new Error(
'This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter'
))
: (t =
"Failed to open indexedDB, are you in private browsing mode?"),
w("error", t),
n(N(B, t));
});
})(n, e, t);
},
t,
n.constructor
);
}
Ht.valid = function () {
try {
return (
"undefined" != typeof indexedDB &&
"undefined" != typeof IDBKeyRange
);
} catch (e) {
return !1;
}
};
const Xt = {};
function Zt(e) {
const t = e.doc || e.ok,
n = t && t._attachments;
n &&
Object.keys(n).forEach(function (e) {
const t = n[e];
t.data = ie(t.data, t.content_type);
});
}
function en(e) {
return /^_design/.test(e)
? "_design/" + encodeURIComponent(e.slice(8))
: e.startsWith("_local/")
? "_local/" + encodeURIComponent(e.slice(7))
: encodeURIComponent(e);
}
function tn(e) {
return e._attachments && Object.keys(e._attachments)
? Promise.all(
Object.keys(e._attachments).map(function (t) {
const n = e._attachments[t];
if (n.data && "string" != typeof n.data)
return new Promise(function (e) {
ae(n.data, e);
}).then(function (e) {
n.data = e;
});
})
)
: Promise.resolve();
}
function nn(e, t) {
if (
(function (e) {
if (!e.prefix) return !1;
const t = Y(e.prefix).protocol;
return "http" === t || "https" === t;
})(t)
) {
const n = t.name.substr(t.prefix.length);
e = t.prefix.replace(/\/?$/, "/") + encodeURIComponent(n);
}
const n = Y(e);
(n.user || n.password) &&
(n.auth = { username: n.user, password: n.password });
const r = n.path.replace(/(^\/|\/$)/g, "").split("/");
return (
(n.db = r.pop()),
-1 === n.db.indexOf("%") && (n.db = encodeURIComponent(n.db)),
(n.path = r.join("/")),
n
);
}
function rn(e, t) {
return on(e, e.db + "/" + t);
}
function on(e, t) {
const n = e.path ? "/" : "";
return (
e.protocol +
"://" +
e.host +
(e.port ? ":" + e.port : "") +
"/" +
e.path +
n +
t
);
}
function sn(e) {
const t = Object.keys(e);
return 0 === t.length
? ""
: "?" +
t
.map((t) => t + "=" + encodeURIComponent(e[t]))
.join("&");
}
function an(e, t) {
const r = this,
i = nn(e.name, e),
o = rn(i, "");
e = f(e);
const s = async function (t, n) {
if (
(((n = n || {}).headers = n.headers || new ze()),
(n.credentials = "include"),
e.auth || i.auth)
) {
const t = e.auth || i.auth,
r = t.username + ":" + t.password,
o = ee(unescape(encodeURIComponent(r)));
n.headers.set("Authorization", "Basic " + o);
}
const r = e.headers || {};
Object.keys(r).forEach(function (e) {
n.headers.append(e, r[e]);
}),
(function (e) {
const t =
"undefined" != typeof navigator && navigator.userAgent
? navigator.userAgent.toLowerCase()
: "",
n = -1 !== t.indexOf("msie"),
r = -1 !== t.indexOf("trident"),
i = -1 !== t.indexOf("edge"),
o = !("method" in e) || "GET" === e.method;
return (n || r || i) && o;
})(n) &&
(t +=
(-1 === t.indexOf("?") ? "?" : "&") +
"_nonce=" +
Date.now());
const o = e.fetch || Je;
return await o(t, n);
};
function a(e, t) {
return h(e, function (...e) {
l()
.then(function () {
return t.apply(this, e);
})
.catch(function (t) {
e.pop()(t);
});
}).bind(r);
}
async function c(e, t) {
const n = {};
((t = t || {}).headers = t.headers || new ze()),
t.headers.get("Content-Type") ||
t.headers.set("Content-Type", "application/json"),
t.headers.get("Accept") ||
t.headers.set("Accept", "application/json");
const r = await s(e, t);
(n.ok = r.ok), (n.status = r.status);
const i = await r.json();
if (((n.data = i), !n.ok)) {
n.data.status = n.status;
throw U(n.data);
}
return (
Array.isArray(n.data) &&
(n.data = n.data.map(function (e) {
return e.error || e.missing ? U(e) : e;
})),
n
);
}
let u;
async function l() {
return e.skip_setup
? Promise.resolve()
: u ||
((u = c(o)
.catch(function (e) {
return e && e.status && 404 === e.status
? (j(
404,
"PouchDB is just detecting if the remote exists."
),
c(o, { method: "PUT" }))
: Promise.reject(e);
})
.catch(function (e) {
return (
!(!e || !e.status || 412 !== e.status) ||
Promise.reject(e)
);
})),
u.catch(function () {
u = null;
}),
u);
}
function d(e) {
return e.split("/").map(encodeURIComponent).join("/");
}
b(function () {
t(null, r);
}),
(r._remote = !0),
(r.type = function () {
return "http";
}),
(r.id = a("id", async function (e) {
let t;
try {
const e = await s(on(i, ""));
t = await e.json();
} catch (e) {
t = {};
}
e(null, t && t.uuid ? t.uuid + i.db : rn(i, ""));
})),
(r.compact = a("compact", async function (e, t) {
"function" == typeof e && ((t = e), (e = {})),
(e = f(e)),
await c(rn(i, "_compact"), { method: "POST" }),
(function n() {
r.info(function (r, i) {
i && !i.compact_running
? t(null, { ok: !0 })
: setTimeout(n, e.interval || 200);
});
})();
})),
(r.bulkGet = h("bulkGet", function (e, t) {
const n = this;
async function r(t) {
const n = {};
e.revs && (n.revs = !0),
e.attachments && (n.attachments = !0),
e.latest && (n.latest = !0);
try {
const r = await c(rn(i, "_bulk_get" + sn(n)), {
method: "POST",
body: JSON.stringify({ docs: e.docs }),
});
e.attachments &&
e.binary &&
r.data.results.forEach(function (e) {
e.docs.forEach(Zt);
}),
t(null, r.data);
} catch (e) {
t(e);
}
}
function o() {
const r = Math.ceil(e.docs.length / 50);
let i = 0;
const o = new Array(r);
function s(e) {
return function (n, s) {
(o[e] = s.results),
++i === r && t(null, { results: o.flat() });
};
}
for (let t = 0; t < r; t++) {
const r = p(e, [
"revs",
"attachments",
"binary",
"latest",
]);
(r.docs = e.docs.slice(
50 * t,
Math.min(e.docs.length, 50 * (t + 1))
)),
g(n, r, s(t));
}
}
const s = on(i, ""),
a = Xt[s];
"boolean" != typeof a
? r(function (e, n) {
e
? ((Xt[s] = !1),
j(
e.status,
"PouchDB is just detecting if the remote supports the _bulk_get API."
),
o())
: ((Xt[s] = !0), t(null, n));
})
: a
? r(t)
: o();
})),
(r._info = async function (e) {
try {
await l();
const t = await s(rn(i, "")),
n = await t.json();
(n.host = rn(i, "")), e(null, n);
} catch (t) {
e(t);
}
}),
(r.fetch = async function (e, t) {
await l();
const n =
"/" === e.substring(0, 1)
? on(i, e.substring(1))
: rn(i, e);
return s(n, t);
}),
(r.get = a("get", async function (e, t, n) {
"function" == typeof t && ((n = t), (t = {}));
const r = {};
function o(e) {
const n = e._attachments,
r = n && Object.keys(n);
if (!n || !r.length) return;
return (function (e, t) {
return new Promise(function (n, r) {
var i,
o = 0,
s = 0,
a = 0,
c = e.length;
function u() {
++a === c ? (i ? r(i) : n()) : d();
}
function f() {
o--, u();
}
function l(e) {
o--, (i = i || e), u();
}
function d() {
for (; o < t && s < c; ) o++, e[s++]().then(f, l);
}
d();
});
})(
r.map(function (r) {
return function () {
return (async function (r) {
const o = n[r],
a = en(e._id) + "/" + d(r) + "?rev=" + e._rev,
c = await s(rn(i, a));
let u, f;
if (
((u =
"buffer" in c
? await c.buffer()
: await c.blob()),
t.binary)
) {
const e = Object.getOwnPropertyDescriptor(
u.__proto__,
"type"
);
(e && !e.set) || (u.type = o.content_type),
(f = u);
} else
f = await new Promise(function (e) {
ae(u, e);
});
delete o.stub, delete o.length, (o.data = f);
})(r);
};
}),
5
);
}
(t = f(t)).revs && (r.revs = !0),
t.revs_info && (r.revs_info = !0),
t.latest && (r.latest = !0),
t.open_revs &&
("all" !== t.open_revs &&
(t.open_revs = JSON.stringify(t.open_revs)),
(r.open_revs = t.open_revs)),
t.rev && (r.rev = t.rev),
t.conflicts && (r.conflicts = t.conflicts),
t.update_seq && (r.update_seq = t.update_seq),
(e = en(e));
const a = rn(i, e + sn(r));
try {
const e = await c(a);
t.attachments &&
(await ((u = e.data),
Array.isArray(u)
? Promise.all(
u.map(function (e) {
if (e.ok) return o(e.ok);
})
)
: o(u))),
n(null, e.data);
} catch (t) {
(t.docId = e), n(t);
}
var u;
})),
(r.remove = a("remove", async function (e, t, n, r) {
let o;
"string" == typeof t
? ((o = { _id: e, _rev: t }),
"function" == typeof n && ((r = n), (n = {})))
: ((o = e),
"function" == typeof t
? ((r = t), (n = {}))
: ((r = n), (n = t)));
const s = o._rev || n.rev,
a = rn(i, en(o._id)) + "?rev=" + s;
try {
r(null, (await c(a, { method: "DELETE" })).data);
} catch (e) {
r(e);
}
})),
(r.getAttachment = a(
"getAttachment",
async function (e, t, r, o) {
"function" == typeof r && ((o = r), (r = {}));
const a = r.rev ? "?rev=" + r.rev : "",
c = rn(i, en(e)) + "/" + d(t) + a;
let u;
try {
const e = await s(c, { method: "GET" });
if (!e.ok) throw e;
let t;
if (
((u = e.headers.get("content-type")),
(t =
void 0 === n ||
n.browser ||
"function" != typeof e.buffer
? await e.blob()
: await e.buffer()),
void 0 !== n && !n.browser)
) {
const e = Object.getOwnPropertyDescriptor(
t.__proto__,
"type"
);
(e && !e.set) || (t.type = u);
}
o(null, t);
} catch (e) {
o(e);
}
}
)),
(r.removeAttachment = a(
"removeAttachment",
async function (e, t, n, r) {
const o = rn(i, en(e) + "/" + d(t)) + "?rev=" + n;
try {
r(null, (await c(o, { method: "DELETE" })).data);
} catch (e) {
r(e);
}
}
)),
(r.putAttachment = a(
"putAttachment",
async function (e, t, n, r, o, s) {
"function" == typeof o &&
((s = o), (o = r), (r = n), (n = null));
const a = en(e) + "/" + d(t);
let u = rn(i, a);
if ((n && (u += "?rev=" + n), "string" == typeof r)) {
let e;
try {
e = Z(r);
} catch (e) {
return s(
N($, "Attachment is not a valid base64 string")
);
}
r = e ? re(e, o) : "";
}
try {
s(
null,
(
await c(u, {
headers: new ze({ "Content-Type": o }),
method: "PUT",
body: r,
})
).data
);
} catch (e) {
s(e);
}
}
)),
(r._bulkDocs = async function (e, t, n) {
e.new_edits = t.new_edits;
try {
await l(), await Promise.all(e.docs.map(tn));
n(
null,
(
await c(rn(i, "_bulk_docs"), {
method: "POST",
body: JSON.stringify(e),
})
).data
);
} catch (e) {
n(e);
}
}),
(r._put = async function (e, t, n) {
try {
await l(), await tn(e);
n(
null,
(
await c(rn(i, en(e._id)), {
method: "PUT",
body: JSON.stringify(e),
})
).data
);
} catch (t) {
(t.docId = e && e._id), n(t);
}
}),
(r.allDocs = a("allDocs", async function (e, t) {
"function" == typeof e && ((t = e), (e = {}));
const n = {};
let r,
o = "GET";
(e = f(e)).conflicts && (n.conflicts = !0),
e.update_seq && (n.update_seq = !0),
e.descending && (n.descending = !0),
e.include_docs && (n.include_docs = !0),
e.attachments && (n.attachments = !0),
e.key && (n.key = JSON.stringify(e.key)),
e.start_key && (e.startkey = e.start_key),
e.startkey && (n.startkey = JSON.stringify(e.startkey)),
e.end_key && (e.endkey = e.end_key),
e.endkey && (n.endkey = JSON.stringify(e.endkey)),
void 0 !== e.inclusive_end &&
(n.inclusive_end = !!e.inclusive_end),
void 0 !== e.limit && (n.limit = e.limit),
void 0 !== e.skip && (n.skip = e.skip);
const s = sn(n);
void 0 !== e.keys && ((o = "POST"), (r = { keys: e.keys }));
try {
const n = await c(rn(i, "_all_docs" + s), {
method: o,
body: JSON.stringify(r),
});
e.include_docs &&
e.attachments &&
e.binary &&
n.data.rows.forEach(Zt),
t(null, n.data);
} catch (e) {
t(e);
}
})),
(r._changes = function (e) {
const t = "batch_size" in e ? e.batch_size : 25;
(e = f(e)).continuous &&
!("heartbeat" in e) &&
(e.heartbeat = 1e4);
let n = "timeout" in e ? e.timeout : 3e4;
"timeout" in e &&
e.timeout &&
n - e.timeout < 5e3 &&
(n = e.timeout + 5e3),
"heartbeat" in e &&
e.heartbeat &&
n - e.heartbeat < 5e3 &&
(n = e.heartbeat + 5e3);
const r = {};
"timeout" in e && e.timeout && (r.timeout = e.timeout);
const o = void 0 !== e.limit && e.limit;
let s = o;
if (
(e.style && (r.style = e.style),
(e.include_docs ||
(e.filter && "function" == typeof e.filter)) &&
(r.include_docs = !0),
e.attachments && (r.attachments = !0),
e.continuous && (r.feed = "longpoll"),
e.seq_interval && (r.seq_interval = e.seq_interval),
e.conflicts && (r.conflicts = !0),
e.descending && (r.descending = !0),
e.update_seq && (r.update_seq = !0),
"heartbeat" in e &&
e.heartbeat &&
(r.heartbeat = e.heartbeat),
e.filter &&
"string" == typeof e.filter &&
(r.filter = e.filter),
e.view &&
"string" == typeof e.view &&
((r.filter = "_view"), (r.view = e.view)),
e.query_params && "object" == typeof e.query_params)
)
for (const t in e.query_params)
Object.prototype.hasOwnProperty.call(
e.query_params,
t
) && (r[t] = e.query_params[t]);
let a,
u = "GET";
e.doc_ids
? ((r.filter = "_doc_ids"),
(u = "POST"),
(a = { doc_ids: e.doc_ids }))
: e.selector &&
((r.filter = "_selector"),
(u = "POST"),
(a = { selector: e.selector }));
const d = new AbortController();
let h;
const p = async function (n, f) {
if (e.aborted) return;
(r.since = n),
"object" == typeof r.since &&
(r.since = JSON.stringify(r.since)),
e.descending
? o && (r.limit = s)
: (r.limit = !o || s > t ? t : s);
const p = rn(i, "_changes" + sn(r)),
v = {
signal: d.signal,
method: u,
body: JSON.stringify(a),
};
if (((h = n), !e.aborted))
try {
await l();
f(null, (await c(p, v)).data);
} catch (e) {
f(e);
}
},
v = { results: [] },
_ = function (n, r) {
if (e.aborted) return;
let i = 0;
if (r && r.results) {
(i = r.results.length), (v.last_seq = r.last_seq);
let t = null,
n = null;
"number" == typeof r.pending && (t = r.pending),
("string" != typeof v.last_seq &&
"number" != typeof v.last_seq) ||
(n = v.last_seq);
(({}).query = e.query_params),
(r.results = r.results.filter(function (r) {
s--;
const i = F(e)(r);
return (
i &&
(e.include_docs &&
e.attachments &&
e.binary &&
Zt(r),
e.return_docs && v.results.push(r),
e.onChange(r, t, n)),
i
);
}));
} else if (n)
return (e.aborted = !0), void e.complete(n);
r && r.last_seq && (h = r.last_seq);
const a = (o && s <= 0) || (r && i < t) || e.descending;
(!e.continuous || (o && s <= 0)) && a
? e.complete(null, v)
: b(function () {
p(h, _);
});
};
return (
p(e.since || 0, _),
{
cancel: function () {
(e.aborted = !0), d.abort();
},
}
);
}),
(r.revsDiff = a("revsDiff", async function (e, t, n) {
"function" == typeof t && ((n = t), (t = {}));
try {
n(
null,
(
await c(rn(i, "_revs_diff"), {
method: "POST",
body: JSON.stringify(e),
})
).data
);
} catch (e) {
n(e);
}
})),
(r._close = function (e) {
e();
}),
(r._destroy = async function (e, t) {
try {
t(null, await c(rn(i, ""), { method: "DELETE" }));
} catch (e) {
404 === e.status ? t(null, { ok: !0 }) : t(e);
}
});
}
an.valid = function () {
return !0;
};
class cn extends Error {
constructor(e) {
super(),
(this.status = 400),
(this.name = "query_parse_error"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, cn);
} catch (e) {}
}
}
class un extends Error {
constructor(e) {
super(),
(this.status = 404),
(this.name = "not_found"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, un);
} catch (e) {}
}
}
class fn extends Error {
constructor(e) {
super(),
(this.status = 500),
(this.name = "invalid_value"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, fn);
} catch (e) {}
}
}
function ln(e, t) {
return (
t &&
e.then(
function (e) {
b(function () {
t(null, e);
});
},
function (e) {
b(function () {
t(e);
});
}
),
e
);
}
function dn(e, t) {
return function () {
var n = arguments,
r = this;
return e.add(function () {
return t.apply(r, n);
});
};
}
function hn(e) {
var t = new Set(e),
n = new Array(t.size),
r = -1;
return (
t.forEach(function (e) {
n[++r] = e;
}),
n
);
}
function pn(e) {
var t = new Array(e.size),
n = -1;
return (
e.forEach(function (e, r) {
t[++n] = r;
}),
t
);
}
function vn(e) {
return new fn(
"builtin " +
e +
" function requires map values to be numbers or number arrays"
);
}
function _n(e) {
for (var t = 0, n = 0, r = e.length; n < r; n++) {
var i = e[n];
if ("number" != typeof i) {
if (!Array.isArray(i)) throw vn("_sum");
t = "number" == typeof t ? [t] : t;
for (var o = 0, s = i.length; o < s; o++) {
var a = i[o];
if ("number" != typeof a) throw vn("_sum");
void 0 === t[o] ? t.push(a) : (t[o] += a);
}
} else "number" == typeof t ? (t += i) : (t[0] += i);
}
return t;
}
var yn = w.bind(null, "log"),
gn = Array.isArray,
mn = JSON.parse;
function bn(e, t) {
return H("return (" + e.replace(/;\s*$/, "") + ");", {
emit: t,
sum: _n,
log: yn,
isArray: gn,
toJSON: mn,
});
}
class wn {
constructor() {
this.promise = Promise.resolve();
}
add(e) {
return (
(this.promise = this.promise
.catch(() => {})
.then(() => e())),
this.promise
);
}
finish() {
return this.promise;
}
}
function kn(e) {
if (!e) return "undefined";
switch (typeof e) {
case "function":
case "string":
return e.toString();
default:
return JSON.stringify(e);
}
}
async function jn(e, t, n, r, i, o) {
const s = (function (e, t) {
return kn(e) + kn(t) + "undefined";
})(n, r);
let a;
if (!i && ((a = e._cachedViews = e._cachedViews || {}), a[s]))
return a[s];
const c = e.info().then(async function (c) {
const u = c.db_name + "-mrview-" + (i ? "temp" : de(s));
await X(e, "_local/" + o, function (e) {
e.views = e.views || {};
let n = t;
-1 === n.indexOf("/") && (n = t + "/" + t);
const r = (e.views[n] = e.views[n] || {});
if (!r[u]) return (r[u] = !0), e;
});
const f = (await e.registerDependentDatabase(u)).db;
f.auto_compaction = !0;
const l = {
name: u,
db: f,
sourceDB: e,
adapter: e.adapter,
mapFun: n,
reduceFun: r,
};
let d;
try {
d = await l.db.get("_local/lastSeq");
} catch (e) {
if (404 !== e.status) throw e;
}
return (
(l.seq = d ? d.seq : 0),
a &&
l.db.once("destroyed", function () {
delete a[s];
}),
l
);
});
return a && (a[s] = c), c;
}
const qn = {},
On = new wn();
function An(e) {
return -1 === e.indexOf("/") ? [e, e] : e.split("/");
}
function Sn(e, t, n) {
try {
e.emit("error", t);
} catch (e) {
w(
"error",
"The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."
),
w("error", t, n);
}
}
var xn = function (e, t) {
return _n(t);
},
Pn = function (e, t) {
return t.length;
},
Cn = function (e, t) {
return {
sum: _n(t),
min: Math.min.apply(null, t),
max: Math.max.apply(null, t),
count: t.length,
sumsqr: (function (e) {
for (var t = 0, n = 0, r = e.length; n < r; n++) {
var i = e[n];
t += i * i;
}
return t;
})(t),
};
};
var En = (function (e, t, n, r) {
function i(e, t, n) {
try {
t(n);
} catch (r) {
Sn(e, r, { fun: t, doc: n });
}
}
function o(e, t, n, r, i) {
try {
return { output: t(n, r, i) };
} catch (o) {
return (
Sn(e, o, { fun: t, keys: n, values: r, rereduce: i }),
{ error: o }
);
}
}
function s(e, t) {
const n = et(e.key, t.key);
return 0 !== n ? n : et(e.value, t.value);
}
function a(e, t, n) {
return (
(n = n || 0),
"number" == typeof t
? e.slice(n, t + n)
: n > 0
? e.slice(n)
: e
);
}
function c(e) {
const t = e.value;
return (t && "object" == typeof t && t._id) || e.id;
}
function u(e) {
return function (t) {
return (
e.include_docs &&
e.attachments &&
e.binary &&
(function (e) {
for (const t of e.rows) {
const e = t.doc && t.doc._attachments;
if (e)
for (const t of Object.keys(e)) {
const n = e[t];
e[t].data = ie(n.data, n.content_type);
}
}
})(t),
t
);
};
}
function f(e, t, n, r) {
let i = t[e];
void 0 !== i &&
(r && (i = encodeURIComponent(JSON.stringify(i))),
n.push(e + "=" + i));
}
function l(e) {
if (void 0 !== e) {
const t = Number(e);
return isNaN(t) || t !== parseInt(e, 10) ? e : t;
}
}
function d(e) {
if (e) {
if ("number" != typeof e)
return new cn(`Invalid value for integer: "${e}"`);
if (e < 0)
return new cn(
`Invalid value for positive integer: "${e}"`
);
}
}
function h(e, t) {
const n = e.descending ? "endkey" : "startkey",
r = e.descending ? "startkey" : "endkey";
if (void 0 !== e[n] && void 0 !== e[r] && et(e[n], e[r]) > 0)
throw new cn(
"No rows can match your key range, reverse your start_key and end_key or set {descending : true}"
);
if (t.reduce && !1 !== e.reduce) {
if (e.include_docs)
throw new cn("{include_docs:true} is invalid for reduce");
if (
e.keys &&
e.keys.length > 1 &&
!e.group &&
!e.group_level
)
throw new cn(
"Multi-key fetches for reduce views must use {group: true}"
);
}
for (const t of ["group_level", "limit", "skip"]) {
const n = d(e[t]);
if (n) throw n;
}
}
function p(e) {
return function (t) {
if (404 === t.status) return e;
throw t;
};
}
function v(e, t, n) {
return e.db
.get("_local/lastSeq")
.catch(p({ _id: "_local/lastSeq", seq: 0 }))
.then(function (r) {
var i = pn(t);
return Promise.all(
i.map(function (n) {
return (async function (e, t, n) {
const r = "_local/doc_" + e,
i = { _id: r, keys: [] },
o = n.get(e),
s = o[0],
a = o[1],
c = await ((function (e) {
return 1 === e.length && /^1-/.test(e[0].rev);
})(a)
? Promise.resolve(i)
: t.db.get(r).catch(p(i)));
return (function (e, t) {
const n = [],
r = new Set();
for (const e of t.rows) {
const t = e.doc;
if (
t &&
(n.push(t),
r.add(t._id),
(t._deleted = !s.has(t._id)),
!t._deleted)
) {
const e = s.get(t._id);
"value" in e && (t.value = e.value);
}
}
const i = pn(s);
for (const e of i)
if (!r.has(e)) {
const t = { _id: e },
r = s.get(e);
"value" in r && (t.value = r.value),
n.push(t);
}
return (
(e.keys = hn(i.concat(e.keys))), n.push(e), n
);
})(
c,
await (function (e) {
return e.keys.length
? t.db.allDocs({
keys: e.keys,
include_docs: !0,
})
: Promise.resolve({ rows: [] });
})(c)
);
})(n, e, t);
})
)
.then(function (t) {
var i = t.flat();
return (
(r.seq = n), i.push(r), e.db.bulkDocs({ docs: i })
);
})
.then(() =>
(function (e) {
return e.sourceDB
.get("_local/purges")
.then(function (t) {
const n = t.purgeSeq;
return e.db
.get("_local/purgeSeq")
.then(function (e) {
return e._rev;
})
.catch(p(void 0))
.then(function (t) {
return e.db.put({
_id: "_local/purgeSeq",
_rev: t,
purgeSeq: n,
});
});
})
.catch(function (e) {
if (404 !== e.status) throw e;
});
})(e)
);
});
}
function _(e) {
const t = "string" == typeof e ? e : e.name;
let n = qn[t];
return n || (n = qn[t] = new wn()), n;
}
async function y(e, n) {
return dn(_(e), function () {
return (async function (e, n) {
let r, o, a;
const c = t(e.mapFun, function (e, t) {
const n = { id: o._id, key: tt(e) };
null != t && (n.value = tt(t)), r.push(n);
});
let u = e.seq || 0;
let f = 0;
const l = { view: e.name, indexed_docs: f };
e.sourceDB.emit("indexing", l);
const d = new wn();
async function h() {
return (function (t, l) {
const p = t.results;
if (!p.length && !l.length) return;
for (const e of l) {
if (
p.findIndex(function (t) {
return t.id === e.docId;
}) < 0
) {
const t = {
_id: e.docId,
doc: { _id: e.docId, _deleted: 1 },
changes: [],
};
e.doc &&
((t.doc = e.doc),
t.changes.push({ rev: e.doc._rev })),
p.push(t);
}
}
const y = (function (t) {
const n = new Map();
for (const a of t) {
if ("_" !== a.doc._id[0]) {
(r = []),
(o = a.doc),
o._deleted || i(e.sourceDB, c, o),
r.sort(s);
const t = _(r);
n.set(a.doc._id, [t, a.changes]);
}
u = a.seq;
}
return n;
})(p);
d.add(
(function (t, n) {
return function () {
return v(e, t, n);
};
})(y, u)
),
(f += p.length);
const g = {
view: e.name,
last_seq: t.last_seq,
results_count: p.length,
indexed_docs: f,
};
if (
(e.sourceDB.emit("indexing", g),
e.sourceDB.activeTasks.update(a, {
completed_items: f,
}),
p.length < n.changes_batch_size)
)
return;
return h();
})(
await e.sourceDB.changes({
return_docs: !0,
conflicts: !0,
include_docs: !0,
style: "all_docs",
since: u,
limit: n.changes_batch_size,
}),
await e.db
.get("_local/purgeSeq")
.then(function (e) {
return e.purgeSeq;
})
.catch(p(-1))
.then(function (t) {
return e.sourceDB
.get("_local/purges")
.then(function (n) {
const r = n.purges
.filter(function (e, n) {
return n > t;
})
.map((e) => e.docId),
i = r.filter(function (e, t) {
return r.indexOf(e) === t;
});
return Promise.all(
i.map(function (t) {
return e.sourceDB
.get(t)
.then(function (e) {
return { docId: t, doc: e };
})
.catch(p({ docId: t }));
})
);
})
.catch(p([]));
})
);
}
function _(e) {
const t = new Map();
let n;
for (let r = 0, i = e.length; r < i; r++) {
const i = e[r],
o = [i.key, i.id];
r > 0 && 0 === et(i.key, n) && o.push(r),
t.set(rt(o), i),
(n = i.key);
}
return t;
}
try {
await e.sourceDB.info().then(function (t) {
a = e.sourceDB.activeTasks.add({
name: "view_indexing",
total_items: t.update_seq - u,
});
}),
await h(),
await d.finish(),
(e.seq = u),
e.sourceDB.activeTasks.remove(a);
} catch (t) {
e.sourceDB.activeTasks.remove(a, t);
}
})(e, n);
})();
}
function g(e, t) {
return dn(_(e), function () {
return (async function (e, t) {
let r;
const i = e.reduceFun && !1 !== t.reduce,
s = t.skip || 0;
void 0 === t.keys ||
t.keys.length ||
((t.limit = 0), delete t.keys);
async function u(t) {
t.include_docs = !0;
const n = await e.db.allDocs(t);
return (
(r = n.total_rows),
n.rows.map(function (e) {
if (
"value" in e.doc &&
"object" == typeof e.doc.value &&
null !== e.doc.value
) {
const t = Object.keys(e.doc.value).sort(),
n = ["id", "key", "value"];
if (!(t < n || t > n)) return e.doc.value;
}
const t = (function (e) {
for (var t = [], n = [], r = 0; ; ) {
var i = e[r++];
if ("\0" !== i)
switch (i) {
case "1":
t.push(null);
break;
case "2":
t.push("1" === e[r]), r++;
break;
case "3":
var o = it(e, r);
t.push(o.num), (r += o.length);
break;
case "4":
for (var s = ""; ; ) {
var a = e[r];
if ("\0" === a) break;
(s += a), r++;
}
(s = s
.replace(/\u0001\u0001/g, "\0")
.replace(/\u0001\u0002/g, "\x01")
.replace(/\u0002\u0002/g, "\x02")),
t.push(s);
break;
case "5":
var c = { element: [], index: t.length };
t.push(c.element), n.push(c);
break;
case "6":
var u = { element: {}, index: t.length };
t.push(u.element), n.push(u);
break;
default:
throw new Error(
"bad collationIndex or unexpectedly reached end of input: " +
i
);
}
else {
if (1 === t.length) return t.pop();
ot(t, n);
}
}
})(e.doc._id);
return {
key: t[0],
id: t[1],
value: "value" in e.doc ? e.doc.value : null,
};
})
);
}
async function f(u) {
let f;
if (
((f = i
? (function (e, t, r) {
0 === r.group_level && delete r.group_level;
const i = r.group || r.group_level,
s = n(e.reduceFun),
c = [],
u = isNaN(r.group_level)
? Number.POSITIVE_INFINITY
: r.group_level;
for (const e of t) {
const t = c[c.length - 1];
let n = i ? e.key : null;
i && Array.isArray(n) && (n = n.slice(0, u)),
t && 0 === et(t.groupKey, n)
? (t.keys.push([e.key, e.id]),
t.values.push(e.value))
: c.push({
keys: [[e.key, e.id]],
values: [e.value],
groupKey: n,
});
}
t = [];
for (const n of c) {
const r = o(
e.sourceDB,
s,
n.keys,
n.values,
!1
);
if (r.error && r.error instanceof fn)
throw r.error;
t.push({
value: r.error ? null : r.output,
key: n.groupKey,
});
}
return { rows: a(t, r.limit, r.skip) };
})(e, u, t)
: void 0 === t.keys
? { total_rows: r, offset: s, rows: u }
: {
total_rows: r,
offset: s,
rows: a(u, t.limit, t.skip),
}),
t.update_seq && (f.update_seq = e.seq),
t.include_docs)
) {
const n = hn(u.map(c)),
r = await e.sourceDB.allDocs({
keys: n,
include_docs: !0,
conflicts: t.conflicts,
attachments: t.attachments,
binary: t.binary,
}),
i = new Map();
for (const e of r.rows) i.set(e.id, e.doc);
for (const e of u) {
const t = c(e),
n = i.get(t);
n && (e.doc = n);
}
}
return f;
}
if (void 0 !== t.keys) {
const e = t.keys.map(function (e) {
const n = {
startkey: rt([e]),
endkey: rt([e, {}]),
};
return t.update_seq && (n.update_seq = !0), u(n);
}),
n = await Promise.all(e);
return f(n.flat());
}
{
const e = { descending: t.descending };
let n, r;
if (
(t.update_seq && (e.update_seq = !0),
"start_key" in t && (n = t.start_key),
"startkey" in t && (n = t.startkey),
"end_key" in t && (r = t.end_key),
"endkey" in t && (r = t.endkey),
void 0 !== n &&
(e.startkey = t.descending ? rt([n, {}]) : rt([n])),
void 0 !== r)
) {
let n = !1 !== t.inclusive_end;
t.descending && (n = !n),
(e.endkey = rt(n ? [r, {}] : [r]));
}
if (void 0 !== t.key) {
const n = rt([t.key]),
r = rt([t.key, {}]);
e.descending
? ((e.endkey = n), (e.startkey = r))
: ((e.startkey = n), (e.endkey = r));
}
i ||
("number" == typeof t.limit && (e.limit = t.limit),
(e.skip = s));
return f(await u(e));
}
})(e, t);
})();
}
async function m(t, n, i) {
if ("function" == typeof t._query)
return (function (e, t, n) {
return new Promise(function (r, i) {
e._query(t, n, function (e, t) {
if (e) return i(e);
r(t);
});
});
})(t, n, i);
if (J(t))
return (async function (e, t, n) {
let r,
i,
o = [],
s = "GET";
if (
(f("reduce", n, o),
f("include_docs", n, o),
f("attachments", n, o),
f("limit", n, o),
f("descending", n, o),
f("group", n, o),
f("group_level", n, o),
f("skip", n, o),
f("stale", n, o),
f("conflicts", n, o),
f("startkey", n, o, !0),
f("start_key", n, o, !0),
f("endkey", n, o, !0),
f("end_key", n, o, !0),
f("inclusive_end", n, o),
f("key", n, o, !0),
f("update_seq", n, o),
(o = o.join("&")),
(o = "" === o ? "" : "?" + o),
void 0 !== n.keys)
) {
const e = 2e3,
i =
"keys=" +
encodeURIComponent(JSON.stringify(n.keys));
i.length + o.length + 1 <= e
? (o += ("?" === o[0] ? "&" : "?") + i)
: ((s = "POST"),
"string" == typeof t
? (r = { keys: n.keys })
: (t.keys = n.keys));
}
if ("string" == typeof t) {
const a = An(t),
c = await e.fetch(
"_design/" + a[0] + "/_view/" + a[1] + o,
{
headers: new ze({
"Content-Type": "application/json",
}),
method: s,
body: JSON.stringify(r),
}
);
i = c.ok;
const f = await c.json();
if (!i) throw ((f.status = c.status), U(f));
for (const e of f.rows)
if (
e.value &&
e.value.error &&
"builtin_reduce_error" === e.value.error
)
throw new Error(e.reason);
return new Promise(function (e) {
e(f);
}).then(u(n));
}
r = r || {};
for (const e of Object.keys(t))
Array.isArray(t[e])
? (r[e] = t[e])
: (r[e] = t[e].toString());
const a = await e.fetch("_temp_view" + o, {
headers: new ze({ "Content-Type": "application/json" }),
method: "POST",
body: JSON.stringify(r),
});
i = a.ok;
const c = await a.json();
if (!i) throw ((c.status = a.status), U(c));
return new Promise(function (e) {
e(c);
}).then(u(n));
})(t, n, i);
const o = {
changes_batch_size:
t.__opts.view_update_changes_batch_size || 50,
};
if ("string" != typeof n)
return (
h(i, n),
On.add(async function () {
const r = await jn(
t,
"temp_view/temp_view",
n.map,
n.reduce,
!0,
e
);
return (
(s = y(r, o).then(function () {
return g(r, i);
})),
(a = function () {
return r.db.destroy();
}),
s.then(
function (e) {
return a().then(function () {
return e;
});
},
function (e) {
return a().then(function () {
throw e;
});
}
)
);
var s, a;
}),
On.finish()
);
{
const s = n,
a = An(s),
c = a[0],
u = a[1],
f = await t.get("_design/" + c);
if (!(n = f.views && f.views[u]))
throw new un(`ddoc ${f._id} has no view named ${u}`);
r(f, u), h(i, n);
const l = await jn(t, s, n.map, n.reduce, !1, e);
return "ok" === i.stale || "update_after" === i.stale
? ("update_after" === i.stale &&
b(function () {
y(l, o);
}),
g(l, i))
: (await y(l, o), g(l, i));
}
}
var w;
return {
query: function (e, t, n) {
const r = this;
"function" == typeof t && ((n = t), (t = {})),
(t = t
? (function (e) {
return (
(e.group_level = l(e.group_level)),
(e.limit = l(e.limit)),
(e.skip = l(e.skip)),
e
);
})(t)
: {}),
"function" == typeof e && (e = { map: e });
const i = Promise.resolve().then(function () {
return m(r, e, t);
});
return ln(i, n), i;
},
viewCleanup:
((w = function () {
const t = this;
return "function" == typeof t._viewCleanup
? (function (e) {
return new Promise(function (t, n) {
e._viewCleanup(function (e, r) {
if (e) return n(e);
t(r);
});
});
})(t)
: J(t)
? (async function (e) {
return (
await e.fetch("_view_cleanup", {
headers: new ze({
"Content-Type": "application/json",
}),
method: "POST",
})
).json();
})(t)
: (async function (t) {
try {
const n = await t.get("_local/" + e),
r = new Map();
for (const e of Object.keys(n.views)) {
const t = An(e),
n = "_design/" + t[0],
i = t[1];
let o = r.get(n);
o || ((o = new Set()), r.set(n, o)), o.add(i);
}
const i = { keys: pn(r), include_docs: !0 },
o = await t.allDocs(i),
s = {};
for (const e of o.rows) {
const t = e.key.substring(8);
for (const i of r.get(e.key)) {
let r = t + "/" + i;
n.views[r] || (r = i);
const o = Object.keys(n.views[r]),
a = e.doc && e.doc.views && e.doc.views[i];
for (const e of o) s[e] = s[e] || a;
}
}
const a = Object.keys(s)
.filter(function (e) {
return !s[e];
})
.map(function (e) {
return dn(_(e), function () {
return new t.constructor(
e,
t.__opts
).destroy();
})();
});
return Promise.all(a).then(function () {
return { ok: !0 };
});
} catch (e) {
if (404 === e.status) return { ok: !0 };
throw e;
}
})(t);
}),
function (...e) {
var t = e.pop(),
n = w.apply(this, e);
return "function" == typeof t && ln(n, t), n;
}),
};
})(
"mrviews",
function (e, t) {
if ("function" == typeof e && 2 === e.length) {
var n = e;
return function (e) {
return n(e, t);
};
}
return bn(e.toString(), t);
},
function (e) {
var t = e.toString(),
n = (function (e) {
if (/^_sum/.test(e)) return xn;
if (/^_count/.test(e)) return Pn;
if (/^_stats/.test(e)) return Cn;
if (/^_/.test(e))
throw new Error(
e + " is not a supported reduce function."
);
})(t);
return n || bn(t);
},
function (e, t) {
var n = e.views && e.views[t];
if ("string" != typeof n.map)
throw new un(
"ddoc " +
e._id +
" has no string view named " +
t +
", instead found object of type: " +
typeof n.map
);
}
);
var $n = {
query: function (e, t, n) {
return En.query.call(this, e, t, n);
},
viewCleanup: function (e) {
return En.viewCleanup.call(this, e);
},
};
function In(e, t) {
var n = Object.keys(t._attachments);
return Promise.all(
n.map(function (n) {
return e.getAttachment(t._id, n, { rev: t._rev });
})
);
}
function Ln(e, t, n, r) {
n = f(n);
var i = [],
o = !0;
return Promise.resolve()
.then(function () {
var s = (function (e) {
var t = [];
return (
Object.keys(e).forEach(function (n) {
e[n].missing.forEach(function (e) {
t.push({ id: n, rev: e });
});
}),
{ docs: t, revs: !0, latest: !0 }
);
})(n);
if (s.docs.length)
return e.bulkGet(s).then(function (n) {
if (r.cancelled) throw new Error("cancelled");
return Promise.all(
n.results.map(function (n) {
return Promise.all(
n.docs.map(function (n) {
var r = n.ok;
return (
n.error && (o = !1),
r && r._attachments
? (function (e, t, n) {
var r = J(t) && !J(e),
i = Object.keys(n._attachments);
return r
? e
.get(n._id)
.then(function (r) {
return Promise.all(
i.map(function (i) {
return (function (e, t, n) {
return (
!e._attachments ||
!e._attachments[n] ||
e._attachments[n]
.digest !==
t._attachments[n]
.digest
);
})(r, n, i)
? t.getAttachment(
n._id,
i
)
: e.getAttachment(
r._id,
i
);
})
);
})
.catch(function (e) {
if (404 !== e.status) throw e;
return In(t, n);
})
: In(t, n);
})(t, e, r).then((e) => {
var t = Object.keys(r._attachments);
return (
e.forEach(function (e, n) {
var i = r._attachments[t[n]];
delete i.stub,
delete i.length,
(i.data = e);
}),
r
);
})
: r
);
})
);
})
).then(function (e) {
i = i.concat(e.flat().filter(Boolean));
});
});
})
.then(function () {
return { ok: o, docs: i };
});
}
function Dn(e, t, n, r, i) {
return e
.get(t)
.catch(function (n) {
if (404 === n.status)
return (
("http" !== e.adapter && "https" !== e.adapter) ||
j(
404,
"PouchDB is just checking if a remote checkpoint exists."
),
{
session_id: r,
_id: t,
history: [],
replicator: "pouchdb",
version: 1,
}
);
throw n;
})
.then(function (o) {
if (!i.cancelled && o.last_seq !== n)
return (
(o.history = (o.history || []).filter(function (e) {
return e.session_id !== r;
})),
o.history.unshift({ last_seq: n, session_id: r }),
(o.history = o.history.slice(0, 5)),
(o.version = 1),
(o.replicator = "pouchdb"),
(o.session_id = r),
(o.last_seq = n),
e.put(o).catch(function (o) {
if (409 === o.status) return Dn(e, t, n, r, i);
throw o;
})
);
});
}
class Tn {
constructor(
e,
t,
n,
r,
i = { writeSourceCheckpoint: !0, writeTargetCheckpoint: !0 }
) {
(this.src = e),
(this.target = t),
(this.id = n),
(this.returnValue = r),
(this.opts = i),
void 0 === i.writeSourceCheckpoint &&
(i.writeSourceCheckpoint = !0),
void 0 === i.writeTargetCheckpoint &&
(i.writeTargetCheckpoint = !0);
}
writeCheckpoint(e, t) {
var n = this;
return this.updateTarget(e, t).then(function () {
return n.updateSource(e, t);
});
}
updateTarget(e, t) {
return this.opts.writeTargetCheckpoint
? Dn(this.target, this.id, e, t, this.returnValue)
: Promise.resolve(!0);
}
updateSource(e, t) {
if (this.opts.writeSourceCheckpoint) {
var n = this;
return Dn(this.src, this.id, e, t, this.returnValue).catch(
function (e) {
if (Rn(e))
return (n.opts.writeSourceCheckpoint = !1), !0;
throw e;
}
);
}
return Promise.resolve(!0);
}
getCheckpoint() {
var e = this;
return e.opts.writeSourceCheckpoint ||
e.opts.writeTargetCheckpoint
? e.opts &&
e.opts.writeSourceCheckpoint &&
!e.opts.writeTargetCheckpoint
? e.src
.get(e.id)
.then(function (e) {
return e.last_seq || 0;
})
.catch(function (e) {
if (404 !== e.status) throw e;
return 0;
})
: e.target
.get(e.id)
.then(function (t) {
return e.opts &&
e.opts.writeTargetCheckpoint &&
!e.opts.writeSourceCheckpoint
? t.last_seq || 0
: e.src.get(e.id).then(
function (e) {
return t.version !== e.version
? 0
: (n = t.version
? t.version.toString()
: "undefined") in Bn
? Bn[n](t, e)
: 0;
var n;
},
function (n) {
if (404 === n.status && t.last_seq)
return e.src
.put({ _id: e.id, last_seq: 0 })
.then(
function () {
return 0;
},
function (n) {
return Rn(n)
? ((e.opts.writeSourceCheckpoint =
!1),
t.last_seq)
: 0;
}
);
throw n;
}
);
})
.catch(function (e) {
if (404 !== e.status) throw e;
return 0;
})
: Promise.resolve(0);
}
}
var Bn = {
undefined: function (e, t) {
return 0 === et(e.last_seq, t.last_seq) ? t.last_seq : 0;
},
1: function (e, t) {
return (function (e, t) {
if (e.session_id === t.session_id)
return { last_seq: e.last_seq, history: e.history };
return (function e(t, n) {
var r = t[0],
i = t.slice(1),
o = n[0],
s = n.slice(1);
if (!r || 0 === n.length)
return { last_seq: 0, history: [] };
if (Mn(r.session_id, n))
return { last_seq: r.last_seq, history: t };
if (Mn(o.session_id, i))
return { last_seq: o.last_seq, history: s };
return e(i, s);
})(e.history, t.history);
})(t, e).last_seq;
},
};
function Mn(e, t) {
var n = t[0],
r = t.slice(1);
return (
!(!e || 0 === t.length) && (e === n.session_id || Mn(e, r))
);
}
function Rn(e) {
return (
"number" == typeof e.status &&
4 === Math.floor(e.status / 100)
);
}
function Nn(e, t, n, r, i) {
return this instanceof Tn ? Nn : new Tn(e, t, n, r, i);
}
function Un(e, t, n) {
var r = n.doc_ids ? n.doc_ids.sort(et) : "",
i = n.filter ? n.filter.toString() : "",
o = "",
s = "",
a = "";
return (
n.selector && (a = JSON.stringify(n.selector)),
n.filter &&
n.query_params &&
(o = JSON.stringify(
(function (e) {
return Object.keys(e)
.sort(et)
.reduce(function (t, n) {
return (t[n] = e[n]), t;
}, {});
})(n.query_params)
)),
n.filter && "_view" === n.filter && (s = n.view.toString()),
Promise.all([e.id(), t.id()])
.then(function (e) {
var t = e[0] + e[1] + i + s + o + r + a;
return new Promise(function (e) {
le(t, e);
});
})
.then(function (e) {
return (
"_local/" +
(e = e.replace(/\//g, ".").replace(/\+/g, "_"))
);
})
);
}
function Fn(e, t, n, r, i) {
var o,
s,
a,
c,
u = [],
l = { seq: 0, changes: [], docs: [] },
d = !1,
h = !1,
p = !1,
v = 0,
_ = 0,
y = n.continuous || n.live || !1,
g = n.batch_size || 100,
m = n.batches_limit || 10,
w = n.style || "all_docs",
j = !1,
q = n.doc_ids,
O = n.selector,
A = [],
S = pe();
i = i || {
ok: !0,
start_time: new Date().toISOString(),
docs_read: 0,
docs_written: 0,
doc_write_failures: 0,
errors: [],
};
var x = {};
function P() {
return a
? Promise.resolve()
: Un(e, t, n).then(function (i) {
s = i;
var o = {};
(o =
!1 === n.checkpoint
? {
writeSourceCheckpoint: !1,
writeTargetCheckpoint: !1,
}
: "source" === n.checkpoint
? {
writeSourceCheckpoint: !0,
writeTargetCheckpoint: !1,
}
: "target" === n.checkpoint
? {
writeSourceCheckpoint: !1,
writeTargetCheckpoint: !0,
}
: {
writeSourceCheckpoint: !0,
writeTargetCheckpoint: !0,
}),
(a = new Nn(e, t, s, r, o));
});
}
function C() {
if (((A = []), 0 !== o.docs.length)) {
var e = o.docs,
s = { timeout: n.timeout };
return t.bulkDocs({ docs: e, new_edits: !1 }, s).then(
function (t) {
if (r.cancelled) throw (T(), new Error("cancelled"));
var n = Object.create(null);
t.forEach(function (e) {
e.error && (n[e.id] = e);
});
var o = Object.keys(n).length;
(i.doc_write_failures += o),
(i.docs_written += e.length - o),
e.forEach(function (e) {
var t = n[e._id];
if (t) {
i.errors.push(t);
var o = (t.name || "").toLowerCase();
if ("unauthorized" !== o && "forbidden" !== o)
throw t;
r.emit("denied", f(t));
} else A.push(e);
});
},
function (t) {
throw ((i.doc_write_failures += e.length), t);
}
);
}
}
function E() {
if (o.error)
throw new Error("There was a problem getting docs.");
i.last_seq = _ = o.seq;
var t = f(i);
return (
A.length &&
((t.docs = A),
"number" == typeof o.pending &&
((t.pending = o.pending), delete o.pending),
r.emit("change", t)),
(d = !0),
e.info().then(function (t) {
var n = e.activeTasks.get(c);
if (o && n) {
var r = n.completed_items || 0,
i = parseInt(t.update_seq, 10) - parseInt(v, 10);
e.activeTasks.update(c, {
completed_items: r + o.changes.length,
total_items: i,
});
}
}),
a
.writeCheckpoint(o.seq, S)
.then(function () {
if (
(r.emit("checkpoint", { checkpoint: o.seq }),
(d = !1),
r.cancelled)
)
throw (T(), new Error("cancelled"));
(o = void 0), U();
})
.catch(function (e) {
throw (z(e), e);
})
);
}
function $() {
return Ln(e, t, o.diffs, r).then(function (e) {
(o.error = !e.ok),
e.docs.forEach(function (e) {
delete o.diffs[e._id], i.docs_read++, o.docs.push(e);
});
});
}
function I() {
var e;
r.cancelled ||
o ||
(0 !== u.length
? ((o = u.shift()),
r.emit("checkpoint", { start_next_batch: o.seq }),
((e = {}),
o.changes.forEach(function (t) {
r.emit("checkpoint", { revs_diff: t }),
"_user/" !== t.id &&
(e[t.id] = t.changes.map(function (e) {
return e.rev;
}));
}),
t.revsDiff(e).then(function (e) {
if (r.cancelled) throw (T(), new Error("cancelled"));
o.diffs = e;
}))
.then($)
.then(C)
.then(E)
.then(I)
.catch(function (e) {
D("batch processing terminated with error", e);
}))
: L(!0));
}
function L(e) {
0 !== l.changes.length
? (e || h || l.changes.length >= g) &&
(u.push(l),
(l = { seq: 0, changes: [], docs: [] }),
("pending" !== r.state && "stopped" !== r.state) ||
((r.state = "active"), r.emit("active")),
I())
: 0 !== u.length ||
o ||
(((y && x.live) || h) &&
((r.state = "pending"), r.emit("paused")),
h && T());
}
function D(e, t) {
p ||
(t.message || (t.message = e),
(i.ok = !1),
(i.status = "aborting"),
(u = []),
(l = { seq: 0, changes: [], docs: [] }),
T(t));
}
function T(o) {
if (!(p || (r.cancelled && ((i.status = "cancelled"), d))))
if (
((i.status = i.status || "complete"),
(i.end_time = new Date().toISOString()),
(i.last_seq = _),
(p = !0),
e.activeTasks.remove(c, o),
o)
) {
(o = N(o)).result = i;
var s = (o.name || "").toLowerCase();
"unauthorized" === s || "forbidden" === s
? (r.emit("error", o), r.removeAllListeners())
: (function (e, t, n, r) {
if (!1 === e.retry)
return (
t.emit("error", n), void t.removeAllListeners()
);
if (
("function" != typeof e.back_off_function &&
(e.back_off_function = k),
t.emit("requestError", n),
"active" === t.state || "pending" === t.state)
) {
t.emit("paused", n), (t.state = "stopped");
var i = function () {
e.current_back_off = 0;
};
t.once("paused", function () {
t.removeListener("active", i);
}),
t.once("active", i);
}
(e.current_back_off = e.current_back_off || 0),
(e.current_back_off = e.back_off_function(
e.current_back_off
)),
setTimeout(r, e.current_back_off);
})(n, r, o, function () {
Fn(e, t, n, r);
});
} else r.emit("complete", i), r.removeAllListeners();
}
function B(t, i, o) {
if (r.cancelled) return T();
if (("number" == typeof i && (l.pending = i), F(n)(t)))
(l.seq = t.seq || o),
l.changes.push(t),
r.emit("checkpoint", { pending_batch: l.seq }),
b(function () {
L(0 === u.length && x.live);
});
else {
var s = e.activeTasks.get(c);
if (s) {
var a = s.completed_items || 0;
e.activeTasks.update(c, { completed_items: ++a });
}
}
}
function M(e) {
if (((j = !1), r.cancelled)) return T();
if (e.results.length > 0)
(x.since = e.results[e.results.length - 1].seq), U(), L(!0);
else {
var t = function () {
y ? ((x.live = !0), U()) : (h = !0), L(!0);
};
o || 0 !== e.results.length
? t()
: ((d = !0),
a
.writeCheckpoint(e.last_seq, S)
.then(function () {
if (
((d = !1),
(i.last_seq = _ = e.last_seq),
r.cancelled)
)
throw (T(), new Error("cancelled"));
t();
})
.catch(z));
}
}
function R(e) {
if (((j = !1), r.cancelled)) return T();
D("changes rejected", e);
}
function U() {
if (!j && !h && u.length < m) {
(j = !0),
r._changes &&
(r.removeListener("cancel", r._abortChanges),
r._changes.cancel()),
r.once("cancel", i);
var t = e.changes(x).on("change", B);
t.then(o, o),
t.then(M).catch(R),
n.retry && ((r._changes = t), (r._abortChanges = i));
}
function i() {
t.cancel();
}
function o() {
r.removeListener("cancel", i);
}
}
function K(t) {
return e.info().then(function (r) {
var i =
void 0 === n.since
? parseInt(r.update_seq, 10) - parseInt(t, 10)
: parseInt(r.update_seq, 10);
return (
(c = e.activeTasks.add({
name: `${y ? "continuous " : ""}replication from ${
r.db_name
}`,
total_items: i,
})),
t
);
});
}
function J() {
P()
.then(function () {
if (!r.cancelled)
return a
.getCheckpoint()
.then(K)
.then(function (e) {
(v = e),
(x = {
since: (_ = e),
limit: g,
batch_size: g,
style: w,
doc_ids: q,
selector: O,
return_docs: !0,
}),
n.filter &&
("string" != typeof n.filter
? (x.include_docs = !0)
: (x.filter = n.filter)),
"heartbeat" in n && (x.heartbeat = n.heartbeat),
"timeout" in n && (x.timeout = n.timeout),
n.query_params &&
(x.query_params = n.query_params),
n.view && (x.view = n.view),
U();
});
T();
})
.catch(function (e) {
D("getCheckpoint rejected with ", e);
});
}
function z(e) {
(d = !1), D("writeCheckpoint completed with error", e);
}
r.ready(e, t),
r.cancelled
? T()
: (r._addedListeners ||
(r.once("cancel", T),
"function" == typeof n.complete &&
(r.once("error", n.complete),
r.once("complete", function (e) {
n.complete(null, e);
})),
(r._addedListeners = !0)),
void 0 === n.since
? J()
: P()
.then(function () {
return (d = !0), a.writeCheckpoint(n.since, S);
})
.then(function () {
(d = !1),
r.cancelled ? T() : ((_ = n.since), J());
})
.catch(z));
}
class Kn extends a {
constructor() {
super(), (this.cancelled = !1), (this.state = "pending");
const e = new Promise((e, t) => {
this.once("complete", e), this.once("error", t);
});
(this.then = function (t, n) {
return e.then(t, n);
}),
(this.catch = function (t) {
return e.catch(t);
}),
this.catch(function () {});
}
cancel() {
(this.cancelled = !0),
(this.state = "cancelled"),
this.emit("cancel");
}
ready(e, t) {
if (this._readyCalled) return;
this._readyCalled = !0;
const n = () => {
this.cancel();
};
function r() {
e.removeListener("destroyed", n),
t.removeListener("destroyed", n);
}
e.once("destroyed", n),
t.once("destroyed", n),
this.once("complete", r),
this.once("error", r);
}
}
function Jn(e, t) {
var n = t.PouchConstructor;
return "string" == typeof e ? new n(e, t) : e;
}
function zn(e, t, n, r) {
if (
("function" == typeof n && ((r = n), (n = {})),
void 0 === n && (n = {}),
n.doc_ids && !Array.isArray(n.doc_ids))
)
throw N(D, "`doc_ids` filter parameter is not a list.");
(n.complete = r),
((n = f(n)).continuous = n.continuous || n.live),
(n.retry = "retry" in n && n.retry),
(n.PouchConstructor = n.PouchConstructor || this);
var i = new Kn(n);
return Fn(Jn(e, n), Jn(t, n), n, i), i;
}
function Vn(e, t, n, r) {
return (
"function" == typeof n && ((r = n), (n = {})),
void 0 === n && (n = {}),
((n = f(n)).PouchConstructor = n.PouchConstructor || this),
(e = Jn(e, n)),
(t = Jn(t, n)),
new Gn(e, t, n, r)
);
}
class Gn extends a {
constructor(e, t, n, r) {
super(), (this.canceled = !1);
const i = n.push ? Object.assign({}, n, n.push) : n,
o = n.pull ? Object.assign({}, n, n.pull) : n;
(this.push = zn(e, t, i)),
(this.pull = zn(t, e, o)),
(this.pushPaused = !0),
(this.pullPaused = !0);
const s = (e) => {
this.emit("change", { direction: "pull", change: e });
},
a = (e) => {
this.emit("change", { direction: "push", change: e });
},
c = (e) => {
this.emit("denied", { direction: "push", doc: e });
},
u = (e) => {
this.emit("denied", { direction: "pull", doc: e });
},
f = () => {
(this.pushPaused = !0),
this.pullPaused && this.emit("paused");
},
l = () => {
(this.pullPaused = !0),
this.pushPaused && this.emit("paused");
},
d = () => {
(this.pushPaused = !1),
this.pullPaused &&
this.emit("active", { direction: "push" });
},
h = () => {
(this.pullPaused = !1),
this.pushPaused &&
this.emit("active", { direction: "pull" });
};
let p = {};
const v = (e) => (t, n) => {
(("change" === t && (n === s || n === a)) ||
("denied" === t && (n === u || n === c)) ||
("paused" === t && (n === l || n === f)) ||
("active" === t && (n === h || n === d))) &&
(t in p || (p[t] = {}),
(p[t][e] = !0),
2 === Object.keys(p[t]).length &&
this.removeAllListeners(t));
};
function _(e, t, n) {
-1 == e.listeners(t).indexOf(n) && e.on(t, n);
}
n.live &&
(this.push.on("complete", this.pull.cancel.bind(this.pull)),
this.pull.on("complete", this.push.cancel.bind(this.push))),
this.on("newListener", function (e) {
"change" === e
? (_(this.pull, "change", s), _(this.push, "change", a))
: "denied" === e
? (_(this.pull, "denied", u), _(this.push, "denied", c))
: "active" === e
? (_(this.pull, "active", h), _(this.push, "active", d))
: "paused" === e &&
(_(this.pull, "paused", l),
_(this.push, "paused", f));
}),
this.on("removeListener", function (e) {
"change" === e
? (this.pull.removeListener("change", s),
this.push.removeListener("change", a))
: "denied" === e
? (this.pull.removeListener("denied", u),
this.push.removeListener("denied", c))
: "active" === e
? (this.pull.removeListener("active", h),
this.push.removeListener("active", d))
: "paused" === e &&
(this.pull.removeListener("paused", l),
this.push.removeListener("paused", f));
}),
this.pull.on("removeListener", v("pull")),
this.push.on("removeListener", v("push"));
const y = Promise.all([this.push, this.pull]).then(
(e) => {
const t = { push: e[0], pull: e[1] };
return (
this.emit("complete", t),
r && r(null, t),
this.removeAllListeners(),
t
);
},
(e) => {
if (
(this.cancel(),
r ? r(e) : this.emit("error", e),
this.removeAllListeners(),
r)
)
throw e;
}
);
(this.then = function (e, t) {
return y.then(e, t);
}),
(this.catch = function (e) {
return y.catch(e);
});
}
cancel() {
this.canceled ||
((this.canceled = !0),
this.push.cancel(),
this.pull.cancel());
}
}
Ke.plugin(function (e) {
e.adapter("idb", Ht, !0);
})
.plugin(function (e) {
e.adapter("http", an, !1), e.adapter("https", an, !1);
})
.plugin($n)
.plugin(function (e) {
(e.replicate = zn),
(e.sync = Vn),
Object.defineProperty(e.prototype, "replicate", {
get: function () {
var e = this;
return (
void 0 === this.replicateMethods &&
(this.replicateMethods = {
from: function (t, n, r) {
return e.constructor.replicate(t, e, n, r);
},
to: function (t, n, r) {
return e.constructor.replicate(e, t, n, r);
},
}),
this.replicateMethods
);
},
}),
(e.prototype.sync = function (e, t, n) {
return this.constructor.sync(this, e, t, n);
});
}),
(t.exports = Ke);
}).call(this);
}).call(this, e("_process"));
},
{ _process: 2, events: 1, "spark-md5": 3, uuid: 4, vuvuzela: 19 },
],
},
{},
[20]
)(20);
});
//# sourceMappingURL=pouchdb.min.js.map
// pouchdb-find plugin 9.0.0
// Based on Mango: https://github.com/cloudant/mango
//
// (c) 2012-2024 Dale Harvey and the PouchDB team
// PouchDB may be freely distributed under the Apache license, version 2.0.
// For all details and documentation:
// http://pouchdb.com
!(function e(t, n, r) {
function o(s, u) {
if (!n[s]) {
if (!t[s]) {
var c = "function" == typeof require && require;
if (!u && c) return c(s, !0);
if (i) return i(s, !0);
var a = new Error("Cannot find module '" + s + "'");
throw ((a.code = "MODULE_NOT_FOUND"), a);
}
var f = (n[s] = { exports: {} });
t[s][0].call(
f.exports,
function (e) {
return o(t[s][1][e] || e);
},
f,
f.exports,
e,
t,
n,
r
);
}
return n[s].exports;
}
for (
var i = "function" == typeof require && require, s = 0;
s < r.length;
s++
)
o(r[s]);
return o;
})(
{
1: [
function (e, t, n) {
var r =
Object.create ||
function (e) {
var t = function () {};
return (t.prototype = e), new t();
},
o =
Object.keys ||
function (e) {
var t = [];
for (var n in e)
Object.prototype.hasOwnProperty.call(e, n) && t.push(n);
return n;
},
i =
Function.prototype.bind ||
function (e) {
var t = this;
return function () {
return t.apply(e, arguments);
};
};
function s() {
(this._events &&
Object.prototype.hasOwnProperty.call(this, "_events")) ||
((this._events = r(null)), (this._eventsCount = 0)),
(this._maxListeners = this._maxListeners || void 0);
}
(t.exports = s),
(s.EventEmitter = s),
(s.prototype._events = void 0),
(s.prototype._maxListeners = void 0);
var u,
c = 10;
try {
var a = {};
Object.defineProperty && Object.defineProperty(a, "x", { value: 0 }),
(u = 0 === a.x);
} catch (e) {
u = !1;
}
function f(e) {
return void 0 === e._maxListeners
? s.defaultMaxListeners
: e._maxListeners;
}
function l(e, t, n) {
if (t) e.call(n);
else
for (var r = e.length, o = w(e, r), i = 0; i < r; ++i) o[i].call(n);
}
function d(e, t, n, r) {
if (t) e.call(n, r);
else
for (var o = e.length, i = w(e, o), s = 0; s < o; ++s)
i[s].call(n, r);
}
function y(e, t, n, r, o) {
if (t) e.call(n, r, o);
else
for (var i = e.length, s = w(e, i), u = 0; u < i; ++u)
s[u].call(n, r, o);
}
function p(e, t, n, r, o, i) {
if (t) e.call(n, r, o, i);
else
for (var s = e.length, u = w(e, s), c = 0; c < s; ++c)
u[c].call(n, r, o, i);
}
function h(e, t, n, r) {
if (t) e.apply(n, r);
else
for (var o = e.length, i = w(e, o), s = 0; s < o; ++s)
i[s].apply(n, r);
}
function v(e, t, n, o) {
var i, s, u;
if ("function" != typeof n)
throw new TypeError('"listener" argument must be a function');
if (
((s = e._events)
? (s.newListener &&
(e.emit("newListener", t, n.listener ? n.listener : n),
(s = e._events)),
(u = s[t]))
: ((s = e._events = r(null)), (e._eventsCount = 0)),
u)
) {
if (
("function" == typeof u
? (u = s[t] = o ? [n, u] : [u, n])
: o
? u.unshift(n)
: u.push(n),
!u.warned && (i = f(e)) && i > 0 && u.length > i)
) {
u.warned = !0;
var c = new Error(
"Possible EventEmitter memory leak detected. " +
u.length +
' "' +
String(t) +
'" listeners added. Use emitter.setMaxListeners() to increase limit.'
);
(c.name = "MaxListenersExceededWarning"),
(c.emitter = e),
(c.type = t),
(c.count = u.length),
"object" == typeof console &&
console.warn &&
console.warn("%s: %s", c.name, c.message);
}
} else (u = s[t] = n), ++e._eventsCount;
return e;
}
function g() {
if (!this.fired)
switch (
(this.target.removeListener(this.type, this.wrapFn),
(this.fired = !0),
arguments.length)
) {
case 0:
return this.listener.call(this.target);
case 1:
return this.listener.call(this.target, arguments[0]);
case 2:
return this.listener.call(
this.target,
arguments[0],
arguments[1]
);
case 3:
return this.listener.call(
this.target,
arguments[0],
arguments[1],
arguments[2]
);
default:
for (
var e = new Array(arguments.length), t = 0;
t < e.length;
++t
)
e[t] = arguments[t];
this.listener.apply(this.target, e);
}
}
function m(e, t, n) {
var r = {
fired: !1,
wrapFn: void 0,
target: e,
type: t,
listener: n,
},
o = i.call(g, r);
return (o.listener = n), (r.wrapFn = o), o;
}
function _(e, t, n) {
var r = e._events;
if (!r) return [];
var o = r[t];
return o
? "function" == typeof o
? n
? [o.listener || o]
: [o]
: n
? (function (e) {
for (var t = new Array(e.length), n = 0; n < t.length; ++n)
t[n] = e[n].listener || e[n];
return t;
})(o)
: w(o, o.length)
: [];
}
function b(e) {
var t = this._events;
if (t) {
var n = t[e];
if ("function" == typeof n) return 1;
if (n) return n.length;
}
return 0;
}
function w(e, t) {
for (var n = new Array(t), r = 0; r < t; ++r) n[r] = e[r];
return n;
}
u
? Object.defineProperty(s, "defaultMaxListeners", {
enumerable: !0,
get: function () {
return c;
},
set: function (e) {
if ("number" != typeof e || e < 0 || e != e)
throw new TypeError(
'"defaultMaxListeners" must be a positive number'
);
c = e;
},
})
: (s.defaultMaxListeners = c),
(s.prototype.setMaxListeners = function (e) {
if ("number" != typeof e || e < 0 || isNaN(e))
throw new TypeError('"n" argument must be a positive number');
return (this._maxListeners = e), this;
}),
(s.prototype.getMaxListeners = function () {
return f(this);
}),
(s.prototype.emit = function (e) {
var t,
n,
r,
o,
i,
s,
u = "error" === e;
if ((s = this._events)) u = u && null == s.error;
else if (!u) return !1;
if (u) {
if (
(arguments.length > 1 && (t = arguments[1]), t instanceof Error)
)
throw t;
var c = new Error('Unhandled "error" event. (' + t + ")");
throw ((c.context = t), c);
}
if (!(n = s[e])) return !1;
var a = "function" == typeof n;
switch ((r = arguments.length)) {
case 1:
l(n, a, this);
break;
case 2:
d(n, a, this, arguments[1]);
break;
case 3:
y(n, a, this, arguments[1], arguments[2]);
break;
case 4:
p(n, a, this, arguments[1], arguments[2], arguments[3]);
break;
default:
for (o = new Array(r - 1), i = 1; i < r; i++)
o[i - 1] = arguments[i];
h(n, a, this, o);
}
return !0;
}),
(s.prototype.addListener = function (e, t) {
return v(this, e, t, !1);
}),
(s.prototype.on = s.prototype.addListener),
(s.prototype.prependListener = function (e, t) {
return v(this, e, t, !0);
}),
(s.prototype.once = function (e, t) {
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
return this.on(e, m(this, e, t)), this;
}),
(s.prototype.prependOnceListener = function (e, t) {
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
return this.prependListener(e, m(this, e, t)), this;
}),
(s.prototype.removeListener = function (e, t) {
var n, o, i, s, u;
if ("function" != typeof t)
throw new TypeError('"listener" argument must be a function');
if (!(o = this._events)) return this;
if (!(n = o[e])) return this;
if (n === t || n.listener === t)
0 == --this._eventsCount
? (this._events = r(null))
: (delete o[e],
o.removeListener &&
this.emit("removeListener", e, n.listener || t));
else if ("function" != typeof n) {
for (i = -1, s = n.length - 1; s >= 0; s--)
if (n[s] === t || n[s].listener === t) {
(u = n[s].listener), (i = s);
break;
}
if (i < 0) return this;
0 === i
? n.shift()
: (function (e, t) {
for (
var n = t, r = n + 1, o = e.length;
r < o;
n += 1, r += 1
)
e[n] = e[r];
e.pop();
})(n, i),
1 === n.length && (o[e] = n[0]),
o.removeListener && this.emit("removeListener", e, u || t);
}
return this;
}),
(s.prototype.removeAllListeners = function (e) {
var t, n, i;
if (!(n = this._events)) return this;
if (!n.removeListener)
return (
0 === arguments.length
? ((this._events = r(null)), (this._eventsCount = 0))
: n[e] &&
(0 == --this._eventsCount
? (this._events = r(null))
: delete n[e]),
this
);
if (0 === arguments.length) {
var s,
u = o(n);
for (i = 0; i < u.length; ++i)
"removeListener" !== (s = u[i]) && this.removeAllListeners(s);
return (
this.removeAllListeners("removeListener"),
(this._events = r(null)),
(this._eventsCount = 0),
this
);
}
if ("function" == typeof (t = n[e])) this.removeListener(e, t);
else if (t)
for (i = t.length - 1; i >= 0; i--) this.removeListener(e, t[i]);
return this;
}),
(s.prototype.listeners = function (e) {
return _(this, e, !0);
}),
(s.prototype.rawListeners = function (e) {
return _(this, e, !1);
}),
(s.listenerCount = function (e, t) {
return "function" == typeof e.listenerCount
? e.listenerCount(t)
: b.call(e, t);
}),
(s.prototype.listenerCount = b),
(s.prototype.eventNames = function () {
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
});
},
{},
],
2: [
function (e, t, n) {
!(function (e) {
if ("object" == typeof n) t.exports = e();
else if ("function" == typeof define && define.amd) define(e);
else {
var r;
try {
r = window;
} catch (e) {
r = self;
}
r.SparkMD5 = e();
}
})(function (e) {
"use strict";
var t = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f",
];
function n(e, t) {
var n = e[0],
r = e[1],
o = e[2],
i = e[3];
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & o) | (~r & i)) + t[0] - 680876936) | 0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & o)) +
t[1] -
389564586) |
0) <<
12) |
(i >>> 20)) +
n) |
0) &
n) |
(~i & r)) +
t[2] +
606105819) |
0) <<
17) |
(o >>> 15)) +
i) |
0) &
i) |
(~o & n)) +
t[3] -
1044525330) |
0) <<
22) |
(r >>> 10)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & o) | (~r & i)) + t[4] - 176418897) | 0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & o)) +
t[5] +
1200080426) |
0) <<
12) |
(i >>> 20)) +
n) |
0) &
n) |
(~i & r)) +
t[6] -
1473231341) |
0) <<
17) |
(o >>> 15)) +
i) |
0) &
i) |
(~o & n)) +
t[7] -
45705983) |
0) <<
22) |
(r >>> 10)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & o) | (~r & i)) + t[8] + 1770035416) | 0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & o)) +
t[9] -
1958414417) |
0) <<
12) |
(i >>> 20)) +
n) |
0) &
n) |
(~i & r)) +
t[10] -
42063) |
0) <<
17) |
(o >>> 15)) +
i) |
0) &
i) |
(~o & n)) +
t[11] -
1990404162) |
0) <<
22) |
(r >>> 10)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & o) | (~r & i)) + t[12] + 1804603682) |
0) <<
7) |
(n >>> 25)) +
r) |
0) &
r) |
(~n & o)) +
t[13] -
40341101) |
0) <<
12) |
(i >>> 20)) +
n) |
0) &
n) |
(~i & r)) +
t[14] -
1502002290) |
0) <<
17) |
(o >>> 15)) +
i) |
0) &
i) |
(~o & n)) +
t[15] +
1236535329) |
0) <<
22) |
(r >>> 10)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & i) | (o & ~i)) + t[1] - 165796510) | 0) <<
5) |
(n >>> 27)) +
r) |
0) &
o) |
(r & ~o)) +
t[6] -
1069501632) |
0) <<
9) |
(i >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[11] +
643717713) |
0) <<
14) |
(o >>> 18)) +
i) |
0) &
n) |
(i & ~n)) +
t[0] -
373897302) |
0) <<
20) |
(r >>> 12)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & i) | (o & ~i)) + t[5] - 701558691) | 0) <<
5) |
(n >>> 27)) +
r) |
0) &
o) |
(r & ~o)) +
t[10] +
38016083) |
0) <<
9) |
(i >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[15] -
660478335) |
0) <<
14) |
(o >>> 18)) +
i) |
0) &
n) |
(i & ~n)) +
t[4] -
405537848) |
0) <<
20) |
(r >>> 12)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & i) | (o & ~i)) + t[9] + 568446438) | 0) <<
5) |
(n >>> 27)) +
r) |
0) &
o) |
(r & ~o)) +
t[14] -
1019803690) |
0) <<
9) |
(i >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[3] -
187363961) |
0) <<
14) |
(o >>> 18)) +
i) |
0) &
n) |
(i & ~n)) +
t[8] +
1163531501) |
0) <<
20) |
(r >>> 12)) +
o) |
0),
(r =
((((r +=
((((o =
((((o +=
((((i =
((((i +=
((((n =
((((n +=
(((r & i) | (o & ~i)) + t[13] - 1444681467) |
0) <<
5) |
(n >>> 27)) +
r) |
0) &
o) |
(r & ~o)) +
t[2] -
51403784) |
0) <<
9) |
(i >>> 23)) +
n) |
0) &
r) |
(n & ~r)) +
t[7] +
1735328473) |
0) <<
14) |
(o >>> 18)) +
i) |
0) &
n) |
(i & ~n)) +
t[12] -
1926607734) |
0) <<
20) |
(r >>> 12)) +
o) |
0),
(r =
((((r +=
(((o =
((((o +=
(((i =
((((i +=
(((n =
((((n += ((r ^ o ^ i) + t[5] - 378558) | 0) << 4) |
(n >>> 28)) +
r) |
0) ^
r ^
o) +
t[8] -
2022574463) |
0) <<
11) |
(i >>> 21)) +
n) |
0) ^
n ^
r) +
t[11] +
1839030562) |
0) <<
16) |
(o >>> 16)) +
i) |
0) ^
i ^
n) +
t[14] -
35309556) |
0) <<
23) |
(r >>> 9)) +
o) |
0),
(r =
((((r +=
(((o =
((((o +=
(((i =
((((i +=
(((n =
((((n += ((r ^ o ^ i) + t[1] - 1530992060) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
o) +
t[4] +
1272893353) |
0) <<
11) |
(i >>> 21)) +
n) |
0) ^
n ^
r) +
t[7] -
155497632) |
0) <<
16) |
(o >>> 16)) +
i) |
0) ^
i ^
n) +
t[10] -
1094730640) |
0) <<
23) |
(r >>> 9)) +
o) |
0),
(r =
((((r +=
(((o =
((((o +=
(((i =
((((i +=
(((n =
((((n += ((r ^ o ^ i) + t[13] + 681279174) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
o) +
t[0] -
358537222) |
0) <<
11) |
(i >>> 21)) +
n) |
0) ^
n ^
r) +
t[3] -
722521979) |
0) <<
16) |
(o >>> 16)) +
i) |
0) ^
i ^
n) +
t[6] +
76029189) |
0) <<
23) |
(r >>> 9)) +
o) |
0),
(r =
((((r +=
(((o =
((((o +=
(((i =
((((i +=
(((n =
((((n += ((r ^ o ^ i) + t[9] - 640364487) | 0) <<
4) |
(n >>> 28)) +
r) |
0) ^
r ^
o) +
t[12] -
421815835) |
0) <<
11) |
(i >>> 21)) +
n) |
0) ^
n ^
r) +
t[15] +
530742520) |
0) <<
16) |
(o >>> 16)) +
i) |
0) ^
i ^
n) +
t[2] -
995338651) |
0) <<
23) |
(r >>> 9)) +
o) |
0),
(r =
((((r +=
(((i =
((((i +=
((r ^
((n =
((((n += ((o ^ (r | ~i)) + t[0] - 198630844) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~o)) +
t[7] +
1126891415) |
0) <<
10) |
(i >>> 22)) +
n) |
0) ^
((o =
((((o += ((n ^ (i | ~r)) + t[14] - 1416354905) | 0) <<
15) |
(o >>> 17)) +
i) |
0) |
~n)) +
t[5] -
57434055) |
0) <<
21) |
(r >>> 11)) +
o) |
0),
(r =
((((r +=
(((i =
((((i +=
((r ^
((n =
((((n += ((o ^ (r | ~i)) + t[12] + 1700485571) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~o)) +
t[3] -
1894986606) |
0) <<
10) |
(i >>> 22)) +
n) |
0) ^
((o =
((((o += ((n ^ (i | ~r)) + t[10] - 1051523) | 0) << 15) |
(o >>> 17)) +
i) |
0) |
~n)) +
t[1] -
2054922799) |
0) <<
21) |
(r >>> 11)) +
o) |
0),
(r =
((((r +=
(((i =
((((i +=
((r ^
((n =
((((n += ((o ^ (r | ~i)) + t[8] + 1873313359) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~o)) +
t[15] -
30611744) |
0) <<
10) |
(i >>> 22)) +
n) |
0) ^
((o =
((((o += ((n ^ (i | ~r)) + t[6] - 1560198380) | 0) <<
15) |
(o >>> 17)) +
i) |
0) |
~n)) +
t[13] +
1309151649) |
0) <<
21) |
(r >>> 11)) +
o) |
0),
(r =
((((r +=
(((i =
((((i +=
((r ^
((n =
((((n += ((o ^ (r | ~i)) + t[4] - 145523070) | 0) <<
6) |
(n >>> 26)) +
r) |
0) |
~o)) +
t[11] -
1120210379) |
0) <<
10) |
(i >>> 22)) +
n) |
0) ^
((o =
((((o += ((n ^ (i | ~r)) + t[2] + 718787259) | 0) << 15) |
(o >>> 17)) +
i) |
0) |
~n)) +
t[9] -
343485551) |
0) <<
21) |
(r >>> 11)) +
o) |
0),
(e[0] = (n + e[0]) | 0),
(e[1] = (r + e[1]) | 0),
(e[2] = (o + e[2]) | 0),
(e[3] = (i + e[3]) | 0);
}
function r(e) {
var t,
n = [];
for (t = 0; t < 64; t += 4)
n[t >> 2] =
e.charCodeAt(t) +
(e.charCodeAt(t + 1) << 8) +
(e.charCodeAt(t + 2) << 16) +
(e.charCodeAt(t + 3) << 24);
return n;
}
function o(e) {
var t,
n = [];
for (t = 0; t < 64; t += 4)
n[t >> 2] =
e[t] + (e[t + 1] << 8) + (e[t + 2] << 16) + (e[t + 3] << 24);
return n;
}
function i(e) {
var t,
o,
i,
s,
u,
c,
a = e.length,
f = [1732584193, -271733879, -1732584194, 271733878];
for (t = 64; t <= a; t += 64) n(f, r(e.substring(t - 64, t)));
for (
o = (e = e.substring(t - 64)).length,
i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
t = 0;
t < o;
t += 1
)
i[t >> 2] |= e.charCodeAt(t) << (t % 4 << 3);
if (((i[t >> 2] |= 128 << (t % 4 << 3)), t > 55))
for (n(f, i), t = 0; t < 16; t += 1) i[t] = 0;
return (
(s = (s = 8 * a).toString(16).match(/(.*?)(.{0,8})$/)),
(u = parseInt(s[2], 16)),
(c = parseInt(s[1], 16) || 0),
(i[14] = u),
(i[15] = c),
n(f, i),
f
);
}
function s(e) {
var n,
r = "";
for (n = 0; n < 4; n += 1)
r += t[(e >> (8 * n + 4)) & 15] + t[(e >> (8 * n)) & 15];
return r;
}
function u(e) {
var t;
for (t = 0; t < e.length; t += 1) e[t] = s(e[t]);
return e.join("");
}
function c(e) {
return (
/[\u0080-\uFFFF]/.test(e) &&
(e = unescape(encodeURIComponent(e))),
e
);
}
function a(e) {
var t,
n = [],
r = e.length;
for (t = 0; t < r - 1; t += 2) n.push(parseInt(e.substr(t, 2), 16));
return String.fromCharCode.apply(String, n);
}
function f() {
this.reset();
}
return (
"5d41402abc4b2a76b9719d911017c592" !== u(i("hello")) &&
function (e, t) {
var n = (65535 & e) + (65535 & t);
return (
(((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n)
);
},
"undefined" == typeof ArrayBuffer ||
ArrayBuffer.prototype.slice ||
(function () {
function t(e, t) {
return (e = 0 | e || 0) < 0
? Math.max(e + t, 0)
: Math.min(e, t);
}
ArrayBuffer.prototype.slice = function (n, r) {
var o,
i,
s,
u,
c = this.byteLength,
a = t(n, c),
f = c;
return (
r !== e && (f = t(r, c)),
a > f
? new ArrayBuffer(0)
: ((o = f - a),
(i = new ArrayBuffer(o)),
(s = new Uint8Array(i)),
(u = new Uint8Array(this, a, o)),
s.set(u),
i)
);
};
})(),
(f.prototype.append = function (e) {
return this.appendBinary(c(e)), this;
}),
(f.prototype.appendBinary = function (e) {
(this._buff += e), (this._length += e.length);
var t,
o = this._buff.length;
for (t = 64; t <= o; t += 64)
n(this._hash, r(this._buff.substring(t - 64, t)));
return (this._buff = this._buff.substring(t - 64)), this;
}),
(f.prototype.end = function (e) {
var t,
n,
r = this._buff,
o = r.length,
i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (t = 0; t < o; t += 1)
i[t >> 2] |= r.charCodeAt(t) << (t % 4 << 3);
return (
this._finish(i, o),
(n = u(this._hash)),
e && (n = a(n)),
this.reset(),
n
);
}),
(f.prototype.reset = function () {
return (
(this._buff = ""),
(this._length = 0),
(this._hash = [1732584193, -271733879, -1732584194, 271733878]),
this
);
}),
(f.prototype.getState = function () {
return {
buff: this._buff,
length: this._length,
hash: this._hash.slice(),
};
}),
(f.prototype.setState = function (e) {
return (
(this._buff = e.buff),
(this._length = e.length),
(this._hash = e.hash),
this
);
}),
(f.prototype.destroy = function () {
delete this._hash, delete this._buff, delete this._length;
}),
(f.prototype._finish = function (e, t) {
var r,
o,
i,
s = t;
if (((e[s >> 2] |= 128 << (s % 4 << 3)), s > 55))
for (n(this._hash, e), s = 0; s < 16; s += 1) e[s] = 0;
(r = (r = 8 * this._length).toString(16).match(/(.*?)(.{0,8})$/)),
(o = parseInt(r[2], 16)),
(i = parseInt(r[1], 16) || 0),
(e[14] = o),
(e[15] = i),
n(this._hash, e);
}),
(f.hash = function (e, t) {
return f.hashBinary(c(e), t);
}),
(f.hashBinary = function (e, t) {
var n = u(i(e));
return t ? a(n) : n;
}),
(f.ArrayBuffer = function () {
this.reset();
}),
(f.ArrayBuffer.prototype.append = function (e) {
var t,
r,
i,
s,
u,
c =
((r = this._buff.buffer),
(i = e),
(s = !0),
(u = new Uint8Array(r.byteLength + i.byteLength)).set(
new Uint8Array(r)
),
u.set(new Uint8Array(i), r.byteLength),
s ? u : u.buffer),
a = c.length;
for (this._length += e.byteLength, t = 64; t <= a; t += 64)
n(this._hash, o(c.subarray(t - 64, t)));
return (
(this._buff =
t - 64 < a
? new Uint8Array(c.buffer.slice(t - 64))
: new Uint8Array(0)),
this
);
}),
(f.ArrayBuffer.prototype.end = function (e) {
var t,
n,
r = this._buff,
o = r.length,
i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (t = 0; t < o; t += 1) i[t >> 2] |= r[t] << (t % 4 << 3);
return (
this._finish(i, o),
(n = u(this._hash)),
e && (n = a(n)),
this.reset(),
n
);
}),
(f.ArrayBuffer.prototype.reset = function () {
return (
(this._buff = new Uint8Array(0)),
(this._length = 0),
(this._hash = [1732584193, -271733879, -1732584194, 271733878]),
this
);
}),
(f.ArrayBuffer.prototype.getState = function () {
var e,
t = f.prototype.getState.call(this);
return (
(t.buff =
((e = t.buff),
String.fromCharCode.apply(null, new Uint8Array(e)))),
t
);
}),
(f.ArrayBuffer.prototype.setState = function (e) {
return (
(e.buff = (function (e, t) {
var n,
r = e.length,
o = new ArrayBuffer(r),
i = new Uint8Array(o);
for (n = 0; n < r; n += 1) i[n] = e.charCodeAt(n);
return t ? i : o;
})(e.buff, !0)),
f.prototype.setState.call(this, e)
);
}),
(f.ArrayBuffer.prototype.destroy = f.prototype.destroy),
(f.ArrayBuffer.prototype._finish = f.prototype._finish),
(f.ArrayBuffer.hash = function (e, t) {
var r = u(
(function (e) {
var t,
r,
i,
s,
u,
c,
a = e.length,
f = [1732584193, -271733879, -1732584194, 271733878];
for (t = 64; t <= a; t += 64) n(f, o(e.subarray(t - 64, t)));
for (
r = (e =
t - 64 < a ? e.subarray(t - 64) : new Uint8Array(0))
.length,
i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
t = 0;
t < r;
t += 1
)
i[t >> 2] |= e[t] << (t % 4 << 3);
if (((i[t >> 2] |= 128 << (t % 4 << 3)), t > 55))
for (n(f, i), t = 0; t < 16; t += 1) i[t] = 0;
return (
(s = (s = 8 * a).toString(16).match(/(.*?)(.{0,8})$/)),
(u = parseInt(s[2], 16)),
(c = parseInt(s[1], 16) || 0),
(i[14] = u),
(i[15] = c),
n(f, i),
f
);
})(new Uint8Array(e))
);
return t ? a(r) : r;
}),
f
);
});
},
{},
],
3: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
Object.defineProperty(n, "v1", {
enumerable: !0,
get: function () {
return r.default;
},
}),
Object.defineProperty(n, "v3", {
enumerable: !0,
get: function () {
return o.default;
},
}),
Object.defineProperty(n, "v4", {
enumerable: !0,
get: function () {
return i.default;
},
}),
Object.defineProperty(n, "v5", {
enumerable: !0,
get: function () {
return s.default;
},
}),
Object.defineProperty(n, "NIL", {
enumerable: !0,
get: function () {
return u.default;
},
}),
Object.defineProperty(n, "version", {
enumerable: !0,
get: function () {
return c.default;
},
}),
Object.defineProperty(n, "validate", {
enumerable: !0,
get: function () {
return a.default;
},
}),
Object.defineProperty(n, "stringify", {
enumerable: !0,
get: function () {
return f.default;
},
}),
Object.defineProperty(n, "parse", {
enumerable: !0,
get: function () {
return l.default;
},
});
var r = d(e("./v1.js")),
o = d(e("./v3.js")),
i = d(e("./v4.js")),
s = d(e("./v5.js")),
u = d(e("./nil.js")),
c = d(e("./version.js")),
a = d(e("./validate.js")),
f = d(e("./stringify.js")),
l = d(e("./parse.js"));
function d(e) {
return e && e.__esModule ? e : { default: e };
}
},
{
"./nil.js": 5,
"./parse.js": 6,
"./stringify.js": 10,
"./v1.js": 11,
"./v3.js": 12,
"./v4.js": 14,
"./v5.js": 15,
"./validate.js": 16,
"./version.js": 17,
},
],
4: [
function (e, t, n) {
"use strict";
function r(e) {
return 14 + (((e + 64) >>> 9) << 4) + 1;
}
function o(e, t) {
const n = (65535 & e) + (65535 & t);
return (((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n);
}
function i(e, t, n, r, i, s) {
return o(
((u = o(o(t, e), o(r, s))) << (c = i)) | (u >>> (32 - c)),
n
);
var u, c;
}
function s(e, t, n, r, o, s, u) {
return i((t & n) | (~t & r), e, t, o, s, u);
}
function u(e, t, n, r, o, s, u) {
return i((t & r) | (n & ~r), e, t, o, s, u);
}
function c(e, t, n, r, o, s, u) {
return i(t ^ n ^ r, e, t, o, s, u);
}
function a(e, t, n, r, o, s, u) {
return i(n ^ (t | ~r), e, t, o, s, u);
}
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var f = function (e) {
if ("string" == typeof e) {
const t = unescape(encodeURIComponent(e));
e = new Uint8Array(t.length);
for (let n = 0; n < t.length; ++n) e[n] = t.charCodeAt(n);
}
return (function (e) {
const t = [],
n = 32 * e.length;
for (let r = 0; r < n; r += 8) {
const n = (e[r >> 5] >>> r % 32) & 255,
o = parseInt(
"0123456789abcdef".charAt((n >>> 4) & 15) +
"0123456789abcdef".charAt(15 & n),
16
);
t.push(o);
}
return t;
})(
(function (e, t) {
(e[t >> 5] |= 128 << t % 32), (e[r(t) - 1] = t);
let n = 1732584193,
i = -271733879,
f = -1732584194,
l = 271733878;
for (let t = 0; t < e.length; t += 16) {
const r = n,
d = i,
y = f,
p = l;
(n = s(n, i, f, l, e[t], 7, -680876936)),
(l = s(l, n, i, f, e[t + 1], 12, -389564586)),
(f = s(f, l, n, i, e[t + 2], 17, 606105819)),
(i = s(i, f, l, n, e[t + 3], 22, -1044525330)),
(n = s(n, i, f, l, e[t + 4], 7, -176418897)),
(l = s(l, n, i, f, e[t + 5], 12, 1200080426)),
(f = s(f, l, n, i, e[t + 6], 17, -1473231341)),
(i = s(i, f, l, n, e[t + 7], 22, -45705983)),
(n = s(n, i, f, l, e[t + 8], 7, 1770035416)),
(l = s(l, n, i, f, e[t + 9], 12, -1958414417)),
(f = s(f, l, n, i, e[t + 10], 17, -42063)),
(i = s(i, f, l, n, e[t + 11], 22, -1990404162)),
(n = s(n, i, f, l, e[t + 12], 7, 1804603682)),
(l = s(l, n, i, f, e[t + 13], 12, -40341101)),
(f = s(f, l, n, i, e[t + 14], 17, -1502002290)),
(i = s(i, f, l, n, e[t + 15], 22, 1236535329)),
(n = u(n, i, f, l, e[t + 1], 5, -165796510)),
(l = u(l, n, i, f, e[t + 6], 9, -1069501632)),
(f = u(f, l, n, i, e[t + 11], 14, 643717713)),
(i = u(i, f, l, n, e[t], 20, -373897302)),
(n = u(n, i, f, l, e[t + 5], 5, -701558691)),
(l = u(l, n, i, f, e[t + 10], 9, 38016083)),
(f = u(f, l, n, i, e[t + 15], 14, -660478335)),
(i = u(i, f, l, n, e[t + 4], 20, -405537848)),
(n = u(n, i, f, l, e[t + 9], 5, 568446438)),
(l = u(l, n, i, f, e[t + 14], 9, -1019803690)),
(f = u(f, l, n, i, e[t + 3], 14, -187363961)),
(i = u(i, f, l, n, e[t + 8], 20, 1163531501)),
(n = u(n, i, f, l, e[t + 13], 5, -1444681467)),
(l = u(l, n, i, f, e[t + 2], 9, -51403784)),
(f = u(f, l, n, i, e[t + 7], 14, 1735328473)),
(i = u(i, f, l, n, e[t + 12], 20, -1926607734)),
(n = c(n, i, f, l, e[t + 5], 4, -378558)),
(l = c(l, n, i, f, e[t + 8], 11, -2022574463)),
(f = c(f, l, n, i, e[t + 11], 16, 1839030562)),
(i = c(i, f, l, n, e[t + 14], 23, -35309556)),
(n = c(n, i, f, l, e[t + 1], 4, -1530992060)),
(l = c(l, n, i, f, e[t + 4], 11, 1272893353)),
(f = c(f, l, n, i, e[t + 7], 16, -155497632)),
(i = c(i, f, l, n, e[t + 10], 23, -1094730640)),
(n = c(n, i, f, l, e[t + 13], 4, 681279174)),
(l = c(l, n, i, f, e[t], 11, -358537222)),
(f = c(f, l, n, i, e[t + 3], 16, -722521979)),
(i = c(i, f, l, n, e[t + 6], 23, 76029189)),
(n = c(n, i, f, l, e[t + 9], 4, -640364487)),
(l = c(l, n, i, f, e[t + 12], 11, -421815835)),
(f = c(f, l, n, i, e[t + 15], 16, 530742520)),
(i = c(i, f, l, n, e[t + 2], 23, -995338651)),
(n = a(n, i, f, l, e[t], 6, -198630844)),
(l = a(l, n, i, f, e[t + 7], 10, 1126891415)),
(f = a(f, l, n, i, e[t + 14], 15, -1416354905)),
(i = a(i, f, l, n, e[t + 5], 21, -57434055)),
(n = a(n, i, f, l, e[t + 12], 6, 1700485571)),
(l = a(l, n, i, f, e[t + 3], 10, -1894986606)),
(f = a(f, l, n, i, e[t + 10], 15, -1051523)),
(i = a(i, f, l, n, e[t + 1], 21, -2054922799)),
(n = a(n, i, f, l, e[t + 8], 6, 1873313359)),
(l = a(l, n, i, f, e[t + 15], 10, -30611744)),
(f = a(f, l, n, i, e[t + 6], 15, -1560198380)),
(i = a(i, f, l, n, e[t + 13], 21, 1309151649)),
(n = a(n, i, f, l, e[t + 4], 6, -145523070)),
(l = a(l, n, i, f, e[t + 11], 10, -1120210379)),
(f = a(f, l, n, i, e[t + 2], 15, 718787259)),
(i = a(i, f, l, n, e[t + 9], 21, -343485551)),
(n = o(n, r)),
(i = o(i, d)),
(f = o(f, y)),
(l = o(l, p));
}
return [n, i, f, l];
})(
(function (e) {
if (0 === e.length) return [];
const t = 8 * e.length,
n = new Uint32Array(r(t));
for (let r = 0; r < t; r += 8)
n[r >> 5] |= (255 & e[r / 8]) << r % 32;
return n;
})(e),
8 * e.length
)
);
};
n.default = f;
},
{},
],
5: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
n.default = "00000000-0000-0000-0000-000000000000";
},
{},
],
6: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
o = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
var i = function (e) {
if (!(0, o.default)(e)) throw TypeError("Invalid UUID");
let t;
const n = new Uint8Array(16);
return (
(n[0] = (t = parseInt(e.slice(0, 8), 16)) >>> 24),
(n[1] = (t >>> 16) & 255),
(n[2] = (t >>> 8) & 255),
(n[3] = 255 & t),
(n[4] = (t = parseInt(e.slice(9, 13), 16)) >>> 8),
(n[5] = 255 & t),
(n[6] = (t = parseInt(e.slice(14, 18), 16)) >>> 8),
(n[7] = 255 & t),
(n[8] = (t = parseInt(e.slice(19, 23), 16)) >>> 8),
(n[9] = 255 & t),
(n[10] =
((t = parseInt(e.slice(24, 36), 16)) / 1099511627776) & 255),
(n[11] = (t / 4294967296) & 255),
(n[12] = (t >>> 24) & 255),
(n[13] = (t >>> 16) & 255),
(n[14] = (t >>> 8) & 255),
(n[15] = 255 & t),
n
);
};
n.default = i;
},
{ "./validate.js": 16 },
],
7: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
n.default =
/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
},
{},
],
8: [
function (e, t, n) {
"use strict";
let r;
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = function () {
if (
!r &&
((r =
("undefined" != typeof crypto &&
crypto.getRandomValues &&
crypto.getRandomValues.bind(crypto)) ||
("undefined" != typeof msCrypto &&
"function" == typeof msCrypto.getRandomValues &&
msCrypto.getRandomValues.bind(msCrypto))),
!r)
)
throw new Error(
"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"
);
return r(o);
});
const o = new Uint8Array(16);
},
{},
],
9: [
function (e, t, n) {
"use strict";
function r(e, t, n, r) {
switch (e) {
case 0:
return (t & n) ^ (~t & r);
case 1:
return t ^ n ^ r;
case 2:
return (t & n) ^ (t & r) ^ (n & r);
case 3:
return t ^ n ^ r;
}
}
function o(e, t) {
return (e << t) | (e >>> (32 - t));
}
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var i = function (e) {
const t = [1518500249, 1859775393, 2400959708, 3395469782],
n = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];
if ("string" == typeof e) {
const t = unescape(encodeURIComponent(e));
e = [];
for (let n = 0; n < t.length; ++n) e.push(t.charCodeAt(n));
} else Array.isArray(e) || (e = Array.prototype.slice.call(e));
e.push(128);
const i = e.length / 4 + 2,
s = Math.ceil(i / 16),
u = new Array(s);
for (let t = 0; t < s; ++t) {
const n = new Uint32Array(16);
for (let r = 0; r < 16; ++r)
n[r] =
(e[64 * t + 4 * r] << 24) |
(e[64 * t + 4 * r + 1] << 16) |
(e[64 * t + 4 * r + 2] << 8) |
e[64 * t + 4 * r + 3];
u[t] = n;
}
(u[s - 1][14] = (8 * (e.length - 1)) / Math.pow(2, 32)),
(u[s - 1][14] = Math.floor(u[s - 1][14])),
(u[s - 1][15] = (8 * (e.length - 1)) & 4294967295);
for (let e = 0; e < s; ++e) {
const i = new Uint32Array(80);
for (let t = 0; t < 16; ++t) i[t] = u[e][t];
for (let e = 16; e < 80; ++e)
i[e] = o(i[e - 3] ^ i[e - 8] ^ i[e - 14] ^ i[e - 16], 1);
let s = n[0],
c = n[1],
a = n[2],
f = n[3],
l = n[4];
for (let e = 0; e < 80; ++e) {
const n = Math.floor(e / 20),
u = (o(s, 5) + r(n, c, a, f) + l + t[n] + i[e]) >>> 0;
(l = f), (f = a), (a = o(c, 30) >>> 0), (c = s), (s = u);
}
(n[0] = (n[0] + s) >>> 0),
(n[1] = (n[1] + c) >>> 0),
(n[2] = (n[2] + a) >>> 0),
(n[3] = (n[3] + f) >>> 0),
(n[4] = (n[4] + l) >>> 0);
}
return [
(n[0] >> 24) & 255,
(n[0] >> 16) & 255,
(n[0] >> 8) & 255,
255 & n[0],
(n[1] >> 24) & 255,
(n[1] >> 16) & 255,
(n[1] >> 8) & 255,
255 & n[1],
(n[2] >> 24) & 255,
(n[2] >> 16) & 255,
(n[2] >> 8) & 255,
255 & n[2],
(n[3] >> 24) & 255,
(n[3] >> 16) & 255,
(n[3] >> 8) & 255,
255 & n[3],
(n[4] >> 24) & 255,
(n[4] >> 16) & 255,
(n[4] >> 8) & 255,
255 & n[4],
];
};
n.default = i;
},
{},
],
10: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
o = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
const i = [];
for (let e = 0; e < 256; ++e) i.push((e + 256).toString(16).substr(1));
var s = function (e, t = 0) {
const n = (
i[e[t + 0]] +
i[e[t + 1]] +
i[e[t + 2]] +
i[e[t + 3]] +
"-" +
i[e[t + 4]] +
i[e[t + 5]] +
"-" +
i[e[t + 6]] +
i[e[t + 7]] +
"-" +
i[e[t + 8]] +
i[e[t + 9]] +
"-" +
i[e[t + 10]] +
i[e[t + 11]] +
i[e[t + 12]] +
i[e[t + 13]] +
i[e[t + 14]] +
i[e[t + 15]]
).toLowerCase();
if (!(0, o.default)(n))
throw TypeError("Stringified UUID is invalid");
return n;
};
n.default = s;
},
{ "./validate.js": 16 },
],
11: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = i(e("./rng.js")),
o = i(e("./stringify.js"));
function i(e) {
return e && e.__esModule ? e : { default: e };
}
let s,
u,
c = 0,
a = 0;
var f = function (e, t, n) {
let i = (t && n) || 0;
const f = t || new Array(16);
let l = (e = e || {}).node || s,
d = void 0 !== e.clockseq ? e.clockseq : u;
if (null == l || null == d) {
const t = e.random || (e.rng || r.default)();
null == l && (l = s = [1 | t[0], t[1], t[2], t[3], t[4], t[5]]),
null == d && (d = u = 16383 & ((t[6] << 8) | t[7]));
}
let y = void 0 !== e.msecs ? e.msecs : Date.now(),
p = void 0 !== e.nsecs ? e.nsecs : a + 1;
const h = y - c + (p - a) / 1e4;
if (
(h < 0 && void 0 === e.clockseq && (d = (d + 1) & 16383),
(h < 0 || y > c) && void 0 === e.nsecs && (p = 0),
p >= 1e4)
)
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
(c = y), (a = p), (u = d), (y += 122192928e5);
const v = (1e4 * (268435455 & y) + p) % 4294967296;
(f[i++] = (v >>> 24) & 255),
(f[i++] = (v >>> 16) & 255),
(f[i++] = (v >>> 8) & 255),
(f[i++] = 255 & v);
const g = ((y / 4294967296) * 1e4) & 268435455;
(f[i++] = (g >>> 8) & 255),
(f[i++] = 255 & g),
(f[i++] = ((g >>> 24) & 15) | 16),
(f[i++] = (g >>> 16) & 255),
(f[i++] = (d >>> 8) | 128),
(f[i++] = 255 & d);
for (let e = 0; e < 6; ++e) f[i + e] = l[e];
return t || (0, o.default)(f);
};
n.default = f;
},
{ "./rng.js": 8, "./stringify.js": 10 },
],
12: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = i(e("./v35.js")),
o = i(e("./md5.js"));
function i(e) {
return e && e.__esModule ? e : { default: e };
}
var s = (0, r.default)("v3", 48, o.default);
n.default = s;
},
{ "./md5.js": 4, "./v35.js": 13 },
],
13: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = function (e, t, n) {
function i(e, i, s, u) {
if (
("string" == typeof e &&
(e = (function (e) {
e = unescape(encodeURIComponent(e));
const t = [];
for (let n = 0; n < e.length; ++n) t.push(e.charCodeAt(n));
return t;
})(e)),
"string" == typeof i && (i = (0, o.default)(i)),
16 !== i.length)
)
throw TypeError(
"Namespace must be array-like (16 iterable integer values, 0-255)"
);
let c = new Uint8Array(16 + e.length);
if (
(c.set(i),
c.set(e, i.length),
(c = n(c)),
(c[6] = (15 & c[6]) | t),
(c[8] = (63 & c[8]) | 128),
s)
) {
u = u || 0;
for (let e = 0; e < 16; ++e) s[u + e] = c[e];
return s;
}
return (0, r.default)(c);
}
try {
i.name = e;
} catch (e) {}
return (i.DNS = s), (i.URL = u), i;
}),
(n.URL = n.DNS = void 0);
var r = i(e("./stringify.js")),
o = i(e("./parse.js"));
function i(e) {
return e && e.__esModule ? e : { default: e };
}
const s = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
n.DNS = s;
const u = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
n.URL = u;
},
{ "./parse.js": 6, "./stringify.js": 10 },
],
14: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = i(e("./rng.js")),
o = i(e("./stringify.js"));
function i(e) {
return e && e.__esModule ? e : { default: e };
}
var s = function (e, t, n) {
const i = (e = e || {}).random || (e.rng || r.default)();
if (((i[6] = (15 & i[6]) | 64), (i[8] = (63 & i[8]) | 128), t)) {
n = n || 0;
for (let e = 0; e < 16; ++e) t[n + e] = i[e];
return t;
}
return (0, o.default)(i);
};
n.default = s;
},
{ "./rng.js": 8, "./stringify.js": 10 },
],
15: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r = i(e("./v35.js")),
o = i(e("./sha1.js"));
function i(e) {
return e && e.__esModule ? e : { default: e };
}
var s = (0, r.default)("v5", 80, o.default);
n.default = s;
},
{ "./sha1.js": 9, "./v35.js": 13 },
],
16: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
o = (r = e("./regex.js")) && r.__esModule ? r : { default: r };
var i = function (e) {
return "string" == typeof e && o.default.test(e);
};
n.default = i;
},
{ "./regex.js": 7 },
],
17: [
function (e, t, n) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 }),
(n.default = void 0);
var r,
o = (r = e("./validate.js")) && r.__esModule ? r : { default: r };
var i = function (e) {
if (!(0, o.default)(e)) throw TypeError("Invalid UUID");
return parseInt(e.substr(14, 1), 16);
};
n.default = i;
},
{ "./validate.js": 16 },
],
18: [
function (e, t, n) {
"use strict";
e("events"), e("uuid");
var r,
o =
(r = e("spark-md5")) && "object" == typeof r && "default" in r
? r.default
: r;
var i = Function.prototype.toString,
s = i.call(Object);
function u(e) {
var t, n, r;
if (!e || "object" != typeof e) return e;
if (Array.isArray(e)) {
for (t = [], n = 0, r = e.length; n < r; n++) t[n] = u(e[n]);
return t;
}
if (e instanceof Date && isFinite(e)) return e.toISOString();
if (
(function (e) {
return (
("undefined" != typeof ArrayBuffer &&
e instanceof ArrayBuffer) ||
("undefined" != typeof Blob && e instanceof Blob)
);
})(e)
)
return (function (e) {
return e instanceof ArrayBuffer
? e.slice(0)
: e.slice(0, e.size, e.type);
})(e);
if (
!(function (e) {
var t = Object.getPrototypeOf(e);
if (null === t) return !0;
var n = t.constructor;
return "function" == typeof n && n instanceof n && i.call(n) == s;
})(e)
)
return e;
for (n in ((t = {}), e))
if (Object.prototype.hasOwnProperty.call(e, n)) {
var o = u(e[n]);
void 0 !== o && (t[n] = o);
}
return t;
}
try {
localStorage.setItem("_pouch_check_localstorage", 1),
!!localStorage.getItem("_pouch_check_localstorage");
} catch (e) {
!1;
}
const c =
"function" == typeof queueMicrotask
? queueMicrotask
: function (e) {
Promise.resolve().then(e);
};
function a(e) {
if (
"undefined" != typeof console &&
"function" == typeof console[e]
) {
var t = Array.prototype.slice.call(arguments, 1);
console[e].apply(console, t);
}
}
class f extends Error {
constructor(e, t, n) {
super(),
(this.status = e),
(this.name = t),
(this.message = n),
(this.error = !0);
}
toString() {
return JSON.stringify({
status: this.status,
name: this.name,
message: this.message,
reason: this.reason,
});
}
}
new f(401, "unauthorized", "Name or password is incorrect."),
new f(400, "bad_request", "Missing JSON list of 'docs'"),
new f(404, "not_found", "missing"),
new f(409, "conflict", "Document update conflict"),
new f(400, "bad_request", "_id field must contain a string"),
new f(412, "missing_id", "_id is required for puts"),
new f(
400,
"bad_request",
"Only reserved document ids may start with underscore."
),
new f(412, "precondition_failed", "Database not open");
var l = new f(
500,
"unknown_error",
"Database encountered an unknown error"
);
new f(500, "badarg", "Some query argument is invalid"),
new f(400, "invalid_request", "Request was invalid"),
new f(400, "query_parse_error", "Some query parameter is invalid"),
new f(500, "doc_validation", "Bad special document member"),
new f(400, "bad_request", "Something wrong with the request"),
new f(400, "bad_request", "Document must be a JSON object"),
new f(404, "not_found", "Database not found"),
new f(500, "indexed_db_went_bad", "unknown"),
new f(500, "web_sql_went_bad", "unknown"),
new f(500, "levelDB_went_went_bad", "unknown"),
new f(
403,
"forbidden",
"Forbidden by design doc validate_doc_update function"
),
new f(400, "bad_request", "Invalid rev format"),
new f(
412,
"file_exists",
"The database could not be created, the file already exists."
),
new f(
412,
"missing_stub",
"A pre-existing attachment stub wasn't found"
),
new f(413, "invalid_url", "Provided URL is invalid");
function d(e) {
if ("object" != typeof e) {
var t = e;
(e = l).data = t;
}
return (
"error" in e &&
"conflict" === e.error &&
((e.name = "conflict"), (e.status = 409)),
"name" in e || (e.name = e.error || "unknown"),
"status" in e || (e.status = 500),
"message" in e || (e.message = e.message || e.reason),
"stack" in e || (e.stack = new Error().stack),
e
);
}
function y(e) {
return "boolean" == typeof e._remote
? e._remote
: "function" == typeof e.type &&
(a(
"warn",
"db.type() is deprecated and will be removed in a future version of PouchDB"
),
"http" === e.type());
}
function p(e, t, n) {
return e
.get(t)
.catch(function (e) {
if (404 !== e.status) throw e;
return {};
})
.then(function (r) {
var o = r._rev,
i = n(r);
return i
? ((i._id = t),
(i._rev = o),
(function (e, t, n) {
return e.put(t).then(
function (e) {
return { updated: !0, rev: e.rev };
},
function (r) {
if (409 !== r.status) throw r;
return p(e, t._id, n);
}
);
})(e, i, n))
: { updated: !1, rev: o };
});
}
function h(e) {
for (
var t = e.length,
n = new ArrayBuffer(t),
r = new Uint8Array(n),
o = 0;
o < t;
o++
)
r[o] = e.charCodeAt(o);
return n;
}
function v(e, t) {
return (function (e, t) {
(e = e || []), (t = t || {});
try {
return new Blob(e, t);
} catch (o) {
if ("TypeError" !== o.name) throw o;
for (
var n = new (
"undefined" != typeof BlobBuilder
? BlobBuilder
: "undefined" != typeof MSBlobBuilder
? MSBlobBuilder
: "undefined" != typeof MozBlobBuilder
? MozBlobBuilder
: WebKitBlobBuilder
)(),
r = 0;
r < e.length;
r += 1
)
n.append(e[r]);
return n.getBlob(t.type);
}
})([h(e)], { type: t });
}
function g(e, t) {
return v(atob(e), t);
}
self.setImmediate || self.setTimeout;
function m(e) {
return o.hash(e);
}
function _(e, t) {
for (var n = e, r = 0, o = t.length; r < o; r++) {
if (!(n = n[t[r]])) break;
}
return n;
}
function b(e, t, n) {
for (var r = 0, o = t.length; r < o - 1; r++) {
var i = t[r];
e = e[i] = e[i] || {};
}
e[t[o - 1]] = n;
}
function w(e, t) {
return e < t ? -1 : e > t ? 1 : 0;
}
function k(e) {
for (var t = [], n = "", r = 0, o = e.length; r < o; r++) {
var i = e[r];
r > 0 && "\\" === e[r - 1] && ("$" === i || "." === i)
? (n = n.substring(0, n.length - 1) + i)
: "." === i
? (t.push(n), (n = ""))
: (n += i);
}
return t.push(n), t;
}
var j = ["$or", "$nor", "$not"];
function $(e) {
return j.indexOf(e) > -1;
}
function x(e) {
return Object.keys(e)[0];
}
function O(e) {
return e[x(e)];
}
function A(e) {
var t = {},
n = { $or: !0, $nor: !0 };
return (
e.forEach(function (e) {
Object.keys(e).forEach(function (r) {
var o = e[r];
if (("object" != typeof o && (o = { $eq: o }), $(r)))
if (o instanceof Array) {
if (n[r]) return (n[r] = !1), void (t[r] = o);
var i = [];
t[r].forEach(function (e) {
Object.keys(o).forEach(function (t) {
var n = o[t],
r = Math.max(
Object.keys(e).length,
Object.keys(n).length
),
s = A([e, n]);
Object.keys(s).length <= r || i.push(s);
});
}),
(t[r] = i);
} else t[r] = A([o]);
else {
var s = (t[r] = t[r] || {});
Object.keys(o).forEach(function (e) {
var t = o[e];
return "$gt" === e || "$gte" === e
? (function (e, t, n) {
if (void 0 !== n.$eq) return;
void 0 !== n.$gte
? "$gte" === e
? t > n.$gte && (n.$gte = t)
: t >= n.$gte && (delete n.$gte, (n.$gt = t))
: void 0 !== n.$gt
? "$gte" === e
? t > n.$gt && (delete n.$gt, (n.$gte = t))
: t > n.$gt && (n.$gt = t)
: (n[e] = t);
})(e, t, s)
: "$lt" === e || "$lte" === e
? (function (e, t, n) {
if (void 0 !== n.$eq) return;
void 0 !== n.$lte
? "$lte" === e
? t < n.$lte && (n.$lte = t)
: t <= n.$lte && (delete n.$lte, (n.$lt = t))
: void 0 !== n.$lt
? "$lte" === e
? t < n.$lt && (delete n.$lt, (n.$lte = t))
: t < n.$lt && (n.$lt = t)
: (n[e] = t);
})(e, t, s)
: "$ne" === e
? (function (e, t) {
"$ne" in t ? t.$ne.push(e) : (t.$ne = [e]);
})(t, s)
: "$eq" === e
? (function (e, t) {
delete t.$gt,
delete t.$gte,
delete t.$lt,
delete t.$lte,
delete t.$ne,
(t.$eq = e);
})(t, s)
: "$regex" === e
? (function (e, t) {
"$regex" in t ? t.$regex.push(e) : (t.$regex = [e]);
})(t, s)
: void (s[e] = t);
});
}
});
}),
t
);
}
function q(e) {
var t = u(e);
(function e(t, n) {
for (var r in t) {
"$and" === r && (n = !0);
var o = t[r];
"object" == typeof o && (n = e(o, n));
}
return n;
})(t, !1) &&
"$and" in
(t = (function e(t) {
for (var n in t) {
if (Array.isArray(t))
for (var r in t) t[r].$and && (t[r] = A(t[r].$and));
var o = t[n];
"object" == typeof o && e(o);
}
return t;
})(t)) &&
(t = A(t.$and)),
["$or", "$nor"].forEach(function (e) {
e in t &&
t[e].forEach(function (e) {
for (var t = Object.keys(e), n = 0; n < t.length; n++) {
var r = t[n],
o = e[r];
("object" == typeof o && null !== o) || (e[r] = { $eq: o });
}
});
}),
"$not" in t && (t.$not = A([t.$not]));
for (var n = Object.keys(t), r = 0; r < n.length; r++) {
var o = n[r],
i = t[o];
("object" == typeof i && null !== i) || (i = { $eq: i }),
(t[o] = i);
}
return (
(function e(t) {
Object.keys(t).forEach(function (n) {
var r = t[n];
Array.isArray(r)
? r.forEach(function (t) {
t && "object" == typeof t && e(t);
})
: "$ne" === n
? (t.$ne = [r])
: "$regex" === n
? (t.$regex = [r])
: r && "object" == typeof r && e(r);
});
})(t),
t
);
}
function M(e, t) {
if (e === t) return 0;
(e = E(e)), (t = E(t));
var n = C(e),
r = C(t);
if (n - r != 0) return n - r;
switch (typeof e) {
case "number":
return e - t;
case "boolean":
return e < t ? -1 : 1;
case "string":
return (function (e, t) {
return e === t ? 0 : e > t ? 1 : -1;
})(e, t);
}
return Array.isArray(e)
? (function (e, t) {
for (var n = Math.min(e.length, t.length), r = 0; r < n; r++) {
var o = M(e[r], t[r]);
if (0 !== o) return o;
}
return e.length === t.length ? 0 : e.length > t.length ? 1 : -1;
})(e, t)
: (function (e, t) {
for (
var n = Object.keys(e),
r = Object.keys(t),
o = Math.min(n.length, r.length),
i = 0;
i < o;
i++
) {
var s = M(n[i], r[i]);
if (0 !== s) return s;
if (0 !== (s = M(e[n[i]], t[r[i]]))) return s;
}
return n.length === r.length ? 0 : n.length > r.length ? 1 : -1;
})(e, t);
}
function E(e) {
switch (typeof e) {
case "undefined":
return null;
case "number":
return e === 1 / 0 || e === -1 / 0 || isNaN(e) ? null : e;
case "object":
var t = e;
if (Array.isArray(e)) {
var n = e.length;
e = new Array(n);
for (var r = 0; r < n; r++) e[r] = E(t[r]);
} else {
if (e instanceof Date) return e.toJSON();
if (null !== e)
for (var o in ((e = {}), t))
if (Object.prototype.hasOwnProperty.call(t, o)) {
var i = t[o];
void 0 !== i && (e[o] = E(i));
}
}
}
return e;
}
function S(e) {
if (null !== e)
switch (typeof e) {
case "boolean":
return e ? 1 : 0;
case "number":
return (function (e) {
if (0 === e) return "1";
var t = e.toExponential().split(/e\+?/),
n = parseInt(t[1], 10),
r = e < 0,
o = r ? "0" : "2",
i =
((s = ((r ? -n : n) - -324).toString()),
(u = "0"),
(c = 3),
(function (e, t, n) {
for (var r = "", o = n - e.length; r.length < o; )
r += t;
return r;
})(s, u, c) + s);
var s, u, c;
o += "" + i;
var a = Math.abs(parseFloat(t[0]));
r && (a = 10 - a);
var f = a.toFixed(20);
return (f = f.replace(/\.?0+$/, "")), (o += "" + f);
})(e);
case "string":
return e
.replace(/\u0002/g, "\x02\x02")
.replace(/\u0001/g, "\x01\x02")
.replace(/\u0000/g, "\x01\x01");
case "object":
var t = Array.isArray(e),
n = t ? e : Object.keys(e),
r = -1,
o = n.length,
i = "";
if (t) for (; ++r < o; ) i += B(n[r]);
else
for (; ++r < o; ) {
var s = n[r];
i += B(s) + B(e[s]);
}
return i;
}
return "";
}
function B(e) {
return C((e = E(e))) + "" + S(e) + "\0";
}
function P(e, t) {
var n,
r = t;
if ("1" === e[t]) (n = 0), t++;
else {
var o = "0" === e[t];
t++;
var i = "",
s = e.substring(t, t + 3),
u = parseInt(s, 10) + -324;
for (o && (u = -u), t += 3; ; ) {
var c = e[t];
if ("\0" === c) break;
(i += c), t++;
}
(n =
1 === (i = i.split(".")).length
? parseInt(i, 10)
: parseFloat(i[0] + "." + i[1])),
o && (n -= 10),
0 !== u && (n = parseFloat(n + "e" + u));
}
return { num: n, length: t - r };
}
function I(e, t) {
var n = e.pop();
if (t.length) {
var r = t[t.length - 1];
n === r.element && (t.pop(), (r = t[t.length - 1]));
var o = r.element,
i = r.index;
if (Array.isArray(o)) o.push(n);
else if (i === e.length - 2) {
o[e.pop()] = n;
} else e.push(n);
}
}
function C(e) {
var t = ["boolean", "number", "string", "object"].indexOf(typeof e);
return ~t
? null === e
? 1
: Array.isArray(e)
? 5
: t < 3
? t + 2
: t + 3
: Array.isArray(e)
? 5
: void 0;
}
function L(e, t, n) {
if (
((e = e.filter(function (e) {
return U(e.doc, t.selector, n);
})),
t.sort)
) {
var r = (function (e) {
function t(t) {
return e.map(function (e) {
var n = k(x(e));
return _(t, n);
});
}
return function (e, n) {
var r = M(t(e.doc), t(n.doc));
return 0 !== r ? r : w(e.doc._id, n.doc._id);
};
})(t.sort);
(e = e.sort(r)),
"string" != typeof t.sort[0] &&
"desc" === O(t.sort[0]) &&
(e = e.reverse());
}
if ("limit" in t || "skip" in t) {
var o = t.skip || 0,
i = ("limit" in t ? t.limit : e.length) + o;
e = e.slice(o, i);
}
return e;
}
function U(e, t, n) {
return n.every(function (n) {
var r = t[n],
o = k(n),
i = _(e, o);
return $(n)
? (function (e, t, n) {
if ("$or" === e)
return t.some(function (e) {
return U(n, e, Object.keys(e));
});
if ("$not" === e) return !U(n, t, Object.keys(t));
return !t.find(function (e) {
return U(n, e, Object.keys(e));
});
})(n, r, e)
: D(r, e, o, i);
});
}
function D(e, t, n, r) {
return (
!e ||
("object" == typeof e
? Object.keys(e).every(function (o) {
var i = e[o];
if (0 === o.indexOf("$")) return N(o, t, i, n, r);
var s = k(o);
if (void 0 === r && "object" != typeof i && s.length > 0)
return !1;
var u = _(r, s);
return "object" == typeof i
? D(i, t, n, u)
: N("$eq", t, i, s, u);
})
: e === r)
);
}
function N(e, t, n, r, o) {
if (!z[e])
throw new Error(
'unknown operator "' +
e +
'" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all'
);
return z[e](t, n, r, o);
}
function T(e) {
return null != e;
}
function F(e) {
return void 0 !== e;
}
function R(e, t) {
return t.some(function (t) {
return e instanceof Array
? e.some(function (e) {
return 0 === M(t, e);
})
: 0 === M(t, e);
});
}
var z = {
$elemMatch: function (e, t, n, r) {
return (
!!Array.isArray(r) &&
0 !== r.length &&
("object" == typeof r[0] && null !== r[0]
? r.some(function (e) {
return U(e, t, Object.keys(t));
})
: r.some(function (r) {
return D(t, e, n, r);
}))
);
},
$allMatch: function (e, t, n, r) {
return (
!!Array.isArray(r) &&
0 !== r.length &&
("object" == typeof r[0] && null !== r[0]
? r.every(function (e) {
return U(e, t, Object.keys(t));
})
: r.every(function (r) {
return D(t, e, n, r);
}))
);
},
$eq: function (e, t, n, r) {
return F(r) && 0 === M(r, t);
},
$gte: function (e, t, n, r) {
return F(r) && M(r, t) >= 0;
},
$gt: function (e, t, n, r) {
return F(r) && M(r, t) > 0;
},
$lte: function (e, t, n, r) {
return F(r) && M(r, t) <= 0;
},
$lt: function (e, t, n, r) {
return F(r) && M(r, t) < 0;
},
$exists: function (e, t, n, r) {
return t ? F(r) : !F(r);
},
$mod: function (e, t, n, r) {
return (
T(r) &&
(function (e, t) {
return (
"number" == typeof e &&
parseInt(e, 10) === e &&
e % t[0] === t[1]
);
})(r, t)
);
},
$ne: function (e, t, n, r) {
return t.every(function (e) {
return 0 !== M(r, e);
});
},
$in: function (e, t, n, r) {
return T(r) && R(r, t);
},
$nin: function (e, t, n, r) {
return T(r) && !R(r, t);
},
$size: function (e, t, n, r) {
return (
T(r) &&
Array.isArray(r) &&
(function (e, t) {
return e.length === t;
})(r, t)
);
},
$all: function (e, t, n, r) {
return (
Array.isArray(r) &&
(function (e, t) {
return t.every(function (t) {
return e.some(function (e) {
return 0 === M(t, e);
});
});
})(r, t)
);
},
$regex: function (e, t, n, r) {
return (
T(r) &&
"string" == typeof r &&
t.every(function (e) {
return (function (e, t) {
return new RegExp(t).test(e);
})(r, e);
})
);
},
$type: function (e, t, n, r) {
return (function (e, t) {
switch (t) {
case "null":
return null === e;
case "boolean":
return "boolean" == typeof e;
case "number":
return "number" == typeof e;
case "string":
return "string" == typeof e;
case "array":
return e instanceof Array;
case "object":
return "[object Object]" === {}.toString.call(e);
}
})(r, t);
},
};
function J(e, t) {
if ("object" != typeof t)
throw new Error("Selector error: expected a JSON object");
var n = L([{ doc: e }], { selector: (t = q(t)) }, Object.keys(t));
return n && 1 === n.length;
}
const V = (...e) => {
let t = [];
for (const n of e)
Array.isArray(n) ? (t = t.concat(V(...n))) : t.push(n);
return t;
},
Q =
"function" == typeof Array.prototype.flat
? (...e) => e.flat(1 / 0)
: V;
function K(e) {
const t = {};
for (const n of e) Object.assign(t, n);
return t;
}
function X(e, t) {
for (let n = 0, r = Math.min(e.length, t.length); n < r; n++)
if (e[n] !== t[n]) return !1;
return !0;
}
function G(e, t) {
if (e.length !== t.length) return !1;
for (let n = 0, r = e.length; n < r; n++)
if (e[n] !== t[n]) return !1;
return !0;
}
function W(e) {
return function (...t) {
const n = t[t.length - 1];
if ("function" != typeof n) return e.apply(this, t);
{
const r = n.bind(null, null),
o = n.bind(null);
e.apply(this, t.slice(0, -1)).then(r, o);
}
};
}
var Y = Headers;
function H(e) {
(e = u(e)).index || (e.index = {});
for (const t of ["type", "name", "ddoc"])
e.index[t] && ((e[t] = e.index[t]), delete e.index[t]);
return (
e.fields && ((e.index.fields = e.fields), delete e.fields),
e.type || (e.type = "json"),
e
);
}
function Z(e) {
return "object" == typeof e && null !== e;
}
function ee(e, t, n) {
let r = "",
o = t,
i = !0;
if (
(-1 !==
["$in", "$nin", "$or", "$and", "$mod", "$nor", "$all"].indexOf(
e
) &&
(Array.isArray(t) ||
(r = "Query operator " + e + " must be an array.")),
-1 !== ["$not", "$elemMatch", "$allMatch"].indexOf(e) &&
((!Array.isArray(t) && Z(t)) ||
(r = "Query operator " + e + " must be an object.")),
"$mod" === e && Array.isArray(t))
)
if (2 !== t.length)
r =
"Query operator $mod must be in the format [divisor, remainder], where divisor and remainder are both integers.";
else {
const e = t[0],
n = t[1];
0 === e &&
((r =
"Query operator $mod's divisor cannot be 0, cannot divide by zero."),
(i = !1)),
("number" == typeof e && parseInt(e, 10) === e) ||
((r = "Query operator $mod's divisor is not an integer."),
(o = e)),
parseInt(n, 10) !== n &&
((r = "Query operator $mod's remainder is not an integer."),
(o = n));
}
if (
("$exists" === e &&
"boolean" != typeof t &&
(r = "Query operator $exists must be a boolean."),
"$type" === e)
) {
const e = [
"null",
"boolean",
"number",
"string",
"array",
"object",
],
n =
'"' +
e.slice(0, e.length - 1).join('", "') +
'", or "' +
e[e.length - 1] +
'"';
("string" != typeof t || -1 == e.indexOf(t)) &&
(r =
"Query operator $type must be a string. Supported values: " +
n +
".");
}
if (
("$size" === e &&
parseInt(t, 10) !== t &&
(r = "Query operator $size must be a integer."),
"$regex" === e &&
"string" != typeof t &&
(n
? (r = "Query operator $regex must be a string.")
: t instanceof RegExp ||
(r =
"Query operator $regex must be a string or an instance of a javascript regular expression.")),
r)
) {
if (i) {
r +=
" Received" +
(null === o
? " "
: Array.isArray(o)
? " array"
: " " + typeof o) +
": " +
(Z(o) ? JSON.stringify(o, null, "\t") : o);
}
throw new Error(r);
}
}
const te = [
"$all",
"$allMatch",
"$and",
"$elemMatch",
"$exists",
"$in",
"$mod",
"$nin",
"$nor",
"$not",
"$or",
"$regex",
"$size",
"$type",
],
ne = ["$in", "$nin", "$mod", "$all"],
re = ["$eq", "$gt", "$gte", "$lt", "$lte"];
function oe(e, t) {
if (Array.isArray(e)) for (const n of e) Z(n) && oe(n, t);
else
for (const [n, r] of Object.entries(e))
-1 !== te.indexOf(n) && ee(n, r, t),
-1 === re.indexOf(n) &&
-1 === ne.indexOf(n) &&
Z(r) &&
oe(r, t);
}
async function ie(e, t, n) {
n.body &&
((n.body = JSON.stringify(n.body)),
(n.headers = new Y({ "Content-type": "application/json" })));
const r = await e.fetch(t, n),
o = await r.json();
if (!r.ok) {
o.status = r.status;
throw d(
(function (e, t) {
function n(t) {
for (
var n = Object.getOwnPropertyNames(e), r = 0, o = n.length;
r < o;
r++
)
"function" != typeof e[n[r]] && (this[n[r]] = e[n[r]]);
void 0 === this.stack && (this.stack = new Error().stack),
void 0 !== t && (this.reason = t);
}
return (n.prototype = f.prototype), new n(t);
})(o)
);
}
return o;
}
async function se(e, t) {
return await ie(e, "_index", { method: "POST", body: H(t) });
}
async function ue(e, t) {
return (
oe(t.selector, !0),
await ie(e, "_find", { method: "POST", body: t })
);
}
async function ce(e, t) {
return await ie(e, "_explain", { method: "POST", body: t });
}
async function ae(e) {
return await ie(e, "_index", { method: "GET" });
}
async function fe(e, t) {
const n = t.ddoc,
r = t.type || "json",
o = t.name;
if (!n) throw new Error("you must provide an index's ddoc");
if (!o) throw new Error("you must provide an index's name");
const i = "_index/" + [n, r, o].map(encodeURIComponent).join("/");
return await ie(e, i, { method: "DELETE" });
}
class le {
constructor() {
this.promise = Promise.resolve();
}
add(e) {
return (
(this.promise = this.promise.catch(() => {}).then(() => e())),
this.promise
);
}
finish() {
return this.promise;
}
}
function de(e) {
if (!e) return "undefined";
switch (typeof e) {
case "function":
case "string":
return e.toString();
default:
return JSON.stringify(e);
}
}
async function ye(e, t, n, r, o, i) {
const s = (function (e, t) {
return de(e) + de(t) + "undefined";
})(n, r);
let u;
if (!o && ((u = e._cachedViews = e._cachedViews || {}), u[s]))
return u[s];
const c = e.info().then(async function (c) {
const a = c.db_name + "-mrview-" + (o ? "temp" : m(s));
await p(e, "_local/" + i, function (e) {
e.views = e.views || {};
let n = t;
-1 === n.indexOf("/") && (n = t + "/" + t);
const r = (e.views[n] = e.views[n] || {});
if (!r[a]) return (r[a] = !0), e;
});
const f = (await e.registerDependentDatabase(a)).db;
f.auto_compaction = !0;
const l = {
name: a,
db: f,
sourceDB: e,
adapter: e.adapter,
mapFun: n,
reduceFun: r,
};
let d;
try {
d = await l.db.get("_local/lastSeq");
} catch (e) {
if (404 !== e.status) throw e;
}
return (
(l.seq = d ? d.seq : 0),
u &&
l.db.once("destroyed", function () {
delete u[s];
}),
l
);
});
return u && (u[s] = c), c;
}
class pe extends Error {
constructor(e) {
super(),
(this.status = 400),
(this.name = "query_parse_error"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, pe);
} catch (e) {}
}
}
class he extends Error {
constructor(e) {
super(),
(this.status = 404),
(this.name = "not_found"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, he);
} catch (e) {}
}
}
class ve extends Error {
constructor(e) {
super(),
(this.status = 500),
(this.name = "invalid_value"),
(this.message = e),
(this.error = !0);
try {
Error.captureStackTrace(this, ve);
} catch (e) {}
}
}
function ge(e, t) {
return (
t &&
e.then(
function (e) {
c(function () {
t(null, e);
});
},
function (e) {
c(function () {
t(e);
});
}
),
e
);
}
function me(e, t) {
return function () {
var n = arguments,
r = this;
return e.add(function () {
return t.apply(r, n);
});
};
}
function _e(e) {
var t = new Set(e),
n = new Array(t.size),
r = -1;
return (
t.forEach(function (e) {
n[++r] = e;
}),
n
);
}
function be(e) {
var t = new Array(e.size),
n = -1;
return (
e.forEach(function (e, r) {
t[++n] = r;
}),
t
);
}
const we = {},
ke = new le();
function je(e) {
return -1 === e.indexOf("/") ? [e, e] : e.split("/");
}
function $e(e, t, n) {
try {
e.emit("error", t);
} catch (e) {
a(
"error",
"The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."
),
a("error", t, n);
}
}
function xe(e, t) {
for (const n of t) if (void 0 === (e = e[n])) return;
return e;
}
function Oe(e, t, n) {
const r = (function (e) {
return e.every((e) => -1 === e.indexOf("."));
})(e),
o = 1 === e.length;
return r
? o
? (function (e, t, n) {
return function (r) {
(n && !J(r, n)) || t(r[e]);
};
})(e[0], t, n)
: (function (e, t, n) {
return function (r) {
if (n && !J(r, n)) return;
const o = e.map((e) => r[e]);
t(o);
};
})(e, t, n)
: o
? (function (e, t, n) {
const r = k(e);
return function (e) {
if (n && !J(e, n)) return;
const o = xe(e, r);
void 0 !== o && t(o);
};
})(e[0], t, n)
: (function (e, t, n) {
return function (r) {
if (n && !J(r, n)) return;
const o = [];
for (const t of e) {
const e = xe(r, k(t));
if (void 0 === e) return;
o.push(e);
}
t(o);
};
})(e, t, n);
}
const Ae = (function (e, t, n, r) {
function o(e, t, n) {
try {
t(n);
} catch (r) {
$e(e, r, { fun: t, doc: n });
}
}
function i(e, t, n, r, o) {
try {
return { output: t(n, r, o) };
} catch (i) {
return (
$e(e, i, { fun: t, keys: n, values: r, rereduce: o }),
{ error: i }
);
}
}
function s(e, t) {
const n = M(e.key, t.key);
return 0 !== n ? n : M(e.value, t.value);
}
function u(e, t, n) {
return (
(n = n || 0),
"number" == typeof t ? e.slice(n, t + n) : n > 0 ? e.slice(n) : e
);
}
function a(e) {
const t = e.value;
return (t && "object" == typeof t && t._id) || e.id;
}
function f(e) {
return function (t) {
return (
e.include_docs &&
e.attachments &&
e.binary &&
(function (e) {
for (const t of e.rows) {
const e = t.doc && t.doc._attachments;
if (e)
for (const t of Object.keys(e)) {
const n = e[t];
e[t].data = g(n.data, n.content_type);
}
}
})(t),
t
);
};
}
function l(e, t, n, r) {
let o = t[e];
void 0 !== o &&
(r && (o = encodeURIComponent(JSON.stringify(o))),
n.push(e + "=" + o));
}
function p(e) {
if (void 0 !== e) {
const t = Number(e);
return isNaN(t) || t !== parseInt(e, 10) ? e : t;
}
}
function h(e) {
if (e) {
if ("number" != typeof e)
return new pe(`Invalid value for integer: "${e}"`);
if (e < 0)
return new pe(`Invalid value for positive integer: "${e}"`);
}
}
function v(e, t) {
const n = e.descending ? "endkey" : "startkey",
r = e.descending ? "startkey" : "endkey";
if (void 0 !== e[n] && void 0 !== e[r] && M(e[n], e[r]) > 0)
throw new pe(
"No rows can match your key range, reverse your start_key and end_key or set {descending : true}"
);
if (t.reduce && !1 !== e.reduce) {
if (e.include_docs)
throw new pe("{include_docs:true} is invalid for reduce");
if (e.keys && e.keys.length > 1 && !e.group && !e.group_level)
throw new pe(
"Multi-key fetches for reduce views must use {group: true}"
);
}
for (const t of ["group_level", "limit", "skip"]) {
const n = h(e[t]);
if (n) throw n;
}
}
function m(e) {
return function (t) {
if (404 === t.status) return e;
throw t;
};
}
function _(e, t, n) {
return e.db
.get("_local/lastSeq")
.catch(m({ _id: "_local/lastSeq", seq: 0 }))
.then(function (r) {
var o = be(t);
return Promise.all(
o.map(function (n) {
return (async function (e, t, n) {
const r = "_local/doc_" + e,
o = { _id: r, keys: [] },
i = n.get(e),
s = i[0],
u = i[1],
c = await ((function (e) {
return 1 === e.length && /^1-/.test(e[0].rev);
})(u)
? Promise.resolve(o)
: t.db.get(r).catch(m(o)));
return (function (e, t) {
const n = [],
r = new Set();
for (const e of t.rows) {
const t = e.doc;
if (
t &&
(n.push(t),
r.add(t._id),
(t._deleted = !s.has(t._id)),
!t._deleted)
) {
const e = s.get(t._id);
"value" in e && (t.value = e.value);
}
}
const o = be(s);
for (const e of o)
if (!r.has(e)) {
const t = { _id: e },
r = s.get(e);
"value" in r && (t.value = r.value), n.push(t);
}
return (e.keys = _e(o.concat(e.keys))), n.push(e), n;
})(
c,
await (function (e) {
return e.keys.length
? t.db.allDocs({ keys: e.keys, include_docs: !0 })
: Promise.resolve({ rows: [] });
})(c)
);
})(n, e, t);
})
)
.then(function (t) {
var o = t.flat();
return (r.seq = n), o.push(r), e.db.bulkDocs({ docs: o });
})
.then(() =>
(function (e) {
return e.sourceDB
.get("_local/purges")
.then(function (t) {
const n = t.purgeSeq;
return e.db
.get("_local/purgeSeq")
.then(function (e) {
return e._rev;
})
.catch(m(void 0))
.then(function (t) {
return e.db.put({
_id: "_local/purgeSeq",
_rev: t,
purgeSeq: n,
});
});
})
.catch(function (e) {
if (404 !== e.status) throw e;
});
})(e)
);
});
}
function b(e) {
const t = "string" == typeof e ? e : e.name;
let n = we[t];
return n || (n = we[t] = new le()), n;
}
async function w(e, n) {
return me(b(e), function () {
return (async function (e, n) {
let r, i, u;
const c = t(e.mapFun, function (e, t) {
const n = { id: i._id, key: E(e) };
null != t && (n.value = E(t)), r.push(n);
});
let a = e.seq || 0;
let f = 0;
const l = { view: e.name, indexed_docs: f };
e.sourceDB.emit("indexing", l);
const d = new le();
async function y() {
return (function (t, l) {
const h = t.results;
if (!h.length && !l.length) return;
for (const e of l) {
if (
h.findIndex(function (t) {
return t.id === e.docId;
}) < 0
) {
const t = {
_id: e.docId,
doc: { _id: e.docId, _deleted: 1 },
changes: [],
};
e.doc &&
((t.doc = e.doc),
t.changes.push({ rev: e.doc._rev })),
h.push(t);
}
}
const v = (function (t) {
const n = new Map();
for (const u of t) {
if ("_" !== u.doc._id[0]) {
(r = []),
(i = u.doc),
i._deleted || o(e.sourceDB, c, i),
r.sort(s);
const t = p(r);
n.set(u.doc._id, [t, u.changes]);
}
a = u.seq;
}
return n;
})(h);
d.add(
(function (t, n) {
return function () {
return _(e, t, n);
};
})(v, a)
),
(f += h.length);
const g = {
view: e.name,
last_seq: t.last_seq,
results_count: h.length,
indexed_docs: f,
};
if (
(e.sourceDB.emit("indexing", g),
e.sourceDB.activeTasks.update(u, { completed_items: f }),
h.length < n.changes_batch_size)
)
return;
return y();
})(
await e.sourceDB.changes({
return_docs: !0,
conflicts: !0,
include_docs: !0,
style: "all_docs",
since: a,
limit: n.changes_batch_size,
}),
await e.db
.get("_local/purgeSeq")
.then(function (e) {
return e.purgeSeq;
})
.catch(m(-1))
.then(function (t) {
return e.sourceDB
.get("_local/purges")
.then(function (n) {
const r = n.purges
.filter(function (e, n) {
return n > t;
})
.map((e) => e.docId),
o = r.filter(function (e, t) {
return r.indexOf(e) === t;
});
return Promise.all(
o.map(function (t) {
return e.sourceDB
.get(t)
.then(function (e) {
return { docId: t, doc: e };
})
.catch(m({ docId: t }));
})
);
})
.catch(m([]));
})
);
}
function p(e) {
const t = new Map();
let n;
for (let r = 0, o = e.length; r < o; r++) {
const o = e[r],
i = [o.key, o.id];
r > 0 && 0 === M(o.key, n) && i.push(r),
t.set(B(i), o),
(n = o.key);
}
return t;
}
try {
await e.sourceDB.info().then(function (t) {
u = e.sourceDB.activeTasks.add({
name: "view_indexing",
total_items: t.update_seq - a,
});
}),
await y(),
await d.finish(),
(e.seq = a),
e.sourceDB.activeTasks.remove(u);
} catch (t) {
e.sourceDB.activeTasks.remove(u, t);
}
})(e, n);
})();
}
function k(e, t) {
return me(b(e), function () {
return (async function (e, t) {
let r;
const o = e.reduceFun && !1 !== t.reduce,
s = t.skip || 0;
void 0 === t.keys ||
t.keys.length ||
((t.limit = 0), delete t.keys);
async function c(t) {
t.include_docs = !0;
const n = await e.db.allDocs(t);
return (
(r = n.total_rows),
n.rows.map(function (e) {
if (
"value" in e.doc &&
"object" == typeof e.doc.value &&
null !== e.doc.value
) {
const t = Object.keys(e.doc.value).sort(),
n = ["id", "key", "value"];
if (!(t < n || t > n)) return e.doc.value;
}
const t = (function (e) {
for (var t = [], n = [], r = 0; ; ) {
var o = e[r++];
if ("\0" !== o)
switch (o) {
case "1":
t.push(null);
break;
case "2":
t.push("1" === e[r]), r++;
break;
case "3":
var i = P(e, r);
t.push(i.num), (r += i.length);
break;
case "4":
for (var s = ""; ; ) {
var u = e[r];
if ("\0" === u) break;
(s += u), r++;
}
(s = s
.replace(/\u0001\u0001/g, "\0")
.replace(/\u0001\u0002/g, "\x01")
.replace(/\u0002\u0002/g, "\x02")),
t.push(s);
break;
case "5":
var c = { element: [], index: t.length };
t.push(c.element), n.push(c);
break;
case "6":
var a = { element: {}, index: t.length };
t.push(a.element), n.push(a);
break;
default:
throw new Error(
"bad collationIndex or unexpectedly reached end of input: " +
o
);
}
else {
if (1 === t.length) return t.pop();
I(t, n);
}
}
})(e.doc._id);
return {
key: t[0],
id: t[1],
value: "value" in e.doc ? e.doc.value : null,
};
})
);
}
async function f(c) {
let f;
if (
((f = o
? (function (e, t, r) {
0 === r.group_level && delete r.group_level;
const o = r.group || r.group_level,
s = n(e.reduceFun),
c = [],
a = isNaN(r.group_level)
? Number.POSITIVE_INFINITY
: r.group_level;
for (const e of t) {
const t = c[c.length - 1];
let n = o ? e.key : null;
o && Array.isArray(n) && (n = n.slice(0, a)),
t && 0 === M(t.groupKey, n)
? (t.keys.push([e.key, e.id]),
t.values.push(e.value))
: c.push({
keys: [[e.key, e.id]],
values: [e.value],
groupKey: n,
});
}
t = [];
for (const n of c) {
const r = i(e.sourceDB, s, n.keys, n.values, !1);
if (r.error && r.error instanceof ve) throw r.error;
t.push({
value: r.error ? null : r.output,
key: n.groupKey,
});
}
return { rows: u(t, r.limit, r.skip) };
})(e, c, t)
: void 0 === t.keys
? { total_rows: r, offset: s, rows: c }
: {
total_rows: r,
offset: s,
rows: u(c, t.limit, t.skip),
}),
t.update_seq && (f.update_seq = e.seq),
t.include_docs)
) {
const n = _e(c.map(a)),
r = await e.sourceDB.allDocs({
keys: n,
include_docs: !0,
conflicts: t.conflicts,
attachments: t.attachments,
binary: t.binary,
}),
o = new Map();
for (const e of r.rows) o.set(e.id, e.doc);
for (const e of c) {
const t = a(e),
n = o.get(t);
n && (e.doc = n);
}
}
return f;
}
if (void 0 !== t.keys) {
const e = t.keys.map(function (e) {
const n = { startkey: B([e]), endkey: B([e, {}]) };
return t.update_seq && (n.update_seq = !0), c(n);
}),
n = await Promise.all(e);
return f(n.flat());
}
{
const e = { descending: t.descending };
let n, r;
if (
(t.update_seq && (e.update_seq = !0),
"start_key" in t && (n = t.start_key),
"startkey" in t && (n = t.startkey),
"end_key" in t && (r = t.end_key),
"endkey" in t && (r = t.endkey),
void 0 !== n &&
(e.startkey = t.descending ? B([n, {}]) : B([n])),
void 0 !== r)
) {
let n = !1 !== t.inclusive_end;
t.descending && (n = !n), (e.endkey = B(n ? [r, {}] : [r]));
}
if (void 0 !== t.key) {
const n = B([t.key]),
r = B([t.key, {}]);
e.descending
? ((e.endkey = n), (e.startkey = r))
: ((e.startkey = n), (e.endkey = r));
}
o ||
("number" == typeof t.limit && (e.limit = t.limit),
(e.skip = s));
return f(await c(e));
}
})(e, t);
})();
}
async function j(t, n, o) {
if ("function" == typeof t._query)
return (function (e, t, n) {
return new Promise(function (r, o) {
e._query(t, n, function (e, t) {
if (e) return o(e);
r(t);
});
});
})(t, n, o);
if (y(t))
return (async function (e, t, n) {
let r,
o,
i = [],
s = "GET";
if (
(l("reduce", n, i),
l("include_docs", n, i),
l("attachments", n, i),
l("limit", n, i),
l("descending", n, i),
l("group", n, i),
l("group_level", n, i),
l("skip", n, i),
l("stale", n, i),
l("conflicts", n, i),
l("startkey", n, i, !0),
l("start_key", n, i, !0),
l("endkey", n, i, !0),
l("end_key", n, i, !0),
l("inclusive_end", n, i),
l("key", n, i, !0),
l("update_seq", n, i),
(i = i.join("&")),
(i = "" === i ? "" : "?" + i),
void 0 !== n.keys)
) {
const e = 2e3,
o = "keys=" + encodeURIComponent(JSON.stringify(n.keys));
o.length + i.length + 1 <= e
? (i += ("?" === i[0] ? "&" : "?") + o)
: ((s = "POST"),
"string" == typeof t
? (r = { keys: n.keys })
: (t.keys = n.keys));
}
if ("string" == typeof t) {
const u = je(t),
c = await e.fetch(
"_design/" + u[0] + "/_view/" + u[1] + i,
{
headers: new Y({ "Content-Type": "application/json" }),
method: s,
body: JSON.stringify(r),
}
);
o = c.ok;
const a = await c.json();
if (!o) throw ((a.status = c.status), d(a));
for (const e of a.rows)
if (
e.value &&
e.value.error &&
"builtin_reduce_error" === e.value.error
)
throw new Error(e.reason);
return new Promise(function (e) {
e(a);
}).then(f(n));
}
r = r || {};
for (const e of Object.keys(t))
Array.isArray(t[e])
? (r[e] = t[e])
: (r[e] = t[e].toString());
const u = await e.fetch("_temp_view" + i, {
headers: new Y({ "Content-Type": "application/json" }),
method: "POST",
body: JSON.stringify(r),
});
o = u.ok;
const c = await u.json();
if (!o) throw ((c.status = u.status), d(c));
return new Promise(function (e) {
e(c);
}).then(f(n));
})(t, n, o);
const i = {
changes_batch_size: t.__opts.view_update_changes_batch_size || 50,
};
if ("string" != typeof n)
return (
v(o, n),
ke.add(async function () {
const r = await ye(
t,
"temp_view/temp_view",
n.map,
n.reduce,
!0,
e
);
return (
(s = w(r, i).then(function () {
return k(r, o);
})),
(u = function () {
return r.db.destroy();
}),
s.then(
function (e) {
return u().then(function () {
return e;
});
},
function (e) {
return u().then(function () {
throw e;
});
}
)
);
var s, u;
}),
ke.finish()
);
{
const s = n,
u = je(s),
a = u[0],
f = u[1],
l = await t.get("_design/" + a);
if (!(n = l.views && l.views[f]))
throw new he(`ddoc ${l._id} has no view named ${f}`);
r(l, f), v(o, n);
const d = await ye(t, s, n.map, n.reduce, !1, e);
return "ok" === o.stale || "update_after" === o.stale
? ("update_after" === o.stale &&
c(function () {
w(d, i);
}),
k(d, o))
: (await w(d, i), k(d, o));
}
}
var $;
return {
query: function (e, t, n) {
const r = this;
"function" == typeof t && ((n = t), (t = {})),
(t = t
? (function (e) {
return (
(e.group_level = p(e.group_level)),
(e.limit = p(e.limit)),
(e.skip = p(e.skip)),
e
);
})(t)
: {}),
"function" == typeof e && (e = { map: e });
const o = Promise.resolve().then(function () {
return j(r, e, t);
});
return ge(o, n), o;
},
viewCleanup:
(($ = function () {
const t = this;
return "function" == typeof t._viewCleanup
? (function (e) {
return new Promise(function (t, n) {
e._viewCleanup(function (e, r) {
if (e) return n(e);
t(r);
});
});
})(t)
: y(t)
? (async function (e) {
return (
await e.fetch("_view_cleanup", {
headers: new Y({
"Content-Type": "application/json",
}),
method: "POST",
})
).json();
})(t)
: (async function (t) {
try {
const n = await t.get("_local/" + e),
r = new Map();
for (const e of Object.keys(n.views)) {
const t = je(e),
n = "_design/" + t[0],
o = t[1];
let i = r.get(n);
i || ((i = new Set()), r.set(n, i)), i.add(o);
}
const o = { keys: be(r), include_docs: !0 },
i = await t.allDocs(o),
s = {};
for (const e of i.rows) {
const t = e.key.substring(8);
for (const o of r.get(e.key)) {
let r = t + "/" + o;
n.views[r] || (r = o);
const i = Object.keys(n.views[r]),
u = e.doc && e.doc.views && e.doc.views[o];
for (const e of i) s[e] = s[e] || u;
}
}
const u = Object.keys(s)
.filter(function (e) {
return !s[e];
})
.map(function (e) {
return me(b(e), function () {
return new t.constructor(e, t.__opts).destroy();
})();
});
return Promise.all(u).then(function () {
return { ok: !0 };
});
} catch (e) {
if (404 === e.status) return { ok: !0 };
throw e;
}
})(t);
}),
function (...e) {
var t = e.pop(),
n = $.apply(this, e);
return "function" == typeof t && ge(n, t), n;
}),
};
})(
"indexes",
function (e, t) {
return Oe(Object.keys(e.fields), t, e.partial_filter_selector);
},
function () {
throw new Error("reduce not supported");
},
function (e, t) {
const n = e.views[t];
if (!n.map || !n.map.fields)
throw new Error(
"ddoc " +
e._id +
" with view " +
t +
" doesn't have map.fields defined. maybe it wasn't created by this plugin?"
);
}
);
function qe(e) {
return e._customFindAbstractMapper
? {
query: function (t, n) {
const r = Ae.query.bind(this);
return e._customFindAbstractMapper.query.call(this, t, n, r);
},
viewCleanup: function () {
const t = Ae.viewCleanup.bind(this);
return e._customFindAbstractMapper.viewCleanup.call(this, t);
},
}
: Ae;
}
const Me = /^_design\//;
function Ee(e) {
return (
(e.fields = e.fields.map(function (e) {
if ("string" == typeof e) {
const t = {};
return (t[e] = "asc"), t;
}
return e;
})),
e.partial_filter_selector &&
(e.partial_filter_selector = q(e.partial_filter_selector)),
e
);
}
function Se(e, t) {
return t.def.fields.map((t) => {
const n = x(t);
return _(e, k(n));
});
}
async function Be(e, t) {
const n = u((t = H(t)).index);
let r;
function o() {
return r || (r = m(JSON.stringify(t)));
}
(t.index = Ee(t.index)),
(function (e) {
const t = e.fields.filter(function (e) {
return "asc" === O(e);
});
if (0 !== t.length && t.length !== e.fields.length)
throw new Error("unsupported mixed sorting");
})(t.index);
const i = t.name || "idx-" + o(),
s = t.ddoc || "idx-" + o(),
c = "_design/" + s;
let a = !1,
f = !1;
if (
(e.constructor.emit("debug", ["find", "creating index", c]),
await p(e, c, function (e) {
return (
e._rev && "query" !== e.language && (a = !0),
(e.language = "query"),
(e.views = e.views || {}),
(f = !!e.views[i]),
!f &&
((e.views[i] = {
map: {
fields: K(t.index.fields),
partial_filter_selector: t.index.partial_filter_selector,
},
reduce: "_count",
options: { def: n },
}),
e)
);
}),
a)
)
throw new Error(
'invalid language for ddoc with id "' +
c +
'" (should be "query")'
);
const l = s + "/" + i;
return (
await qe(e).query.call(e, l, { limit: 0, reduce: !1 }),
{ id: c, name: i, result: f ? "exists" : "created" }
);
}
async function Pe(e) {
const t = await e.allDocs({
startkey: "_design/",
endkey: "_design/\uffff",
include_docs: !0,
}),
n = {
indexes: [
{
ddoc: null,
name: "_all_docs",
type: "special",
def: { fields: [{ _id: "asc" }] },
},
],
};
return (
(n.indexes = Q(
n.indexes,
t.rows
.filter(function (e) {
return "query" === e.doc.language;
})
.map(function (e) {
return (
void 0 !== e.doc.views ? Object.keys(e.doc.views) : []
).map(function (t) {
const n = e.doc.views[t];
return {
ddoc: e.id,
name: t,
type: "json",
def: Ee(n.options.def),
};
});
})
)),
n.indexes.sort(function (e, t) {
return w(e.name, t.name);
}),
(n.total_rows = n.indexes.length),
n
);
}
const Ie = { "\uffff": {} },
Ce = {
queryOpts: { limit: 0, startkey: Ie, endkey: null },
inMemoryFields: [],
};
function Le(e, t) {
return e.def.fields.some((e) => x(e) === t);
}
function Ue(e, t) {
return "$eq" !== x(e[t]);
}
function De(e, t) {
const n = t.def.fields.map(x);
return e.slice().sort(function (e, t) {
let r = n.indexOf(e),
o = n.indexOf(t);
return (
-1 === r && (r = Number.MAX_VALUE),
-1 === o && (o = Number.MAX_VALUE),
w(r, o)
);
});
}
function Ne(e, t, n, r) {
const o = Q(
e,
(function (e, t, n) {
let r = !1;
for (let o = 0, i = (n = De(n, e)).length; o < i; o++) {
const s = n[o];
if (r || !Le(e, s)) return n.slice(o);
o < i - 1 && Ue(t, s) && (r = !0);
}
return [];
})(t, n, r),
(function (e) {
const t = [];
for (const [n, r] of Object.entries(e))
for (const e of Object.keys(r)) "$ne" === e && t.push(n);
return t;
})(n)
);
return De(((i = o), Array.from(new Set(i))), t);
var i;
}
function Te(e, t, n) {
if (t) {
const i = ((o = e), !((r = t).length > o.length) && X(r, o)),
s = X(n, e);
return i && s;
}
var r, o;
return (function (e, t) {
e = e.slice();
for (const n of t) {
if (!e.length) break;
const t = e.indexOf(n);
if (-1 === t) return !1;
e.splice(t, 1);
}
return !0;
})(n, e);
}
const Fe = ["$eq", "$gt", "$gte", "$lt", "$lte"];
function Re(e) {
return -1 === Fe.indexOf(e);
}
function ze(e, t, n, r) {
const o = e.def.fields.map(x);
return (
!!Te(o, t, n) &&
(function (e, t) {
const n = t[e[0]];
return (
void 0 === n || !(1 === Object.keys(n).length && "$ne" === x(n))
);
})(o, r)
);
}
function Je(e, t, n, r, o) {
const i = (function (e, t, n, r) {
return r.filter(function (r) {
return ze(r, n, t, e);
});
})(e, t, n, r);
if (0 === i.length) {
if (o)
throw {
error: "no_usable_index",
message: "There is no index available for this selector.",
};
const e = r[0];
return (e.defaultUsed = !0), e;
}
if (1 === i.length && !o) return i[0];
const s = (function (e) {
const t = {};
for (const n of e) t[n] = !0;
return t;
})(t);
if (o) {
const e = "_design/" + o[0],
t = 2 === o.length && o[1],
n = i.find(function (n) {
return !(!t || n.ddoc !== e || t !== n.name) || n.ddoc === e;
});
if (!n)
throw {
error: "unknown_error",
message:
"Could not find that index or could not use that index for the query",
};
return n;
}
return (function (e, t) {
let n = null,
r = -1;
for (const o of e) {
const e = t(o);
e > r && ((r = e), (n = o));
}
return n;
})(i, function (e) {
const t = e.def.fields.map(x);
let n = 0;
for (const e of t) s[e] && n++;
return n;
});
}
function Ve(e, t) {
switch (e) {
case "$eq":
return { key: t };
case "$lte":
return { endkey: t };
case "$gte":
return { startkey: t };
case "$lt":
return { endkey: t, inclusive_end: !1 };
case "$gt":
return { startkey: t, inclusive_start: !1 };
}
return { startkey: null };
}
function Qe(e, t) {
switch (e) {
case "$eq":
return { startkey: t, endkey: t };
case "$lte":
return { endkey: t };
case "$gte":
return { startkey: t };
case "$lt":
return { endkey: t, inclusive_end: !1 };
case "$gt":
return { startkey: t, inclusive_start: !1 };
}
}
function Ke(e, t) {
return t.defaultUsed
? (function (e) {
return {
queryOpts: { startkey: null },
inMemoryFields: [Object.keys(e)],
};
})(e)
: 1 === t.def.fields.length
? (function (e, t) {
const n = x(t.def.fields[0]),
r = e[n] || {},
o = [],
i = Object.keys(r);
let s;
for (const e of i) {
Re(e) && o.push(n);
const t = Ve(e, r[e]);
s = s ? K([s, t]) : t;
}
return { queryOpts: s, inMemoryFields: o };
})(e, t)
: (function (e, t) {
const n = t.def.fields.map(x);
let r = [];
const o = [],
i = [];
let s, u;
function c(e) {
!1 !== s && o.push(null),
!1 !== u && i.push(Ie),
(r = n.slice(e));
}
for (let t = 0, r = n.length; t < r; t++) {
const r = e[n[t]];
if (!r || !Object.keys(r).length) {
c(t);
break;
}
if (Object.keys(r).some(Re)) {
c(t);
break;
}
if (t > 0) {
const o =
"$gt" in r || "$gte" in r || "$lt" in r || "$lte" in r,
i = Object.keys(e[n[t - 1]]),
s = G(i, ["$eq"]),
u = G(i, Object.keys(r));
if (o && !s && !u) {
c(t);
break;
}
}
const a = Object.keys(r);
let f = null;
for (const e of a) {
const t = Qe(e, r[e]);
f = f ? K([f, t]) : t;
}
o.push("startkey" in f ? f.startkey : null),
i.push("endkey" in f ? f.endkey : Ie),
"inclusive_start" in f && (s = f.inclusive_start),
"inclusive_end" in f && (u = f.inclusive_end);
}
const a = { startkey: o, endkey: i };
return (
void 0 !== s && (a.inclusive_start = s),
void 0 !== u && (a.inclusive_end = u),
{ queryOpts: a, inMemoryFields: r }
);
})(e, t);
}
function Xe(e, t) {
const n = e.selector,
r = e.sort;
if (
(function (e) {
return Object.keys(e)
.map(function (t) {
return e[t];
})
.some(function (e) {
return "object" == typeof e && 0 === Object.keys(e).length;
});
})(n)
)
return Object.assign({}, Ce, { index: t[0] });
const o = (function (e, t) {
const n = Object.keys(e),
r = t ? t.map(x) : [];
let o;
return (
(o = n.length >= r.length ? n : r),
0 === r.length
? { fields: o }
: ((o = o.sort(function (e, t) {
let n = r.indexOf(e);
-1 === n && (n = Number.MAX_VALUE);
let o = r.indexOf(t);
return (
-1 === o && (o = Number.MAX_VALUE),
n < o ? -1 : n > o ? 1 : 0
);
})),
{ fields: o, sortOrder: t.map(x) })
);
})(n, r),
i = o.fields,
s = Je(n, i, o.sortOrder, t, e.use_index),
u = Ke(n, s);
return {
queryOpts: u.queryOpts,
index: s,
inMemoryFields: Ne(u.inMemoryFields, s, n, i),
};
}
async function Ge(e, t, n) {
return "_all_docs" === n.name
? (async function (e, t) {
const n = u(t);
n.descending
? ("endkey" in n &&
"string" != typeof n.endkey &&
(n.endkey = ""),
"startkey" in n &&
"string" != typeof n.startkey &&
(n.limit = 0))
: ("startkey" in n &&
"string" != typeof n.startkey &&
(n.startkey = ""),
"endkey" in n &&
"string" != typeof n.endkey &&
(n.limit = 0)),
"key" in n && "string" != typeof n.key && (n.limit = 0),
n.limit > 0 &&
n.indexes_count &&
((n.original_limit = n.limit),
(n.limit += n.indexes_count));
const r = await e.allDocs(n);
return (
(r.rows = r.rows.filter(function (e) {
return !/^_design\//.test(e.id);
})),
n.original_limit && (n.limit = n.original_limit),
(r.rows = r.rows.slice(0, n.limit)),
r
);
})(e, t)
: qe(e).query.call(e, (r = n).ddoc.substring(8) + "/" + r.name, t);
var r;
}
async function We(e, t, n) {
t.selector && (oe(t.selector, !1), (t.selector = q(t.selector))),
t.sort &&
(t.sort = (function (e) {
if (!Array.isArray(e))
throw new Error("invalid sort json - should be an array");
return e.map(function (e) {
if ("string" == typeof e) {
const t = {};
return (t[e] = "asc"), t;
}
return e;
});
})(t.sort)),
t.use_index &&
(t.use_index = (function (e) {
let t = [];
return (
"string" == typeof e ? t.push(e) : (t = e),
t.map(function (e) {
return e.replace(Me, "");
})
);
})(t.use_index)),
"limit" in t || (t.limit = 25),
(function (e) {
if ("object" != typeof e.selector)
throw new Error("you must provide a selector when you find()");
})(t);
const r = await Pe(e);
e.constructor.emit("debug", ["find", "planning query", t]);
const o = Xe(t, r.indexes);
e.constructor.emit("debug", ["find", "query plan", o]);
const i = o.index;
!(function (e, t) {
if (t.defaultUsed && e.sort) {
const t = e.sort
.filter(function (e) {
return "_id" !== Object.keys(e)[0];
})
.map(function (e) {
return Object.keys(e)[0];
});
if (t.length > 0)
throw new Error(
'Cannot sort on field(s) "' +
t.join(",") +
'" when using the default index'
);
}
t.defaultUsed;
})(t, i);
let s = Object.assign(
{ include_docs: !0, reduce: !1, indexes_count: r.total_rows },
o.queryOpts
);
if ("startkey" in s && "endkey" in s && M(s.startkey, s.endkey) > 0)
return { docs: [] };
if (
(t.sort &&
"string" != typeof t.sort[0] &&
"desc" === O(t.sort[0]) &&
((s.descending = !0),
(s = (function (e) {
const t = u(e);
return (
delete t.startkey,
delete t.endkey,
delete t.inclusive_start,
delete t.inclusive_end,
"endkey" in e && (t.startkey = e.endkey),
"startkey" in e && (t.endkey = e.startkey),
"inclusive_start" in e &&
(t.inclusive_end = e.inclusive_start),
"inclusive_end" in e && (t.inclusive_start = e.inclusive_end),
t
);
})(s))),
o.inMemoryFields.length ||
((s.limit = t.limit), "skip" in t && (s.skip = t.skip)),
n)
)
return Promise.resolve(o, s);
const c = await Ge(e, s, i);
!1 === s.inclusive_start &&
(c.rows = (function (e, t, n) {
const r = n.def.fields;
let o = 0;
for (const i of e) {
let e = Se(i.doc, n);
if (1 === r.length) e = e[0];
else for (; e.length > t.length; ) e.pop();
if (Math.abs(M(e, t)) > 0) break;
++o;
}
return o > 0 ? e.slice(o) : e;
})(c.rows, s.startkey, i)),
o.inMemoryFields.length &&
(c.rows = L(c.rows, t, o.inMemoryFields));
const a = {
docs: c.rows.map(function (e) {
const n = e.doc;
return t.fields
? (function (e, t) {
const n = {};
for (const r of t) {
const t = k(r),
o = _(e, t);
void 0 !== o && b(n, t, o);
}
return n;
})(n, t.fields)
: n;
}),
};
return (
i.defaultUsed &&
(a.warning =
"No matching index found, create an index to optimize query time."),
a
);
}
async function Ye(e, t) {
const n = await We(e, t, !0);
return {
dbname: e.name,
index: n.index,
selector: t.selector,
range: {
start_key: n.queryOpts.startkey,
end_key: n.queryOpts.endkey,
},
opts: {
use_index: t.use_index || [],
bookmark: "nil",
limit: t.limit,
skip: t.skip,
sort: t.sort || {},
fields: t.fields,
conflicts: !1,
r: [49],
},
limit: t.limit,
skip: t.skip || 0,
fields: t.fields,
};
}
async function He(e, t) {
if (!t.ddoc)
throw new Error("you must supply an index.ddoc when deleting");
if (!t.name)
throw new Error("you must supply an index.name when deleting");
const n = t.ddoc,
r = t.name;
return (
await p(e, n, function (e) {
return 1 === Object.keys(e.views).length && e.views[r]
? { _id: n, _deleted: !0 }
: (delete e.views[r], e);
}),
await qe(e).viewCleanup.apply(e),
{ ok: !0 }
);
}
const Ze = {};
(Ze.createIndex = W(async function (e) {
if ("object" != typeof e)
throw new Error("you must provide an index to create");
return (y(this) ? se : Be)(this, e);
})),
(Ze.find = W(async function (e) {
if ("object" != typeof e)
throw new Error("you must provide search parameters to find()");
return (y(this) ? ue : We)(this, e);
})),
(Ze.explain = W(async function (e) {
if ("object" != typeof e)
throw new Error(
"you must provide search parameters to explain()"
);
return (y(this) ? ce : Ye)(this, e);
})),
(Ze.getIndexes = W(async function () {
return (y(this) ? ae : Pe)(this);
})),
(Ze.deleteIndex = W(async function (e) {
if ("object" != typeof e)
throw new Error("you must provide an index to delete");
return (y(this) ? fe : He)(this, e);
})),
"undefined" == typeof PouchDB
? a(
"error",
'pouchdb-find plugin error: Cannot find global "PouchDB" object! Did you remember to include pouchdb.js?'
)
: PouchDB.plugin(Ze);
},
{ events: 1, "spark-md5": 2, uuid: 3 },
],
},
{},
[18]
);
//# sourceMappingURL=pouchdb.find.min.js.map
(function (f) {
var d,
e,
p = function () {
d = new (window.UAParser || exports.UAParser)().getResult();
e = new Detector();
return this;
};
p.prototype = {
getSoftwareVersion: function () {
return "0.1.11";
},
getBrowserData: function () {
return d;
},
getFingerprint: function () {
var b = d.ua,
c = this.getScreenPrint(),
a = this.getPlugins(),
g = this.getFonts(),
n = this.isLocalStorage(),
f = this.isSessionStorage(),
h = this.getTimeZone(),
u = this.getLanguage(),
m = this.getSystemLanguage(),
e = this.isCookie(),
C = this.getCanvasPrint();
return murmurhash3_32_gc(
b +
"|" +
c +
"|" +
a +
"|" +
g +
"|" +
n +
"|" +
f +
"|" +
h +
"|" +
u +
"|" +
m +
"|" +
e +
"|" +
C,
256
);
},
getCustomFingerprint: function () {
for (var b = "", c = 0; c < arguments.length; c++)
b += arguments[c] + "|";
return murmurhash3_32_gc(b, 256);
},
getUserAgent: function () {
return d.ua;
},
getUserAgentLowerCase: function () {
return d.ua.toLowerCase();
},
getBrowser: function () {
return d.browser.name;
},
getBrowserVersion: function () {
return d.browser.version;
},
getBrowserMajorVersion: function () {
return d.browser.major;
},
isIE: function () {
return /IE/i.test(d.browser.name);
},
isChrome: function () {
return /Chrome/i.test(d.browser.name);
},
isFirefox: function () {
return /Firefox/i.test(d.browser.name);
},
isSafari: function () {
return /Safari/i.test(d.browser.name);
},
isMobileSafari: function () {
return /Mobile\sSafari/i.test(d.browser.name);
},
isOpera: function () {
return /Opera/i.test(d.browser.name);
},
getEngine: function () {
return d.engine.name;
},
getEngineVersion: function () {
return d.engine.version;
},
getOS: function () {
return d.os.name;
},
getOSVersion: function () {
return d.os.version;
},
isWindows: function () {
return /Windows/i.test(d.os.name);
},
isMac: function () {
return /Mac/i.test(d.os.name);
},
isLinux: function () {
return /Linux/i.test(d.os.name);
},
isUbuntu: function () {
return /Ubuntu/i.test(d.os.name);
},
isSolaris: function () {
return /Solaris/i.test(d.os.name);
},
getDevice: function () {
return d.device.model;
},
getDeviceType: function () {
return d.device.type;
},
getDeviceVendor: function () {
return d.device.vendor;
},
getCPU: function () {
return d.cpu.architecture;
},
isMobile: function () {
var b = d.ua || navigator.vendor || window.opera;
return (
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(
b
) ||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
b.substr(0, 4)
)
);
},
isMobileMajor: function () {
return (
this.isMobileAndroid() ||
this.isMobileBlackBerry() ||
this.isMobileIOS() ||
this.isMobileOpera() ||
this.isMobileWindows()
);
},
isMobileAndroid: function () {
return d.ua.match(/Android/i) ? !0 : !1;
},
isMobileOpera: function () {
return d.ua.match(/Opera Mini/i) ? !0 : !1;
},
isMobileWindows: function () {
return d.ua.match(/IEMobile/i) ? !0 : !1;
},
isMobileBlackBerry: function () {
return d.ua.match(/BlackBerry/i) ? !0 : !1;
},
isMobileIOS: function () {
return d.ua.match(/iPhone|iPad|iPod/i) ? !0 : !1;
},
isIphone: function () {
return d.ua.match(/iPhone/i) ? !0 : !1;
},
isIpad: function () {
return d.ua.match(/iPad/i) ? !0 : !1;
},
isIpod: function () {
return d.ua.match(/iPod/i) ? !0 : !1;
},
getScreenPrint: function () {
return (
"Current Resolution: " +
this.getCurrentResolution() +
", Available Resolution: " +
this.getAvailableResolution() +
", Color Depth: " +
this.getColorDepth() +
", Device XDPI: " +
this.getDeviceXDPI() +
", Device YDPI: " +
this.getDeviceYDPI()
);
},
getColorDepth: function () {
return screen.colorDepth;
},
getCurrentResolution: function () {
return screen.width + "x" + screen.height;
},
getAvailableResolution: function () {
return screen.availWidth + "x" + screen.availHeight;
},
getDeviceXDPI: function () {
return screen.deviceXDPI;
},
getDeviceYDPI: function () {
return screen.deviceYDPI;
},
getPlugins: function () {
for (var b = "", c = 0; c < navigator.plugins.length; c++)
b =
c == navigator.plugins.length - 1
? b + navigator.plugins[c].name
: b + (navigator.plugins[c].name + ", ");
return b;
},
isJava: function () {
return navigator.javaEnabled();
},
getJavaVersion: function () {
return deployJava.getJREs().toString();
},
isFlash: function () {
return navigator.plugins["Shockwave Flash"] ? !0 : !1;
},
getFlashVersion: function () {
return this.isFlash()
? ((objPlayerVersion = swfobject.getFlashPlayerVersion()),
objPlayerVersion.major +
"." +
objPlayerVersion.minor +
"." +
objPlayerVersion.release)
: "";
},
isSilverlight: function () {
return navigator.plugins["Silverlight Plug-In"] ? !0 : !1;
},
getSilverlightVersion: function () {
return this.isSilverlight()
? navigator.plugins["Silverlight Plug-In"].description
: "";
},
isMimeTypes: function () {
return navigator.mimeTypes.length ? !0 : !1;
},
getMimeTypes: function () {
for (var b = "", c = 0; c < navigator.mimeTypes.length; c++)
b =
c == navigator.mimeTypes.length - 1
? b + navigator.mimeTypes[c].description
: b + (navigator.mimeTypes[c].description + ", ");
return b;
},
isFont: function (b) {
return e.detect(b);
},
getFonts: function () {
for (
var b =
"Abadi MT Condensed Light;Adobe Fangsong Std;Adobe Hebrew;Adobe Ming Std;Agency FB;Aharoni;Andalus;Angsana New;AngsanaUPC;Aparajita;Arab;Arabic Transparent;Arabic Typesetting;Arial Baltic;Arial Black;Arial CE;Arial CYR;Arial Greek;Arial TUR;Arial;Batang;BatangChe;Bauhaus 93;Bell MT;Bitstream Vera Serif;Bodoni MT;Bookman Old Style;Braggadocio;Broadway;Browallia New;BrowalliaUPC;Calibri Light;Calibri;Californian FB;Cambria Math;Cambria;Candara;Castellar;Casual;Centaur;Century Gothic;Chalkduster;Colonna MT;Comic Sans MS;Consolas;Constantia;Copperplate Gothic Light;Corbel;Cordia New;CordiaUPC;Courier New Baltic;Courier New CE;Courier New CYR;Courier New Greek;Courier New TUR;Courier New;DFKai-SB;DaunPenh;David;DejaVu LGC Sans Mono;Desdemona;DilleniaUPC;DokChampa;Dotum;DotumChe;Ebrima;Engravers MT;Eras Bold ITC;Estrangelo Edessa;EucrosiaUPC;Euphemia;Eurostile;FangSong;Forte;FrankRuehl;Franklin Gothic Heavy;Franklin Gothic Medium;FreesiaUPC;French Script MT;Gabriola;Gautami;Georgia;Gigi;Gisha;Goudy Old Style;Gulim;GulimChe;GungSeo;Gungsuh;GungsuhChe;Haettenschweiler;Harrington;Hei S;HeiT;Heisei Kaku Gothic;Hiragino Sans GB;Impact;Informal Roman;IrisUPC;Iskoola Pota;JasmineUPC;KacstOne;KaiTi;Kalinga;Kartika;Khmer UI;Kino MT;KodchiangUPC;Kokila;Kozuka Gothic Pr6N;Lao UI;Latha;Leelawadee;Levenim MT;LilyUPC;Lohit Gujarati;Loma;Lucida Bright;Lucida Console;Lucida Fax;Lucida Sans Unicode;MS Gothic;MS Mincho;MS PGothic;MS PMincho;MS Reference Sans Serif;MS UI Gothic;MV Boli;Magneto;Malgun Gothic;Mangal;Marlett;Matura MT Script Capitals;Meiryo UI;Meiryo;Menlo;Microsoft Himalaya;Microsoft JhengHei;Microsoft New Tai Lue;Microsoft PhagsPa;Microsoft Sans Serif;Microsoft Tai Le;Microsoft Uighur;Microsoft YaHei;Microsoft Yi Baiti;MingLiU;MingLiU-ExtB;MingLiU_HKSCS;MingLiU_HKSCS-ExtB;Miriam Fixed;Miriam;Mongolian Baiti;MoolBoran;NSimSun;Narkisim;News Gothic MT;Niagara Solid;Nyala;PMingLiU;PMingLiU-ExtB;Palace Script MT;Palatino Linotype;Papyrus;Perpetua;Plantagenet Cherokee;Playbill;Prelude Bold;Prelude Condensed Bold;Prelude Condensed Medium;Prelude Medium;PreludeCompressedWGL Black;PreludeCompressedWGL Bold;PreludeCompressedWGL Light;PreludeCompressedWGL Medium;PreludeCondensedWGL Black;PreludeCondensedWGL Bold;PreludeCondensedWGL Light;PreludeCondensedWGL Medium;PreludeWGL Black;PreludeWGL Bold;PreludeWGL Light;PreludeWGL Medium;Raavi;Rachana;Rockwell;Rod;Sakkal Majalla;Sawasdee;Script MT Bold;Segoe Print;Segoe Script;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Segoe UI;Shonar Bangla;Showcard Gothic;Shruti;SimHei;SimSun;SimSun-ExtB;Simplified Arabic Fixed;Simplified Arabic;Snap ITC;Sylfaen;Symbol;Tahoma;Times New Roman Baltic;Times New Roman CE;Times New Roman CYR;Times New Roman Greek;Times New Roman TUR;Times New Roman;TlwgMono;Traditional Arabic;Trebuchet MS;Tunga;Tw Cen MT Condensed Extra Bold;Ubuntu;Umpush;Univers;Utopia;Utsaah;Vani;Verdana;Vijaya;Vladimir Script;Vrinda;Webdings;Wide Latin;Wingdings".split(
";"
),
c = "",
a = 0;
a < b.length;
a++
)
e.detect(b[a]) &&
(c = a == b.length - 1 ? c + b[a] : c + (b[a] + ", "));
return c;
},
isLocalStorage: function () {
try {
return !!f.localStorage;
} catch (b) {
return !0;
}
},
isSessionStorage: function () {
try {
return !!f.sessionStorage;
} catch (b) {
return !0;
}
},
isCookie: function () {
return navigator.cookieEnabled;
},
getTimeZone: function () {
return String(String(new Date()).split("(")[1]).split(")")[0];
},
getLanguage: function () {
return navigator.language;
},
getSystemLanguage: function () {
return navigator.systemLanguage;
},
isCanvas: function () {
var b = document.createElement("canvas");
try {
return !(!b.getContext || !b.getContext("2d"));
} catch (c) {
return !1;
}
},
getCanvasPrint: function () {
var b = document.createElement("canvas"),
c;
try {
c = b.getContext("2d");
} catch (a) {
return "";
}
c.textBaseline = "top";
c.font = "14px 'Arial'";
c.textBaseline = "alphabetic";
c.fillStyle = "#f60";
c.fillRect(125, 1, 62, 20);
c.fillStyle = "#069";
c.fillText("ClientJS,org <canvas> 1.0", 2, 15);
c.fillStyle = "rgba(102, 204, 0, 0.7)";
c.fillText("ClientJS,org <canvas> 1.0", 4, 17);
return b.toDataURL();
},
};
"object" === typeof module &&
"undefined" !== typeof exports &&
(module.exports = p);
f.ClientJS = p;
})(window);
var deployJava = (function () {
function f(a) {
c.debug && (console.log ? console.log(a) : alert(a));
}
function d(a) {
if (null == a || 0 == a.length) return "http://java.com/dt-redirect";
"&" == a.charAt(0) && (a = a.substring(1, a.length));
return "http://java.com/dt-redirect?" + a;
}
var e = ["id", "class", "title", "style"];
"classid codebase codetype data type archive declare standby height width usemap name tabindex align border hspace vspace"
.split(" ")
.concat(
e,
["lang", "dir"],
"onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup".split(
" "
)
);
var p =
"codebase code name archive object width height alt align hspace vspace"
.split(" ")
.concat(e),
b;
try {
b =
-1 != document.location.protocol.indexOf("http")
? "//java.com/js/webstart.png"
: "http://java.com/js/webstart.png";
} catch (a) {
b = "http://java.com/js/webstart.png";
}
var c = {
debug: null,
version: "20120801",
firefoxJavaVersion: null,
myInterval: null,
preInstallJREList: null,
returnPage: null,
brand: null,
locale: null,
installType: null,
EAInstallEnabled: !1,
EarlyAccessURL: null,
oldMimeType: "application/npruntime-scriptable-plugin;DeploymentToolkit",
mimeType: "application/java-deployment-toolkit",
launchButtonPNG: b,
browserName: null,
browserName2: null,
getJREs: function () {
var a = [];
if (this.isPluginInstalled())
for (var g = this.getPlugin().jvms, b = 0; b < g.getLength(); b++)
a[b] = g.get(b).version;
else
(g = this.getBrowser()),
"MSIE" == g
? this.testUsingActiveX("1.7.0")
? (a[0] = "1.7.0")
: this.testUsingActiveX("1.6.0")
? (a[0] = "1.6.0")
: this.testUsingActiveX("1.5.0")
? (a[0] = "1.5.0")
: this.testUsingActiveX("1.4.2")
? (a[0] = "1.4.2")
: this.testForMSVM() && (a[0] = "1.1")
: "Netscape Family" == g &&
(this.getJPIVersionUsingMimeType(),
null != this.firefoxJavaVersion
? (a[0] = this.firefoxJavaVersion)
: this.testUsingMimeTypes("1.7")
? (a[0] = "1.7.0")
: this.testUsingMimeTypes("1.6")
? (a[0] = "1.6.0")
: this.testUsingMimeTypes("1.5")
? (a[0] = "1.5.0")
: this.testUsingMimeTypes("1.4.2")
? (a[0] = "1.4.2")
: "Safari" == this.browserName2 &&
(this.testUsingPluginsArray("1.7.0")
? (a[0] = "1.7.0")
: this.testUsingPluginsArray("1.6")
? (a[0] = "1.6.0")
: this.testUsingPluginsArray("1.5")
? (a[0] = "1.5.0")
: this.testUsingPluginsArray("1.4.2") && (a[0] = "1.4.2")));
if (this.debug)
for (b = 0; b < a.length; ++b)
f("[getJREs()] We claim to have detected Java SE " + a[b]);
return a;
},
installJRE: function (a, g) {
if (this.isPluginInstalled() && this.isAutoInstallEnabled(a)) {
var b = !1;
if (
(b = this.isCallbackSupported()
? this.getPlugin().installJRE(a, g)
: this.getPlugin().installJRE(a))
)
this.refresh(),
null != this.returnPage && (document.location = this.returnPage);
return b;
}
return this.installLatestJRE();
},
isAutoInstallEnabled: function (a) {
if (!this.isPluginInstalled()) return !1;
"undefined" == typeof a && (a = null);
if (
"MSIE" != deployJava.browserName ||
deployJava.compareVersionToPattern(
deployJava.getPlugin().version,
["10", "0", "0"],
!1,
!0
)
)
a = !0;
else if (null == a) a = !1;
else {
var g = "1.6.0_33+";
if (null == g || 0 == g.length) a = !0;
else {
var b = g.charAt(g.length - 1);
"+" != b &&
"*" != b &&
-1 != g.indexOf("_") &&
"_" != b &&
((g += "*"), (b = "*"));
g = g.substring(0, g.length - 1);
if (0 < g.length) {
var c = g.charAt(g.length - 1);
if ("." == c || "_" == c) g = g.substring(0, g.length - 1);
}
a = "*" == b ? 0 == a.indexOf(g) : "+" == b ? g <= a : !1;
}
a = !a;
}
return a;
},
isCallbackSupported: function () {
return (
this.isPluginInstalled() &&
this.compareVersionToPattern(
this.getPlugin().version,
["10", "2", "0"],
!1,
!0
)
);
},
installLatestJRE: function (a) {
if (this.isPluginInstalled() && this.isAutoInstallEnabled()) {
var g = !1;
if (
(g = this.isCallbackSupported()
? this.getPlugin().installLatestJRE(a)
: this.getPlugin().installLatestJRE())
)
this.refresh(),
null != this.returnPage && (document.location = this.returnPage);
return g;
}
a = this.getBrowser();
g = navigator.platform.toLowerCase();
if (
"true" == this.EAInstallEnabled &&
-1 != g.indexOf("win") &&
null != this.EarlyAccessURL
)
(this.preInstallJREList = this.getJREs()),
null != this.returnPage &&
(this.myInterval = setInterval("deployJava.poll()", 3e3)),
(location.href = this.EarlyAccessURL);
else {
if ("MSIE" == a) return this.IEInstall();
if ("Netscape Family" == a && -1 != g.indexOf("win32"))
return this.FFInstall();
location.href = d(
(null != this.returnPage ? "&returnPage=" + this.returnPage : "") +
(null != this.locale ? "&locale=" + this.locale : "") +
(null != this.brand ? "&brand=" + this.brand : "")
);
}
return !1;
},
runApplet: function (a, g, b) {
if ("undefined" == b || null == b) b = "1.1";
var c = b.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$");
null == this.returnPage && (this.returnPage = document.location);
null != c
? "?" != this.getBrowser()
? this.versionCheck(b + "+")
? this.writeAppletTag(a, g)
: this.installJRE(b + "+") &&
(this.refresh(),
(location.href = document.location),
this.writeAppletTag(a, g))
: this.writeAppletTag(a, g)
: f(
"[runApplet()] Invalid minimumVersion argument to runApplet():" + b
);
},
writeAppletTag: function (a, g) {
var b = "<applet ",
c = "",
h = !0;
if (null == g || "object" != typeof g) g = {};
for (var d in a) {
var m;
a: {
m = d.toLowerCase();
for (var f = p.length, e = 0; e < f; e++)
if (p[e] === m) {
m = !0;
break a;
}
m = !1;
}
m
? ((b += " " + d + '="' + a[d] + '"'), "code" == d && (h = !1))
: (g[d] = a[d]);
}
d = !1;
for (var q in g) {
"codebase_lookup" == q && (d = !0);
if ("object" == q || "java_object" == q || "java_code" == q) h = !1;
c += '<param name="' + q + '" value="' + g[q] + '"/>';
}
d || (c += '<param name="codebase_lookup" value="false"/>');
h && (b += ' code="dummy"');
document.write(b + ">\n" + c + "\n</applet>");
},
versionCheck: function (a) {
var g = 0,
b = a.match(
"^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$"
);
if (null != b) {
for (var c = (a = !1), h = [], d = 1; d < b.length; ++d)
"string" == typeof b[d] && "" != b[d] && ((h[g] = b[d]), g++);
"+" == h[h.length - 1]
? ((c = !0), (a = !1), h.length--)
: "*" == h[h.length - 1]
? ((c = !1), (a = !0), h.length--)
: 4 > h.length && ((c = !1), (a = !0));
g = this.getJREs();
for (d = 0; d < g.length; ++d)
if (this.compareVersionToPattern(g[d], h, a, c)) return !0;
} else
(g = "Invalid versionPattern passed to versionCheck: " + a),
f("[versionCheck()] " + g),
alert(g);
return !1;
},
isWebStartInstalled: function (a) {
if ("?" == this.getBrowser()) return !0;
if ("undefined" == a || null == a) a = "1.4.2";
var b = !1;
null != a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$")
? (b = this.versionCheck(a + "+"))
: (f(
"[isWebStartInstaller()] Invalid minimumVersion argument to isWebStartInstalled(): " +
a
),
(b = this.versionCheck("1.4.2+")));
return b;
},
getJPIVersionUsingMimeType: function () {
for (var a = 0; a < navigator.mimeTypes.length; ++a) {
var b = navigator.mimeTypes[a].type.match(
/^application\/x-java-applet;jpi-version=(.*)$/
);
if (
null != b &&
((this.firefoxJavaVersion = b[1]), "Opera" != this.browserName2)
)
break;
}
},
launchWebStartApplication: function (a) {
navigator.userAgent.toLowerCase();
this.getJPIVersionUsingMimeType();
if (
0 == this.isWebStartInstalled("1.7.0") &&
(0 == this.installJRE("1.7.0+") ||
0 == this.isWebStartInstalled("1.7.0"))
)
return !1;
var b = null;
document.documentURI && (b = document.documentURI);
null == b && (b = document.URL);
var c = this.getBrowser(),
d;
"MSIE" == c
? (d =
'<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="0" height="0"><PARAM name="launchjnlp" value="' +
a +
'"><PARAM name="docbase" value="' +
b +
'"></object>')
: "Netscape Family" == c &&
(d =
'<embed type="application/x-java-applet;jpi-version=' +
this.firefoxJavaVersion +
'" width="0" height="0" launchjnlp="' +
a +
'"docbase="' +
b +
'" />');
"undefined" == document.body || null == document.body
? (document.write(d), (document.location = b))
: ((a = document.createElement("div")),
(a.id = "div1"),
(a.style.position = "relative"),
(a.style.left = "-10000px"),
(a.style.margin = "0px auto"),
(a.className = "dynamicDiv"),
(a.innerHTML = d),
document.body.appendChild(a));
},
createWebStartLaunchButtonEx: function (a, b) {
null == this.returnPage && (this.returnPage = a);
document.write(
'<a href="' +
("javascript:deployJava.launchWebStartApplication('" + a + "');") +
'" onMouseOver="window.status=\'\'; return true;"><img src="' +
this.launchButtonPNG +
'" border="0" /></a>'
);
},
createWebStartLaunchButton: function (a, b) {
null == this.returnPage && (this.returnPage = a);
document.write(
'<a href="' +
("javascript:if (!deployJava.isWebStartInstalled("" +
b +
"")) {if (deployJava.installLatestJRE()) {if (deployJava.launch("" +
a +
"")) {}}} else {if (deployJava.launch("" +
a +
"")) {}}") +
'" onMouseOver="window.status=\'\'; return true;"><img src="' +
this.launchButtonPNG +
'" border="0" /></a>'
);
},
launch: function (a) {
document.location = a;
return !0;
},
isPluginInstalled: function () {
var a = this.getPlugin();
return a && a.jvms ? !0 : !1;
},
isAutoUpdateEnabled: function () {
return this.isPluginInstalled()
? this.getPlugin().isAutoUpdateEnabled()
: !1;
},
setAutoUpdateEnabled: function () {
return this.isPluginInstalled()
? this.getPlugin().setAutoUpdateEnabled()
: !1;
},
setInstallerType: function (a) {
this.installType = a;
return this.isPluginInstalled()
? this.getPlugin().setInstallerType(a)
: !1;
},
setAdditionalPackages: function (a) {
return this.isPluginInstalled()
? this.getPlugin().setAdditionalPackages(a)
: !1;
},
setEarlyAccess: function (a) {
this.EAInstallEnabled = a;
},
isPlugin2: function () {
if (this.isPluginInstalled() && this.versionCheck("1.6.0_10+"))
try {
return this.getPlugin().isPlugin2();
} catch (a) {}
return !1;
},
allowPlugin: function () {
this.getBrowser();
return "Safari" != this.browserName2 && "Opera" != this.browserName2;
},
getPlugin: function () {
this.refresh();
var a = null;
this.allowPlugin() && (a = document.getElementById("deployJavaPlugin"));
return a;
},
compareVersionToPattern: function (a, b, c, d) {
if (void 0 == a || void 0 == b) return !1;
var h = a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$");
if (null != h) {
var f = 0;
a = [];
for (var m = 1; m < h.length; ++m)
"string" == typeof h[m] && "" != h[m] && ((a[f] = h[m]), f++);
h = Math.min(a.length, b.length);
if (d) {
for (m = 0; m < h; ++m) {
if (a[m] < b[m]) return !1;
if (a[m] > b[m]) break;
}
return !0;
}
for (m = 0; m < h; ++m) if (a[m] != b[m]) return !1;
return c ? !0 : a.length == b.length;
}
return !1;
},
getBrowser: function () {
if (null == this.browserName) {
var a = navigator.userAgent.toLowerCase();
f("[getBrowser()] navigator.userAgent.toLowerCase() -> " + a);
-1 != a.indexOf("msie") && -1 == a.indexOf("opera")
? (this.browserName2 = this.browserName = "MSIE")
: -1 != a.indexOf("iphone")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "iPhone"))
: -1 != a.indexOf("firefox") && -1 == a.indexOf("opera")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "Firefox"))
: -1 != a.indexOf("chrome")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "Chrome"))
: -1 != a.indexOf("safari")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "Safari"))
: -1 != a.indexOf("mozilla") && -1 == a.indexOf("opera")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "Other"))
: -1 != a.indexOf("opera")
? ((this.browserName = "Netscape Family"),
(this.browserName2 = "Opera"))
: ((this.browserName = "?"), (this.browserName2 = "unknown"));
f(
"[getBrowser()] Detected browser name:" +
this.browserName +
", " +
this.browserName2
);
}
return this.browserName;
},
testUsingActiveX: function (a) {
a = "JavaWebStart.isInstalled." + a + ".0";
if ("undefined" == typeof ActiveXObject || !ActiveXObject)
return (
f(
"[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?"
),
!1
);
try {
return null != new ActiveXObject(a);
} catch (b) {
return !1;
}
},
testForMSVM: function () {
if ("undefined" != typeof oClientCaps) {
var a = oClientCaps.getComponentVersion(
"{08B0E5C0-4FCB-11CF-AAA5-00401C608500}",
"ComponentID"
);
return "" == a || "5,0,5000,0" == a ? !1 : !0;
}
return !1;
},
testUsingMimeTypes: function (a) {
if (!navigator.mimeTypes)
return (
f(
"[testUsingMimeTypes()] Browser claims to be Netscape family, but no mimeTypes[] array?"
),
!1
);
for (var b = 0; b < navigator.mimeTypes.length; ++b) {
s = navigator.mimeTypes[b].type;
var c = s.match(
/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/
);
if (null != c && this.compareVersions(c[1], a)) return !0;
}
return !1;
},
testUsingPluginsArray: function (a) {
if (!navigator.plugins || !navigator.plugins.length) return !1;
for (
var b = navigator.platform.toLowerCase(), c = 0;
c < navigator.plugins.length;
++c
)
if (
((s = navigator.plugins[c].description),
-1 != s.search(/^Java Switchable Plug-in (Cocoa)/))
) {
if (this.compareVersions("1.5.0", a)) return !0;
} else if (
-1 != s.search(/^Java/) &&
-1 != b.indexOf("win") &&
(this.compareVersions("1.5.0", a) || this.compareVersions("1.6.0", a))
)
return !0;
return this.compareVersions("1.5.0", a) ? !0 : !1;
},
IEInstall: function () {
location.href = d(
(null != this.returnPage ? "&returnPage=" + this.returnPage : "") +
(null != this.locale ? "&locale=" + this.locale : "") +
(null != this.brand ? "&brand=" + this.brand : "")
);
return !1;
},
done: function (a, b) {},
FFInstall: function () {
location.href = d(
(null != this.returnPage ? "&returnPage=" + this.returnPage : "") +
(null != this.locale ? "&locale=" + this.locale : "") +
(null != this.brand ? "&brand=" + this.brand : "") +
(null != this.installType ? "&type=" + this.installType : "")
);
return !1;
},
compareVersions: function (a, b) {
for (var c = a.split("."), d = b.split("."), h = 0; h < c.length; ++h)
c[h] = Number(c[h]);
for (h = 0; h < d.length; ++h) d[h] = Number(d[h]);
2 == c.length && (c[2] = 0);
return c[0] > d[0]
? !0
: c[0] < d[0]
? !1
: c[1] > d[1]
? !0
: c[1] < d[1]
? !1
: c[2] > d[2]
? !0
: c[2] < d[2]
? !1
: !0;
},
enableAlerts: function () {
this.browserName = null;
this.debug = !0;
},
poll: function () {
this.refresh();
var a = this.getJREs();
0 == this.preInstallJREList.length &&
0 != a.length &&
(clearInterval(this.myInterval),
null != this.returnPage && (location.href = this.returnPage));
0 != this.preInstallJREList.length &&
0 != a.length &&
this.preInstallJREList[0] != a[0] &&
(clearInterval(this.myInterval),
null != this.returnPage && (location.href = this.returnPage));
},
writePluginTag: function () {
var a = this.getBrowser();
"MSIE" == a
? document.write(
'<object classid="clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA" id="deployJavaPlugin" width="0" height="0"></object>'
)
: "Netscape Family" == a && this.allowPlugin() && this.writeEmbedTag();
},
refresh: function () {
navigator.plugins.refresh(!1);
"Netscape Family" == this.getBrowser() &&
this.allowPlugin() &&
null == document.getElementById("deployJavaPlugin") &&
this.writeEmbedTag();
},
writeEmbedTag: function () {
var a = !1;
if (null != navigator.mimeTypes) {
for (var b = 0; b < navigator.mimeTypes.length; b++)
navigator.mimeTypes[b].type == this.mimeType &&
navigator.mimeTypes[b].enabledPlugin &&
(document.write(
'<embed id="deployJavaPlugin" type="' +
this.mimeType +
'" hidden="true" />'
),
(a = !0));
if (!a)
for (b = 0; b < navigator.mimeTypes.length; b++)
navigator.mimeTypes[b].type == this.oldMimeType &&
navigator.mimeTypes[b].enabledPlugin &&
document.write(
'<embed id="deployJavaPlugin" type="' +
this.oldMimeType +
'" hidden="true" />'
);
}
},
};
c.writePluginTag();
if (null == c.locale) {
e = null;
if (null == e)
try {
e = navigator.userLanguage;
} catch (a) {}
if (null == e)
try {
e = navigator.systemLanguage;
} catch (a) {}
if (null == e)
try {
e = navigator.language;
} catch (a) {}
null != e && (e.replace("-", "_"), (c.locale = e));
}
return c;
})();
var Detector = function () {
var f = ["monospace", "sans-serif", "serif"],
d = document.getElementsByTagName("body")[0],
e = document.createElement("span");
e.style.fontSize = "72px";
e.innerHTML = "mmmmmmmmmmlli";
var p = {},
b = {},
c;
for (c in f)
(e.style.fontFamily = f[c]),
d.appendChild(e),
(p[f[c]] = e.offsetWidth),
(b[f[c]] = e.offsetHeight),
d.removeChild(e);
this.detect = function (a) {
var c = !1,
n;
for (n in f) {
e.style.fontFamily = a + "," + f[n];
d.appendChild(e);
var v = e.offsetWidth != p[f[n]] || e.offsetHeight != b[f[n]];
d.removeChild(e);
c = c || v;
}
return c;
};
};
function murmurhash3_32_gc(f, d) {
var e, p, b, c, a;
e = f.length & 3;
p = f.length - e;
b = d;
for (a = 0; a < p; )
(c =
(f.charCodeAt(a) & 255) |
((f.charCodeAt(++a) & 255) << 8) |
((f.charCodeAt(++a) & 255) << 16) |
((f.charCodeAt(++a) & 255) << 24)),
++a,
(c =
(3432918353 * (c & 65535) +
(((3432918353 * (c >>> 16)) & 65535) << 16)) &
4294967295),
(c = (c << 15) | (c >>> 17)),
(c =
(461845907 * (c & 65535) + (((461845907 * (c >>> 16)) & 65535) << 16)) &
4294967295),
(b ^= c),
(b = (b << 13) | (b >>> 19)),
(b = (5 * (b & 65535) + (((5 * (b >>> 16)) & 65535) << 16)) & 4294967295),
(b = (b & 65535) + 27492 + ((((b >>> 16) + 58964) & 65535) << 16));
c = 0;
switch (e) {
case 3:
c ^= (f.charCodeAt(a + 2) & 255) << 16;
case 2:
c ^= (f.charCodeAt(a + 1) & 255) << 8;
case 1:
(c ^= f.charCodeAt(a) & 255),
(c =
(3432918353 * (c & 65535) +
(((3432918353 * (c >>> 16)) & 65535) << 16)) &
4294967295),
(c = (c << 15) | (c >>> 17)),
(b ^=
(461845907 * (c & 65535) +
(((461845907 * (c >>> 16)) & 65535) << 16)) &
4294967295);
}
b ^= f.length;
b ^= b >>> 16;
b =
(2246822507 * (b & 65535) + (((2246822507 * (b >>> 16)) & 65535) << 16)) &
4294967295;
b ^= b >>> 13;
b =
(3266489909 * (b & 65535) + (((3266489909 * (b >>> 16)) & 65535) << 16)) &
4294967295;
return (b ^ (b >>> 16)) >>> 0;
}
var swfobject = (function () {
function f() {
if (!y) {
try {
var a = l
.getElementsByTagName("body")[0]
.appendChild(l.createElement("span"));
a.parentNode.removeChild(a);
} catch (b) {
return;
}
y = !0;
for (var a = F.length, c = 0; c < a; c++) F[c]();
}
}
function d(a) {
y ? a() : (F[F.length] = a);
}
function e(a) {
if ("undefined" != typeof r.addEventListener)
r.addEventListener("load", a, !1);
else if ("undefined" != typeof l.addEventListener)
l.addEventListener("load", a, !1);
else if ("undefined" != typeof r.attachEvent) B(r, "onload", a);
else if ("function" == typeof r.onload) {
var b = r.onload;
r.onload = function () {
b();
a();
};
} else r.onload = a;
}
function p() {
var a = l.getElementsByTagName("body")[0],
c = l.createElement("object");
c.setAttribute("type", "application/x-shockwave-flash");
var d = a.appendChild(c);
if (d) {
var g = 0;
(function () {
if ("undefined" != typeof d.GetVariable) {
var h = d.GetVariable("$version");
h &&
((h = h.split(" ")[1].split(",")),
(k.pv = [
parseInt(h[0], 10),
parseInt(h[1], 10),
parseInt(h[2], 10),
]));
} else if (10 > g) {
g++;
setTimeout(arguments.callee, 10);
return;
}
a.removeChild(c);
d = null;
b();
})();
} else b();
}
function b() {
var b = x.length;
if (0 < b)
for (var z = 0; z < b; z++) {
var d = x[z].id,
h = x[z].callbackFn,
f = { success: !1, id: d };
if (0 < k.pv[0]) {
var e = m(d);
if (e)
if (!C(x[z].swfVersion) || (k.wk && 312 > k.wk))
if (x[z].expressInstall && a()) {
f = {};
f.data = x[z].expressInstall;
f.width = e.getAttribute("width") || "0";
f.height = e.getAttribute("height") || "0";
e.getAttribute("class") &&
(f.styleclass = e.getAttribute("class"));
e.getAttribute("align") && (f.align = e.getAttribute("align"));
for (
var l = {},
e = e.getElementsByTagName("param"),
q = e.length,
u = 0;
u < q;
u++
)
"movie" != e[u].getAttribute("name").toLowerCase() &&
(l[e[u].getAttribute("name")] = e[u].getAttribute("value"));
g(f, l, d, h);
} else n(e), h && h(f);
else A(d, !0), h && ((f.success = !0), (f.ref = c(d)), h(f));
} else
A(d, !0),
h &&
((d = c(d)) &&
"undefined" != typeof d.SetVariable &&
((f.success = !0), (f.ref = d)),
h(f));
}
}
function c(a) {
var b = null;
(a = m(a)) &&
"OBJECT" == a.nodeName &&
("undefined" != typeof a.SetVariable
? (b = a)
: (a = a.getElementsByTagName("object")[0]) && (b = a));
return b;
}
function a() {
return !G && C("6.0.65") && (k.win || k.mac) && !(k.wk && 312 > k.wk);
}
function g(a, b, c, d) {
G = !0;
J = d || null;
L = { success: !1, id: c };
var g = m(c);
if (g) {
"OBJECT" == g.nodeName ? ((E = v(g)), (H = null)) : ((E = g), (H = c));
a.id = "SWFObjectExprInst";
if (
"undefined" == typeof a.width ||
(!/%$/.test(a.width) && 310 > parseInt(a.width, 10))
)
a.width = "310";
if (
"undefined" == typeof a.height ||
(!/%$/.test(a.height) && 137 > parseInt(a.height, 10))
)
a.height = "137";
l.title = l.title.slice(0, 47) + " - Flash Player Installation";
d = k.ie && k.win ? "ActiveX" : "PlugIn";
d =
"MMredirectURL=" +
r.location.toString().replace(/&/g, "%26") +
"&MMplayerType=" +
d +
"&MMdoctitle=" +
l.title;
b.flashvars =
"undefined" != typeof b.flashvars ? b.flashvars + ("&" + d) : d;
k.ie &&
k.win &&
4 != g.readyState &&
((d = l.createElement("div")),
(c += "SWFObjectNew"),
d.setAttribute("id", c),
g.parentNode.insertBefore(d, g),
(g.style.display = "none"),
(function () {
4 == g.readyState
? g.parentNode.removeChild(g)
: setTimeout(arguments.callee, 10);
})());
h(a, b, c);
}
}
function n(a) {
if (k.ie && k.win && 4 != a.readyState) {
var b = l.createElement("div");
a.parentNode.insertBefore(b, a);
b.parentNode.replaceChild(v(a), b);
a.style.display = "none";
(function () {
4 == a.readyState
? a.parentNode.removeChild(a)
: setTimeout(arguments.callee, 10);
})();
} else a.parentNode.replaceChild(v(a), a);
}
function v(a) {
var b = l.createElement("div");
if (k.win && k.ie) b.innerHTML = a.innerHTML;
else if ((a = a.getElementsByTagName("object")[0]))
if ((a = a.childNodes))
for (var c = a.length, d = 0; d < c; d++)
(1 == a[d].nodeType && "PARAM" == a[d].nodeName) ||
8 == a[d].nodeType ||
b.appendChild(a[d].cloneNode(!0));
return b;
}
function h(a, b, c) {
var d,
g = m(c);
if (k.wk && 312 > k.wk) return d;
if (g)
if (("undefined" == typeof a.id && (a.id = c), k.ie && k.win)) {
var h = "",
f;
for (f in a)
a[f] != Object.prototype[f] &&
("data" == f.toLowerCase()
? (b.movie = a[f])
: "styleclass" == f.toLowerCase()
? (h += ' class="' + a[f] + '"')
: "classid" != f.toLowerCase() &&
(h += " " + f + '="' + a[f] + '"'));
f = "";
for (var e in b)
b[e] != Object.prototype[e] &&
(f += '<param name="' + e + '" value="' + b[e] + '" />');
g.outerHTML =
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' +
h +
">" +
f +
"</object>";
I[I.length] = a.id;
d = m(a.id);
} else {
e = l.createElement("object");
e.setAttribute("type", "application/x-shockwave-flash");
for (var q in a)
a[q] != Object.prototype[q] &&
("styleclass" == q.toLowerCase()
? e.setAttribute("class", a[q])
: "classid" != q.toLowerCase() && e.setAttribute(q, a[q]));
for (h in b)
b[h] != Object.prototype[h] &&
"movie" != h.toLowerCase() &&
((a = e),
(f = h),
(q = b[h]),
(c = l.createElement("param")),
c.setAttribute("name", f),
c.setAttribute("value", q),
a.appendChild(c));
g.parentNode.replaceChild(e, g);
d = e;
}
return d;
}
function u(a) {
var b = m(a);
b &&
"OBJECT" == b.nodeName &&
(k.ie && k.win
? ((b.style.display = "none"),
(function () {
if (4 == b.readyState) {
var c = m(a);
if (c) {
for (var d in c) "function" == typeof c[d] && (c[d] = null);
c.parentNode.removeChild(c);
}
} else setTimeout(arguments.callee, 10);
})())
: b.parentNode.removeChild(b));
}
function m(a) {
var b = null;
try {
b = l.getElementById(a);
} catch (c) {}
return b;
}
function B(a, b, c) {
a.attachEvent(b, c);
D[D.length] = [a, b, c];
}
function C(a) {
var b = k.pv;
a = a.split(".");
a[0] = parseInt(a[0], 10);
a[1] = parseInt(a[1], 10) || 0;
a[2] = parseInt(a[2], 10) || 0;
return b[0] > a[0] ||
(b[0] == a[0] && b[1] > a[1]) ||
(b[0] == a[0] && b[1] == a[1] && b[2] >= a[2])
? !0
: !1;
}
function q(a, b, c, d) {
if (!k.ie || !k.mac) {
var h = l.getElementsByTagName("head")[0];
h &&
((c = c && "string" == typeof c ? c : "screen"),
d && (K = w = null),
(w && K == c) ||
((d = l.createElement("style")),
d.setAttribute("type", "text/css"),
d.setAttribute("media", c),
(w = h.appendChild(d)),
k.ie &&
k.win &&
"undefined" != typeof l.styleSheets &&
0 < l.styleSheets.length &&
(w = l.styleSheets[l.styleSheets.length - 1]),
(K = c)),
k.ie && k.win
? w && "object" == typeof w.addRule && w.addRule(a, b)
: w &&
"undefined" != typeof l.createTextNode &&
w.appendChild(l.createTextNode(a + " {" + b + "}")));
}
}
function A(a, b) {
if (M) {
var c = b ? "visible" : "hidden";
y && m(a) ? (m(a).style.visibility = c) : q("#" + a, "visibility:" + c);
}
}
function N(a) {
return null != /[\\\"<>\.;]/.exec(a) &&
"undefined" != typeof encodeURIComponent
? encodeURIComponent(a)
: a;
}
var r = window,
l = document,
t = navigator,
O = !1,
F = [
function () {
O ? p() : b();
},
],
x = [],
I = [],
D = [],
E,
H,
J,
L,
y = !1,
G = !1,
w,
K,
M = !0,
k = (function () {
var a =
"undefined" != typeof l.getElementById &&
"undefined" != typeof l.getElementsByTagName &&
"undefined" != typeof l.createElement,
b = t.userAgent.toLowerCase(),
c = t.platform.toLowerCase(),
d = c ? /win/.test(c) : /win/.test(b),
c = c ? /mac/.test(c) : /mac/.test(b),
b = /webkit/.test(b)
? parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1"))
: !1,
h = !+"\v1",
g = [0, 0, 0],
f = null;
if (
"undefined" != typeof t.plugins &&
"object" == typeof t.plugins["Shockwave Flash"]
)
!(f = t.plugins["Shockwave Flash"].description) ||
("undefined" != typeof t.mimeTypes &&
t.mimeTypes["application/x-shockwave-flash"] &&
!t.mimeTypes["application/x-shockwave-flash"].enabledPlugin) ||
((O = !0),
(h = !1),
(f = f.replace(/^.*\s+(\S+\s+\S+$)/, "$1")),
(g[0] = parseInt(f.replace(/^(.*)\..*$/, "$1"), 10)),
(g[1] = parseInt(f.replace(/^.*\.(.*)\s.*$/, "$1"), 10)),
(g[2] = /[a-zA-Z]/.test(f)
? parseInt(f.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10)
: 0));
else if ("undefined" != typeof r.ActiveXObject)
try {
var e = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
e &&
(f = e.GetVariable("$version")) &&
((h = !0),
(f = f.split(" ")[1].split(",")),
(g = [parseInt(f[0], 10), parseInt(f[1], 10), parseInt(f[2], 10)]));
} catch (m) {}
return { w3: a, pv: g, wk: b, ie: h, win: d, mac: c };
})();
(function () {
k.w3 &&
((("undefined" != typeof l.readyState && "complete" == l.readyState) ||
("undefined" == typeof l.readyState &&
(l.getElementsByTagName("body")[0] || l.body))) &&
f(),
y ||
("undefined" != typeof l.addEventListener &&
l.addEventListener("DOMContentLoaded", f, !1),
k.ie &&
k.win &&
(l.attachEvent("onreadystatechange", function () {
"complete" == l.readyState &&
(l.detachEvent("onreadystatechange", arguments.callee), f());
}),
r == top &&
(function () {
if (!y) {
try {
l.documentElement.doScroll("left");
} catch (a) {
setTimeout(arguments.callee, 0);
return;
}
f();
}
})()),
k.wk &&
(function () {
y ||
(/loaded|complete/.test(l.readyState)
? f()
: setTimeout(arguments.callee, 0));
})(),
e(f)));
})();
(function () {
k.ie &&
k.win &&
window.attachEvent("onunload", function () {
for (var a = D.length, b = 0; b < a; b++)
D[b][0].detachEvent(D[b][1], D[b][2]);
a = I.length;
for (b = 0; b < a; b++) u(I[b]);
for (var c in k) k[c] = null;
k = null;
for (var d in swfobject) swfobject[d] = null;
swfobject = null;
});
})();
return {
registerObject: function (a, b, c, d) {
if (k.w3 && a && b) {
var h = {};
h.id = a;
h.swfVersion = b;
h.expressInstall = c;
h.callbackFn = d;
x[x.length] = h;
A(a, !1);
} else d && d({ success: !1, id: a });
},
getObjectById: function (a) {
if (k.w3) return c(a);
},
embedSWF: function (b, c, f, e, m, q, l, u, p, r) {
var n = { success: !1, id: c };
k.w3 && !(k.wk && 312 > k.wk) && b && c && f && e && m
? (A(c, !1),
d(function () {
f += "";
e += "";
var d = {};
if (p && "object" === typeof p) for (var k in p) d[k] = p[k];
d.data = b;
d.width = f;
d.height = e;
k = {};
if (u && "object" === typeof u) for (var B in u) k[B] = u[B];
if (l && "object" === typeof l)
for (var t in l)
k.flashvars =
"undefined" != typeof k.flashvars
? k.flashvars + ("&" + t + "=" + l[t])
: t + "=" + l[t];
if (C(m))
(B = h(d, k, c)),
d.id == c && A(c, !0),
(n.success = !0),
(n.ref = B);
else {
if (q && a()) {
d.data = q;
g(d, k, c, r);
return;
}
A(c, !0);
}
r && r(n);
}))
: r && r(n);
},
switchOffAutoHideShow: function () {
M = !1;
},
ua: k,
getFlashPlayerVersion: function () {
return { major: k.pv[0], minor: k.pv[1], release: k.pv[2] };
},
hasFlashPlayerVersion: C,
createSWF: function (a, b, c) {
if (k.w3) return h(a, b, c);
},
showExpressInstall: function (b, c, d, h) {
k.w3 && a() && g(b, c, d, h);
},
removeSWF: function (a) {
k.w3 && u(a);
},
createCSS: function (a, b, c, d) {
k.w3 && q(a, b, c, d);
},
addDomLoadEvent: d,
addLoadEvent: e,
getQueryParamValue: function (a) {
var b = l.location.search || l.location.hash;
if (b) {
/\?/.test(b) && (b = b.split("?")[1]);
if (null == a) return N(b);
for (var b = b.split("&"), c = 0; c < b.length; c++)
if (b[c].substring(0, b[c].indexOf("=")) == a)
return N(b[c].substring(b[c].indexOf("=") + 1));
}
return "";
},
expressInstallCallback: function () {
if (G) {
var a = m("SWFObjectExprInst");
a &&
E &&
(a.parentNode.replaceChild(E, a),
H && (A(H, !0), k.ie && k.win && (E.style.display = "block")),
J && J(L));
G = !1;
}
},
};
})();
(function (f, d) {
var e = {
extend: function (a, b) {
for (var c in b)
-1 !== "browser cpu device engine os".indexOf(c) &&
0 === b[c].length % 2 &&
(a[c] = b[c].concat(a[c]));
return a;
},
has: function (a, b) {
return "string" === typeof a
? -1 !== b.toLowerCase().indexOf(a.toLowerCase())
: !1;
},
lowerize: function (a) {
return a.toLowerCase();
},
major: function (a) {
return "string" === typeof a ? a.split(".")[0] : d;
},
},
p = function () {
for (
var a, b = 0, c, f, g, e, p, n, r = arguments;
b < r.length && !p;
) {
var l = r[b],
t = r[b + 1];
if ("undefined" === typeof a)
for (g in ((a = {}), t))
t.hasOwnProperty(g) &&
((e = t[g]), "object" === typeof e ? (a[e[0]] = d) : (a[e] = d));
for (c = f = 0; c < l.length && !p; )
if ((p = l[c++].exec(this.getUA())))
for (g = 0; g < t.length; g++)
(n = p[++f]),
(e = t[g]),
"object" === typeof e && 0 < e.length
? 2 == e.length
? (a[e[0]] =
"function" == typeof e[1] ? e[1].call(this, n) : e[1])
: 3 == e.length
? (a[e[0]] =
"function" !== typeof e[1] || (e[1].exec && e[1].test)
? n
? n.replace(e[1], e[2])
: d
: n
? e[1].call(this, n, e[2])
: d)
: 4 == e.length &&
(a[e[0]] = n ? e[3].call(this, n.replace(e[1], e[2])) : d)
: (a[e] = n ? n : d);
b += 2;
}
return a;
},
b = function (a, b) {
for (var c in b)
if ("object" === typeof b[c] && 0 < b[c].length)
for (var f = 0; f < b[c].length; f++) {
if (e.has(b[c][f], a)) return "?" === c ? d : c;
}
else if (e.has(b[c], a)) return "?" === c ? d : c;
return a;
},
c = {
ME: "4.90",
"NT 3.11": "NT3.51",
"NT 4.0": "NT4.0",
2e3: "NT 5.0",
XP: ["NT 5.1", "NT 5.2"],
Vista: "NT 6.0",
7: "NT 6.1",
8: "NT 6.2",
8.1: "NT 6.3",
10: ["NT 6.4", "NT 10.0"],
RT: "ARM",
},
a = {
browser: [
[
/(opera\smini)\/([\w\.-]+)/i,
/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,
/(opera).+version\/([\w\.]+)/i,
/(opera)[\/\s]+([\w\.]+)/i,
],
["name", "version"],
[/\s(opr)\/([\w\.]+)/i],
[["name", "Opera"], "version"],
[
/(kindle)\/([\w\.]+)/i,
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,
/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,
/(?:ms|\()(ie)\s([\w\.]+)/i,
/(rekonq)\/([\w\.]+)*/i,
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i,
],
["name", "version"],
[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],
[["name", "IE"], "version"],
[/(edge)\/((\d+)?[\w\.]+)/i],
["name", "version"],
[/(yabrowser)\/([\w\.]+)/i],
[["name", "Yandex"], "version"],
[/(comodo_dragon)\/([\w\.]+)/i],
[["name", /_/g, " "], "version"],
[
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,
/(qqbrowser)[\/\s]?([\w\.]+)/i,
],
["name", "version"],
[
/(uc\s?browser)[\/\s]?([\w\.]+)/i,
/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,
/JUC.+(ucweb)[\/\s]?([\w\.]+)/i,
],
[["name", "UCBrowser"], "version"],
[/(dolfin)\/([\w\.]+)/i],
[["name", "Dolphin"], "version"],
[/((?:android.+)crmo|crios)\/([\w\.]+)/i],
[["name", "Chrome"], "version"],
[/XiaoMi\/MiuiBrowser\/([\w\.]+)/i],
["version", ["name", "MIUI Browser"]],
[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i],
["version", ["name", "Android Browser"]],
[/FBAV\/([\w\.]+);/i],
["version", ["name", "Facebook"]],
[/fxios\/([\w\.-]+)/i],
["version", ["name", "Firefox"]],
[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],
["version", ["name", "Mobile Safari"]],
[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],
["version", "name"],
[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],
[
"name",
[
"version",
b,
{
"1.0": "/8",
1.2: "/1",
1.3: "/3",
"2.0": "/412",
"2.0.2": "/416",
"2.0.3": "/417",
"2.0.4": "/419",
"?": "/",
},
],
],
[/(konqueror)\/([\w\.]+)/i, /(webkit|khtml)\/([\w\.]+)/i],
["name", "version"],
[/(navigator|netscape)\/([\w\.-]+)/i],
[["name", "Netscape"], "version"],
[
/(swiftfox)/i,
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
/(links)\s\(([\w\.]+)/i,
/(gobrowser)\/?([\w\.]+)*/i,
/(ice\s?browser)\/v?([\w\._]+)/i,
/(mosaic)[\/\s]([\w\.]+)/i,
],
["name", "version"],
],
cpu: [
[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],
[["architecture", "amd64"]],
[/(ia32(?=;))/i],
[["architecture", e.lowerize]],
[/((?:i[346]|x)86)[;\)]/i],
[["architecture", "ia32"]],
[/windows\s(ce|mobile);\sppc;/i],
[["architecture", "arm"]],
[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],
[["architecture", /ower/, "", e.lowerize]],
[/(sun4\w)[;\)]/i],
[["architecture", "sparc"]],
[
/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i,
],
[["architecture", e.lowerize]],
],
device: [
[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],
["model", "vendor", ["type", "tablet"]],
[/applecoremedia\/[\w\.]+ \((ipad)/],
["model", ["vendor", "Apple"], ["type", "tablet"]],
[/(apple\s{0,1}tv)/i],
[
["model", "Apple TV"],
["vendor", "Apple"],
],
[
/(archos)\s(gamepad2?)/i,
/(hp).+(touchpad)/i,
/(kindle)\/([\w\.]+)/i,
/\s(nook)[\w\s]+build\/(\w+)/i,
/(dell)\s(strea[kpr\s\d]*[\dko])/i,
],
["vendor", "model", ["type", "tablet"]],
[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],
["model", ["vendor", "Amazon"], ["type", "tablet"]],
[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],
[
["model", b, { "Fire Phone": ["SD", "KF"] }],
["vendor", "Amazon"],
["type", "mobile"],
],
[/\((ip[honed|\s\w*]+);.+(apple)/i],
["model", "vendor", ["type", "mobile"]],
[/\((ip[honed|\s\w*]+);/i],
["model", ["vendor", "Apple"], ["type", "mobile"]],
[
/(blackberry)[\s-]?(\w+)/i,
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,
/(hp)\s([\w\s]+\w)/i,
/(asus)-?(\w+)/i,
],
["vendor", "model", ["type", "mobile"]],
[/\(bb10;\s(\w+)/i],
["model", ["vendor", "BlackBerry"], ["type", "mobile"]],
[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7)/i],
["model", ["vendor", "Asus"], ["type", "tablet"]],
[/(sony)\s(tablet\s[ps])\sbuild\//i, /(sony)?(?:sgp.+)\sbuild\//i],
[
["vendor", "Sony"],
["model", "Xperia Tablet"],
["type", "tablet"],
],
[/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i],
[
["vendor", "Sony"],
["model", "Xperia Phone"],
["type", "mobile"],
],
[/\s(ouya)\s/i, /(nintendo)\s([wids3u]+)/i],
["vendor", "model", ["type", "console"]],
[/android.+;\s(shield)\sbuild/i],
["model", ["vendor", "Nvidia"], ["type", "console"]],
[/(playstation\s[34portablevi]+)/i],
["model", ["vendor", "Sony"], ["type", "console"]],
[/(sprint\s(\w+))/i],
[
["vendor", b, { HTC: "APA", Sprint: "Sprint" }],
["model", b, { "Evo Shift 4G": "7373KT" }],
["type", "mobile"],
],
[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],
["vendor", "model", ["type", "tablet"]],
[
/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,
/(zte)-(\w+)*/i,
/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i,
],
["vendor", ["model", /_/g, " "], ["type", "mobile"]],
[/(nexus\s9)/i],
["model", ["vendor", "HTC"], ["type", "tablet"]],
[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],
["model", ["vendor", "Microsoft"], ["type", "console"]],
[/(kin\.[onetw]{3})/i],
[
["model", /\./g, " "],
["vendor", "Microsoft"],
["type", "mobile"],
],
[
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,
/mot[\s-]?(\w+)*/i,
/(XT\d{3,4}) build\//i,
/(nexus\s[6])/i,
],
["model", ["vendor", "Motorola"], ["type", "mobile"]],
[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],
["model", ["vendor", "Motorola"], ["type", "tablet"]],
[
/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9|nexus 10))/i,
/((SM-T\w+))/i,
],
[["vendor", "Samsung"], "model", ["type", "tablet"]],
[
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-n900))/i,
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,
/sec-((sgh\w+))/i,
],
[["vendor", "Samsung"], "model", ["type", "mobile"]],
[/(samsung);smarttv/i],
["vendor", "model", ["type", "smarttv"]],
[/\(dtv[\);].+(aquos)/i],
["model", ["vendor", "Sharp"], ["type", "smarttv"]],
[/sie-(\w+)*/i],
["model", ["vendor", "Siemens"], ["type", "mobile"]],
[/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]+)*/i],
[["vendor", "Nokia"], "model", ["type", "mobile"]],
[/android\s3\.[\s\w;-]{10}(a\d{3})/i],
["model", ["vendor", "Acer"], ["type", "tablet"]],
[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],
[["vendor", "LG"], "model", ["type", "tablet"]],
[/(lg) netcast\.tv/i],
["vendor", "model", ["type", "smarttv"]],
[/(nexus\s[45])/i, /lg[e;\s\/-]+(\w+)*/i],
["model", ["vendor", "LG"], ["type", "mobile"]],
[/android.+(ideatab[a-z0-9\-\s]+)/i],
["model", ["vendor", "Lenovo"], ["type", "tablet"]],
[/linux;.+((jolla));/i],
["vendor", "model", ["type", "mobile"]],
[/((pebble))app\/[\d\.]+\s/i],
["vendor", "model", ["type", "wearable"]],
[/android.+;\s(glass)\s\d/i],
["model", ["vendor", "Google"], ["type", "wearable"]],
[
/android.+(\w+)\s+build\/hm\1/i,
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,
/android.+(mi[\s\-_]*(?:one|one[\s_]plus)?[\s_]*(?:\d\w)?)\s+build/i,
],
[
["model", /_/g, " "],
["vendor", "Xiaomi"],
["type", "mobile"],
],
[/\s(tablet)[;\/\s]/i, /\s(mobile)[;\/\s]/i],
[["type", e.lowerize], "vendor", "model"],
],
engine: [
[/windows.+\sedge\/([\w\.]+)/i],
["version", ["name", "EdgeHTML"]],
[
/(presto)\/([\w\.]+)/i,
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,
/(icab)[\/\s]([23]\.[\d\.]+)/i,
],
["name", "version"],
[/rv\:([\w\.]+).*(gecko)/i],
["version", "name"],
],
os: [
[/microsoft\s(windows)\s(vista|xp)/i],
["name", "version"],
[
/(windows)\snt\s6\.2;\s(arm)/i,
/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i,
],
["name", ["version", b, c]],
[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],
[
["name", "Windows"],
["version", b, c],
],
[/\((bb)(10);/i],
[["name", "BlackBerry"], "version"],
[
/(blackberry)\w*\/?([\w\.]+)*/i,
/(tizen)[\/\s]([\w\.]+)/i,
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
/linux;.+(sailfish);/i,
],
["name", "version"],
[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],
[["name", "Symbian"], "version"],
[/\((series40);/i],
["name"],
[/mozilla.+\(mobile;.+gecko.+firefox/i],
[["name", "Firefox OS"], "version"],
[
/(nintendo|playstation)\s([wids34portablevu]+)/i,
/(mint)[\/\s\(]?(\w+)*/i,
/(mageia|vectorlinux)[;\s]/i,
/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,
/(hurd|linux)\s?([\w\.]+)*/i,
/(gnu)\s?([\w\.]+)*/i,
],
["name", "version"],
[/(cros)\s[\w]+\s([\w\.]+\w)/i],
[["name", "Chromium OS"], "version"],
[/(sunos)\s?([\w\.]+\d)*/i],
[["name", "Solaris"], "version"],
[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],
["name", "version"],
[/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],
[
["name", "iOS"],
["version", /_/g, "."],
],
[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i, /(macintosh|mac(?=_powerpc)\s)/i],
[
["name", "Mac OS"],
["version", /_/g, "."],
],
[
/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,
/(haiku)\s(\w+)/i,
/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
/(unix)\s?([\w\.]+)*/i,
],
["name", "version"],
],
},
g = function (b, c) {
if (!(this instanceof g)) return new g(b, c).getResult();
var d =
b ||
(f && f.navigator && f.navigator.userAgent
? f.navigator.userAgent
: ""),
n = c ? e.extend(a, c) : a;
this.getBrowser = function () {
var a = p.apply(this, n.browser);
a.major = e.major(a.version);
return a;
};
this.getCPU = function () {
return p.apply(this, n.cpu);
};
this.getDevice = function () {
return p.apply(this, n.device);
};
this.getEngine = function () {
return p.apply(this, n.engine);
};
this.getOS = function () {
return p.apply(this, n.os);
};
this.getResult = function () {
return {
ua: this.getUA(),
browser: this.getBrowser(),
engine: this.getEngine(),
os: this.getOS(),
device: this.getDevice(),
cpu: this.getCPU(),
};
};
this.getUA = function () {
return d;
};
this.setUA = function (a) {
d = a;
return this;
};
this.setUA(d);
return this;
};
g.VERSION = "0.7.10";
g.BROWSER = { NAME: "name", MAJOR: "major", VERSION: "version" };
g.CPU = { ARCHITECTURE: "architecture" };
g.DEVICE = {
MODEL: "model",
VENDOR: "vendor",
TYPE: "type",
CONSOLE: "console",
MOBILE: "mobile",
SMARTTV: "smarttv",
TABLET: "tablet",
WEARABLE: "wearable",
EMBEDDED: "embedded",
};
g.ENGINE = { NAME: "name", VERSION: "version" };
g.OS = { NAME: "name", VERSION: "version" };
"undefined" !== typeof exports
? ("undefined" !== typeof module &&
module.exports &&
(exports = module.exports = g),
(exports.UAParser = g))
: "function" === typeof define && define.amd
? define(function () {
return g;
})
: (f.UAParser = g);
var n = f.jQuery || f.Zepto;
if ("undefined" !== typeof n) {
var v = new g();
n.ua = v.getResult();
n.ua.get = function () {
return v.getUA();
};
n.ua.set = function (a) {
v.setUA(a);
a = v.getResult();
for (var b in a) n.ua[b] = a[b];
};
}
})("object" === typeof window ? window : this);
!(function (e, t) {
"use strict";
"undefined" != typeof window && "function" == typeof define && define.amd
? define(t)
: "undefined" != typeof module && module.exports
? (module.exports = t())
: e.exports
? (e.exports = t())
: (e.Fingerprint2 = t());
})(this, function () {
"use strict";
void 0 === Array.isArray &&
(Array.isArray = function (e) {
return "[object Array]" === Object.prototype.toString.call(e);
});
function d(e, t) {
(e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]),
(t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]);
var n = [0, 0, 0, 0];
return (
(n[3] += e[3] + t[3]),
(n[2] += n[3] >>> 16),
(n[3] &= 65535),
(n[2] += e[2] + t[2]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[1] += e[1] + t[1]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[0] += e[0] + t[0]),
(n[0] &= 65535),
[(n[0] << 16) | n[1], (n[2] << 16) | n[3]]
);
}
function f(e, t) {
(e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]),
(t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]);
var n = [0, 0, 0, 0];
return (
(n[3] += e[3] * t[3]),
(n[2] += n[3] >>> 16),
(n[3] &= 65535),
(n[2] += e[2] * t[3]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[2] += e[3] * t[2]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[1] += e[1] * t[3]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[1] += e[2] * t[2]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[1] += e[3] * t[1]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[0] += e[0] * t[3] + e[1] * t[2] + e[2] * t[1] + e[3] * t[0]),
(n[0] &= 65535),
[(n[0] << 16) | n[1], (n[2] << 16) | n[3]]
);
}
function g(e, t) {
return 32 === (t %= 64)
? [e[1], e[0]]
: t < 32
? [(e[0] << t) | (e[1] >>> (32 - t)), (e[1] << t) | (e[0] >>> (32 - t))]
: ((t -= 32),
[(e[1] << t) | (e[0] >>> (32 - t)), (e[0] << t) | (e[1] >>> (32 - t))]);
}
function h(e, t) {
return 0 === (t %= 64)
? e
: t < 32
? [(e[0] << t) | (e[1] >>> (32 - t)), e[1] << t]
: [e[1] << (t - 32), 0];
}
function m(e, t) {
return [e[0] ^ t[0], e[1] ^ t[1]];
}
function p(e) {
return (
(e = m(e, [0, e[0] >>> 1])),
(e = f(e, [4283543511, 3981806797])),
(e = m(e, [0, e[0] >>> 1])),
(e = f(e, [3301882366, 444984403])),
(e = m(e, [0, e[0] >>> 1]))
);
}
function l(e, t) {
t = t || 0;
for (
var n = (e = e || "").length % 16,
a = e.length - n,
r = [0, t],
i = [0, t],
o = [0, 0],
l = [0, 0],
s = [2277735313, 289559509],
c = [1291169091, 658871167],
u = 0;
u < a;
u += 16
)
(o = [
(255 & e.charCodeAt(u + 4)) |
((255 & e.charCodeAt(u + 5)) << 8) |
((255 & e.charCodeAt(u + 6)) << 16) |
((255 & e.charCodeAt(u + 7)) << 24),
(255 & e.charCodeAt(u)) |
((255 & e.charCodeAt(u + 1)) << 8) |
((255 & e.charCodeAt(u + 2)) << 16) |
((255 & e.charCodeAt(u + 3)) << 24),
]),
(l = [
(255 & e.charCodeAt(u + 12)) |
((255 & e.charCodeAt(u + 13)) << 8) |
((255 & e.charCodeAt(u + 14)) << 16) |
((255 & e.charCodeAt(u + 15)) << 24),
(255 & e.charCodeAt(u + 8)) |
((255 & e.charCodeAt(u + 9)) << 8) |
((255 & e.charCodeAt(u + 10)) << 16) |
((255 & e.charCodeAt(u + 11)) << 24),
]),
(o = f(o, s)),
(o = g(o, 31)),
(o = f(o, c)),
(r = m(r, o)),
(r = g(r, 27)),
(r = d(r, i)),
(r = d(f(r, [0, 5]), [0, 1390208809])),
(l = f(l, c)),
(l = g(l, 33)),
(l = f(l, s)),
(i = m(i, l)),
(i = g(i, 31)),
(i = d(i, r)),
(i = d(f(i, [0, 5]), [0, 944331445]));
switch (((o = [0, 0]), (l = [0, 0]), n)) {
case 15:
l = m(l, h([0, e.charCodeAt(u + 14)], 48));
case 14:
l = m(l, h([0, e.charCodeAt(u + 13)], 40));
case 13:
l = m(l, h([0, e.charCodeAt(u + 12)], 32));
case 12:
l = m(l, h([0, e.charCodeAt(u + 11)], 24));
case 11:
l = m(l, h([0, e.charCodeAt(u + 10)], 16));
case 10:
l = m(l, h([0, e.charCodeAt(u + 9)], 8));
case 9:
(l = m(l, [0, e.charCodeAt(u + 8)])),
(l = f(l, c)),
(l = g(l, 33)),
(l = f(l, s)),
(i = m(i, l));
case 8:
o = m(o, h([0, e.charCodeAt(u + 7)], 56));
case 7:
o = m(o, h([0, e.charCodeAt(u + 6)], 48));
case 6:
o = m(o, h([0, e.charCodeAt(u + 5)], 40));
case 5:
o = m(o, h([0, e.charCodeAt(u + 4)], 32));
case 4:
o = m(o, h([0, e.charCodeAt(u + 3)], 24));
case 3:
o = m(o, h([0, e.charCodeAt(u + 2)], 16));
case 2:
o = m(o, h([0, e.charCodeAt(u + 1)], 8));
case 1:
(o = m(o, [0, e.charCodeAt(u)])),
(o = f(o, s)),
(o = g(o, 31)),
(o = f(o, c)),
(r = m(r, o));
}
return (
(r = m(r, [0, e.length])),
(i = m(i, [0, e.length])),
(r = d(r, i)),
(i = d(i, r)),
(r = p(r)),
(i = p(i)),
(r = d(r, i)),
(i = d(i, r)),
("00000000" + (r[0] >>> 0).toString(16)).slice(-8) +
("00000000" + (r[1] >>> 0).toString(16)).slice(-8) +
("00000000" + (i[0] >>> 0).toString(16)).slice(-8) +
("00000000" + (i[1] >>> 0).toString(16)).slice(-8)
);
}
function c(e, t) {
if (Array.prototype.forEach && e.forEach === Array.prototype.forEach)
e.forEach(t);
else if (e.length === +e.length)
for (var n = 0, a = e.length; n < a; n++) t(e[n], n, e);
else for (var r in e) e.hasOwnProperty(r) && t(e[r], r, e);
}
function s(e, a) {
var r = [];
return null == e
? r
: Array.prototype.map && e.map === Array.prototype.map
? e.map(a)
: (c(e, function (e, t, n) {
r.push(a(e, t, n));
}),
r);
}
function a(e) {
throw new Error(
"'new Fingerprint()' is deprecated, see https://github.com/fingerprintjs/fingerprintjs#upgrade-guide-from-182-to-200"
);
}
var e = {
preprocessor: null,
audio: { timeout: 1e3, excludeIOS11: !0 },
fonts: {
swfContainerId: "fingerprintjs2",
swfPath: "flash/compiled/FontList.swf",
userDefinedFonts: [],
extendedJsFonts: !1,
},
screen: { detectScreenOrientation: !0 },
plugins: { sortPluginsFor: [/palemoon/i], excludeIE: !1 },
extraComponents: [],
excludes: {
enumerateDevices: !0,
pixelRatio: !0,
doNotTrack: !0,
fontsFlash: !0,
adBlock: !0,
},
NOT_AVAILABLE: "not available",
ERROR: "error",
EXCLUDED: "excluded",
},
n = function () {
return navigator.mediaDevices && navigator.mediaDevices.enumerateDevices;
},
r = function (e) {
var t = [window.screen.width, window.screen.height];
return e.screen.detectScreenOrientation && t.sort().reverse(), t;
},
i = function (e) {
if (window.screen.availWidth && window.screen.availHeight) {
var t = [window.screen.availHeight, window.screen.availWidth];
return e.screen.detectScreenOrientation && t.sort().reverse(), t;
}
return e.NOT_AVAILABLE;
},
o = function (e) {
if (null == navigator.plugins) return e.NOT_AVAILABLE;
for (var t = [], n = 0, a = navigator.plugins.length; n < a; n++)
navigator.plugins[n] && t.push(navigator.plugins[n]);
return (
T(e) &&
(t = t.sort(function (e, t) {
return e.name > t.name ? 1 : e.name < t.name ? -1 : 0;
})),
s(t, function (e) {
var t = s(e, function (e) {
return [e.type, e.suffixes];
});
return [e.name, e.description, t];
})
);
},
u = function (t) {
var e = [];
return (
(Object.getOwnPropertyDescriptor &&
Object.getOwnPropertyDescriptor(window, "ActiveXObject")) ||
"ActiveXObject" in window
? (e = s(
[
"AcroPDF.PDF",
"Adodb.Stream",
"AgControl.AgControl",
"DevalVRXCtrl.DevalVRXCtrl.1",
"MacromediaFlashPaper.MacromediaFlashPaper",
"Msxml2.DOMDocument",
"Msxml2.XMLHTTP",
"PDF.PdfCtrl",
"QuickTime.QuickTime",
"QuickTimeCheckObject.QuickTimeCheck.1",
"RealPlayer",
"RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)",
"RealVideo.RealVideo(tm) ActiveX Control (32-bit)",
"Scripting.Dictionary",
"SWCtl.SWCtl",
"Shell.UIHelper",
"ShockwaveFlash.ShockwaveFlash",
"Skype.Detection",
"TDCCtl.TDCCtl",
"WMPlayer.OCX",
"rmocx.RealPlayer G2 Control",
"rmocx.RealPlayer G2 Control.1",
],
function (e) {
try {
return new window.ActiveXObject(e), e;
} catch (e) {
return t.ERROR;
}
}
))
: e.push(t.NOT_AVAILABLE),
navigator.plugins && (e = e.concat(o(t))),
e
);
},
T = function (e) {
for (var t = !1, n = 0, a = e.plugins.sortPluginsFor.length; n < a; n++) {
var r = e.plugins.sortPluginsFor[n];
if (navigator.userAgent.match(r)) {
t = !0;
break;
}
}
return t;
},
A = function (t) {
try {
return !!window.sessionStorage;
} catch (e) {
return t.ERROR;
}
},
v = function (t) {
try {
return !!window.localStorage;
} catch (e) {
return t.ERROR;
}
},
S = function (t) {
if (N()) return t.EXCLUDED;
try {
return !!window.indexedDB;
} catch (e) {
return t.ERROR;
}
},
C = function (e) {
return navigator.hardwareConcurrency
? navigator.hardwareConcurrency
: e.NOT_AVAILABLE;
},
w = function (e) {
return navigator.cpuClass || e.NOT_AVAILABLE;
},
B = function (e) {
return navigator.platform ? navigator.platform : e.NOT_AVAILABLE;
},
y = function (e) {
return navigator.doNotTrack
? navigator.doNotTrack
: navigator.msDoNotTrack
? navigator.msDoNotTrack
: window.doNotTrack
? window.doNotTrack
: e.NOT_AVAILABLE;
},
t = function () {
var t,
e = 0;
void 0 !== navigator.maxTouchPoints
? (e = navigator.maxTouchPoints)
: void 0 !== navigator.msMaxTouchPoints &&
(e = navigator.msMaxTouchPoints);
try {
document.createEvent("TouchEvent"), (t = !0);
} catch (e) {
t = !1;
}
return [e, t, "ontouchstart" in window];
},
E = function (e) {
var t = [],
n = document.createElement("canvas");
(n.width = 2e3), (n.height = 200), (n.style.display = "inline");
var a = n.getContext("2d");
return (
a.rect(0, 0, 10, 10),
a.rect(2, 2, 6, 6),
t.push(
"canvas winding:" +
(!1 === a.isPointInPath(5, 5, "evenodd") ? "yes" : "no")
),
(a.textBaseline = "alphabetic"),
(a.fillStyle = "#f60"),
a.fillRect(125, 1, 62, 20),
(a.fillStyle = "#069"),
e.dontUseFakeFontInCanvas
? (a.font = "11pt Arial")
: (a.font = "11pt no-real-font-123"),
a.fillText("Cwm fjordbank glyphs vext quiz, 😃", 2, 15),
(a.fillStyle = "rgba(102, 204, 0, 0.2)"),
(a.font = "18pt Arial"),
a.fillText("Cwm fjordbank glyphs vext quiz, 😃", 4, 45),
(a.globalCompositeOperation = "multiply"),
(a.fillStyle = "rgb(255,0,255)"),
a.beginPath(),
a.arc(50, 50, 50, 0, 2 * Math.PI, !0),
a.closePath(),
a.fill(),
(a.fillStyle = "rgb(0,255,255)"),
a.beginPath(),
a.arc(100, 50, 50, 0, 2 * Math.PI, !0),
a.closePath(),
a.fill(),
(a.fillStyle = "rgb(255,255,0)"),
a.beginPath(),
a.arc(75, 100, 50, 0, 2 * Math.PI, !0),
a.closePath(),
a.fill(),
(a.fillStyle = "rgb(255,0,255)"),
a.arc(75, 75, 75, 0, 2 * Math.PI, !0),
a.arc(75, 75, 25, 0, 2 * Math.PI, !0),
a.fill("evenodd"),
n.toDataURL && t.push("canvas fp:" + n.toDataURL()),
t
);
},
x = function () {
function e(e) {
return (
o.clearColor(0, 0, 0, 1),
o.enable(o.DEPTH_TEST),
o.depthFunc(o.LEQUAL),
o.clear(o.COLOR_BUFFER_BIT | o.DEPTH_BUFFER_BIT),
"[" + e[0] + ", " + e[1] + "]"
);
}
var o = U();
if (!o) return null;
var l = [],
t = o.createBuffer();
o.bindBuffer(o.ARRAY_BUFFER, t);
var n = new Float32Array([
-0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.732134444, 0,
]);
o.bufferData(o.ARRAY_BUFFER, n, o.STATIC_DRAW),
(t.itemSize = 3),
(t.numItems = 3);
var a = o.createProgram(),
r = o.createShader(o.VERTEX_SHADER);
o.shaderSource(
r,
"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"
),
o.compileShader(r);
var i = o.createShader(o.FRAGMENT_SHADER);
o.shaderSource(
i,
"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"
),
o.compileShader(i),
o.attachShader(a, r),
o.attachShader(a, i),
o.linkProgram(a),
o.useProgram(a),
(a.vertexPosAttrib = o.getAttribLocation(a, "attrVertex")),
(a.offsetUniform = o.getUniformLocation(a, "uniformOffset")),
o.enableVertexAttribArray(a.vertexPosArray),
o.vertexAttribPointer(a.vertexPosAttrib, t.itemSize, o.FLOAT, !1, 0, 0),
o.uniform2f(a.offsetUniform, 1, 1),
o.drawArrays(o.TRIANGLE_STRIP, 0, t.numItems);
try {
l.push(o.canvas.toDataURL());
} catch (e) {}
l.push("extensions:" + (o.getSupportedExtensions() || []).join(";")),
l.push(
"webgl aliased line width range:" +
e(o.getParameter(o.ALIASED_LINE_WIDTH_RANGE))
),
l.push(
"webgl aliased point size range:" +
e(o.getParameter(o.ALIASED_POINT_SIZE_RANGE))
),
l.push("webgl alpha bits:" + o.getParameter(o.ALPHA_BITS)),
l.push(
"webgl antialiasing:" +
(o.getContextAttributes().antialias ? "yes" : "no")
),
l.push("webgl blue bits:" + o.getParameter(o.BLUE_BITS)),
l.push("webgl depth bits:" + o.getParameter(o.DEPTH_BITS)),
l.push("webgl green bits:" + o.getParameter(o.GREEN_BITS)),
l.push(
"webgl max anisotropy:" +
(function (e) {
var t =
e.getExtension("EXT_texture_filter_anisotropic") ||
e.getExtension("WEBKIT_EXT_texture_filter_anisotropic") ||
e.getExtension("MOZ_EXT_texture_filter_anisotropic");
if (t) {
var n = e.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
return 0 === n && (n = 2), n;
}
return null;
})(o)
),
l.push(
"webgl max combined texture image units:" +
o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)
),
l.push(
"webgl max cube map texture size:" +
o.getParameter(o.MAX_CUBE_MAP_TEXTURE_SIZE)
),
l.push(
"webgl max fragment uniform vectors:" +
o.getParameter(o.MAX_FRAGMENT_UNIFORM_VECTORS)
),
l.push(
"webgl max render buffer size:" +
o.getParameter(o.MAX_RENDERBUFFER_SIZE)
),
l.push(
"webgl max texture image units:" +
o.getParameter(o.MAX_TEXTURE_IMAGE_UNITS)
),
l.push("webgl max texture size:" + o.getParameter(o.MAX_TEXTURE_SIZE)),
l.push(
"webgl max varying vectors:" + o.getParameter(o.MAX_VARYING_VECTORS)
),
l.push(
"webgl max vertex attribs:" + o.getParameter(o.MAX_VERTEX_ATTRIBS)
),
l.push(
"webgl max vertex texture image units:" +
o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)
),
l.push(
"webgl max vertex uniform vectors:" +
o.getParameter(o.MAX_VERTEX_UNIFORM_VECTORS)
),
l.push(
"webgl max viewport dims:" + e(o.getParameter(o.MAX_VIEWPORT_DIMS))
),
l.push("webgl red bits:" + o.getParameter(o.RED_BITS)),
l.push("webgl renderer:" + o.getParameter(o.RENDERER)),
l.push(
"webgl shading language version:" +
o.getParameter(o.SHADING_LANGUAGE_VERSION)
),
l.push("webgl stencil bits:" + o.getParameter(o.STENCIL_BITS)),
l.push("webgl vendor:" + o.getParameter(o.VENDOR)),
l.push("webgl version:" + o.getParameter(o.VERSION));
try {
var s = o.getExtension("WEBGL_debug_renderer_info");
s &&
(l.push(
"webgl unmasked vendor:" + o.getParameter(s.UNMASKED_VENDOR_WEBGL)
),
l.push(
"webgl unmasked renderer:" +
o.getParameter(s.UNMASKED_RENDERER_WEBGL)
));
} catch (e) {}
return (
o.getShaderPrecisionFormat &&
c(["FLOAT", "INT"], function (i) {
c(["VERTEX", "FRAGMENT"], function (r) {
c(["HIGH", "MEDIUM", "LOW"], function (a) {
c(["precision", "rangeMin", "rangeMax"], function (e) {
var t = o.getShaderPrecisionFormat(
o[r + "_SHADER"],
o[a + "_" + i]
)[e];
"precision" !== e && (e = "precision " + e);
var n = [
"webgl ",
r.toLowerCase(),
" shader ",
a.toLowerCase(),
" ",
i.toLowerCase(),
" ",
e,
":",
t,
].join("");
l.push(n);
});
});
});
}),
V(o),
l
);
},
O = function () {
try {
var e = U(),
t = e.getExtension("WEBGL_debug_renderer_info"),
n =
e.getParameter(t.UNMASKED_VENDOR_WEBGL) +
"~" +
e.getParameter(t.UNMASKED_RENDERER_WEBGL);
return V(e), n;
} catch (e) {
return null;
}
},
M = function () {
var e = document.createElement("div");
e.innerHTML = " ";
var t = !(e.className = "adsbox");
try {
document.body.appendChild(e),
(t = 0 === document.getElementsByClassName("adsbox")[0].offsetHeight),
document.body.removeChild(e);
} catch (e) {
t = !1;
}
return t;
},
P = function () {
if (void 0 !== navigator.languages)
try {
if (
navigator.languages[0].substr(0, 2) !==
navigator.language.substr(0, 2)
)
return !0;
} catch (e) {
return !0;
}
return !1;
},
b = function () {
return (
window.screen.width < window.screen.availWidth ||
window.screen.height < window.screen.availHeight
);
},
L = function () {
var e = navigator.userAgent.toLowerCase(),
t = navigator.oscpu,
n = navigator.platform.toLowerCase(),
a =
0 <= e.indexOf("windows phone")
? "Windows Phone"
: 0 <= e.indexOf("windows") ||
0 <= e.indexOf("win16") ||
0 <= e.indexOf("win32") ||
0 <= e.indexOf("win64") ||
0 <= e.indexOf("win95") ||
0 <= e.indexOf("win98") ||
0 <= e.indexOf("winnt") ||
0 <= e.indexOf("wow64")
? "Windows"
: 0 <= e.indexOf("android")
? "Android"
: 0 <= e.indexOf("linux") ||
0 <= e.indexOf("cros") ||
0 <= e.indexOf("x11")
? "Linux"
: 0 <= e.indexOf("iphone") ||
0 <= e.indexOf("ipad") ||
0 <= e.indexOf("ipod") ||
0 <= e.indexOf("crios") ||
0 <= e.indexOf("fxios")
? "iOS"
: 0 <= e.indexOf("macintosh") || 0 <= e.indexOf("mac_powerpc)")
? "Mac"
: "Other";
if (
("ontouchstart" in window ||
0 < navigator.maxTouchPoints ||
0 < navigator.msMaxTouchPoints) &&
"Windows" !== a &&
"Windows Phone" !== a &&
"Android" !== a &&
"iOS" !== a &&
"Other" !== a &&
-1 === e.indexOf("cros")
)
return !0;
if (void 0 !== t) {
if (
0 <= (t = t.toLowerCase()).indexOf("win") &&
"Windows" !== a &&
"Windows Phone" !== a
)
return !0;
if (0 <= t.indexOf("linux") && "Linux" !== a && "Android" !== a)
return !0;
if (0 <= t.indexOf("mac") && "Mac" !== a && "iOS" !== a) return !0;
if (
(-1 === t.indexOf("win") &&
-1 === t.indexOf("linux") &&
-1 === t.indexOf("mac")) !=
("Other" === a)
)
return !0;
}
return (
(0 <= n.indexOf("win") && "Windows" !== a && "Windows Phone" !== a) ||
((0 <= n.indexOf("linux") ||
0 <= n.indexOf("android") ||
0 <= n.indexOf("pike")) &&
"Linux" !== a &&
"Android" !== a) ||
((0 <= n.indexOf("mac") ||
0 <= n.indexOf("ipad") ||
0 <= n.indexOf("ipod") ||
0 <= n.indexOf("iphone")) &&
"Mac" !== a &&
"iOS" !== a) ||
(!(0 <= n.indexOf("arm") && "Windows Phone" === a) &&
!(0 <= n.indexOf("pike") && 0 <= e.indexOf("opera mini")) &&
((n.indexOf("win") < 0 &&
n.indexOf("linux") < 0 &&
n.indexOf("mac") < 0 &&
n.indexOf("iphone") < 0 &&
n.indexOf("ipad") < 0 &&
n.indexOf("ipod") < 0) !=
("Other" === a) ||
(void 0 === navigator.plugins &&
"Windows" !== a &&
"Windows Phone" !== a)))
);
},
I = function () {
var e,
t = navigator.userAgent.toLowerCase(),
n = navigator.productSub;
if (0 <= t.indexOf("edge/") || 0 <= t.indexOf("iemobile/")) return !1;
if (0 <= t.indexOf("opera mini")) return !1;
if (
("Chrome" ===
(e =
0 <= t.indexOf("firefox/")
? "Firefox"
: 0 <= t.indexOf("opera/") || 0 <= t.indexOf(" opr/")
? "Opera"
: 0 <= t.indexOf("chrome/")
? "Chrome"
: 0 <= t.indexOf("safari/")
? 0 <= t.indexOf("android 1.") ||
0 <= t.indexOf("android 2.") ||
0 <= t.indexOf("android 3.") ||
0 <= t.indexOf("android 4.")
? "AOSP"
: "Safari"
: 0 <= t.indexOf("trident/")
? "Internet Explorer"
: "Other") ||
"Safari" === e ||
"Opera" === e) &&
"20030107" !== n
)
return !0;
var a,
r = eval.toString().length;
if (37 === r && "Safari" !== e && "Firefox" !== e && "Other" !== e)
return !0;
if (39 === r && "Internet Explorer" !== e && "Other" !== e) return !0;
if (
33 === r &&
"Chrome" !== e &&
"AOSP" !== e &&
"Opera" !== e &&
"Other" !== e
)
return !0;
try {
throw "a";
} catch (e) {
try {
e.toSource(), (a = !0);
} catch (e) {
a = !1;
}
}
return a && "Firefox" !== e && "Other" !== e;
},
k = function () {
var e = document.createElement("canvas");
return !(!e.getContext || !e.getContext("2d"));
},
D = function () {
if (!k()) return !1;
var e = U(),
t = !!window.WebGLRenderingContext && !!e;
return V(e), t;
},
R = function () {
return (
"Microsoft Internet Explorer" === navigator.appName ||
!(
"Netscape" !== navigator.appName ||
!/Trident/.test(navigator.userAgent)
)
);
},
N = function () {
return (
2 <=
("msWriteProfilerMark" in window) +
("msLaunchUri" in navigator) +
("msSaveBlob" in navigator)
);
},
_ = function () {
return void 0 !== window.swfobject;
},
F = function () {
return window.swfobject.hasFlashPlayerVersion("9.0.0");
},
G = function (t, e) {
var n = "___fp_swf_loaded";
window[n] = function (e) {
t(e);
};
var a,
r,
i = e.fonts.swfContainerId;
(r = document.createElement("div")).setAttribute(
"id",
a.fonts.swfContainerId
),
document.body.appendChild(r);
var o = { onReady: n };
window.swfobject.embedSWF(
e.fonts.swfPath,
i,
"1",
"1",
"9.0.0",
!1,
o,
{ allowScriptAccess: "always", menu: "false" },
{}
);
},
U = function () {
var e = document.createElement("canvas"),
t = null;
try {
t = e.getContext("webgl") || e.getContext("experimental-webgl");
} catch (e) {}
return (t = t || null);
},
V = function (e) {
var t = e.getExtension("WEBGL_lose_context");
null != t && t.loseContext();
},
H = [
{
key: "userAgent",
getData: function (e) {
e(navigator.userAgent);
},
},
{
key: "webdriver",
getData: function (e, t) {
e(
null == navigator.webdriver ? t.NOT_AVAILABLE : navigator.webdriver
);
},
},
{
key: "language",
getData: function (e, t) {
e(
navigator.language ||
navigator.userLanguage ||
navigator.browserLanguage ||
navigator.systemLanguage ||
t.NOT_AVAILABLE
);
},
},
{
key: "colorDepth",
getData: function (e, t) {
e(window.screen.colorDepth || t.NOT_AVAILABLE);
},
},
{
key: "deviceMemory",
getData: function (e, t) {
e(navigator.deviceMemory || t.NOT_AVAILABLE);
},
},
{
key: "pixelRatio",
getData: function (e, t) {
e(window.devicePixelRatio || t.NOT_AVAILABLE);
},
},
{
key: "hardwareConcurrency",
getData: function (e, t) {
e(C(t));
},
},
{
key: "screenResolution",
getData: function (e, t) {
e(r(t));
},
},
{
key: "availableScreenResolution",
getData: function (e, t) {
e(i(t));
},
},
{
key: "timezoneOffset",
getData: function (e) {
e(new Date().getTimezoneOffset());
},
},
{
key: "timezone",
getData: function (e, t) {
window.Intl && window.Intl.DateTimeFormat
? e(
new window.Intl.DateTimeFormat().resolvedOptions().timeZone ||
t.NOT_AVAILABLE
)
: e(t.NOT_AVAILABLE);
},
},
{
key: "sessionStorage",
getData: function (e, t) {
e(A(t));
},
},
{
key: "localStorage",
getData: function (e, t) {
e(v(t));
},
},
{
key: "indexedDb",
getData: function (e, t) {
e(S(t));
},
},
{
key: "addBehavior",
getData: function (e) {
e(!!window.HTMLElement.prototype.addBehavior);
},
},
{
key: "openDatabase",
getData: function (e) {
e(!!window.openDatabase);
},
},
{
key: "cpuClass",
getData: function (e, t) {
e(w(t));
},
},
{
key: "platform",
getData: function (e, t) {
e(B(t));
},
},
{
key: "doNotTrack",
getData: function (e, t) {
e(y(t));
},
},
{
key: "plugins",
getData: function (e, t) {
R() ? (t.plugins.excludeIE ? e(t.EXCLUDED) : e(u(t))) : e(o(t));
},
},
{
key: "canvas",
getData: function (e, t) {
k() ? e(E(t)) : e(t.NOT_AVAILABLE);
},
},
{
key: "webgl",
getData: function (e, t) {
D() ? e(x()) : e(t.NOT_AVAILABLE);
},
},
{
key: "webglVendorAndRenderer",
getData: function (e) {
D() ? e(O()) : e();
},
},
{
key: "adBlock",
getData: function (e) {
e(M());
},
},
{
key: "hasLiedLanguages",
getData: function (e) {
e(P());
},
},
{
key: "hasLiedResolution",
getData: function (e) {
e(b());
},
},
{
key: "hasLiedOs",
getData: function (e) {
e(L());
},
},
{
key: "hasLiedBrowser",
getData: function (e) {
e(I());
},
},
{
key: "touchSupport",
getData: function (e) {
e(t());
},
},
{
key: "fonts",
getData: function (e, t) {
var u = ["monospace", "sans-serif", "serif"],
d = [
"Andale Mono",
"Arial",
"Arial Black",
"Arial Hebrew",
"Arial MT",
"Arial Narrow",
"Arial Rounded MT Bold",
"Arial Unicode MS",
"Bitstream Vera Sans Mono",
"Book Antiqua",
"Bookman Old Style",
"Calibri",
"Cambria",
"Cambria Math",
"Century",
"Century Gothic",
"Century Schoolbook",
"Comic Sans",
"Comic Sans MS",
"Consolas",
"Courier",
"Courier New",
"Geneva",
"Georgia",
"Helvetica",
"Helvetica Neue",
"Impact",
"Lucida Bright",
"Lucida Calligraphy",
"Lucida Console",
"Lucida Fax",
"LUCIDA GRANDE",
"Lucida Handwriting",
"Lucida Sans",
"Lucida Sans Typewriter",
"Lucida Sans Unicode",
"Microsoft Sans Serif",
"Monaco",
"Monotype Corsiva",
"MS Gothic",
"MS Outlook",
"MS PGothic",
"MS Reference Sans Serif",
"MS Sans Serif",
"MS Serif",
"MYRIAD",
"MYRIAD PRO",
"Palatino",
"Palatino Linotype",
"Segoe Print",
"Segoe Script",
"Segoe UI",
"Segoe UI Light",
"Segoe UI Semibold",
"Segoe UI Symbol",
"Tahoma",
"Times",
"Times New Roman",
"Times New Roman PS",
"Trebuchet MS",
"Verdana",
"Wingdings",
"Wingdings 2",
"Wingdings 3",
];
t.fonts.extendedJsFonts &&
(d = d.concat([
"Abadi MT Condensed Light",
"Academy Engraved LET",
"ADOBE CASLON PRO",
"Adobe Garamond",
"ADOBE GARAMOND PRO",
"Agency FB",
"Aharoni",
"Albertus Extra Bold",
"Albertus Medium",
"Algerian",
"Amazone BT",
"American Typewriter",
"American Typewriter Condensed",
"AmerType Md BT",
"Andalus",
"Angsana New",
"AngsanaUPC",
"Antique Olive",
"Aparajita",
"Apple Chancery",
"Apple Color Emoji",
"Apple SD Gothic Neo",
"Arabic Typesetting",
"ARCHER",
"ARNO PRO",
"Arrus BT",
"Aurora Cn BT",
"AvantGarde Bk BT",
"AvantGarde Md BT",
"AVENIR",
"Ayuthaya",
"Bandy",
"Bangla Sangam MN",
"Bank Gothic",
"BankGothic Md BT",
"Baskerville",
"Baskerville Old Face",
"Batang",
"BatangChe",
"Bauer Bodoni",
"Bauhaus 93",
"Bazooka",
"Bell MT",
"Bembo",
"Benguiat Bk BT",
"Berlin Sans FB",
"Berlin Sans FB Demi",
"Bernard MT Condensed",
"BernhardFashion BT",
"BernhardMod BT",
"Big Caslon",
"BinnerD",
"Blackadder ITC",
"BlairMdITC TT",
"Bodoni 72",
"Bodoni 72 Oldstyle",
"Bodoni 72 Smallcaps",
"Bodoni MT",
"Bodoni MT Black",
"Bodoni MT Condensed",
"Bodoni MT Poster Compressed",
"Bookshelf Symbol 7",
"Boulder",
"Bradley Hand",
"Bradley Hand ITC",
"Bremen Bd BT",
"Britannic Bold",
"Broadway",
"Browallia New",
"BrowalliaUPC",
"Brush Script MT",
"Californian FB",
"Calisto MT",
"Calligrapher",
"Candara",
"CaslonOpnface BT",
"Castellar",
"Centaur",
"Cezanne",
"CG Omega",
"CG Times",
"Chalkboard",
"Chalkboard SE",
"Chalkduster",
"Charlesworth",
"Charter Bd BT",
"Charter BT",
"Chaucer",
"ChelthmITC Bk BT",
"Chiller",
"Clarendon",
"Clarendon Condensed",
"CloisterBlack BT",
"Cochin",
"Colonna MT",
"Constantia",
"Cooper Black",
"Copperplate",
"Copperplate Gothic",
"Copperplate Gothic Bold",
"Copperplate Gothic Light",
"CopperplGoth Bd BT",
"Corbel",
"Cordia New",
"CordiaUPC",
"Cornerstone",
"Coronet",
"Cuckoo",
"Curlz MT",
"DaunPenh",
"Dauphin",
"David",
"DB LCD Temp",
"DELICIOUS",
"Denmark",
"DFKai-SB",
"Didot",
"DilleniaUPC",
"DIN",
"DokChampa",
"Dotum",
"DotumChe",
"Ebrima",
"Edwardian Script ITC",
"Elephant",
"English 111 Vivace BT",
"Engravers MT",
"EngraversGothic BT",
"Eras Bold ITC",
"Eras Demi ITC",
"Eras Light ITC",
"Eras Medium ITC",
"EucrosiaUPC",
"Euphemia",
"Euphemia UCAS",
"EUROSTILE",
"Exotc350 Bd BT",
"FangSong",
"Felix Titling",
"Fixedsys",
"FONTIN",
"Footlight MT Light",
"Forte",
"FrankRuehl",
"Fransiscan",
"Freefrm721 Blk BT",
"FreesiaUPC",
"Freestyle Script",
"French Script MT",
"FrnkGothITC Bk BT",
"Fruitger",
"FRUTIGER",
"Futura",
"Futura Bk BT",
"Futura Lt BT",
"Futura Md BT",
"Futura ZBlk BT",
"FuturaBlack BT",
"Gabriola",
"Galliard BT",
"Gautami",
"Geeza Pro",
"Geometr231 BT",
"Geometr231 Hv BT",
"Geometr231 Lt BT",
"GeoSlab 703 Lt BT",
"GeoSlab 703 XBd BT",
"Gigi",
"Gill Sans",
"Gill Sans MT",
"Gill Sans MT Condensed",
"Gill Sans MT Ext Condensed Bold",
"Gill Sans Ultra Bold",
"Gill Sans Ultra Bold Condensed",
"Gisha",
"Gloucester MT Extra Condensed",
"GOTHAM",
"GOTHAM BOLD",
"Goudy Old Style",
"Goudy Stout",
"GoudyHandtooled BT",
"GoudyOLSt BT",
"Gujarati Sangam MN",
"Gulim",
"GulimChe",
"Gungsuh",
"GungsuhChe",
"Gurmukhi MN",
"Haettenschweiler",
"Harlow Solid Italic",
"Harrington",
"Heather",
"Heiti SC",
"Heiti TC",
"HELV",
"Herald",
"High Tower Text",
"Hiragino Kaku Gothic ProN",
"Hiragino Mincho ProN",
"Hoefler Text",
"Humanst 521 Cn BT",
"Humanst521 BT",
"Humanst521 Lt BT",
"Imprint MT Shadow",
"Incised901 Bd BT",
"Incised901 BT",
"Incised901 Lt BT",
"INCONSOLATA",
"Informal Roman",
"Informal011 BT",
"INTERSTATE",
"IrisUPC",
"Iskoola Pota",
"JasmineUPC",
"Jazz LET",
"Jenson",
"Jester",
"Jokerman",
"Juice ITC",
"Kabel Bk BT",
"Kabel Ult BT",
"Kailasa",
"KaiTi",
"Kalinga",
"Kannada Sangam MN",
"Kartika",
"Kaufmann Bd BT",
"Kaufmann BT",
"Khmer UI",
"KodchiangUPC",
"Kokila",
"Korinna BT",
"Kristen ITC",
"Krungthep",
"Kunstler Script",
"Lao UI",
"Latha",
"Leelawadee",
"Letter Gothic",
"Levenim MT",
"LilyUPC",
"Lithograph",
"Lithograph Light",
"Long Island",
"Lydian BT",
"Magneto",
"Maiandra GD",
"Malayalam Sangam MN",
"Malgun Gothic",
"Mangal",
"Marigold",
"Marion",
"Marker Felt",
"Market",
"Marlett",
"Matisse ITC",
"Matura MT Script Capitals",
"Meiryo",
"Meiryo UI",
"Microsoft Himalaya",
"Microsoft JhengHei",
"Microsoft New Tai Lue",
"Microsoft PhagsPa",
"Microsoft Tai Le",
"Microsoft Uighur",
"Microsoft YaHei",
"Microsoft Yi Baiti",
"MingLiU",
"MingLiU_HKSCS",
"MingLiU_HKSCS-ExtB",
"MingLiU-ExtB",
"Minion",
"Minion Pro",
"Miriam",
"Miriam Fixed",
"Mistral",
"Modern",
"Modern No. 20",
"Mona Lisa Solid ITC TT",
"Mongolian Baiti",
"MONO",
"MoolBoran",
"Mrs Eaves",
"MS LineDraw",
"MS Mincho",
"MS PMincho",
"MS Reference Specialty",
"MS UI Gothic",
"MT Extra",
"MUSEO",
"MV Boli",
"Nadeem",
"Narkisim",
"NEVIS",
"News Gothic",
"News GothicMT",
"NewsGoth BT",
"Niagara Engraved",
"Niagara Solid",
"Noteworthy",
"NSimSun",
"Nyala",
"OCR A Extended",
"Old Century",
"Old English Text MT",
"Onyx",
"Onyx BT",
"OPTIMA",
"Oriya Sangam MN",
"OSAKA",
"OzHandicraft BT",
"Palace Script MT",
"Papyrus",
"Parchment",
"Party LET",
"Pegasus",
"Perpetua",
"Perpetua Titling MT",
"PetitaBold",
"Pickwick",
"Plantagenet Cherokee",
"Playbill",
"PMingLiU",
"PMingLiU-ExtB",
"Poor Richard",
"Poster",
"PosterBodoni BT",
"PRINCETOWN LET",
"Pristina",
"PTBarnum BT",
"Pythagoras",
"Raavi",
"Rage Italic",
"Ravie",
"Ribbon131 Bd BT",
"Rockwell",
"Rockwell Condensed",
"Rockwell Extra Bold",
"Rod",
"Roman",
"Sakkal Majalla",
"Santa Fe LET",
"Savoye LET",
"Sceptre",
"Script",
"Script MT Bold",
"SCRIPTINA",
"Serifa",
"Serifa BT",
"Serifa Th BT",
"ShelleyVolante BT",
"Sherwood",
"Shonar Bangla",
"Showcard Gothic",
"Shruti",
"Signboard",
"SILKSCREEN",
"SimHei",
"Simplified Arabic",
"Simplified Arabic Fixed",
"SimSun",
"SimSun-ExtB",
"Sinhala Sangam MN",
"Sketch Rockwell",
"Skia",
"Small Fonts",
"Snap ITC",
"Snell Roundhand",
"Socket",
"Souvenir Lt BT",
"Staccato222 BT",
"Steamer",
"Stencil",
"Storybook",
"Styllo",
"Subway",
"Swis721 BlkEx BT",
"Swiss911 XCm BT",
"Sylfaen",
"Synchro LET",
"System",
"Tamil Sangam MN",
"Technical",
"Teletype",
"Telugu Sangam MN",
"Tempus Sans ITC",
"Terminal",
"Thonburi",
"Traditional Arabic",
"Trajan",
"TRAJAN PRO",
"Tristan",
"Tubular",
"Tunga",
"Tw Cen MT",
"Tw Cen MT Condensed",
"Tw Cen MT Condensed Extra Bold",
"TypoUpright BT",
"Unicorn",
"Univers",
"Univers CE 55 Medium",
"Univers Condensed",
"Utsaah",
"Vagabond",
"Vani",
"Vijaya",
"Viner Hand ITC",
"VisualUI",
"Vivaldi",
"Vladimir Script",
"Vrinda",
"Westminster",
"WHITNEY",
"Wide Latin",
"ZapfEllipt BT",
"ZapfHumnst BT",
"ZapfHumnst Dm BT",
"Zapfino",
"Zurich BlkEx BT",
"Zurich Ex BT",
"ZWAdobeF",
])),
(d = (d = d.concat(t.fonts.userDefinedFonts)).filter(function (
e,
t
) {
return d.indexOf(e) === t;
}));
function f() {
var e = document.createElement("span");
return (
(e.style.position = "absolute"),
(e.style.left = "-9999px"),
(e.style.fontSize = "72px"),
(e.style.fontStyle = "normal"),
(e.style.fontWeight = "normal"),
(e.style.letterSpacing = "normal"),
(e.style.lineBreak = "auto"),
(e.style.lineHeight = "normal"),
(e.style.textTransform = "none"),
(e.style.textAlign = "left"),
(e.style.textDecoration = "none"),
(e.style.textShadow = "none"),
(e.style.whiteSpace = "normal"),
(e.style.wordBreak = "normal"),
(e.style.wordSpacing = "normal"),
(e.innerHTML = "mmmmmmmmmmlli"),
e
);
}
function n(e) {
for (var t = !1, n = 0; n < u.length; n++)
if (
(t =
e[n].offsetWidth !== i[u[n]] || e[n].offsetHeight !== o[u[n]])
)
return t;
return t;
}
var a = document.getElementsByTagName("body")[0],
r = document.createElement("div"),
g = document.createElement("div"),
i = {},
o = {},
l = (function () {
for (var e = [], t = 0, n = u.length; t < n; t++) {
var a = f();
(a.style.fontFamily = u[t]), r.appendChild(a), e.push(a);
}
return e;
})();
a.appendChild(r);
for (var s = 0, c = u.length; s < c; s++)
(i[u[s]] = l[s].offsetWidth), (o[u[s]] = l[s].offsetHeight);
var h = (function () {
for (var e, t, n, a = {}, r = 0, i = d.length; r < i; r++) {
for (var o = [], l = 0, s = u.length; l < s; l++) {
var c =
((e = d[r]),
(t = u[l]),
(n = void 0),
((n = f()).style.fontFamily = "'" + e + "'," + t),
n);
g.appendChild(c), o.push(c);
}
a[d[r]] = o;
}
return a;
})();
a.appendChild(g);
for (var m = [], p = 0, T = d.length; p < T; p++)
n(h[d[p]]) && m.push(d[p]);
a.removeChild(g), a.removeChild(r), e(m);
},
pauseBefore: !0,
},
{
key: "fontsFlash",
getData: function (t, e) {
return _()
? F()
? e.fonts.swfPath
? void G(function (e) {
t(e);
}, e)
: t("missing options.fonts.swfPath")
: t("flash not installed")
: t("swf object not loaded");
},
pauseBefore: !0,
},
{
key: "audio",
getData: function (n, e) {
var t = e.audio;
if (
t.excludeIOS11 &&
navigator.userAgent.match(/OS 11.+Version\/11.+Safari/)
)
return n(e.EXCLUDED);
var a =
window.OfflineAudioContext || window.webkitOfflineAudioContext;
if (null == a) return n(e.NOT_AVAILABLE);
var r = new a(1, 44100, 44100),
i = r.createOscillator();
(i.type = "triangle"), i.frequency.setValueAtTime(1e4, r.currentTime);
var o = r.createDynamicsCompressor();
c(
[
["threshold", -50],
["knee", 40],
["ratio", 12],
["reduction", -20],
["attack", 0],
["release", 0.25],
],
function (e) {
void 0 !== o[e[0]] &&
"function" == typeof o[e[0]].setValueAtTime &&
o[e[0]].setValueAtTime(e[1], r.currentTime);
}
),
i.connect(o),
o.connect(r.destination),
i.start(0),
r.startRendering();
var l = setTimeout(function () {
return (
console.warn(
'Audio fingerprint timed out. Please report bug at https://github.com/fingerprintjs/fingerprintjs with your user agent: "' +
navigator.userAgent +
'".'
),
(r.oncomplete = function () {}),
(r = null),
n("audioTimeout")
);
}, t.timeout);
r.oncomplete = function (e) {
var t;
try {
clearTimeout(l),
(t = e.renderedBuffer
.getChannelData(0)
.slice(4500, 5e3)
.reduce(function (e, t) {
return e + Math.abs(t);
}, 0)
.toString()),
i.disconnect(),
o.disconnect();
} catch (e) {
return void n(e);
}
n(t);
};
},
},
{
key: "enumerateDevices",
getData: function (t, e) {
if (!n()) return t(e.NOT_AVAILABLE);
navigator.mediaDevices
.enumerateDevices()
.then(function (e) {
t(
e.map(function (e) {
return (
"id=" +
e.deviceId +
";gid=" +
e.groupId +
";" +
e.kind +
";" +
e.label
);
})
);
})
.catch(function (e) {
t(e);
});
},
},
];
return (
(a.get = function (n, a) {
(function (e, t) {
if (null == t) return;
var n, a;
for (a in t)
null == (n = t[a]) ||
Object.prototype.hasOwnProperty.call(e, a) ||
(e[a] = n);
})((n = a ? n || {} : ((a = n), {})), e),
(n.components = n.extraComponents.concat(H));
var r = {
data: [],
addPreprocessedComponent: function (e, t) {
"function" == typeof n.preprocessor && (t = n.preprocessor(e, t)),
r.data.push({ key: e, value: t });
},
},
i = -1,
o = function (e) {
if ((i += 1) >= n.components.length) a(r.data);
else {
var t = n.components[i];
if (n.excludes[t.key]) o(!1);
else {
if (!e && t.pauseBefore)
return (
--i,
void setTimeout(function () {
o(!0);
}, 1)
);
try {
t.getData(function (e) {
r.addPreprocessedComponent(t.key, e), o(!1);
}, n);
} catch (e) {
r.addPreprocessedComponent(t.key, String(e)), o(!1);
}
}
}
};
o(!1);
}),
(a.getPromise = function (n) {
return new Promise(function (e, t) {
a.get(n, e);
});
}),
(a.getV18 = function (i, o) {
return (
null == o && ((o = i), (i = {})),
a.get(i, function (e) {
for (var t = [], n = 0; n < e.length; n++) {
var a = e[n];
if (a.value === (i.NOT_AVAILABLE || "not available"))
t.push({ key: a.key, value: "unknown" });
else if ("plugins" === a.key)
t.push({
key: "plugins",
value: s(a.value, function (e) {
var t = s(e[2], function (e) {
return e.join ? e.join("~") : e;
}).join(",");
return [e[0], e[1], t].join("::");
}),
});
else if (
-1 !== ["canvas", "webgl"].indexOf(a.key) &&
Array.isArray(a.value)
)
t.push({ key: a.key, value: a.value.join("~") });
else if (
-1 !==
[
"sessionStorage",
"localStorage",
"indexedDb",
"addBehavior",
"openDatabase",
].indexOf(a.key)
) {
if (!a.value) continue;
t.push({ key: a.key, value: 1 });
} else
a.value
? t.push(
a.value.join ? { key: a.key, value: a.value.join(";") } : a
)
: t.push({ key: a.key, value: a.value });
}
var r = l(
s(t, function (e) {
return e.value;
}).join("~~~"),
31
);
o(r, t);
})
);
}),
(a.x64hash128 = l),
(a.VERSION = "2.1.4"),
a
);
});
/*!
* Socket.IO v3.0.5
* (c) 2014-2021 Guillermo Rauch
* Released under the MIT License.
*/
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(window,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=17)}([function(t,e,n){function r(t){if(t)return function(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}(t)}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o<r.length;o++)if((n=r[o])===e||n.fn===e){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+t],this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),n=this._callbacks["$"+t],r=1;r<arguments.length;r++)e[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,n){var r=n(23),o=n(24),i=String.fromCharCode(30);t.exports={protocol:4,encodePacket:r,encodePayload:function(t,e){var n=t.length,o=new Array(n),s=0;t.forEach((function(t,c){r(t,!1,(function(t){o[c]=t,++s===n&&e(o.join(i))}))}))},decodePacket:o,decodePayload:function(t,e){for(var n=t.split(i),r=[],s=0;s<n.length;s++){var c=o(n[s],e);if(r.push(c),"error"===c.type)break}return r}}},function(t,e){t.exports="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(1),f=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this)).opts=t,e.query=t.query,e.readyState="",e.socket=t.socket,e}return e=a,(n=[{key:"onError",value:function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this}},{key:"open",value:function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}},{key:"close",value:function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}},{key:"send",value:function(t){if("open"!==this.readyState)throw new Error("Transport not open");this.write(t)}},{key:"onOpen",value:function(){this.readyState="open",this.writable=!0,this.emit("open")}},{key:"onData",value:function(t){var e=u.decodePacket(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){this.emit("packet",t)}},{key:"onClose",value:function(){this.readyState="closed",this.emit("close")}}])&&o(e.prototype,n),r&&o(e,r),a}(n(0));t.exports=f},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e,n){return(o="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=a(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function p(t,e,n){return e&&f(t.prototype,e),n&&f(t,n),t}Object.defineProperty(e,"__esModule",{value:!0}),e.Decoder=e.Encoder=e.PacketType=e.protocol=void 0;var l,h=n(0),y=n(29),d=n(15);e.protocol=5,function(t){t[t.CONNECT=0]="CONNECT",t[t.DISCONNECT=1]="DISCONNECT",t[t.EVENT=2]="EVENT",t[t.ACK=3]="ACK",t[t.CONNECT_ERROR=4]="CONNECT_ERROR",t[t.BINARY_EVENT=5]="BINARY_EVENT",t[t.BINARY_ACK=6]="BINARY_ACK"}(l=e.PacketType||(e.PacketType={}));var v=function(){function t(){u(this,t)}return p(t,[{key:"encode",value:function(t){return t.type!==l.EVENT&&t.type!==l.ACK||!d.hasBinary(t)?[this.encodeAsString(t)]:(t.type=t.type===l.EVENT?l.BINARY_EVENT:l.BINARY_ACK,this.encodeAsBinary(t))}},{key:"encodeAsString",value:function(t){var e=""+t.type;return t.type!==l.BINARY_EVENT&&t.type!==l.BINARY_ACK||(e+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(e+=t.nsp+","),null!=t.id&&(e+=t.id),null!=t.data&&(e+=JSON.stringify(t.data)),e}},{key:"encodeAsBinary",value:function(t){var e=y.deconstructPacket(t),n=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(n),r}}]),t}();e.Encoder=v;var b=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(n,t);var e=s(n);function n(){return u(this,n),e.call(this)}return p(n,[{key:"add",value:function(t){var e;if("string"==typeof t)(e=this.decodeString(t)).type===l.BINARY_EVENT||e.type===l.BINARY_ACK?(this.reconstructor=new m(e),0===e.attachments&&o(a(n.prototype),"emit",this).call(this,"decoded",e)):o(a(n.prototype),"emit",this).call(this,"decoded",e);else{if(!d.isBinary(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");(e=this.reconstructor.takeBinaryData(t))&&(this.reconstructor=null,o(a(n.prototype),"emit",this).call(this,"decoded",e))}}},{key:"decodeString",value:function(t){var e=0,r={type:Number(t.charAt(0))};if(void 0===l[r.type])throw new Error("unknown packet type "+r.type);if(r.type===l.BINARY_EVENT||r.type===l.BINARY_ACK){for(var o=e+1;"-"!==t.charAt(++e)&&e!=t.length;);var i=t.substring(o,e);if(i!=Number(i)||"-"!==t.charAt(e))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===t.charAt(e+1)){for(var s=e+1;++e;){if(","===t.charAt(e))break;if(e===t.length)break}r.nsp=t.substring(s,e)}else r.nsp="/";var c=t.charAt(e+1);if(""!==c&&Number(c)==c){for(var a=e+1;++e;){var u=t.charAt(e);if(null==u||Number(u)!=u){--e;break}if(e===t.length)break}r.id=Number(t.substring(a,e+1))}if(t.charAt(++e)){var f=function(t){try{return JSON.parse(t)}catch(t){return!1}}(t.substr(e));if(!n.isPayloadValid(r.type,f))throw new Error("invalid payload");r.data=f}return r}},{key:"destroy",value:function(){this.reconstructor&&this.reconstructor.finishedReconstruction()}}],[{key:"isPayloadValid",value:function(t,e){switch(t){case l.CONNECT:return"object"===r(e);case l.DISCONNECT:return void 0===e;case l.CONNECT_ERROR:return"string"==typeof e||"object"===r(e);case l.EVENT:case l.BINARY_EVENT:return Array.isArray(e)&&"string"==typeof e[0];case l.ACK:case l.BINARY_ACK:return Array.isArray(e)}}}]),n}(h);e.Decoder=b;var m=function(){function t(e){u(this,t),this.packet=e,this.buffers=[],this.reconPack=e}return p(t,[{key:"takeBinaryData",value:function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=y.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}},{key:"finishedReconstruction",value:function(){this.reconPack=null,this.buffers=[]}}]),t}()},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");-1!=o&&-1!=i&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s,c,a=n.exec(t||""),u={},f=14;f--;)u[r[f]]=a[f]||"";return-1!=o&&-1!=i&&(u.source=e,u.host=u.host.substring(1,u.host.length-1).replace(/;/g,":"),u.authority=u.authority.replace("[","").replace("]","").replace(/;/g,":"),u.ipv6uri=!0),u.pathNames=function(t,e){var n=e.replace(/\/{2,9}/g,"/").split("/");"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1);"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1);return n}(0,u.path),u.queryKey=(s=u.query,c={},s.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(c[e]=n)})),c),u}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e,n){return(i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=u(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=u(t);if(e){var o=u(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function u(t){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Manager=void 0;var f=n(19),p=n(14),l=n(0),h=n(5),y=n(16),d=n(30),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(v,t);var e,n,a,l=c(v);function v(t,e){var n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,v),(n=l.call(this)).nsps={},n.subs=[],t&&"object"===r(t)&&(e=t,t=void 0),(e=e||{}).path=e.path||"/socket.io",n.opts=e,n.reconnection(!1!==e.reconnection),n.reconnectionAttempts(e.reconnectionAttempts||1/0),n.reconnectionDelay(e.reconnectionDelay||1e3),n.reconnectionDelayMax(e.reconnectionDelayMax||5e3),n.randomizationFactor(e.randomizationFactor||.5),n.backoff=new d({min:n.reconnectionDelay(),max:n.reconnectionDelayMax(),jitter:n.randomizationFactor()}),n.timeout(null==e.timeout?2e4:e.timeout),n._readyState="closed",n.uri=t;var o=e.parser||h;return n.encoder=new o.Encoder,n.decoder=new o.Decoder,n._autoConnect=!1!==e.autoConnect,n._autoConnect&&n.open(),n}return e=v,(n=[{key:"reconnection",value:function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}},{key:"reconnectionAttempts",value:function(t){return void 0===t?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}},{key:"reconnectionDelay",value:function(t){var e;return void 0===t?this._reconnectionDelay:(this._reconnectionDelay=t,null===(e=this.backoff)||void 0===e||e.setMin(t),this)}},{key:"randomizationFactor",value:function(t){var e;return void 0===t?this._randomizationFactor:(this._randomizationFactor=t,null===(e=this.backoff)||void 0===e||e.setJitter(t),this)}},{key:"reconnectionDelayMax",value:function(t){var e;return void 0===t?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,null===(e=this.backoff)||void 0===e||e.setMax(t),this)}},{key:"timeout",value:function(t){return arguments.length?(this._timeout=t,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(t){var e=this;if(~this._readyState.indexOf("open"))return this;this.engine=f(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var o=y.on(n,"open",(function(){r.onopen(),t&&t()})),s=y.on(n,"error",(function(n){r.cleanup(),r._readyState="closed",i(u(v.prototype),"emit",e).call(e,"error",n),t?t(n):r.maybeReconnectOnOpen()}));if(!1!==this._timeout){var c=this._timeout;0===c&&o();var a=setTimeout((function(){o(),n.close(),n.emit("error",new Error("timeout"))}),c);this.subs.push((function(){clearTimeout(a)}))}return this.subs.push(o),this.subs.push(s),this}},{key:"connect",value:function(t){return this.open(t)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",i(u(v.prototype),"emit",this).call(this,"open");var t=this.engine;this.subs.push(y.on(t,"ping",this.onping.bind(this)),y.on(t,"data",this.ondata.bind(this)),y.on(t,"error",this.onerror.bind(this)),y.on(t,"close",this.onclose.bind(this)),y.on(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){i(u(v.prototype),"emit",this).call(this,"ping")}},{key:"ondata",value:function(t){this.decoder.add(t)}},{key:"ondecoded",value:function(t){i(u(v.prototype),"emit",this).call(this,"packet",t)}},{key:"onerror",value:function(t){i(u(v.prototype),"emit",this).call(this,"error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n||(n=new p.Socket(this,t,e),this.nsps[t]=n),n}},{key:"_destroy",value:function(t){for(var e=0,n=Object.keys(this.nsps);e<n.length;e++){var r=n[e];if(this.nsps[r].active)return}this._close()}},{key:"_packet",value:function(t){t.query&&0===t.type&&(t.nsp+="?"+t.query);for(var e=this.encoder.encode(t),n=0;n<e.length;n++)this.engine.write(e[n],t.options)}},{key:"cleanup",value:function(){this.subs.forEach((function(t){return t()})),this.subs.length=0,this.decoder.destroy()}},{key:"_close",value:function(){this.skipReconnect=!0,this._reconnecting=!1,"opening"===this._readyState&&this.cleanup(),this.backoff.reset(),this._readyState="closed",this.engine&&this.engine.close()}},{key:"disconnect",value:function(){return this._close()}},{key:"onclose",value:function(t){this.cleanup(),this.backoff.reset(),this._readyState="closed",i(u(v.prototype),"emit",this).call(this,"close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()}},{key:"reconnect",value:function(){var t=this;if(this._reconnecting||this.skipReconnect)return this;var e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),i(u(v.prototype),"emit",this).call(this,"reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=setTimeout((function(){e.skipReconnect||(i(u(v.prototype),"emit",t).call(t,"reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((function(n){n?(e._reconnecting=!1,e.reconnect(),i(u(v.prototype),"emit",t).call(t,"reconnect_error",n)):e.onreconnect()})))}),n);this.subs.push((function(){clearTimeout(r)}))}}},{key:"onreconnect",value:function(){var t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),i(u(v.prototype),"emit",this).call(this,"reconnect",t)}}])&&o(e.prototype,n),a&&o(e,a),v}(l);e.Manager=v},function(t,e,n){var r=n(9),o=n(22),i=n(26),s=n(27);e.polling=function(t){var e=!1,n=!1,s=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,a=location.port;a||(a=c?443:80),e=t.hostname!==location.hostname||a!==t.port,n=t.secure!==c}if(t.xdomain=e,t.xscheme=n,"open"in new r(t)&&!t.forceJSONP)return new o(t);if(!s)throw new Error("JSONP disabled");return new i(t)},e.websocket=s},function(t,e,n){var r=n(21),o=n(2);t.exports=function(t){var e=t.xdomain,n=t.xscheme,i=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!n&&i)return new XDomainRequest}catch(t){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=u(t);if(e){var o=u(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function u(t){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var f=n(3),p=n(4),l=n(1),h=n(12),y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(u,t);var e,n,r,a=c(u);function u(){return o(this,u),a.apply(this,arguments)}return e=u,(n=[{key:"doOpen",value:function(){this.poll()}},{key:"pause",value:function(t){var e=this;function n(){e.readyState="paused",t()}if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(r++,this.once("pollComplete",(function(){--r||n()}))),this.writable||(r++,this.once("drain",(function(){--r||n()})))}else n()}},{key:"poll",value:function(){this.polling=!0,this.doPoll(),this.emit("poll")}},{key:"onData",value:function(t){var e=this;l.decodePayload(t,this.socket.binaryType).forEach((function(t,n,r){if("opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type)return e.onClose(),!1;e.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())}},{key:"doClose",value:function(){var t=this;function e(){t.write([{type:"close"}])}"open"===this.readyState?e():this.once("open",e)}},{key:"write",value:function(t){var e=this;this.writable=!1,l.encodePayload(t,(function(t){e.doWrite(t,(function(){e.writable=!0,e.emit("drain")}))}))}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"https":"http",n="";return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=h()),this.supportsBinary||t.sid||(t.b64=1),t=p.encode(t),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),t.length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}},{key:"name",get:function(){return"polling"}}])&&i(e.prototype,n),r&&i(e,r),u}(f);t.exports=y},function(t,e){var n=Object.create(null);n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";var r=Object.create(null);Object.keys(n).forEach((function(t){r[n[t]]=t}));t.exports={PACKET_TYPES:n,PACKET_TYPES_REVERSE:r,ERROR_PACKET:{type:"error",data:"parser error"}}},function(t,e,n){"use strict";var r,o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),i={},s=0,c=0;function a(t){var e="";do{e=o[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function u(){var t=a(+new Date);return t!==r?(s=0,r=t):t+"."+a(s++)}for(;c<64;c++)i[o[c]]=c;u.encode=a,u.decode=function(t){var e=0;for(c=0;c<t.length;c++)e=64*e+i[t.charAt(c)];return e},t.exports=u},function(t,e){t.exports.pick=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return n.reduce((function(e,n){return e[n]=t[n],e}),{})}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){var n;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,c=!0,a=!1;return{s:function(){n=t[Symbol.iterator]()},n:function(){var t=n.next();return c=t.done,t},e:function(t){a=!0,s=t},f:function(){try{c||null==n.return||n.return()}finally{if(a)throw s}}}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=p(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function a(t,e){return(a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function u(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=p(t);if(e){var o=p(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return f(this,n)}}function f(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Socket=void 0;var l=n(5),h=n(0),y=n(16),d=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(f,t);var e,n,r,i=u(f);function f(t,e,n){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,f),(r=i.call(this)).receiveBuffer=[],r.sendBuffer=[],r.ids=0,r.acks={},r.flags={},r.io=t,r.nsp=e,r.ids=0,r.acks={},r.receiveBuffer=[],r.sendBuffer=[],r.connected=!1,r.disconnected=!0,r.flags={},n&&n.auth&&(r.auth=n.auth),r.io._autoConnect&&r.open(),r}return e=f,(n=[{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[y.on(t,"open",this.onopen.bind(this)),y.on(t,"packet",this.onpacket.bind(this)),y.on(t,"error",this.onerror.bind(this)),y.on(t,"close",this.onclose.bind(this))]}}},{key:"connect",value:function(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}},{key:"open",value:function(){return this.connect()}},{key:"send",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.unshift("message"),this.emit.apply(this,e),this}},{key:"emit",value:function(t){if(d.hasOwnProperty(t))throw new Error('"'+t+'" is a reserved event name');for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];n.unshift(t);var o={type:l.PacketType.EVENT,data:n,options:{}};o.options.compress=!1!==this.flags.compress,"function"==typeof n[n.length-1]&&(this.acks[this.ids]=n.pop(),o.id=this.ids++);var i=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable,s=this.flags.volatile&&(!i||!this.connected);return s||(this.connected?this.packet(o):this.sendBuffer.push(o)),this.flags={},this}},{key:"packet",value:function(t){t.nsp=this.nsp,this.io._packet(t)}},{key:"onopen",value:function(){var t=this;"function"==typeof this.auth?this.auth((function(e){t.packet({type:l.PacketType.CONNECT,data:e})})):this.packet({type:l.PacketType.CONNECT,data:this.auth})}},{key:"onerror",value:function(t){this.connected||c(p(f.prototype),"emit",this).call(this,"connect_error",t)}},{key:"onclose",value:function(t){this.connected=!1,this.disconnected=!0,delete this.id,c(p(f.prototype),"emit",this).call(this,"disconnect",t)}},{key:"onpacket",value:function(t){if(t.nsp===this.nsp)switch(t.type){case l.PacketType.CONNECT:if(t.data&&t.data.sid){var e=t.data.sid;this.onconnect(e)}else c(p(f.prototype),"emit",this).call(this,"connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case l.PacketType.EVENT:case l.PacketType.BINARY_EVENT:this.onevent(t);break;case l.PacketType.ACK:case l.PacketType.BINARY_ACK:this.onack(t);break;case l.PacketType.DISCONNECT:this.ondisconnect();break;case l.PacketType.CONNECT_ERROR:var n=new Error(t.data.message);n.data=t.data.data,c(p(f.prototype),"emit",this).call(this,"connect_error",n)}}},{key:"onevent",value:function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}},{key:"emitEvent",value:function(t){if(this._anyListeners&&this._anyListeners.length){var e,n=o(this._anyListeners.slice());try{for(n.s();!(e=n.n()).done;)e.value.apply(this,t)}catch(t){n.e(t)}finally{n.f()}}c(p(f.prototype),"emit",this).apply(this,t)}},{key:"ack",value:function(t){var e=this,n=!1;return function(){if(!n){n=!0;for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];e.packet({type:l.PacketType.ACK,id:t,data:o})}}}},{key:"onack",value:function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])}},{key:"onconnect",value:function(t){this.id=t,this.connected=!0,this.disconnected=!1,c(p(f.prototype),"emit",this).call(this,"connect"),this.emitBuffered()}},{key:"emitBuffered",value:function(){var t=this;this.receiveBuffer.forEach((function(e){return t.emitEvent(e)})),this.receiveBuffer=[],this.sendBuffer.forEach((function(e){return t.packet(e)})),this.sendBuffer=[]}},{key:"ondisconnect",value:function(){this.destroy(),this.onclose("io server disconnect")}},{key:"destroy",value:function(){this.subs&&(this.subs.forEach((function(t){return t()})),this.subs=void 0),this.io._destroy(this)}},{key:"disconnect",value:function(){return this.connected&&this.packet({type:l.PacketType.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}},{key:"close",value:function(){return this.disconnect()}},{key:"compress",value:function(t){return this.flags.compress=t,this}},{key:"onAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}},{key:"prependAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}},{key:"offAny",value:function(t){if(!this._anyListeners)return this;if(t){for(var e=this._anyListeners,n=0;n<e.length;n++)if(t===e[n])return e.splice(n,1),this}else this._anyListeners=[];return this}},{key:"listenersAny",value:function(){return this._anyListeners||[]}},{key:"active",get:function(){return!!this.subs}},{key:"volatile",get:function(){return this.flags.volatile=!0,this}}])&&s(e.prototype,n),r&&s(e,r),f}(h);e.Socket=v},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.hasBinary=e.isBinary=void 0;var o="function"==typeof ArrayBuffer,i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),c="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);function a(t){return o&&(t instanceof ArrayBuffer||function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}(t))||s&&t instanceof Blob||c&&t instanceof File}e.isBinary=a,e.hasBinary=function t(e,n){if(!e||"object"!==r(e))return!1;if(Array.isArray(e)){for(var o=0,i=e.length;o<i;o++)if(t(e[o]))return!0;return!1}if(a(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return t(e.toJSON(),!0);for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&t(e[s]))return!0;return!1}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.on=void 0,e.on=function(t,e,n){return t.on(e,n),function(){t.off(e,n)}}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Socket=e.io=e.Manager=e.protocol=void 0;var o=n(18),i=n(7),s=n(14);Object.defineProperty(e,"Socket",{enumerable:!0,get:function(){return s.Socket}}),t.exports=e=a;var c=e.managers={};function a(t,e){"object"===r(t)&&(e=t,t=void 0),e=e||{};var n,s=o.url(t),a=s.source,u=s.id,f=s.path,p=c[u]&&f in c[u].nsps;return e.forceNew||e["force new connection"]||!1===e.multiplex||p?n=new i.Manager(a,e):(c[u]||(c[u]=new i.Manager(a,e)),n=c[u]),s.query&&!e.query&&(e.query=s.query),n.socket(s.path,e)}e.io=a;var u=n(5);Object.defineProperty(e,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.connect=a;var f=n(7);Object.defineProperty(e,"Manager",{enumerable:!0,get:function(){return f.Manager}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.url=void 0;var r=n(6);e.url=function(t,e){var n=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==e?e.protocol+"//"+t:"https://"+t),n=r(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";var o=-1!==n.host.indexOf(":")?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+o+":"+n.port,n.href=n.protocol+"://"+o+(e&&e.port===n.port?"":":"+n.port),n}},function(t,e,n){var r=n(20);t.exports=function(t,e){return new r(t,e)},t.exports.Socket=r,t.exports.protocol=r.protocol,t.exports.Transport=n(3),t.exports.transports=n(8),t.exports.parser=n(1)},function(t,e,n){function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e){return(c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(t,e){return!e||"object"!==o(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var p=n(8),l=n(0),h=n(1),y=n(6),d=n(4),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(l,t);var e,n,u,f=a(l);function l(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i(this,l),e=f.call(this),t&&"object"===o(t)&&(n=t,t=null),t?(t=y(t),n.hostname=t.host,n.secure="https"===t.protocol||"wss"===t.protocol,n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=y(n.host).host),e.secure=null!=n.secure?n.secure:"undefined"!=typeof location&&"https:"===location.protocol,n.hostname&&!n.port&&(n.port=e.secure?"443":"80"),e.hostname=n.hostname||("undefined"!=typeof location?location.hostname:"localhost"),e.port=n.port||("undefined"!=typeof location&&location.port?location.port:e.secure?443:80),e.transports=n.transports||["polling","websocket"],e.readyState="",e.writeBuffer=[],e.prevBufferLen=0,e.opts=r({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,jsonp:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{}},n),e.opts.path=e.opts.path.replace(/\/$/,"")+"/","string"==typeof e.opts.query&&(e.opts.query=d.decode(e.opts.query)),e.id=null,e.upgrades=null,e.pingInterval=null,e.pingTimeout=null,e.pingTimeoutTimer=null,e.open(),e}return e=l,(n=[{key:"createTransport",value:function(t){var e=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(this.opts.query);e.EIO=h.protocol,e.transport=t,this.id&&(e.sid=this.id);var n=r({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new p[t](n)}},{key:"open",value:function(){var t;if(this.opts.rememberUpgrade&&l.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout((function(){e.emit("error","No transports available")}),0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}},{key:"setTransport",value:function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",(function(){e.onDrain()})).on("packet",(function(t){e.onPacket(t)})).on("error",(function(t){e.onError(t)})).on("close",(function(){e.onClose("transport close")}))}},{key:"probe",value:function(t){var e=this.createTransport(t,{probe:1}),n=!1,r=this;function o(){if(r.onlyBinaryUpgrades){var t=!this.supportsBinary&&r.transport.supportsBinary;n=n||t}n||(e.send([{type:"ping",data:"probe"}]),e.once("packet",(function(t){if(!n)if("pong"===t.type&&"probe"===t.data){if(r.upgrading=!0,r.emit("upgrading",e),!e)return;l.priorWebsocketSuccess="websocket"===e.name,r.transport.pause((function(){n||"closed"!==r.readyState&&(f(),r.setTransport(e),e.send([{type:"upgrade"}]),r.emit("upgrade",e),e=null,r.upgrading=!1,r.flush())}))}else{var o=new Error("probe error");o.transport=e.name,r.emit("upgradeError",o)}})))}function i(){n||(n=!0,f(),e.close(),e=null)}function s(t){var n=new Error("probe error: "+t);n.transport=e.name,i(),r.emit("upgradeError",n)}function c(){s("transport closed")}function a(){s("socket closed")}function u(t){e&&t.name!==e.name&&i()}function f(){e.removeListener("open",o),e.removeListener("error",s),e.removeListener("close",c),r.removeListener("close",a),r.removeListener("upgrading",u)}l.priorWebsocketSuccess=!1,e.once("open",o),e.once("error",s),e.once("close",c),this.once("close",a),this.once("upgrading",u),e.open()}},{key:"onOpen",value:function(){if(this.readyState="open",l.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},{key:"onPacket",value:function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}}},{key:"onHandshake",value:function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}},{key:"resetPingTimeout",value:function(){var t=this;clearTimeout(this.pingTimeoutTimer),this.pingTimeoutTimer=setTimeout((function(){t.onClose("ping timeout")}),this.pingInterval+this.pingTimeout)}},{key:"onDrain",value:function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()}},{key:"flush",value:function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))}},{key:"write",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"send",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"sendPacket",value:function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){(n=n||{}).compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}}},{key:"close",value:function(){var t=this;function e(){t.onClose("forced close"),t.transport.close()}function n(){t.removeListener("upgrade",n),t.removeListener("upgradeError",n),e()}function r(){t.once("upgrade",n),t.once("upgradeError",n)}return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){this.upgrading?r():e()})):this.upgrading?r():e()),this}},{key:"onError",value:function(t){l.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)}},{key:"onClose",value:function(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(t){for(var e=[],n=0,r=t.length;n<r;n++)~this.transports.indexOf(t[n])&&e.push(t[n]);return e}}])&&s(e.prototype,n),u&&s(e,u),l}(l);v.priorWebsocketSuccess=!1,v.protocol=h.protocol,t.exports=v},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function f(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l(t);if(e){var o=l(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return p(this,n)}}function p(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function l(t){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var h=n(9),y=n(10),d=n(0),v=n(13).pick,b=n(2);function m(){}var g=null!=new h({xdomain:!1}).responseType,k=function(t){a(n,t);var e=f(n);function n(t){var r;if(i(this,n),r=e.call(this,t),"undefined"!=typeof location){var o="https:"===location.protocol,s=location.port;s||(s=o?443:80),r.xd="undefined"!=typeof location&&t.hostname!==location.hostname||s!==t.port,r.xs=t.secure!==o}var c=t&&t.forceBase64;return r.supportsBinary=g&&!c,r}return c(n,[{key:"request",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o(t,{xd:this.xd,xs:this.xs},this.opts),new w(this.uri(),t)}},{key:"doWrite",value:function(t,e){var n=this.request({method:"POST",data:t}),r=this;n.on("success",e),n.on("error",(function(t){r.onError("xhr post error",t)}))}},{key:"doPoll",value:function(){var t=this.request(),e=this;t.on("data",(function(t){e.onData(t)})),t.on("error",(function(t){e.onError("xhr poll error",t)})),this.pollXhr=t}}]),n}(y),w=function(t){a(n,t);var e=f(n);function n(t,r){var o;return i(this,n),(o=e.call(this)).opts=r,o.method=r.method||"GET",o.uri=t,o.async=!1!==r.async,o.data=void 0!==r.data?r.data:null,o.create(),o}return c(n,[{key:"create",value:function(){var t=v(this.opts,"agent","enablesXDR","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;var e=this.xhr=new h(t),r=this;try{e.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var o in e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(o)&&e.setRequestHeader(o,this.opts.extraHeaders[o])}catch(t){}if("POST"===this.method)try{e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(e.timeout=this.opts.requestTimeout),this.hasXDR()?(e.onload=function(){r.onLoad()},e.onerror=function(){r.onError(e.responseText)}):e.onreadystatechange=function(){4===e.readyState&&(200===e.status||1223===e.status?r.onLoad():setTimeout((function(){r.onError("number"==typeof e.status?e.status:0)}),0))},e.send(this.data)}catch(t){return void setTimeout((function(){r.onError(t)}),0)}"undefined"!=typeof document&&(this.index=n.requestsCount++,n.requests[this.index]=this)}},{key:"onSuccess",value:function(){this.emit("success"),this.cleanup()}},{key:"onData",value:function(t){this.emit("data",t),this.onSuccess()}},{key:"onError",value:function(t){this.emit("error",t),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=m:this.xhr.onreadystatechange=m,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete n.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&this.onData(t)}},{key:"hasXDR",value:function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR}},{key:"abort",value:function(){this.cleanup()}}]),n}(d);if(w.requestsCount=0,w.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",_);else if("function"==typeof addEventListener){addEventListener("onpagehide"in b?"pagehide":"unload",_,!1)}function _(){for(var t in w.requests)w.requests.hasOwnProperty(t)&&w.requests[t].abort()}t.exports=k,t.exports.Request=w},function(t,e,n){var r=n(11).PACKET_TYPES,o="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),i="function"==typeof ArrayBuffer,s=function(t,e){var n=new FileReader;return n.onload=function(){var t=n.result.split(",")[1];e("b"+t)},n.readAsDataURL(t)};t.exports=function(t,e,n){var c,a=t.type,u=t.data;return o&&u instanceof Blob?e?n(u):s(u,n):i&&(u instanceof ArrayBuffer||(c=u,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(c):c&&c.buffer instanceof ArrayBuffer))?e?n(u instanceof ArrayBuffer?u:u.buffer):s(new Blob([u]),n):n(r[a]+(u||""))}},function(t,e,n){var r,o=n(11),i=o.PACKET_TYPES_REVERSE,s=o.ERROR_PACKET;"function"==typeof ArrayBuffer&&(r=n(25));var c=function(t,e){if(r){var n=r.decode(t);return a(n,e)}return{base64:!0,data:t}},a=function(t,e){switch(e){case"blob":return t instanceof ArrayBuffer?new Blob([t]):t;case"arraybuffer":default:return t}};t.exports=function(t,e){if("string"!=typeof t)return{type:"message",data:a(t,e)};var n=t.charAt(0);return"b"===n?{type:"message",data:c(t.substring(1),e)}:i[n]?t.length>1?{type:i[n],data:t.substring(1)}:{type:i[n]}:s}},function(t,e){!function(t){"use strict";e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3==2?i=i.substring(0,i.length-1)+"=":o%3==1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var n,r,o,i,s,c=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(c--,"="===e[e.length-2]&&c--);var f=new ArrayBuffer(c),p=new Uint8Array(f);for(n=0;n<a;n+=4)r=t.indexOf(e[n]),o=t.indexOf(e[n+1]),i=t.indexOf(e[n+2]),s=t.indexOf(e[n+3]),p[u++]=r<<2|o>>4,p[u++]=(15&o)<<4|i>>2,p[u++]=(3&i)<<6|63&s;return f}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e,n){return(i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?u(t):e}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var p,l=n(10),h=n(2),y=/\n/g,d=/\\n/g;function v(){}var b=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(l,t);var e,n,r,a=c(l);function l(t){var e;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,l),(e=a.call(this,t)).query=e.query||{},p||(p=h.___eio=h.___eio||[]),e.index=p.length;var n=u(e);return p.push((function(t){n.onData(t)})),e.query.j=e.index,"function"==typeof addEventListener&&addEventListener("beforeunload",(function(){n.script&&(n.script.onerror=v)}),!1),e}return e=l,(n=[{key:"doClose",value:function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i(f(l.prototype),"doClose",this).call(this)}},{key:"doPoll",value:function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e,"undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent)&&setTimeout((function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)}),100)}},{key:"doWrite",value:function(t,e){var n,r=this;if(!this.form){var o=document.createElement("form"),i=document.createElement("textarea"),s=this.iframeId="eio_iframe_"+this.index;o.className="socketio",o.style.position="absolute",o.style.top="-1000px",o.style.left="-1000px",o.target=s,o.method="POST",o.setAttribute("accept-charset","utf-8"),i.name="d",o.appendChild(i),document.body.appendChild(o),this.form=o,this.area=i}function c(){a(),e()}function a(){if(r.iframe)try{r.form.removeChild(r.iframe)}catch(t){r.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+r.iframeId+'">';n=document.createElement(t)}catch(t){(n=document.createElement("iframe")).name=r.iframeId,n.src="javascript:0"}n.id=r.iframeId,r.form.appendChild(n),r.iframe=n}this.form.action=this.uri(),a(),t=t.replace(d,"\\\n"),this.area.value=t.replace(y,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===r.iframe.readyState&&c()}:this.iframe.onload=c}},{key:"supportsBinary",get:function(){return!1}}])&&o(e.prototype,n),r&&o(e,r),l}(l);t.exports=b},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(3),f=n(1),p=n(4),l=n(12),h=n(13).pick,y=n(28),d=y.WebSocket,v=y.usingBrowserWebSocket,b=y.defaultBinaryType,m="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),g=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this,t)).supportsBinary=!t.forceBase64,e}return e=a,(n=[{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=m?{}:h(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=v&&!m?e?new d(t,e):new d(t):new d(t,e,n)}catch(t){return this.emit("error",t)}this.ws.binaryType=this.socket.binaryType||b,this.addEventListeners()}}},{key:"addEventListeners",value:function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}}},{key:"write",value:function(t){var e=this;this.writable=!1;for(var n=t.length,r=0,o=n;r<o;r++)!function(t){f.encodePacket(t,e.supportsBinary,(function(r){var o={};v||(t.options&&(o.compress=t.options.compress),e.opts.perMessageDeflate&&("string"==typeof r?Buffer.byteLength(r):r.length)<e.opts.perMessageDeflate.threshold&&(o.compress=!1));try{v?e.ws.send(r):e.ws.send(r,o)}catch(t){}--n||(e.emit("flush"),setTimeout((function(){e.writable=!0,e.emit("drain")}),0))}))}(t[r])}},{key:"onClose",value:function(){u.prototype.onClose.call(this)}},{key:"doClose",value:function(){void 0!==this.ws&&this.ws.close()}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"wss":"ws",n="";return this.opts.port&&("wss"===e&&443!==Number(this.opts.port)||"ws"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),this.opts.timestampRequests&&(t[this.opts.timestampParam]=l()),this.supportsBinary||(t.b64=1),(t=p.encode(t)).length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}},{key:"check",value:function(){return!(!d||"__initialize"in d&&this.name===a.prototype.name)}},{key:"name",get:function(){return"websocket"}}])&&o(e.prototype,n),r&&o(e,r),a}(u);t.exports=g},function(t,e,n){var r=n(2);t.exports={WebSocket:r.WebSocket||r.MozWebSocket,usingBrowserWebSocket:!0,defaultBinaryType:"arraybuffer"}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.reconstructPacket=e.deconstructPacket=void 0;var o=n(15);e.deconstructPacket=function(t){var e=[],n=t.data,i=t;return i.data=function t(e,n){if(!e)return e;if(o.isBinary(e)){var i={_placeholder:!0,num:n.length};return n.push(e),i}if(Array.isArray(e)){for(var s=new Array(e.length),c=0;c<e.length;c++)s[c]=t(e[c],n);return s}if("object"===r(e)&&!(e instanceof Date)){var a={};for(var u in e)e.hasOwnProperty(u)&&(a[u]=t(e[u],n));return a}return e}(n,e),i.attachments=e.length,{packet:i,buffers:e}},e.reconstructPacket=function(t,e){return t.data=function t(e,n){if(!e)return e;if(e&&e._placeholder)return n[e.num];if(Array.isArray(e))for(var o=0;o<e.length;o++)e[o]=t(e[o],n);else if("object"===r(e))for(var i in e)e.hasOwnProperty(i)&&(e[i]=t(e[i],n));return e}(t.data,e),t.attachments=void 0,t}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])}));
//# sourceMappingURL=socket.io.min.js.map
(() => {
function e(e, t, n, r) {
Object.defineProperty(e, t, {
get: n,
set: r,
enumerable: !0,
configurable: !0,
});
}
function t(e) {
return e && e.__esModule ? e.default : e;
}
class n {
constructor() {
(this.chunkedMTU = 16300),
(this._dataCount = 1),
(this.chunk = (e) => {
let t = [],
n = e.byteLength,
r = Math.ceil(n / this.chunkedMTU),
i = 0,
o = 0;
for (; o < n; ) {
let s = Math.min(n, o + this.chunkedMTU),
a = e.slice(o, s),
c = { __peerData: this._dataCount, n: i, data: a, total: r };
t.push(c), (o = s), i++;
}
return this._dataCount++, t;
});
}
}
class r {
append_buffer(e) {
this.flush(), this._parts.push(e);
}
append(e) {
this._pieces.push(e);
}
flush() {
if (this._pieces.length > 0) {
let e = new Uint8Array(this._pieces);
this._parts.push(e), (this._pieces = []);
}
}
toArrayBuffer() {
let e = [];
for (let t of this._parts) e.push(t);
return (function (e) {
let t = 0;
for (let n of e) t += n.byteLength;
let n = new Uint8Array(t),
r = 0;
for (let t of e) {
let e = new Uint8Array(t.buffer, t.byteOffset, t.byteLength);
n.set(e, r), (r += t.byteLength);
}
return n;
})(e).buffer;
}
constructor() {
(this.encoder = new TextEncoder()),
(this._pieces = []),
(this._parts = []);
}
}
function i(e) {
return new s(e).unpack();
}
function o(e) {
let t = new a(),
n = t.pack(e);
return n instanceof Promise ? n.then(() => t.getBuffer()) : t.getBuffer();
}
class s {
unpack() {
let e;
let t = this.unpack_uint8();
if (t < 128) return t;
if ((224 ^ t) < 32) return (224 ^ t) - 32;
if ((e = 160 ^ t) <= 15) return this.unpack_raw(e);
if ((e = 176 ^ t) <= 15) return this.unpack_string(e);
if ((e = 144 ^ t) <= 15) return this.unpack_array(e);
if ((e = 128 ^ t) <= 15) return this.unpack_map(e);
switch (t) {
case 192:
return null;
case 193:
case 212:
case 213:
case 214:
case 215:
return;
case 194:
return !1;
case 195:
return !0;
case 202:
return this.unpack_float();
case 203:
return this.unpack_double();
case 204:
return this.unpack_uint8();
case 205:
return this.unpack_uint16();
case 206:
return this.unpack_uint32();
case 207:
return this.unpack_uint64();
case 208:
return this.unpack_int8();
case 209:
return this.unpack_int16();
case 210:
return this.unpack_int32();
case 211:
return this.unpack_int64();
case 216:
return (e = this.unpack_uint16()), this.unpack_string(e);
case 217:
return (e = this.unpack_uint32()), this.unpack_string(e);
case 218:
return (e = this.unpack_uint16()), this.unpack_raw(e);
case 219:
return (e = this.unpack_uint32()), this.unpack_raw(e);
case 220:
return (e = this.unpack_uint16()), this.unpack_array(e);
case 221:
return (e = this.unpack_uint32()), this.unpack_array(e);
case 222:
return (e = this.unpack_uint16()), this.unpack_map(e);
case 223:
return (e = this.unpack_uint32()), this.unpack_map(e);
}
}
unpack_uint8() {
let e = 255 & this.dataView[this.index];
return this.index++, e;
}
unpack_uint16() {
let e = this.read(2),
t = (255 & e[0]) * 256 + (255 & e[1]);
return (this.index += 2), t;
}
unpack_uint32() {
let e = this.read(4),
t = ((256 * e[0] + e[1]) * 256 + e[2]) * 256 + e[3];
return (this.index += 4), t;
}
unpack_uint64() {
let e = this.read(8),
t =
((((((256 * e[0] + e[1]) * 256 + e[2]) * 256 + e[3]) * 256 + e[4]) *
256 +
e[5]) *
256 +
e[6]) *
256 +
e[7];
return (this.index += 8), t;
}
unpack_int8() {
let e = this.unpack_uint8();
return e < 128 ? e : e - 256;
}
unpack_int16() {
let e = this.unpack_uint16();
return e < 32768 ? e : e - 65536;
}
unpack_int32() {
let e = this.unpack_uint32();
return e < 2147483648 ? e : e - 4294967296;
}
unpack_int64() {
let e = this.unpack_uint64();
return e < 0x7fffffffffffffff ? e : e - 18446744073709552e3;
}
unpack_raw(e) {
if (this.length < this.index + e)
throw Error(
`BinaryPackFailure: index is out of range ${this.index} ${e} ${this.length}`
);
let t = this.dataBuffer.slice(this.index, this.index + e);
return (this.index += e), t;
}
unpack_string(e) {
let t, n;
let r = this.read(e),
i = 0,
o = "";
for (; i < e; )
(t = r[i]) < 160
? ((n = t), i++)
: (192 ^ t) < 32
? ((n = ((31 & t) << 6) | (63 & r[i + 1])), (i += 2))
: (224 ^ t) < 16
? ((n = ((15 & t) << 12) | ((63 & r[i + 1]) << 6) | (63 & r[i + 2])),
(i += 3))
: ((n =
((7 & t) << 18) |
((63 & r[i + 1]) << 12) |
((63 & r[i + 2]) << 6) |
(63 & r[i + 3])),
(i += 4)),
(o += String.fromCodePoint(n));
return (this.index += e), o;
}
unpack_array(e) {
let t = Array(e);
for (let n = 0; n < e; n++) t[n] = this.unpack();
return t;
}
unpack_map(e) {
let t = {};
for (let n = 0; n < e; n++) t[this.unpack()] = this.unpack();
return t;
}
unpack_float() {
let e = this.unpack_uint32();
return (
(0 == e >> 31 ? 1 : -1) *
((8388607 & e) | 8388608) *
2 ** (((e >> 23) & 255) - 127 - 23)
);
}
unpack_double() {
let e = this.unpack_uint32(),
t = this.unpack_uint32(),
n = ((e >> 20) & 2047) - 1023;
return (
(0 == e >> 31 ? 1 : -1) *
(((1048575 & e) | 1048576) * 2 ** (n - 20) + t * 2 ** (n - 52))
);
}
read(e) {
let t = this.index;
if (t + e <= this.length) return this.dataView.subarray(t, t + e);
throw Error("BinaryPackFailure: read index out of range");
}
constructor(e) {
(this.index = 0),
(this.dataBuffer = e),
(this.dataView = new Uint8Array(this.dataBuffer)),
(this.length = this.dataBuffer.byteLength);
}
}
class a {
getBuffer() {
return this._bufferBuilder.toArrayBuffer();
}
pack(e) {
if ("string" == typeof e) this.pack_string(e);
else if ("number" == typeof e)
Math.floor(e) === e ? this.pack_integer(e) : this.pack_double(e);
else if ("boolean" == typeof e)
!0 === e
? this._bufferBuilder.append(195)
: !1 === e && this._bufferBuilder.append(194);
else if (void 0 === e) this._bufferBuilder.append(192);
else if ("object" == typeof e) {
if (null === e) this._bufferBuilder.append(192);
else {
let t = e.constructor;
if (e instanceof Array) {
let t = this.pack_array(e);
if (t instanceof Promise)
return t.then(() => this._bufferBuilder.flush());
} else if (e instanceof ArrayBuffer) this.pack_bin(new Uint8Array(e));
else if ("BYTES_PER_ELEMENT" in e)
this.pack_bin(new Uint8Array(e.buffer, e.byteOffset, e.byteLength));
else if (e instanceof Date) this.pack_string(e.toString());
else if (e instanceof Blob)
return e.arrayBuffer().then((e) => {
this.pack_bin(new Uint8Array(e)), this._bufferBuilder.flush();
});
else if (t == Object || t.toString().startsWith("class")) {
let t = this.pack_object(e);
if (t instanceof Promise)
return t.then(() => this._bufferBuilder.flush());
} else throw Error(`Type "${t.toString()}" not yet supported`);
}
} else throw Error(`Type "${typeof e}" not yet supported`);
this._bufferBuilder.flush();
}
pack_bin(e) {
let t = e.length;
if (t <= 15) this.pack_uint8(160 + t);
else if (t <= 65535) this._bufferBuilder.append(218), this.pack_uint16(t);
else if (t <= 4294967295)
this._bufferBuilder.append(219), this.pack_uint32(t);
else throw Error("Invalid length");
this._bufferBuilder.append_buffer(e);
}
pack_string(e) {
let t = this._textEncoder.encode(e),
n = t.length;
if (n <= 15) this.pack_uint8(176 + n);
else if (n <= 65535) this._bufferBuilder.append(216), this.pack_uint16(n);
else if (n <= 4294967295)
this._bufferBuilder.append(217), this.pack_uint32(n);
else throw Error("Invalid length");
this._bufferBuilder.append_buffer(t);
}
pack_array(e) {
let t = e.length;
if (t <= 15) this.pack_uint8(144 + t);
else if (t <= 65535) this._bufferBuilder.append(220), this.pack_uint16(t);
else if (t <= 4294967295)
this._bufferBuilder.append(221), this.pack_uint32(t);
else throw Error("Invalid length");
let n = (r) => {
if (r < t) {
let t = this.pack(e[r]);
return t instanceof Promise ? t.then(() => n(r + 1)) : n(r + 1);
}
};
return n(0);
}
pack_integer(e) {
if (e >= -32 && e <= 127) this._bufferBuilder.append(255 & e);
else if (e >= 0 && e <= 255)
this._bufferBuilder.append(204), this.pack_uint8(e);
else if (e >= -128 && e <= 127)
this._bufferBuilder.append(208), this.pack_int8(e);
else if (e >= 0 && e <= 65535)
this._bufferBuilder.append(205), this.pack_uint16(e);
else if (e >= -32768 && e <= 32767)
this._bufferBuilder.append(209), this.pack_int16(e);
else if (e >= 0 && e <= 4294967295)
this._bufferBuilder.append(206), this.pack_uint32(e);
else if (e >= -2147483648 && e <= 2147483647)
this._bufferBuilder.append(210), this.pack_int32(e);
else if (e >= -0x8000000000000000 && e <= 0x7fffffffffffffff)
this._bufferBuilder.append(211), this.pack_int64(e);
else if (e >= 0 && e <= 18446744073709552e3)
this._bufferBuilder.append(207), this.pack_uint64(e);
else throw Error("Invalid integer");
}
pack_double(e) {
let t = 0;
e < 0 && ((t = 1), (e = -e));
let n = Math.floor(Math.log(e) / Math.LN2),
r = Math.floor((e / 2 ** n - 1) * 4503599627370496),
i = (t << 31) | ((n + 1023) << 20) | ((r / 4294967296) & 1048575);
this._bufferBuilder.append(203),
this.pack_int32(i),
this.pack_int32(r % 4294967296);
}
pack_object(e) {
let t = Object.keys(e),
n = t.length;
if (n <= 15) this.pack_uint8(128 + n);
else if (n <= 65535) this._bufferBuilder.append(222), this.pack_uint16(n);
else if (n <= 4294967295)
this._bufferBuilder.append(223), this.pack_uint32(n);
else throw Error("Invalid length");
let r = (n) => {
if (n < t.length) {
let i = t[n];
if (e.hasOwnProperty(i)) {
this.pack(i);
let t = this.pack(e[i]);
if (t instanceof Promise) return t.then(() => r(n + 1));
}
return r(n + 1);
}
};
return r(0);
}
pack_uint8(e) {
this._bufferBuilder.append(e);
}
pack_uint16(e) {
this._bufferBuilder.append(e >> 8), this._bufferBuilder.append(255 & e);
}
pack_uint32(e) {
let t = 4294967295 & e;
this._bufferBuilder.append((4278190080 & t) >>> 24),
this._bufferBuilder.append((16711680 & t) >>> 16),
this._bufferBuilder.append((65280 & t) >>> 8),
this._bufferBuilder.append(255 & t);
}
pack_uint64(e) {
let t = e / 4294967296,
n = e % 4294967296;
this._bufferBuilder.append((4278190080 & t) >>> 24),
this._bufferBuilder.append((16711680 & t) >>> 16),
this._bufferBuilder.append((65280 & t) >>> 8),
this._bufferBuilder.append(255 & t),
this._bufferBuilder.append((4278190080 & n) >>> 24),
this._bufferBuilder.append((16711680 & n) >>> 16),
this._bufferBuilder.append((65280 & n) >>> 8),
this._bufferBuilder.append(255 & n);
}
pack_int8(e) {
this._bufferBuilder.append(255 & e);
}
pack_int16(e) {
this._bufferBuilder.append((65280 & e) >> 8),
this._bufferBuilder.append(255 & e);
}
pack_int32(e) {
this._bufferBuilder.append((e >>> 24) & 255),
this._bufferBuilder.append((16711680 & e) >>> 16),
this._bufferBuilder.append((65280 & e) >>> 8),
this._bufferBuilder.append(255 & e);
}
pack_int64(e) {
let t = Math.floor(e / 4294967296),
n = e % 4294967296;
this._bufferBuilder.append((4278190080 & t) >>> 24),
this._bufferBuilder.append((16711680 & t) >>> 16),
this._bufferBuilder.append((65280 & t) >>> 8),
this._bufferBuilder.append(255 & t),
this._bufferBuilder.append((4278190080 & n) >>> 24),
this._bufferBuilder.append((16711680 & n) >>> 16),
this._bufferBuilder.append((65280 & n) >>> 8),
this._bufferBuilder.append(255 & n);
}
constructor() {
(this._bufferBuilder = new r()), (this._textEncoder = new TextEncoder());
}
}
let c = !0,
l = !0;
function p(e, t, n) {
let r = e.match(t);
return r && r.length >= n && parseInt(r[n], 10);
}
function d(e, t, n) {
if (!e.RTCPeerConnection) return;
let r = e.RTCPeerConnection.prototype,
i = r.addEventListener;
r.addEventListener = function (e, r) {
if (e !== t) return i.apply(this, arguments);
let o = (e) => {
let t = n(e);
t && (r.handleEvent ? r.handleEvent(t) : r(t));
};
return (
(this._eventMap = this._eventMap || {}),
this._eventMap[t] || (this._eventMap[t] = new Map()),
this._eventMap[t].set(r, o),
i.apply(this, [e, o])
);
};
let o = r.removeEventListener;
(r.removeEventListener = function (e, n) {
if (
e !== t ||
!this._eventMap ||
!this._eventMap[t] ||
!this._eventMap[t].has(n)
)
return o.apply(this, arguments);
let r = this._eventMap[t].get(n);
return (
this._eventMap[t].delete(n),
0 === this._eventMap[t].size && delete this._eventMap[t],
0 === Object.keys(this._eventMap).length && delete this._eventMap,
o.apply(this, [e, r])
);
}),
Object.defineProperty(r, "on" + t, {
get() {
return this["_on" + t];
},
set(e) {
this["_on" + t] &&
(this.removeEventListener(t, this["_on" + t]),
delete this["_on" + t]),
e && this.addEventListener(t, (this["_on" + t] = e));
},
enumerable: !0,
configurable: !0,
});
}
function h(e) {
return "boolean" != typeof e
? Error("Argument type: " + typeof e + ". Please use a boolean.")
: ((c = e),
e ? "adapter.js logging disabled" : "adapter.js logging enabled");
}
function u(e) {
return "boolean" != typeof e
? Error("Argument type: " + typeof e + ". Please use a boolean.")
: ((l = !e),
"adapter.js deprecation warnings " + (e ? "disabled" : "enabled"));
}
function f() {
"object" != typeof window ||
c ||
"undefined" == typeof console ||
"function" != typeof console.log ||
console.log.apply(console, arguments);
}
function m(e, t) {
l && console.warn(e + " is deprecated, please use " + t + " instead.");
}
function g(e) {
return "[object Object]" === Object.prototype.toString.call(e);
}
function y(e, t, n) {
let r = n ? "outbound-rtp" : "inbound-rtp",
i = new Map();
if (null === t) return i;
let o = [];
return (
e.forEach((e) => {
"track" === e.type && e.trackIdentifier === t.id && o.push(e);
}),
o.forEach((t) => {
e.forEach((n) => {
n.type === r &&
n.trackId === t.id &&
(function e(t, n, r) {
!n ||
r.has(n.id) ||
(r.set(n.id, n),
Object.keys(n).forEach((i) => {
i.endsWith("Id")
? e(t, t.get(n[i]), r)
: i.endsWith("Ids") &&
n[i].forEach((n) => {
e(t, t.get(n), r);
});
}));
})(e, n, i);
});
}),
i
);
}
var _,
C,
v,
b,
k,
S,
T,
R,
w,
P,
E,
D,
x,
I,
M,
O,
j = {};
function L(e, t) {
let n = e && e.navigator;
if (!n.mediaDevices) return;
let r = function (e) {
if ("object" != typeof e || e.mandatory || e.optional) return e;
let t = {};
return (
Object.keys(e).forEach((n) => {
if ("require" === n || "advanced" === n || "mediaSource" === n)
return;
let r = "object" == typeof e[n] ? e[n] : { ideal: e[n] };
void 0 !== r.exact &&
"number" == typeof r.exact &&
(r.min = r.max = r.exact);
let i = function (e, t) {
return e
? e + t.charAt(0).toUpperCase() + t.slice(1)
: "deviceId" === t
? "sourceId"
: t;
};
if (void 0 !== r.ideal) {
t.optional = t.optional || [];
let e = {};
"number" == typeof r.ideal
? ((e[i("min", n)] = r.ideal),
t.optional.push(e),
((e = {})[i("max", n)] = r.ideal))
: (e[i("", n)] = r.ideal),
t.optional.push(e);
}
void 0 !== r.exact && "number" != typeof r.exact
? ((t.mandatory = t.mandatory || {}),
(t.mandatory[i("", n)] = r.exact))
: ["min", "max"].forEach((e) => {
void 0 !== r[e] &&
((t.mandatory = t.mandatory || {}),
(t.mandatory[i(e, n)] = r[e]));
});
}),
e.advanced && (t.optional = (t.optional || []).concat(e.advanced)),
t
);
},
i = function (e, i) {
if (t.version >= 61) return i(e);
if ((e = JSON.parse(JSON.stringify(e))) && "object" == typeof e.audio) {
let t = function (e, t, n) {
t in e && !(n in e) && ((e[n] = e[t]), delete e[t]);
};
t(
(e = JSON.parse(JSON.stringify(e))).audio,
"autoGainControl",
"googAutoGainControl"
),
t(e.audio, "noiseSuppression", "googNoiseSuppression"),
(e.audio = r(e.audio));
}
if (e && "object" == typeof e.video) {
let o = e.video.facingMode;
o = o && ("object" == typeof o ? o : { ideal: o });
let s = t.version < 66;
if (
o &&
("user" === o.exact ||
"environment" === o.exact ||
"user" === o.ideal ||
"environment" === o.ideal) &&
!(
n.mediaDevices.getSupportedConstraints &&
n.mediaDevices.getSupportedConstraints().facingMode &&
!s
)
) {
let t;
if (
(delete e.video.facingMode,
"environment" === o.exact || "environment" === o.ideal
? (t = ["back", "rear"])
: ("user" === o.exact || "user" === o.ideal) && (t = ["front"]),
t)
)
return n.mediaDevices.enumerateDevices().then((n) => {
let s = (n = n.filter((e) => "videoinput" === e.kind)).find(
(e) => t.some((t) => e.label.toLowerCase().includes(t))
);
return (
!s && n.length && t.includes("back") && (s = n[n.length - 1]),
s &&
(e.video.deviceId = o.exact
? { exact: s.deviceId }
: { ideal: s.deviceId }),
(e.video = r(e.video)),
f("chrome: " + JSON.stringify(e)),
i(e)
);
});
}
e.video = r(e.video);
}
return f("chrome: " + JSON.stringify(e)), i(e);
},
o = function (e) {
return t.version >= 64
? e
: {
name:
{
PermissionDeniedError: "NotAllowedError",
PermissionDismissedError: "NotAllowedError",
InvalidStateError: "NotAllowedError",
DevicesNotFoundError: "NotFoundError",
ConstraintNotSatisfiedError: "OverconstrainedError",
TrackStartError: "NotReadableError",
MediaDeviceFailedDueToShutdown: "NotAllowedError",
MediaDeviceKillSwitchOn: "NotAllowedError",
TabCaptureError: "AbortError",
ScreenCaptureError: "AbortError",
DeviceCaptureError: "AbortError",
}[e.name] || e.name,
message: e.message,
constraint: e.constraint || e.constraintName,
toString() {
return this.name + (this.message && ": ") + this.message;
},
};
};
if (
((n.getUserMedia = function (e, t, r) {
i(e, (e) => {
n.webkitGetUserMedia(e, t, (e) => {
r && r(o(e));
});
});
}.bind(n)),
n.mediaDevices.getUserMedia)
) {
let e = n.mediaDevices.getUserMedia.bind(n.mediaDevices);
n.mediaDevices.getUserMedia = function (t) {
return i(t, (t) =>
e(t).then(
(e) => {
if (
(t.audio && !e.getAudioTracks().length) ||
(t.video && !e.getVideoTracks().length)
)
throw (
(e.getTracks().forEach((e) => {
e.stop();
}),
new DOMException("", "NotFoundError"))
);
return e;
},
(e) => Promise.reject(o(e))
)
);
};
}
}
function A(e, t) {
if (
(!e.navigator.mediaDevices ||
!("getDisplayMedia" in e.navigator.mediaDevices)) &&
e.navigator.mediaDevices
) {
if ("function" != typeof t) {
console.error(
"shimGetDisplayMedia: getSourceId argument is not a function"
);
return;
}
e.navigator.mediaDevices.getDisplayMedia = function (n) {
return t(n).then((t) => {
let r = n.video && n.video.width,
i = n.video && n.video.height,
o = n.video && n.video.frameRate;
return (
(n.video = {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: t,
maxFrameRate: o || 3,
},
}),
r && (n.video.mandatory.maxWidth = r),
i && (n.video.mandatory.maxHeight = i),
e.navigator.mediaDevices.getUserMedia(n)
);
});
};
}
}
function B(e) {
e.MediaStream = e.MediaStream || e.webkitMediaStream;
}
function F(e) {
if (
"object" != typeof e ||
!e.RTCPeerConnection ||
"ontrack" in e.RTCPeerConnection.prototype
)
d(
e,
"track",
(e) => (
e.transceiver ||
Object.defineProperty(e, "transceiver", {
value: { receiver: e.receiver },
}),
e
)
);
else {
Object.defineProperty(e.RTCPeerConnection.prototype, "ontrack", {
get() {
return this._ontrack;
},
set(e) {
this._ontrack && this.removeEventListener("track", this._ontrack),
this.addEventListener("track", (this._ontrack = e));
},
enumerable: !0,
configurable: !0,
});
let t = e.RTCPeerConnection.prototype.setRemoteDescription;
e.RTCPeerConnection.prototype.setRemoteDescription = function () {
return (
this._ontrackpoly ||
((this._ontrackpoly = (t) => {
t.stream.addEventListener("addtrack", (n) => {
let r;
r = e.RTCPeerConnection.prototype.getReceivers
? this.getReceivers().find(
(e) => e.track && e.track.id === n.track.id
)
: { track: n.track };
let i = new Event("track");
(i.track = n.track),
(i.receiver = r),
(i.transceiver = { receiver: r }),
(i.streams = [t.stream]),
this.dispatchEvent(i);
}),
t.stream.getTracks().forEach((n) => {
let r;
r = e.RTCPeerConnection.prototype.getReceivers
? this.getReceivers().find(
(e) => e.track && e.track.id === n.id
)
: { track: n };
let i = new Event("track");
(i.track = n),
(i.receiver = r),
(i.transceiver = { receiver: r }),
(i.streams = [t.stream]),
this.dispatchEvent(i);
});
}),
this.addEventListener("addstream", this._ontrackpoly)),
t.apply(this, arguments)
);
};
}
}
function U(e) {
if (
"object" == typeof e &&
e.RTCPeerConnection &&
!("getSenders" in e.RTCPeerConnection.prototype) &&
"createDTMFSender" in e.RTCPeerConnection.prototype
) {
let t = function (e, t) {
return {
track: t,
get dtmf() {
return (
void 0 === this._dtmf &&
("audio" === t.kind
? (this._dtmf = e.createDTMFSender(t))
: (this._dtmf = null)),
this._dtmf
);
},
_pc: e,
};
};
if (!e.RTCPeerConnection.prototype.getSenders) {
e.RTCPeerConnection.prototype.getSenders = function () {
return (this._senders = this._senders || []), this._senders.slice();
};
let n = e.RTCPeerConnection.prototype.addTrack;
e.RTCPeerConnection.prototype.addTrack = function (e, r) {
let i = n.apply(this, arguments);
return i || ((i = t(this, e)), this._senders.push(i)), i;
};
let r = e.RTCPeerConnection.prototype.removeTrack;
e.RTCPeerConnection.prototype.removeTrack = function (e) {
r.apply(this, arguments);
let t = this._senders.indexOf(e);
-1 !== t && this._senders.splice(t, 1);
};
}
let n = e.RTCPeerConnection.prototype.addStream;
e.RTCPeerConnection.prototype.addStream = function (e) {
(this._senders = this._senders || []),
n.apply(this, [e]),
e.getTracks().forEach((e) => {
this._senders.push(t(this, e));
});
};
let r = e.RTCPeerConnection.prototype.removeStream;
e.RTCPeerConnection.prototype.removeStream = function (e) {
(this._senders = this._senders || []),
r.apply(this, [e]),
e.getTracks().forEach((e) => {
let t = this._senders.find((t) => t.track === e);
t && this._senders.splice(this._senders.indexOf(t), 1);
});
};
} else if (
"object" == typeof e &&
e.RTCPeerConnection &&
"getSenders" in e.RTCPeerConnection.prototype &&
"createDTMFSender" in e.RTCPeerConnection.prototype &&
e.RTCRtpSender &&
!("dtmf" in e.RTCRtpSender.prototype)
) {
let t = e.RTCPeerConnection.prototype.getSenders;
(e.RTCPeerConnection.prototype.getSenders = function () {
let e = t.apply(this, []);
return e.forEach((e) => (e._pc = this)), e;
}),
Object.defineProperty(e.RTCRtpSender.prototype, "dtmf", {
get() {
return (
void 0 === this._dtmf &&
("audio" === this.track.kind
? (this._dtmf = this._pc.createDTMFSender(this.track))
: (this._dtmf = null)),
this._dtmf
);
},
});
}
}
function z(e) {
if (!e.RTCPeerConnection) return;
let t = e.RTCPeerConnection.prototype.getStats;
e.RTCPeerConnection.prototype.getStats = function () {
let [e, n, r] = arguments;
if (arguments.length > 0 && "function" == typeof e)
return t.apply(this, arguments);
if (0 === t.length && (0 == arguments.length || "function" != typeof e))
return t.apply(this, []);
let i = function (e) {
let t = {};
return (
e.result().forEach((e) => {
let n = {
id: e.id,
timestamp: e.timestamp,
type:
{
localcandidate: "local-candidate",
remotecandidate: "remote-candidate",
}[e.type] || e.type,
};
e.names().forEach((t) => {
n[t] = e.stat(t);
}),
(t[n.id] = n);
}),
t
);
},
o = function (e) {
return new Map(Object.keys(e).map((t) => [t, e[t]]));
};
return arguments.length >= 2
? t.apply(this, [
function (e) {
n(o(i(e)));
},
e,
])
: new Promise((e, n) => {
t.apply(this, [
function (t) {
e(o(i(t)));
},
n,
]);
}).then(n, r);
};
}
function N(e) {
if (
!(
"object" == typeof e &&
e.RTCPeerConnection &&
e.RTCRtpSender &&
e.RTCRtpReceiver
)
)
return;
if (!("getStats" in e.RTCRtpSender.prototype)) {
let t = e.RTCPeerConnection.prototype.getSenders;
t &&
(e.RTCPeerConnection.prototype.getSenders = function () {
let e = t.apply(this, []);
return e.forEach((e) => (e._pc = this)), e;
});
let n = e.RTCPeerConnection.prototype.addTrack;
n &&
(e.RTCPeerConnection.prototype.addTrack = function () {
let e = n.apply(this, arguments);
return (e._pc = this), e;
}),
(e.RTCRtpSender.prototype.getStats = function () {
let e = this;
return this._pc.getStats().then((t) => y(t, e.track, !0));
});
}
if (!("getStats" in e.RTCRtpReceiver.prototype)) {
let t = e.RTCPeerConnection.prototype.getReceivers;
t &&
(e.RTCPeerConnection.prototype.getReceivers = function () {
let e = t.apply(this, []);
return e.forEach((e) => (e._pc = this)), e;
}),
d(e, "track", (e) => ((e.receiver._pc = e.srcElement), e)),
(e.RTCRtpReceiver.prototype.getStats = function () {
let e = this;
return this._pc.getStats().then((t) => y(t, e.track, !1));
});
}
if (
!(
"getStats" in e.RTCRtpSender.prototype &&
"getStats" in e.RTCRtpReceiver.prototype
)
)
return;
let t = e.RTCPeerConnection.prototype.getStats;
e.RTCPeerConnection.prototype.getStats = function () {
if (arguments.length > 0 && arguments[0] instanceof e.MediaStreamTrack) {
let e, t, n;
let r = arguments[0];
return (this.getSenders().forEach((t) => {
t.track === r && (e ? (n = !0) : (e = t));
}),
this.getReceivers().forEach(
(e) => (e.track === r && (t ? (n = !0) : (t = e)), e.track === r)
),
n || (e && t))
? Promise.reject(
new DOMException(
"There are more than one sender or receiver for the track.",
"InvalidAccessError"
)
)
: e
? e.getStats()
: t
? t.getStats()
: Promise.reject(
new DOMException(
"There is no sender or receiver for the track.",
"InvalidAccessError"
)
);
}
return t.apply(this, arguments);
};
}
function $(e) {
e.RTCPeerConnection.prototype.getLocalStreams = function () {
return (
(this._shimmedLocalStreams = this._shimmedLocalStreams || {}),
Object.keys(this._shimmedLocalStreams).map(
(e) => this._shimmedLocalStreams[e][0]
)
);
};
let t = e.RTCPeerConnection.prototype.addTrack;
e.RTCPeerConnection.prototype.addTrack = function (e, n) {
if (!n) return t.apply(this, arguments);
this._shimmedLocalStreams = this._shimmedLocalStreams || {};
let r = t.apply(this, arguments);
return (
this._shimmedLocalStreams[n.id]
? -1 === this._shimmedLocalStreams[n.id].indexOf(r) &&
this._shimmedLocalStreams[n.id].push(r)
: (this._shimmedLocalStreams[n.id] = [n, r]),
r
);
};
let n = e.RTCPeerConnection.prototype.addStream;
e.RTCPeerConnection.prototype.addStream = function (e) {
(this._shimmedLocalStreams = this._shimmedLocalStreams || {}),
e.getTracks().forEach((e) => {
if (this.getSenders().find((t) => t.track === e))
throw new DOMException(
"Track already exists.",
"InvalidAccessError"
);
});
let t = this.getSenders();
n.apply(this, arguments);
let r = this.getSenders().filter((e) => -1 === t.indexOf(e));
this._shimmedLocalStreams[e.id] = [e].concat(r);
};
let r = e.RTCPeerConnection.prototype.removeStream;
e.RTCPeerConnection.prototype.removeStream = function (e) {
return (
(this._shimmedLocalStreams = this._shimmedLocalStreams || {}),
delete this._shimmedLocalStreams[e.id],
r.apply(this, arguments)
);
};
let i = e.RTCPeerConnection.prototype.removeTrack;
e.RTCPeerConnection.prototype.removeTrack = function (e) {
return (
(this._shimmedLocalStreams = this._shimmedLocalStreams || {}),
e &&
Object.keys(this._shimmedLocalStreams).forEach((t) => {
let n = this._shimmedLocalStreams[t].indexOf(e);
-1 !== n && this._shimmedLocalStreams[t].splice(n, 1),
1 === this._shimmedLocalStreams[t].length &&
delete this._shimmedLocalStreams[t];
}),
i.apply(this, arguments)
);
};
}
function J(e, t) {
if (!e.RTCPeerConnection) return;
if (e.RTCPeerConnection.prototype.addTrack && t.version >= 65) return $(e);
let n = e.RTCPeerConnection.prototype.getLocalStreams;
e.RTCPeerConnection.prototype.getLocalStreams = function () {
let e = n.apply(this);
return (
(this._reverseStreams = this._reverseStreams || {}),
e.map((e) => this._reverseStreams[e.id])
);
};
let r = e.RTCPeerConnection.prototype.addStream;
e.RTCPeerConnection.prototype.addStream = function (t) {
if (
((this._streams = this._streams || {}),
(this._reverseStreams = this._reverseStreams || {}),
t.getTracks().forEach((e) => {
if (this.getSenders().find((t) => t.track === e))
throw new DOMException(
"Track already exists.",
"InvalidAccessError"
);
}),
!this._reverseStreams[t.id])
) {
let n = new e.MediaStream(t.getTracks());
(this._streams[t.id] = n), (this._reverseStreams[n.id] = t), (t = n);
}
r.apply(this, [t]);
};
let i = e.RTCPeerConnection.prototype.removeStream;
function o(e, t) {
let n = t.sdp;
return (
Object.keys(e._reverseStreams || []).forEach((t) => {
let r = e._reverseStreams[t],
i = e._streams[r.id];
n = n.replace(RegExp(i.id, "g"), r.id);
}),
new RTCSessionDescription({ type: t.type, sdp: n })
);
}
(e.RTCPeerConnection.prototype.removeStream = function (e) {
(this._streams = this._streams || {}),
(this._reverseStreams = this._reverseStreams || {}),
i.apply(this, [this._streams[e.id] || e]),
delete this._reverseStreams[
this._streams[e.id] ? this._streams[e.id].id : e.id
],
delete this._streams[e.id];
}),
(e.RTCPeerConnection.prototype.addTrack = function (t, n) {
if ("closed" === this.signalingState)
throw new DOMException(
"The RTCPeerConnection's signalingState is 'closed'.",
"InvalidStateError"
);
let r = [].slice.call(arguments, 1);
if (1 !== r.length || !r[0].getTracks().find((e) => e === t))
throw new DOMException(
"The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.",
"NotSupportedError"
);
if (this.getSenders().find((e) => e.track === t))
throw new DOMException("Track already exists.", "InvalidAccessError");
(this._streams = this._streams || {}),
(this._reverseStreams = this._reverseStreams || {});
let i = this._streams[n.id];
if (i)
i.addTrack(t),
Promise.resolve().then(() => {
this.dispatchEvent(new Event("negotiationneeded"));
});
else {
let r = new e.MediaStream([t]);
(this._streams[n.id] = r),
(this._reverseStreams[r.id] = n),
this.addStream(r);
}
return this.getSenders().find((e) => e.track === t);
}),
["createOffer", "createAnswer"].forEach(function (t) {
let n = e.RTCPeerConnection.prototype[t];
e.RTCPeerConnection.prototype[t] = {
[t]() {
let e = arguments,
t = arguments.length && "function" == typeof arguments[0];
return t
? n.apply(this, [
(t) => {
let n = o(this, t);
e[0].apply(null, [n]);
},
(t) => {
e[1] && e[1].apply(null, t);
},
arguments[2],
])
: n.apply(this, arguments).then((e) => o(this, e));
},
}[t];
});
let s = e.RTCPeerConnection.prototype.setLocalDescription;
e.RTCPeerConnection.prototype.setLocalDescription = function () {
var e, t;
let n;
return (
arguments.length &&
arguments[0].type &&
(arguments[0] =
((e = this),
(t = arguments[0]),
(n = t.sdp),
Object.keys(e._reverseStreams || []).forEach((t) => {
let r = e._reverseStreams[t],
i = e._streams[r.id];
n = n.replace(RegExp(r.id, "g"), i.id);
}),
new RTCSessionDescription({ type: t.type, sdp: n }))),
s.apply(this, arguments)
);
};
let a = Object.getOwnPropertyDescriptor(
e.RTCPeerConnection.prototype,
"localDescription"
);
Object.defineProperty(e.RTCPeerConnection.prototype, "localDescription", {
get() {
let e = a.get.apply(this);
return "" === e.type ? e : o(this, e);
},
}),
(e.RTCPeerConnection.prototype.removeTrack = function (e) {
let t;
if ("closed" === this.signalingState)
throw new DOMException(
"The RTCPeerConnection's signalingState is 'closed'.",
"InvalidStateError"
);
if (!e._pc)
throw new DOMException(
"Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.",
"TypeError"
);
if (e._pc !== this)
throw new DOMException(
"Sender was not created by this connection.",
"InvalidAccessError"
);
(this._streams = this._streams || {}),
Object.keys(this._streams).forEach((n) => {
this._streams[n].getTracks().find((t) => e.track === t) &&
(t = this._streams[n]);
}),
t &&
(1 === t.getTracks().length
? this.removeStream(this._reverseStreams[t.id])
: t.removeTrack(e.track),
this.dispatchEvent(new Event("negotiationneeded")));
});
}
function V(e, t) {
!e.RTCPeerConnection &&
e.webkitRTCPeerConnection &&
(e.RTCPeerConnection = e.webkitRTCPeerConnection),
e.RTCPeerConnection &&
t.version < 53 &&
[
"setLocalDescription",
"setRemoteDescription",
"addIceCandidate",
].forEach(function (t) {
let n = e.RTCPeerConnection.prototype[t];
e.RTCPeerConnection.prototype[t] = {
[t]() {
return (
(arguments[0] = new (
"addIceCandidate" === t
? e.RTCIceCandidate
: e.RTCSessionDescription
)(arguments[0])),
n.apply(this, arguments)
);
},
}[t];
});
}
function G(e, t) {
d(e, "negotiationneeded", (e) => {
let n = e.target;
if (
(!(t.version < 72) &&
(!n.getConfiguration ||
"plan-b" !== n.getConfiguration().sdpSemantics)) ||
"stable" === n.signalingState
)
return e;
});
}
e(j, "shimMediaStream", () => B),
e(j, "shimOnTrack", () => F),
e(j, "shimGetSendersWithDtmf", () => U),
e(j, "shimGetStats", () => z),
e(j, "shimSenderReceiverGetStats", () => N),
e(j, "shimAddTrackRemoveTrackWithNative", () => $),
e(j, "shimAddTrackRemoveTrack", () => J),
e(j, "shimPeerConnection", () => V),
e(j, "fixNegotiationNeeded", () => G),
e(j, "shimGetUserMedia", () => L),
e(j, "shimGetDisplayMedia", () => A);
var W = {};
function H(e, t) {
let n = e && e.navigator,
r = e && e.MediaStreamTrack;
if (
((n.getUserMedia = function (e, t, r) {
m("navigator.getUserMedia", "navigator.mediaDevices.getUserMedia"),
n.mediaDevices.getUserMedia(e).then(t, r);
}),
!(
t.version > 55 &&
"autoGainControl" in n.mediaDevices.getSupportedConstraints()
))
) {
let e = function (e, t, n) {
t in e && !(n in e) && ((e[n] = e[t]), delete e[t]);
},
t = n.mediaDevices.getUserMedia.bind(n.mediaDevices);
if (
((n.mediaDevices.getUserMedia = function (n) {
return (
"object" == typeof n &&
"object" == typeof n.audio &&
(e(
(n = JSON.parse(JSON.stringify(n))).audio,
"autoGainControl",
"mozAutoGainControl"
),
e(n.audio, "noiseSuppression", "mozNoiseSuppression")),
t(n)
);
}),
r && r.prototype.getSettings)
) {
let t = r.prototype.getSettings;
r.prototype.getSettings = function () {
let n = t.apply(this, arguments);
return (
e(n, "mozAutoGainControl", "autoGainControl"),
e(n, "mozNoiseSuppression", "noiseSuppression"),
n
);
};
}
if (r && r.prototype.applyConstraints) {
let t = r.prototype.applyConstraints;
r.prototype.applyConstraints = function (n) {
return (
"audio" === this.kind &&
"object" == typeof n &&
(e(
(n = JSON.parse(JSON.stringify(n))),
"autoGainControl",
"mozAutoGainControl"
),
e(n, "noiseSuppression", "mozNoiseSuppression")),
t.apply(this, [n])
);
};
}
}
}
function Y(e, t) {
(e.navigator.mediaDevices &&
"getDisplayMedia" in e.navigator.mediaDevices) ||
!e.navigator.mediaDevices ||
(e.navigator.mediaDevices.getDisplayMedia = function (n) {
if (!(n && n.video)) {
let e = new DOMException(
"getDisplayMedia without video constraints is undefined"
);
return (e.name = "NotFoundError"), (e.code = 8), Promise.reject(e);
}
return (
!0 === n.video
? (n.video = { mediaSource: t })
: (n.video.mediaSource = t),
e.navigator.mediaDevices.getUserMedia(n)
);
});
}
function K(e) {
"object" == typeof e &&
e.RTCTrackEvent &&
"receiver" in e.RTCTrackEvent.prototype &&
!("transceiver" in e.RTCTrackEvent.prototype) &&
Object.defineProperty(e.RTCTrackEvent.prototype, "transceiver", {
get() {
return { receiver: this.receiver };
},
});
}
function X(e, t) {
if (
"object" != typeof e ||
!(e.RTCPeerConnection || e.mozRTCPeerConnection)
)
return;
!e.RTCPeerConnection &&
e.mozRTCPeerConnection &&
(e.RTCPeerConnection = e.mozRTCPeerConnection),
t.version < 53 &&
[
"setLocalDescription",
"setRemoteDescription",
"addIceCandidate",
].forEach(function (t) {
let n = e.RTCPeerConnection.prototype[t];
e.RTCPeerConnection.prototype[t] = {
[t]() {
return (
(arguments[0] = new (
"addIceCandidate" === t
? e.RTCIceCandidate
: e.RTCSessionDescription
)(arguments[0])),
n.apply(this, arguments)
);
},
}[t];
});
let n = {
inboundrtp: "inbound-rtp",
outboundrtp: "outbound-rtp",
candidatepair: "candidate-pair",
localcandidate: "local-candidate",
remotecandidate: "remote-candidate",
},
r = e.RTCPeerConnection.prototype.getStats;
e.RTCPeerConnection.prototype.getStats = function () {
let [e, i, o] = arguments;
return r
.apply(this, [e || null])
.then((e) => {
if (t.version < 53 && !i)
try {
e.forEach((e) => {
e.type = n[e.type] || e.type;
});
} catch (t) {
if ("TypeError" !== t.name) throw t;
e.forEach((t, r) => {
e.set(r, Object.assign({}, t, { type: n[t.type] || t.type }));
});
}
return e;
})
.then(i, o);
};
}
function q(e) {
if (
!("object" == typeof e && e.RTCPeerConnection && e.RTCRtpSender) ||
(e.RTCRtpSender && "getStats" in e.RTCRtpSender.prototype)
)
return;
let t = e.RTCPeerConnection.prototype.getSenders;
t &&
(e.RTCPeerConnection.prototype.getSenders = function () {
let e = t.apply(this, []);
return e.forEach((e) => (e._pc = this)), e;
});
let n = e.RTCPeerConnection.prototype.addTrack;
n &&
(e.RTCPeerConnection.prototype.addTrack = function () {
let e = n.apply(this, arguments);
return (e._pc = this), e;
}),
(e.RTCRtpSender.prototype.getStats = function () {
return this.track
? this._pc.getStats(this.track)
: Promise.resolve(new Map());
});
}
function Q(e) {
if (
!("object" == typeof e && e.RTCPeerConnection && e.RTCRtpSender) ||
(e.RTCRtpSender && "getStats" in e.RTCRtpReceiver.prototype)
)
return;
let t = e.RTCPeerConnection.prototype.getReceivers;
t &&
(e.RTCPeerConnection.prototype.getReceivers = function () {
let e = t.apply(this, []);
return e.forEach((e) => (e._pc = this)), e;
}),
d(e, "track", (e) => ((e.receiver._pc = e.srcElement), e)),
(e.RTCRtpReceiver.prototype.getStats = function () {
return this._pc.getStats(this.track);
});
}
function Z(e) {
!e.RTCPeerConnection ||
"removeStream" in e.RTCPeerConnection.prototype ||
(e.RTCPeerConnection.prototype.removeStream = function (e) {
m("removeStream", "removeTrack"),
this.getSenders().forEach((t) => {
t.track && e.getTracks().includes(t.track) && this.removeTrack(t);
});
});
}
function ee(e) {
e.DataChannel && !e.RTCDataChannel && (e.RTCDataChannel = e.DataChannel);
}
function et(e) {
if (!("object" == typeof e && e.RTCPeerConnection)) return;
let t = e.RTCPeerConnection.prototype.addTransceiver;
t &&
(e.RTCPeerConnection.prototype.addTransceiver = function () {
this.setParametersPromises = [];
let e = arguments[1] && arguments[1].sendEncodings;
void 0 === e && (e = []);
let n = (e = [...e]).length > 0;
n &&
e.forEach((e) => {
if ("rid" in e && !/^[a-z0-9]{0,16}$/i.test(e.rid))
throw TypeError("Invalid RID value provided.");
if (
"scaleResolutionDownBy" in e &&
!(parseFloat(e.scaleResolutionDownBy) >= 1)
)
throw RangeError("scale_resolution_down_by must be >= 1.0");
if ("maxFramerate" in e && !(parseFloat(e.maxFramerate) >= 0))
throw RangeError("max_framerate must be >= 0.0");
});
let r = t.apply(this, arguments);
if (n) {
let { sender: t } = r,
n = t.getParameters();
("encodings" in n &&
(1 !== n.encodings.length ||
0 !== Object.keys(n.encodings[0]).length)) ||
((n.encodings = e),
(t.sendEncodings = e),
this.setParametersPromises.push(
t
.setParameters(n)
.then(() => {
delete t.sendEncodings;
})
.catch(() => {
delete t.sendEncodings;
})
));
}
return r;
});
}
function en(e) {
if (!("object" == typeof e && e.RTCRtpSender)) return;
let t = e.RTCRtpSender.prototype.getParameters;
t &&
(e.RTCRtpSender.prototype.getParameters = function () {
let e = t.apply(this, arguments);
return (
"encodings" in e ||
(e.encodings = [].concat(this.sendEncodings || [{}])),
e
);
});
}
function er(e) {
if (!("object" == typeof e && e.RTCPeerConnection)) return;
let t = e.RTCPeerConnection.prototype.createOffer;
e.RTCPeerConnection.prototype.createOffer = function () {
return this.setParametersPromises && this.setParametersPromises.length
? Promise.all(this.setParametersPromises)
.then(() => t.apply(this, arguments))
.finally(() => {
this.setParametersPromises = [];
})
: t.apply(this, arguments);
};
}
function ei(e) {
if (!("object" == typeof e && e.RTCPeerConnection)) return;
let t = e.RTCPeerConnection.prototype.createAnswer;
e.RTCPeerConnection.prototype.createAnswer = function () {
return this.setParametersPromises && this.setParametersPromises.length
? Promise.all(this.setParametersPromises)
.then(() => t.apply(this, arguments))
.finally(() => {
this.setParametersPromises = [];
})
: t.apply(this, arguments);
};
}
e(W, "shimOnTrack", () => K),
e(W, "shimPeerConnection", () => X),
e(W, "shimSenderGetStats", () => q),
e(W, "shimReceiverGetStats", () => Q),
e(W, "shimRemoveStream", () => Z),
e(W, "shimRTCDataChannel", () => ee),
e(W, "shimAddTransceiver", () => et),
e(W, "shimGetParameters", () => en),
e(W, "shimCreateOffer", () => er),
e(W, "shimCreateAnswer", () => ei),
e(W, "shimGetUserMedia", () => H),
e(W, "shimGetDisplayMedia", () => Y);
var eo = {};
function es(e) {
if ("object" == typeof e && e.RTCPeerConnection) {
if (
("getLocalStreams" in e.RTCPeerConnection.prototype ||
(e.RTCPeerConnection.prototype.getLocalStreams = function () {
return (
this._localStreams || (this._localStreams = []),
this._localStreams
);
}),
!("addStream" in e.RTCPeerConnection.prototype))
) {
let t = e.RTCPeerConnection.prototype.addTrack;
(e.RTCPeerConnection.prototype.addStream = function (e) {
this._localStreams || (this._localStreams = []),
this._localStreams.includes(e) || this._localStreams.push(e),
e.getAudioTracks().forEach((n) => t.call(this, n, e)),
e.getVideoTracks().forEach((n) => t.call(this, n, e));
}),
(e.RTCPeerConnection.prototype.addTrack = function (e, ...n) {
return (
n &&
n.forEach((e) => {
this._localStreams
? this._localStreams.includes(e) ||
this._localStreams.push(e)
: (this._localStreams = [e]);
}),
t.apply(this, arguments)
);
});
}
"removeStream" in e.RTCPeerConnection.prototype ||
(e.RTCPeerConnection.prototype.removeStream = function (e) {
this._localStreams || (this._localStreams = []);
let t = this._localStreams.indexOf(e);
if (-1 === t) return;
this._localStreams.splice(t, 1);
let n = e.getTracks();
this.getSenders().forEach((e) => {
n.includes(e.track) && this.removeTrack(e);
});
});
}
}
function ea(e) {
if (
"object" == typeof e &&
e.RTCPeerConnection &&
("getRemoteStreams" in e.RTCPeerConnection.prototype ||
(e.RTCPeerConnection.prototype.getRemoteStreams = function () {
return this._remoteStreams ? this._remoteStreams : [];
}),
!("onaddstream" in e.RTCPeerConnection.prototype))
) {
Object.defineProperty(e.RTCPeerConnection.prototype, "onaddstream", {
get() {
return this._onaddstream;
},
set(e) {
this._onaddstream &&
(this.removeEventListener("addstream", this._onaddstream),
this.removeEventListener("track", this._onaddstreampoly)),
this.addEventListener("addstream", (this._onaddstream = e)),
this.addEventListener(
"track",
(this._onaddstreampoly = (e) => {
e.streams.forEach((e) => {
if (
(this._remoteStreams || (this._remoteStreams = []),
this._remoteStreams.includes(e))
)
return;
this._remoteStreams.push(e);
let t = new Event("addstream");
(t.stream = e), this.dispatchEvent(t);
});
})
);
},
});
let t = e.RTCPeerConnection.prototype.setRemoteDescription;
e.RTCPeerConnection.prototype.setRemoteDescription = function () {
let e = this;
return (
this._onaddstreampoly ||
this.addEventListener(
"track",
(this._onaddstreampoly = function (t) {
t.streams.forEach((t) => {
if (
(e._remoteStreams || (e._remoteStreams = []),
e._remoteStreams.indexOf(t) >= 0)
)
return;
e._remoteStreams.push(t);
let n = new Event("addstream");
(n.stream = t), e.dispatchEvent(n);
});
})
),
t.apply(e, arguments)
);
};
}
}
function ec(e) {
if ("object" != typeof e || !e.RTCPeerConnection) return;
let t = e.RTCPeerConnection.prototype,
n = t.createOffer,
r = t.createAnswer,
i = t.setLocalDescription,
o = t.setRemoteDescription,
s = t.addIceCandidate;
(t.createOffer = function (e, t) {
let r = arguments.length >= 2 ? arguments[2] : arguments[0],
i = n.apply(this, [r]);
return t ? (i.then(e, t), Promise.resolve()) : i;
}),
(t.createAnswer = function (e, t) {
let n = arguments.length >= 2 ? arguments[2] : arguments[0],
i = r.apply(this, [n]);
return t ? (i.then(e, t), Promise.resolve()) : i;
});
let a = function (e, t, n) {
let r = i.apply(this, [e]);
return n ? (r.then(t, n), Promise.resolve()) : r;
};
(t.setLocalDescription = a),
(a = function (e, t, n) {
let r = o.apply(this, [e]);
return n ? (r.then(t, n), Promise.resolve()) : r;
}),
(t.setRemoteDescription = a),
(a = function (e, t, n) {
let r = s.apply(this, [e]);
return n ? (r.then(t, n), Promise.resolve()) : r;
}),
(t.addIceCandidate = a);
}
function el(e) {
let t = e && e.navigator;
if (t.mediaDevices && t.mediaDevices.getUserMedia) {
let e = t.mediaDevices,
n = e.getUserMedia.bind(e);
t.mediaDevices.getUserMedia = (e) => n(ep(e));
}
!t.getUserMedia &&
t.mediaDevices &&
t.mediaDevices.getUserMedia &&
(t.getUserMedia = function (e, n, r) {
t.mediaDevices.getUserMedia(e).then(n, r);
}.bind(t));
}
function ep(e) {
return e && void 0 !== e.video
? Object.assign({}, e, {
video: (function e(t) {
return g(t)
? Object.keys(t).reduce(function (n, r) {
let i = g(t[r]),
o = i ? e(t[r]) : t[r],
s = i && !Object.keys(o).length;
return void 0 === o || s ? n : Object.assign(n, { [r]: o });
}, {})
: t;
})(e.video),
})
: e;
}
function ed(e) {
if (!e.RTCPeerConnection) return;
let t = e.RTCPeerConnection;
(e.RTCPeerConnection = function (e, n) {
if (e && e.iceServers) {
let t = [];
for (let n = 0; n < e.iceServers.length; n++) {
let r = e.iceServers[n];
void 0 === r.urls && r.url
? (m("RTCIceServer.url", "RTCIceServer.urls"),
((r = JSON.parse(JSON.stringify(r))).urls = r.url),
delete r.url,
t.push(r))
: t.push(e.iceServers[n]);
}
e.iceServers = t;
}
return new t(e, n);
}),
(e.RTCPeerConnection.prototype = t.prototype),
"generateCertificate" in t &&
Object.defineProperty(e.RTCPeerConnection, "generateCertificate", {
get: () => t.generateCertificate,
});
}
function eh(e) {
"object" == typeof e &&
e.RTCTrackEvent &&
"receiver" in e.RTCTrackEvent.prototype &&
!("transceiver" in e.RTCTrackEvent.prototype) &&
Object.defineProperty(e.RTCTrackEvent.prototype, "transceiver", {
get() {
return { receiver: this.receiver };
},
});
}
function eu(e) {
let t = e.RTCPeerConnection.prototype.createOffer;
e.RTCPeerConnection.prototype.createOffer = function (e) {
if (e) {
void 0 !== e.offerToReceiveAudio &&
(e.offerToReceiveAudio = !!e.offerToReceiveAudio);
let t = this.getTransceivers().find(
(e) => "audio" === e.receiver.track.kind
);
!1 === e.offerToReceiveAudio && t
? "sendrecv" === t.direction
? t.setDirection
? t.setDirection("sendonly")
: (t.direction = "sendonly")
: "recvonly" === t.direction &&
(t.setDirection
? t.setDirection("inactive")
: (t.direction = "inactive"))
: !0 !== e.offerToReceiveAudio ||
t ||
this.addTransceiver("audio", { direction: "recvonly" }),
void 0 !== e.offerToReceiveVideo &&
(e.offerToReceiveVideo = !!e.offerToReceiveVideo);
let n = this.getTransceivers().find(
(e) => "video" === e.receiver.track.kind
);
!1 === e.offerToReceiveVideo && n
? "sendrecv" === n.direction
? n.setDirection
? n.setDirection("sendonly")
: (n.direction = "sendonly")
: "recvonly" === n.direction &&
(n.setDirection
? n.setDirection("inactive")
: (n.direction = "inactive"))
: !0 !== e.offerToReceiveVideo ||
n ||
this.addTransceiver("video", { direction: "recvonly" });
}
return t.apply(this, arguments);
};
}
function ef(e) {
"object" != typeof e ||
e.AudioContext ||
(e.AudioContext = e.webkitAudioContext);
}
e(eo, "shimLocalStreamsAPI", () => es),
e(eo, "shimRemoteStreamsAPI", () => ea),
e(eo, "shimCallbacksAPI", () => ec),
e(eo, "shimGetUserMedia", () => el),
e(eo, "shimConstraints", () => ep),
e(eo, "shimRTCIceServerUrls", () => ed),
e(eo, "shimTrackEventTransceiver", () => eh),
e(eo, "shimCreateOfferLegacy", () => eu),
e(eo, "shimAudioContext", () => ef);
var em = {};
e(em, "shimRTCIceCandidate", () => e_),
e(em, "shimRTCIceCandidateRelayProtocol", () => eC),
e(em, "shimMaxMessageSize", () => ev),
e(em, "shimSendThrowTypeError", () => eb),
e(em, "shimConnectionState", () => ek),
e(em, "removeExtmapAllowMixed", () => eS),
e(em, "shimAddIceCandidateNullOrEmpty", () => eT),
e(em, "shimParameterlessSetLocalDescription", () => eR);
var eg = {};
let ey = {};
function e_(e) {
if (
!e.RTCIceCandidate ||
(e.RTCIceCandidate && "foundation" in e.RTCIceCandidate.prototype)
)
return;
let n = e.RTCIceCandidate;
(e.RTCIceCandidate = function (e) {
if (
("object" == typeof e &&
e.candidate &&
0 === e.candidate.indexOf("a=") &&
((e = JSON.parse(JSON.stringify(e))).candidate =
e.candidate.substring(2)),
e.candidate && e.candidate.length)
) {
let r = new n(e),
i = t(eg).parseCandidate(e.candidate);
for (let e in i) e in r || Object.defineProperty(r, e, { value: i[e] });
return (
(r.toJSON = function () {
return {
candidate: r.candidate,
sdpMid: r.sdpMid,
sdpMLineIndex: r.sdpMLineIndex,
usernameFragment: r.usernameFragment,
};
}),
r
);
}
return new n(e);
}),
(e.RTCIceCandidate.prototype = n.prototype),
d(
e,
"icecandidate",
(t) => (
t.candidate &&
Object.defineProperty(t, "candidate", {
value: new e.RTCIceCandidate(t.candidate),
writable: "false",
}),
t
)
);
}
function eC(e) {
!e.RTCIceCandidate ||
(e.RTCIceCandidate && "relayProtocol" in e.RTCIceCandidate.prototype) ||
d(e, "icecandidate", (e) => {
if (e.candidate) {
let n = t(eg).parseCandidate(e.candidate.candidate);
"relay" === n.type &&
(e.candidate.relayProtocol = { 0: "tls", 1: "tcp", 2: "udp" }[
n.priority >> 24
]);
}
return e;
});
}
function ev(e, n) {
if (!e.RTCPeerConnection) return;
"sctp" in e.RTCPeerConnection.prototype ||
Object.defineProperty(e.RTCPeerConnection.prototype, "sctp", {
get() {
return void 0 === this._sctp ? null : this._sctp;
},
});
let r = function (e) {
if (!e || !e.sdp) return !1;
let n = t(eg).splitSections(e.sdp);
return (
n.shift(),
n.some((e) => {
let n = t(eg).parseMLine(e);
return (
n && "application" === n.kind && -1 !== n.protocol.indexOf("SCTP")
);
})
);
},
i = function (e) {
let t = e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);
if (null === t || t.length < 2) return -1;
let n = parseInt(t[1], 10);
return n != n ? -1 : n;
},
o = function (e) {
let t = 65536;
return (
"firefox" === n.browser &&
(t =
n.version < 57
? -1 === e
? 16384
: 2147483637
: n.version < 60
? 57 === n.version
? 65535
: 65536
: 2147483637),
t
);
},
s = function (e, r) {
let i = 65536;
"firefox" === n.browser && 57 === n.version && (i = 65535);
let o = t(eg).matchPrefix(e.sdp, "a=max-message-size:");
return (
o.length > 0
? (i = parseInt(o[0].substring(19), 10))
: "firefox" === n.browser && -1 !== r && (i = 2147483637),
i
);
},
a = e.RTCPeerConnection.prototype.setRemoteDescription;
e.RTCPeerConnection.prototype.setRemoteDescription = function () {
if (((this._sctp = null), "chrome" === n.browser && n.version >= 76)) {
let { sdpSemantics: e } = this.getConfiguration();
"plan-b" === e &&
Object.defineProperty(this, "sctp", {
get() {
return void 0 === this._sctp ? null : this._sctp;
},
enumerable: !0,
configurable: !0,
});
}
if (r(arguments[0])) {
let e;
let t = i(arguments[0]),
n = o(t),
r = s(arguments[0], t);
e =
0 === n && 0 === r
? Number.POSITIVE_INFINITY
: 0 === n || 0 === r
? Math.max(n, r)
: Math.min(n, r);
let a = {};
Object.defineProperty(a, "maxMessageSize", { get: () => e }),
(this._sctp = a);
}
return a.apply(this, arguments);
};
}
function eb(e) {
if (
!(
e.RTCPeerConnection &&
"createDataChannel" in e.RTCPeerConnection.prototype
)
)
return;
function t(e, t) {
let n = e.send;
e.send = function () {
let r = arguments[0],
i = r.length || r.size || r.byteLength;
if ("open" === e.readyState && t.sctp && i > t.sctp.maxMessageSize)
throw TypeError(
"Message too large (can send a maximum of " +
t.sctp.maxMessageSize +
" bytes)"
);
return n.apply(e, arguments);
};
}
let n = e.RTCPeerConnection.prototype.createDataChannel;
(e.RTCPeerConnection.prototype.createDataChannel = function () {
let e = n.apply(this, arguments);
return t(e, this), e;
}),
d(e, "datachannel", (e) => (t(e.channel, e.target), e));
}
function ek(e) {
if (
!e.RTCPeerConnection ||
"connectionState" in e.RTCPeerConnection.prototype
)
return;
let t = e.RTCPeerConnection.prototype;
Object.defineProperty(t, "connectionState", {
get() {
return (
{ completed: "connected", checking: "connecting" }[
this.iceConnectionState
] || this.iceConnectionState
);
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(t, "onconnectionstatechange", {
get() {
return this._onconnectionstatechange || null;
},
set(e) {
this._onconnectionstatechange &&
(this.removeEventListener(
"connectionstatechange",
this._onconnectionstatechange
),
delete this._onconnectionstatechange),
e &&
this.addEventListener(
"connectionstatechange",
(this._onconnectionstatechange = e)
);
},
enumerable: !0,
configurable: !0,
}),
["setLocalDescription", "setRemoteDescription"].forEach((e) => {
let n = t[e];
t[e] = function () {
return (
this._connectionstatechangepoly ||
((this._connectionstatechangepoly = (e) => {
let t = e.target;
if (t._lastConnectionState !== t.connectionState) {
t._lastConnectionState = t.connectionState;
let n = new Event("connectionstatechange", e);
t.dispatchEvent(n);
}
return e;
}),
this.addEventListener(
"iceconnectionstatechange",
this._connectionstatechangepoly
)),
n.apply(this, arguments)
);
};
});
}
function eS(e, t) {
if (
!e.RTCPeerConnection ||
("chrome" === t.browser && t.version >= 71) ||
("safari" === t.browser && t.version >= 605)
)
return;
let n = e.RTCPeerConnection.prototype.setRemoteDescription;
e.RTCPeerConnection.prototype.setRemoteDescription = function (t) {
if (t && t.sdp && -1 !== t.sdp.indexOf("\na=extmap-allow-mixed")) {
let n = t.sdp
.split("\n")
.filter((e) => "a=extmap-allow-mixed" !== e.trim())
.join("\n");
e.RTCSessionDescription && t instanceof e.RTCSessionDescription
? (arguments[0] = new e.RTCSessionDescription({
type: t.type,
sdp: n,
}))
: (t.sdp = n);
}
return n.apply(this, arguments);
};
}
function eT(e, t) {
if (!(e.RTCPeerConnection && e.RTCPeerConnection.prototype)) return;
let n = e.RTCPeerConnection.prototype.addIceCandidate;
n &&
0 !== n.length &&
(e.RTCPeerConnection.prototype.addIceCandidate = function () {
return arguments[0]
? (("chrome" === t.browser && t.version < 78) ||
("firefox" === t.browser && t.version < 68) ||
"safari" === t.browser) &&
arguments[0] &&
"" === arguments[0].candidate
? Promise.resolve()
: n.apply(this, arguments)
: (arguments[1] && arguments[1].apply(null), Promise.resolve());
});
}
function eR(e, t) {
if (!(e.RTCPeerConnection && e.RTCPeerConnection.prototype)) return;
let n = e.RTCPeerConnection.prototype.setLocalDescription;
n &&
0 !== n.length &&
(e.RTCPeerConnection.prototype.setLocalDescription = function () {
let e = arguments[0] || {};
if ("object" != typeof e || (e.type && e.sdp))
return n.apply(this, arguments);
if (!(e = { type: e.type, sdp: e.sdp }).type)
switch (this.signalingState) {
case "stable":
case "have-local-offer":
case "have-remote-pranswer":
e.type = "offer";
break;
default:
e.type = "answer";
}
return e.sdp || ("offer" !== e.type && "answer" !== e.type)
? n.apply(this, [e])
: ("offer" === e.type ? this.createOffer : this.createAnswer)
.apply(this)
.then((e) => n.apply(this, [e]));
});
}
(ey.generateIdentifier = function () {
return Math.random().toString(36).substring(2, 12);
}),
(ey.localCName = ey.generateIdentifier()),
(ey.splitLines = function (e) {
return e
.trim()
.split("\n")
.map((e) => e.trim());
}),
(ey.splitSections = function (e) {
return e
.split("\nm=")
.map((e, t) => (t > 0 ? "m=" + e : e).trim() + "\r\n");
}),
(ey.getDescription = function (e) {
let t = ey.splitSections(e);
return t && t[0];
}),
(ey.getMediaSections = function (e) {
let t = ey.splitSections(e);
return t.shift(), t;
}),
(ey.matchPrefix = function (e, t) {
return ey.splitLines(e).filter((e) => 0 === e.indexOf(t));
}),
(ey.parseCandidate = function (e) {
let t;
let n = {
foundation: (t =
0 === e.indexOf("a=candidate:")
? e.substring(12).split(" ")
: e.substring(10).split(" "))[0],
component: { 1: "rtp", 2: "rtcp" }[t[1]] || t[1],
protocol: t[2].toLowerCase(),
priority: parseInt(t[3], 10),
ip: t[4],
address: t[4],
port: parseInt(t[5], 10),
type: t[7],
};
for (let e = 8; e < t.length; e += 2)
switch (t[e]) {
case "raddr":
n.relatedAddress = t[e + 1];
break;
case "rport":
n.relatedPort = parseInt(t[e + 1], 10);
break;
case "tcptype":
n.tcpType = t[e + 1];
break;
case "ufrag":
(n.ufrag = t[e + 1]), (n.usernameFragment = t[e + 1]);
break;
default:
void 0 === n[t[e]] && (n[t[e]] = t[e + 1]);
}
return n;
}),
(ey.writeCandidate = function (e) {
let t = [];
t.push(e.foundation);
let n = e.component;
"rtp" === n ? t.push(1) : "rtcp" === n ? t.push(2) : t.push(n),
t.push(e.protocol.toUpperCase()),
t.push(e.priority),
t.push(e.address || e.ip),
t.push(e.port);
let r = e.type;
return (
t.push("typ"),
t.push(r),
"host" !== r &&
e.relatedAddress &&
e.relatedPort &&
(t.push("raddr"),
t.push(e.relatedAddress),
t.push("rport"),
t.push(e.relatedPort)),
e.tcpType &&
"tcp" === e.protocol.toLowerCase() &&
(t.push("tcptype"), t.push(e.tcpType)),
(e.usernameFragment || e.ufrag) &&
(t.push("ufrag"), t.push(e.usernameFragment || e.ufrag)),
"candidate:" + t.join(" ")
);
}),
(ey.parseIceOptions = function (e) {
return e.substring(14).split(" ");
}),
(ey.parseRtpMap = function (e) {
let t = e.substring(9).split(" "),
n = { payloadType: parseInt(t.shift(), 10) };
return (
(t = t[0].split("/")),
(n.name = t[0]),
(n.clockRate = parseInt(t[1], 10)),
(n.channels = 3 === t.length ? parseInt(t[2], 10) : 1),
(n.numChannels = n.channels),
n
);
}),
(ey.writeRtpMap = function (e) {
let t = e.payloadType;
void 0 !== e.preferredPayloadType && (t = e.preferredPayloadType);
let n = e.channels || e.numChannels || 1;
return (
"a=rtpmap:" +
t +
" " +
e.name +
"/" +
e.clockRate +
(1 !== n ? "/" + n : "") +
"\r\n"
);
}),
(ey.parseExtmap = function (e) {
let t = e.substring(9).split(" ");
return {
id: parseInt(t[0], 10),
direction: t[0].indexOf("/") > 0 ? t[0].split("/")[1] : "sendrecv",
uri: t[1],
attributes: t.slice(2).join(" "),
};
}),
(ey.writeExtmap = function (e) {
return (
"a=extmap:" +
(e.id || e.preferredId) +
(e.direction && "sendrecv" !== e.direction ? "/" + e.direction : "") +
" " +
e.uri +
(e.attributes ? " " + e.attributes : "") +
"\r\n"
);
}),
(ey.parseFmtp = function (e) {
let t;
let n = {},
r = e.substring(e.indexOf(" ") + 1).split(";");
for (let e = 0; e < r.length; e++)
n[(t = r[e].trim().split("="))[0].trim()] = t[1];
return n;
}),
(ey.writeFmtp = function (e) {
let t = "",
n = e.payloadType;
if (
(void 0 !== e.preferredPayloadType && (n = e.preferredPayloadType),
e.parameters && Object.keys(e.parameters).length)
) {
let r = [];
Object.keys(e.parameters).forEach((t) => {
void 0 !== e.parameters[t]
? r.push(t + "=" + e.parameters[t])
: r.push(t);
}),
(t += "a=fmtp:" + n + " " + r.join(";") + "\r\n");
}
return t;
}),
(ey.parseRtcpFb = function (e) {
let t = e.substring(e.indexOf(" ") + 1).split(" ");
return { type: t.shift(), parameter: t.join(" ") };
}),
(ey.writeRtcpFb = function (e) {
let t = "",
n = e.payloadType;
return (
void 0 !== e.preferredPayloadType && (n = e.preferredPayloadType),
e.rtcpFeedback &&
e.rtcpFeedback.length &&
e.rtcpFeedback.forEach((e) => {
t +=
"a=rtcp-fb:" +
n +
" " +
e.type +
(e.parameter && e.parameter.length ? " " + e.parameter : "") +
"\r\n";
}),
t
);
}),
(ey.parseSsrcMedia = function (e) {
let t = e.indexOf(" "),
n = { ssrc: parseInt(e.substring(7, t), 10) },
r = e.indexOf(":", t);
return (
r > -1
? ((n.attribute = e.substring(t + 1, r)),
(n.value = e.substring(r + 1)))
: (n.attribute = e.substring(t + 1)),
n
);
}),
(ey.parseSsrcGroup = function (e) {
let t = e.substring(13).split(" ");
return { semantics: t.shift(), ssrcs: t.map((e) => parseInt(e, 10)) };
}),
(ey.getMid = function (e) {
let t = ey.matchPrefix(e, "a=mid:")[0];
if (t) return t.substring(6);
}),
(ey.parseFingerprint = function (e) {
let t = e.substring(14).split(" ");
return { algorithm: t[0].toLowerCase(), value: t[1].toUpperCase() };
}),
(ey.getDtlsParameters = function (e, t) {
return {
role: "auto",
fingerprints: ey
.matchPrefix(e + t, "a=fingerprint:")
.map(ey.parseFingerprint),
};
}),
(ey.writeDtlsParameters = function (e, t) {
let n = "a=setup:" + t + "\r\n";
return (
e.fingerprints.forEach((e) => {
n += "a=fingerprint:" + e.algorithm + " " + e.value + "\r\n";
}),
n
);
}),
(ey.parseCryptoLine = function (e) {
let t = e.substring(9).split(" ");
return {
tag: parseInt(t[0], 10),
cryptoSuite: t[1],
keyParams: t[2],
sessionParams: t.slice(3),
};
}),
(ey.writeCryptoLine = function (e) {
return (
"a=crypto:" +
e.tag +
" " +
e.cryptoSuite +
" " +
("object" == typeof e.keyParams
? ey.writeCryptoKeyParams(e.keyParams)
: e.keyParams) +
(e.sessionParams ? " " + e.sessionParams.join(" ") : "") +
"\r\n"
);
}),
(ey.parseCryptoKeyParams = function (e) {
if (0 !== e.indexOf("inline:")) return null;
let t = e.substring(7).split("|");
return {
keyMethod: "inline",
keySalt: t[0],
lifeTime: t[1],
mkiValue: t[2] ? t[2].split(":")[0] : void 0,
mkiLength: t[2] ? t[2].split(":")[1] : void 0,
};
}),
(ey.writeCryptoKeyParams = function (e) {
return (
e.keyMethod +
":" +
e.keySalt +
(e.lifeTime ? "|" + e.lifeTime : "") +
(e.mkiValue && e.mkiLength ? "|" + e.mkiValue + ":" + e.mkiLength : "")
);
}),
(ey.getCryptoParameters = function (e, t) {
return ey.matchPrefix(e + t, "a=crypto:").map(ey.parseCryptoLine);
}),
(ey.getIceParameters = function (e, t) {
let n = ey.matchPrefix(e + t, "a=ice-ufrag:")[0],
r = ey.matchPrefix(e + t, "a=ice-pwd:")[0];
return n && r
? { usernameFragment: n.substring(12), password: r.substring(10) }
: null;
}),
(ey.writeIceParameters = function (e) {
let t =
"a=ice-ufrag:" +
e.usernameFragment +
"\r\na=ice-pwd:" +
e.password +
"\r\n";
return e.iceLite && (t += "a=ice-lite\r\n"), t;
}),
(ey.parseRtpParameters = function (e) {
let t = { codecs: [], headerExtensions: [], fecMechanisms: [], rtcp: [] },
n = ey.splitLines(e)[0].split(" ");
t.profile = n[2];
for (let r = 3; r < n.length; r++) {
let i = n[r],
o = ey.matchPrefix(e, "a=rtpmap:" + i + " ")[0];
if (o) {
let n = ey.parseRtpMap(o),
r = ey.matchPrefix(e, "a=fmtp:" + i + " ");
switch (
((n.parameters = r.length ? ey.parseFmtp(r[0]) : {}),
(n.rtcpFeedback = ey
.matchPrefix(e, "a=rtcp-fb:" + i + " ")
.map(ey.parseRtcpFb)),
t.codecs.push(n),
n.name.toUpperCase())
) {
case "RED":
case "ULPFEC":
t.fecMechanisms.push(n.name.toUpperCase());
}
}
}
ey.matchPrefix(e, "a=extmap:").forEach((e) => {
t.headerExtensions.push(ey.parseExtmap(e));
});
let r = ey.matchPrefix(e, "a=rtcp-fb:* ").map(ey.parseRtcpFb);
return (
t.codecs.forEach((e) => {
r.forEach((t) => {
e.rtcpFeedback.find(
(e) => e.type === t.type && e.parameter === t.parameter
) || e.rtcpFeedback.push(t);
});
}),
t
);
}),
(ey.writeRtpDescription = function (e, t) {
let n = "";
(n +=
"m=" +
e +
" " +
(t.codecs.length > 0 ? "9" : "0") +
" " +
(t.profile || "UDP/TLS/RTP/SAVPF") +
" " +
t.codecs
.map((e) =>
void 0 !== e.preferredPayloadType
? e.preferredPayloadType
: e.payloadType
)
.join(" ") +
"\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\n"),
t.codecs.forEach((e) => {
n += ey.writeRtpMap(e) + ey.writeFmtp(e) + ey.writeRtcpFb(e);
});
let r = 0;
return (
t.codecs.forEach((e) => {
e.maxptime > r && (r = e.maxptime);
}),
r > 0 && (n += "a=maxptime:" + r + "\r\n"),
t.headerExtensions &&
t.headerExtensions.forEach((e) => {
n += ey.writeExtmap(e);
}),
n
);
}),
(ey.parseRtpEncodingParameters = function (e) {
let t;
let n = [],
r = ey.parseRtpParameters(e),
i = -1 !== r.fecMechanisms.indexOf("RED"),
o = -1 !== r.fecMechanisms.indexOf("ULPFEC"),
s = ey
.matchPrefix(e, "a=ssrc:")
.map((e) => ey.parseSsrcMedia(e))
.filter((e) => "cname" === e.attribute),
a = s.length > 0 && s[0].ssrc,
c = ey.matchPrefix(e, "a=ssrc-group:FID").map((e) =>
e
.substring(17)
.split(" ")
.map((e) => parseInt(e, 10))
);
c.length > 0 && c[0].length > 1 && c[0][0] === a && (t = c[0][1]),
r.codecs.forEach((e) => {
if ("RTX" === e.name.toUpperCase() && e.parameters.apt) {
let r = {
ssrc: a,
codecPayloadType: parseInt(e.parameters.apt, 10),
};
a && t && (r.rtx = { ssrc: t }),
n.push(r),
i &&
(((r = JSON.parse(JSON.stringify(r))).fec = {
ssrc: a,
mechanism: o ? "red+ulpfec" : "red",
}),
n.push(r));
}
}),
0 === n.length && a && n.push({ ssrc: a });
let l = ey.matchPrefix(e, "b=");
return (
l.length &&
((l =
0 === l[0].indexOf("b=TIAS:")
? parseInt(l[0].substring(7), 10)
: 0 === l[0].indexOf("b=AS:")
? 950 * parseInt(l[0].substring(5), 10) - 16e3
: void 0),
n.forEach((e) => {
e.maxBitrate = l;
})),
n
);
}),
(ey.parseRtcpParameters = function (e) {
let t = {},
n = ey
.matchPrefix(e, "a=ssrc:")
.map((e) => ey.parseSsrcMedia(e))
.filter((e) => "cname" === e.attribute)[0];
n && ((t.cname = n.value), (t.ssrc = n.ssrc));
let r = ey.matchPrefix(e, "a=rtcp-rsize");
(t.reducedSize = r.length > 0), (t.compound = 0 === r.length);
let i = ey.matchPrefix(e, "a=rtcp-mux");
return (t.mux = i.length > 0), t;
}),
(ey.writeRtcpParameters = function (e) {
let t = "";
return (
e.reducedSize && (t += "a=rtcp-rsize\r\n"),
e.mux && (t += "a=rtcp-mux\r\n"),
void 0 !== e.ssrc &&
e.cname &&
(t += "a=ssrc:" + e.ssrc + " cname:" + e.cname + "\r\n"),
t
);
}),
(ey.parseMsid = function (e) {
let t;
let n = ey.matchPrefix(e, "a=msid:");
if (1 === n.length)
return { stream: (t = n[0].substring(7).split(" "))[0], track: t[1] };
let r = ey
.matchPrefix(e, "a=ssrc:")
.map((e) => ey.parseSsrcMedia(e))
.filter((e) => "msid" === e.attribute);
if (r.length > 0)
return { stream: (t = r[0].value.split(" "))[0], track: t[1] };
}),
(ey.parseSctpDescription = function (e) {
let t;
let n = ey.parseMLine(e),
r = ey.matchPrefix(e, "a=max-message-size:");
r.length > 0 && (t = parseInt(r[0].substring(19), 10)),
isNaN(t) && (t = 65536);
let i = ey.matchPrefix(e, "a=sctp-port:");
if (i.length > 0)
return {
port: parseInt(i[0].substring(12), 10),
protocol: n.fmt,
maxMessageSize: t,
};
let o = ey.matchPrefix(e, "a=sctpmap:");
if (o.length > 0) {
let e = o[0].substring(10).split(" ");
return { port: parseInt(e[0], 10), protocol: e[1], maxMessageSize: t };
}
}),
(ey.writeSctpDescription = function (e, t) {
let n = [];
return (
(n =
"DTLS/SCTP" !== e.protocol
? [
"m=" + e.kind + " 9 " + e.protocol + " " + t.protocol + "\r\n",
"c=IN IP4 0.0.0.0\r\n",
"a=sctp-port:" + t.port + "\r\n",
]
: [
"m=" + e.kind + " 9 " + e.protocol + " " + t.port + "\r\n",
"c=IN IP4 0.0.0.0\r\n",
"a=sctpmap:" + t.port + " " + t.protocol + " 65535\r\n",
]),
void 0 !== t.maxMessageSize &&
n.push("a=max-message-size:" + t.maxMessageSize + "\r\n"),
n.join("")
);
}),
(ey.generateSessionId = function () {
return Math.random().toString().substr(2, 22);
}),
(ey.writeSessionBoilerplate = function (e, t, n) {
return (
"v=0\r\no=" +
(n || "thisisadapterortc") +
" " +
(e || ey.generateSessionId()) +
" " +
(void 0 !== t ? t : 2) +
" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"
);
}),
(ey.getDirection = function (e, t) {
let n = ey.splitLines(e);
for (let e = 0; e < n.length; e++)
switch (n[e]) {
case "a=sendrecv":
case "a=sendonly":
case "a=recvonly":
case "a=inactive":
return n[e].substring(2);
}
return t ? ey.getDirection(t) : "sendrecv";
}),
(ey.getKind = function (e) {
return ey.splitLines(e)[0].split(" ")[0].substring(2);
}),
(ey.isRejected = function (e) {
return "0" === e.split(" ", 2)[1];
}),
(ey.parseMLine = function (e) {
let t = ey.splitLines(e)[0].substring(2).split(" ");
return {
kind: t[0],
port: parseInt(t[1], 10),
protocol: t[2],
fmt: t.slice(3).join(" "),
};
}),
(ey.parseOLine = function (e) {
let t = ey.matchPrefix(e, "o=")[0].substring(2).split(" ");
return {
username: t[0],
sessionId: t[1],
sessionVersion: parseInt(t[2], 10),
netType: t[3],
addressType: t[4],
address: t[5],
};
}),
(ey.isValidSDP = function (e) {
if ("string" != typeof e || 0 === e.length) return !1;
let t = ey.splitLines(e);
for (let e = 0; e < t.length; e++)
if (t[e].length < 2 || "=" !== t[e].charAt(1)) return !1;
return !0;
}),
(eg = ey);
let ew = (function (
{ window: e } = {},
t = { shimChrome: !0, shimFirefox: !0, shimSafari: !0 }
) {
let n = (function (e) {
let t = { browser: null, version: null };
if (void 0 === e || !e.navigator || !e.navigator.userAgent)
return (t.browser = "Not a browser."), t;
let { navigator: n } = e;
return (
n.mozGetUserMedia
? ((t.browser = "firefox"),
(t.version = p(n.userAgent, /Firefox\/(\d+)\./, 1)))
: n.webkitGetUserMedia ||
(!1 === e.isSecureContext && e.webkitRTCPeerConnection)
? ((t.browser = "chrome"),
(t.version = p(n.userAgent, /Chrom(e|ium)\/(\d+)\./, 2)))
: e.RTCPeerConnection && n.userAgent.match(/AppleWebKit\/(\d+)\./)
? ((t.browser = "safari"),
(t.version = p(n.userAgent, /AppleWebKit\/(\d+)\./, 1)),
(t.supportsUnifiedPlan =
e.RTCRtpTransceiver &&
"currentDirection" in e.RTCRtpTransceiver.prototype))
: (t.browser = "Not a supported browser."),
t
);
})(e),
r = {
browserDetails: n,
commonShim: em,
extractVersion: p,
disableLog: h,
disableWarnings: u,
sdp: eg,
};
switch (n.browser) {
case "chrome":
if (!j || !j.shimPeerConnection || !t.shimChrome) {
f("Chrome shim is not included in this adapter release.");
break;
}
if (null === n.version) {
f("Chrome shim can not determine version, not shimming.");
break;
}
f("adapter.js shimming chrome."),
(r.browserShim = j),
eT(e, n),
eR(e, n),
j.shimGetUserMedia(e, n),
j.shimMediaStream(e, n),
j.shimPeerConnection(e, n),
j.shimOnTrack(e, n),
j.shimAddTrackRemoveTrack(e, n),
j.shimGetSendersWithDtmf(e, n),
j.shimGetStats(e, n),
j.shimSenderReceiverGetStats(e, n),
j.fixNegotiationNeeded(e, n),
e_(e, n),
eC(e, n),
ek(e, n),
ev(e, n),
eb(e, n),
eS(e, n);
break;
case "firefox":
if (!W || !W.shimPeerConnection || !t.shimFirefox) {
f("Firefox shim is not included in this adapter release.");
break;
}
f("adapter.js shimming firefox."),
(r.browserShim = W),
eT(e, n),
eR(e, n),
W.shimGetUserMedia(e, n),
W.shimPeerConnection(e, n),
W.shimOnTrack(e, n),
W.shimRemoveStream(e, n),
W.shimSenderGetStats(e, n),
W.shimReceiverGetStats(e, n),
W.shimRTCDataChannel(e, n),
W.shimAddTransceiver(e, n),
W.shimGetParameters(e, n),
W.shimCreateOffer(e, n),
W.shimCreateAnswer(e, n),
e_(e, n),
ek(e, n),
ev(e, n),
eb(e, n);
break;
case "safari":
if (!eo || !t.shimSafari) {
f("Safari shim is not included in this adapter release.");
break;
}
f("adapter.js shimming safari."),
(r.browserShim = eo),
eT(e, n),
eR(e, n),
eo.shimRTCIceServerUrls(e, n),
eo.shimCreateOfferLegacy(e, n),
eo.shimCallbacksAPI(e, n),
eo.shimLocalStreamsAPI(e, n),
eo.shimRemoteStreamsAPI(e, n),
eo.shimTrackEventTransceiver(e, n),
eo.shimGetUserMedia(e, n),
eo.shimAudioContext(e, n),
e_(e, n),
eC(e, n),
ev(e, n),
eb(e, n),
eS(e, n);
break;
default:
f("Unsupported browser!");
}
return r;
})({ window: "undefined" == typeof window ? void 0 : window }),
eP = ew.default || ew,
eE = new (class {
isWebRTCSupported() {
return "undefined" != typeof RTCPeerConnection;
}
isBrowserSupported() {
let e = this.getBrowser(),
t = this.getVersion();
return (
!!this.supportedBrowsers.includes(e) &&
("chrome" === e
? t >= this.minChromeVersion
: "firefox" === e
? t >= this.minFirefoxVersion
: "safari" === e && !this.isIOS && t >= this.minSafariVersion)
);
}
getBrowser() {
return eP.browserDetails.browser;
}
getVersion() {
return eP.browserDetails.version || 0;
}
isUnifiedPlanSupported() {
let e;
let t = this.getBrowser(),
n = eP.browserDetails.version || 0;
if ("chrome" === t && n < this.minChromeVersion) return !1;
if ("firefox" === t && n >= this.minFirefoxVersion) return !0;
if (
!window.RTCRtpTransceiver ||
!("currentDirection" in RTCRtpTransceiver.prototype)
)
return !1;
let r = !1;
try {
(e = new RTCPeerConnection()).addTransceiver("audio"), (r = !0);
} catch (e) {
} finally {
e && e.close();
}
return r;
}
toString() {
return `Supports:
browser:${this.getBrowser()}
version:${this.getVersion()}
isIOS:${this.isIOS}
isWebRTCSupported:${this.isWebRTCSupported()}
isBrowserSupported:${this.isBrowserSupported()}
isUnifiedPlanSupported:${this.isUnifiedPlanSupported()}`;
}
constructor() {
(this.isIOS = ["iPad", "iPhone", "iPod"].includes(navigator.platform)),
(this.supportedBrowsers = ["firefox", "chrome", "safari"]),
(this.minFirefoxVersion = 59),
(this.minChromeVersion = 72),
(this.minSafariVersion = 605);
}
})(),
eD = (e) => !e || /^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(e),
ex = () => Math.random().toString(36).slice(2),
eI = {
iceServers: [
{ urls: "stun:stun.l.google.com:19302" },
{
urls: [
"turn:eu-0.turn.peerjs.com:3478",
"turn:us-0.turn.peerjs.com:3478",
],
username: "peerjs",
credential: "peerjsp",
},
],
sdpSemantics: "unified-plan",
},
eM = new (class extends n {
noop() {}
blobToArrayBuffer(e, t) {
let n = new FileReader();
return (
(n.onload = function (e) {
e.target && t(e.target.result);
}),
n.readAsArrayBuffer(e),
n
);
}
binaryStringToArrayBuffer(e) {
let t = new Uint8Array(e.length);
for (let n = 0; n < e.length; n++) t[n] = 255 & e.charCodeAt(n);
return t.buffer;
}
isSecure() {
return "https:" === location.protocol;
}
constructor(...e) {
super(...e),
(this.CLOUD_HOST = "0.peerjs.com"),
(this.CLOUD_PORT = 443),
(this.chunkedBrowsers = { Chrome: 1, chrome: 1 }),
(this.defaultConfig = eI),
(this.browser = eE.getBrowser()),
(this.browserVersion = eE.getVersion()),
(this.pack = o),
(this.unpack = i),
(this.supports = (function () {
let e;
let t = {
browser: eE.isBrowserSupported(),
webRTC: eE.isWebRTCSupported(),
audioVideo: !1,
data: !1,
binaryBlob: !1,
reliable: !1,
};
if (!t.webRTC) return t;
try {
let n;
(e = new RTCPeerConnection(eI)), (t.audioVideo = !0);
try {
(n = e.createDataChannel("_PEERJSTEST", { ordered: !0 })),
(t.data = !0),
(t.reliable = !!n.ordered);
try {
(n.binaryType = "blob"), (t.binaryBlob = !eE.isIOS);
} catch (e) {}
} catch (e) {
} finally {
n && n.close();
}
} catch (e) {
} finally {
e && e.close();
}
return t;
})()),
(this.validateId = eD),
(this.randomToken = ex);
}
})();
((_ = w || (w = {}))[(_.Disabled = 0)] = "Disabled"),
(_[(_.Errors = 1)] = "Errors"),
(_[(_.Warnings = 2)] = "Warnings"),
(_[(_.All = 3)] = "All");
var eO = new (class {
get logLevel() {
return this._logLevel;
}
set logLevel(e) {
this._logLevel = e;
}
log(...e) {
this._logLevel >= 3 && this._print(3, ...e);
}
warn(...e) {
this._logLevel >= 2 && this._print(2, ...e);
}
error(...e) {
this._logLevel >= 1 && this._print(1, ...e);
}
setLogFunction(e) {
this._print = e;
}
_print(e, ...t) {
let n = ["PeerJS: ", ...t];
for (let e in n)
n[e] instanceof Error &&
(n[e] = "(" + n[e].name + ") " + n[e].message);
e >= 3
? console.log(...n)
: e >= 2
? console.warn("WARNING", ...n)
: e >= 1 && console.error("ERROR", ...n);
}
constructor() {
this._logLevel = 0;
}
})(),
ej = {},
eL = Object.prototype.hasOwnProperty,
eA = "~";
function eB() {}
function eF(e, t, n) {
(this.fn = e), (this.context = t), (this.once = n || !1);
}
function eU(e, t, n, r, i) {
if ("function" != typeof n)
throw TypeError("The listener must be a function");
var o = new eF(n, r || e, i),
s = eA ? eA + t : t;
return (
e._events[s]
? e._events[s].fn
? (e._events[s] = [e._events[s], o])
: e._events[s].push(o)
: ((e._events[s] = o), e._eventsCount++),
e
);
}
function ez(e, t) {
0 == --e._eventsCount ? (e._events = new eB()) : delete e._events[t];
}
function eN() {
(this._events = new eB()), (this._eventsCount = 0);
}
Object.create &&
((eB.prototype = Object.create(null)), new eB().__proto__ || (eA = !1)),
(eN.prototype.eventNames = function () {
var e,
t,
n = [];
if (0 === this._eventsCount) return n;
for (t in (e = this._events))
eL.call(e, t) && n.push(eA ? t.slice(1) : t);
return Object.getOwnPropertySymbols
? n.concat(Object.getOwnPropertySymbols(e))
: n;
}),
(eN.prototype.listeners = function (e) {
var t = eA ? eA + e : e,
n = this._events[t];
if (!n) return [];
if (n.fn) return [n.fn];
for (var r = 0, i = n.length, o = Array(i); r < i; r++) o[r] = n[r].fn;
return o;
}),
(eN.prototype.listenerCount = function (e) {
var t = eA ? eA + e : e,
n = this._events[t];
return n ? (n.fn ? 1 : n.length) : 0;
}),
(eN.prototype.emit = function (e, t, n, r, i, o) {
var s = eA ? eA + e : e;
if (!this._events[s]) return !1;
var a,
c,
l = this._events[s],
p = arguments.length;
if (l.fn) {
switch ((l.once && this.removeListener(e, l.fn, void 0, !0), p)) {
case 1:
return l.fn.call(l.context), !0;
case 2:
return l.fn.call(l.context, t), !0;
case 3:
return l.fn.call(l.context, t, n), !0;
case 4:
return l.fn.call(l.context, t, n, r), !0;
case 5:
return l.fn.call(l.context, t, n, r, i), !0;
case 6:
return l.fn.call(l.context, t, n, r, i, o), !0;
}
for (c = 1, a = Array(p - 1); c < p; c++) a[c - 1] = arguments[c];
l.fn.apply(l.context, a);
} else {
var d,
h = l.length;
for (c = 0; c < h; c++)
switch (
(l[c].once && this.removeListener(e, l[c].fn, void 0, !0), p)
) {
case 1:
l[c].fn.call(l[c].context);
break;
case 2:
l[c].fn.call(l[c].context, t);
break;
case 3:
l[c].fn.call(l[c].context, t, n);
break;
case 4:
l[c].fn.call(l[c].context, t, n, r);
break;
default:
if (!a)
for (d = 1, a = Array(p - 1); d < p; d++)
a[d - 1] = arguments[d];
l[c].fn.apply(l[c].context, a);
}
}
return !0;
}),
(eN.prototype.on = function (e, t, n) {
return eU(this, e, t, n, !1);
}),
(eN.prototype.once = function (e, t, n) {
return eU(this, e, t, n, !0);
}),
(eN.prototype.removeListener = function (e, t, n, r) {
var i = eA ? eA + e : e;
if (!this._events[i]) return this;
if (!t) return ez(this, i), this;
var o = this._events[i];
if (o.fn)
o.fn !== t || (r && !o.once) || (n && o.context !== n) || ez(this, i);
else {
for (var s = 0, a = [], c = o.length; s < c; s++)
(o[s].fn !== t || (r && !o[s].once) || (n && o[s].context !== n)) &&
a.push(o[s]);
a.length ? (this._events[i] = 1 === a.length ? a[0] : a) : ez(this, i);
}
return this;
}),
(eN.prototype.removeAllListeners = function (e) {
var t;
return (
e
? ((t = eA ? eA + e : e), this._events[t] && ez(this, t))
: ((this._events = new eB()), (this._eventsCount = 0)),
this
);
}),
(eN.prototype.off = eN.prototype.removeListener),
(eN.prototype.addListener = eN.prototype.on),
(eN.prefixed = eA),
(eN.EventEmitter = eN),
(ej = eN),
((C = P || (P = {})).Data = "data"),
(C.Media = "media"),
((v = E || (E = {})).BrowserIncompatible = "browser-incompatible"),
(v.Disconnected = "disconnected"),
(v.InvalidID = "invalid-id"),
(v.InvalidKey = "invalid-key"),
(v.Network = "network"),
(v.PeerUnavailable = "peer-unavailable"),
(v.SslUnavailable = "ssl-unavailable"),
(v.ServerError = "server-error"),
(v.SocketError = "socket-error"),
(v.SocketClosed = "socket-closed"),
(v.UnavailableID = "unavailable-id"),
(v.WebRTC = "webrtc"),
((b = D || (D = {})).NegotiationFailed = "negotiation-failed"),
(b.ConnectionClosed = "connection-closed"),
((k = x || (x = {})).NotOpenYet = "not-open-yet"),
(k.MessageToBig = "message-too-big"),
((S = I || (I = {})).Binary = "binary"),
(S.BinaryUTF8 = "binary-utf8"),
(S.JSON = "json"),
(S.None = "raw"),
((T = M || (M = {})).Message = "message"),
(T.Disconnected = "disconnected"),
(T.Error = "error"),
(T.Close = "close"),
((R = O || (O = {})).Heartbeat = "HEARTBEAT"),
(R.Candidate = "CANDIDATE"),
(R.Offer = "OFFER"),
(R.Answer = "ANSWER"),
(R.Open = "OPEN"),
(R.Error = "ERROR"),
(R.IdTaken = "ID-TAKEN"),
(R.InvalidKey = "INVALID-KEY"),
(R.Leave = "LEAVE"),
(R.Expire = "EXPIRE");
var e$ = {};
e$ = JSON.parse(
'{"name":"peerjs","version":"1.5.2","keywords":["peerjs","webrtc","p2p","rtc"],"description":"PeerJS client","homepage":"https://peerjs.com","bugs":{"url":"https://github.com/peers/peerjs/issues"},"repository":{"type":"git","url":"https://github.com/peers/peerjs"},"license":"MIT","contributors":["Michelle Bu <michelle@michellebu.com>","afrokick <devbyru@gmail.com>","ericz <really.ez@gmail.com>","Jairo <kidandcat@gmail.com>","Jonas Gloning <34194370+jonasgloning@users.noreply.github.com>","Jairo Caro-Accino Viciana <jairo@galax.be>","Carlos Caballero <carlos.caballero.gonzalez@gmail.com>","hc <hheennrryy@gmail.com>","Muhammad Asif <capripio@gmail.com>","PrashoonB <prashoonbhattacharjee@gmail.com>","Harsh Bardhan Mishra <47351025+HarshCasper@users.noreply.github.com>","akotynski <aleksanderkotbury@gmail.com>","lmb <i@lmb.io>","Jairooo <jairocaro@msn.com>","Moritz Stückler <moritz.stueckler@gmail.com>","Simon <crydotsnakegithub@gmail.com>","Denis Lukov <denismassters@gmail.com>","Philipp Hancke <fippo@andyet.net>","Hans Oksendahl <hansoksendahl@gmail.com>","Jess <jessachandler@gmail.com>","khankuan <khankuan@gmail.com>","DUODVK <kurmanov.work@gmail.com>","XiZhao <kwang1imsa@gmail.com>","Matthias Lohr <matthias@lohr.me>","=frank tree <=frnktrb@googlemail.com>","Andre Eckardt <aeckardt@outlook.com>","Chris Cowan <agentme49@gmail.com>","Alex Chuev <alex@chuev.com>","alxnull <alxnull@e.mail.de>","Yemel Jardi <angel.jardi@gmail.com>","Ben Parnell <benjaminparnell.94@gmail.com>","Benny Lichtner <bennlich@gmail.com>","fresheneesz <bitetrudpublic@gmail.com>","bob.barstead@exaptive.com <bob.barstead@exaptive.com>","chandika <chandika@gmail.com>","emersion <contact@emersion.fr>","Christopher Van <cvan@users.noreply.github.com>","eddieherm <edhermoso@gmail.com>","Eduardo Pinho <enet4mikeenet@gmail.com>","Evandro Zanatta <ezanatta@tray.net.br>","Gardner Bickford <gardner@users.noreply.github.com>","Gian Luca <gianluca.cecchi@cynny.com>","PatrickJS <github@gdi2290.com>","jonnyf <github@jonathanfoss.co.uk>","Hizkia Felix <hizkifw@gmail.com>","Hristo Oskov <hristo.oskov@gmail.com>","Isaac Madwed <i.madwed@gmail.com>","Ilya Konanykhin <ilya.konanykhin@gmail.com>","jasonbarry <jasbarry@me.com>","Jonathan Burke <jonathan.burke.1311@googlemail.com>","Josh Hamit <josh.hamit@gmail.com>","Jordan Austin <jrax86@gmail.com>","Joel Wetzell <jwetzell@yahoo.com>","xizhao <kevin.wang@cloudera.com>","Alberto Torres <kungfoobar@gmail.com>","Jonathan Mayol <mayoljonathan@gmail.com>","Jefferson Felix <me@jsfelix.dev>","Rolf Erik Lekang <me@rolflekang.com>","Kevin Mai-Husan Chia <mhchia@users.noreply.github.com>","Pepijn de Vos <pepijndevos@gmail.com>","JooYoung <qkdlql@naver.com>","Tobias Speicher <rootcommander@gmail.com>","Steve Blaurock <sblaurock@gmail.com>","Kyrylo Shegeda <shegeda@ualberta.ca>","Diwank Singh Tomer <singh@diwank.name>","Sören Balko <Soeren.Balko@gmail.com>","Arpit Solanki <solankiarpit1997@gmail.com>","Yuki Ito <yuki@gnnk.net>","Artur Zayats <zag2art@gmail.com>"],"funding":{"type":"opencollective","url":"https://opencollective.com/peer"},"collective":{"type":"opencollective","url":"https://opencollective.com/peer"},"files":["dist/*"],"sideEffects":["lib/global.ts","lib/supports.ts"],"main":"dist/bundler.cjs","module":"dist/bundler.mjs","browser-minified":"dist/peerjs.min.js","browser-unminified":"dist/peerjs.js","browser-minified-cbor":"dist/serializer.cbor.mjs","browser-minified-msgpack":"dist/serializer.msgpack.mjs","types":"dist/types.d.ts","engines":{"node":">= 14"},"targets":{"types":{"source":"lib/exports.ts"},"main":{"source":"lib/exports.ts","sourceMap":{"inlineSources":true}},"module":{"source":"lib/exports.ts","includeNodeModules":["eventemitter3"],"sourceMap":{"inlineSources":true}},"browser-minified":{"context":"browser","outputFormat":"global","optimize":true,"engines":{"browsers":"chrome >= 83, edge >= 83, firefox >= 80, safari >= 15"},"source":"lib/global.ts"},"browser-unminified":{"context":"browser","outputFormat":"global","optimize":false,"engines":{"browsers":"chrome >= 83, edge >= 83, firefox >= 80, safari >= 15"},"source":"lib/global.ts"},"browser-minified-cbor":{"context":"browser","outputFormat":"esmodule","isLibrary":true,"optimize":true,"engines":{"browsers":"chrome >= 83, edge >= 83, firefox >= 102, safari >= 15"},"source":"lib/dataconnection/StreamConnection/Cbor.ts"},"browser-minified-msgpack":{"context":"browser","outputFormat":"esmodule","isLibrary":true,"optimize":true,"engines":{"browsers":"chrome >= 83, edge >= 83, firefox >= 102, safari >= 15"},"source":"lib/dataconnection/StreamConnection/MsgPack.ts"}},"scripts":{"contributors":"git-authors-cli --print=false && prettier --write package.json && git add package.json package-lock.json && git commit -m \\"chore(contributors): update and sort contributors list\\"","check":"tsc --noEmit && tsc -p e2e/tsconfig.json --noEmit","watch":"parcel watch","build":"rm -rf dist && parcel build","prepublishOnly":"npm run build","test":"jest","test:watch":"jest --watch","coverage":"jest --coverage --collectCoverageFrom=\\"./lib/**\\"","format":"prettier --write .","format:check":"prettier --check .","semantic-release":"semantic-release","e2e":"wdio run e2e/wdio.local.conf.ts","e2e:bstack":"wdio run e2e/wdio.bstack.conf.ts"},"devDependencies":{"@parcel/config-default":"^2.9.3","@parcel/packager-ts":"^2.9.3","@parcel/transformer-typescript-tsc":"^2.9.3","@parcel/transformer-typescript-types":"^2.9.3","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@swc/core":"^1.3.27","@swc/jest":"^0.2.24","@types/jasmine":"^4.3.4","@wdio/browserstack-service":"^8.11.2","@wdio/cli":"^8.11.2","@wdio/globals":"^8.11.2","@wdio/jasmine-framework":"^8.11.2","@wdio/local-runner":"^8.11.2","@wdio/spec-reporter":"^8.11.2","@wdio/types":"^8.10.4","http-server":"^14.1.1","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","mock-socket":"^9.0.0","parcel":"^2.9.3","prettier":"^3.0.0","semantic-release":"^21.0.0","ts-node":"^10.9.1","typescript":"^5.0.0","wdio-geckodriver-service":"^5.0.1"},"dependencies":{"@msgpack/msgpack":"^2.8.0","cbor-x":"1.5.4","eventemitter3":"^4.0.7","peerjs-js-binarypack":"^2.1.0","webrtc-adapter":"^8.0.0"},"alias":{"process":false,"buffer":false}}'
);
class eJ extends ej.EventEmitter {
start(e, t) {
this._id = e;
let n = `${this._baseUrl}&id=${e}&token=${t}`;
!this._socket &&
this._disconnected &&
((this._socket = new WebSocket(n + "&version=" + e$.version)),
(this._disconnected = !1),
(this._socket.onmessage = (e) => {
let t;
try {
(t = JSON.parse(e.data)), eO.log("Server message received:", t);
} catch (t) {
eO.log("Invalid server message", e.data);
return;
}
this.emit(M.Message, t);
}),
(this._socket.onclose = (e) => {
this._disconnected ||
(eO.log("Socket closed.", e),
this._cleanup(),
(this._disconnected = !0),
this.emit(M.Disconnected));
}),
(this._socket.onopen = () => {
this._disconnected ||
(this._sendQueuedMessages(),
eO.log("Socket open"),
this._scheduleHeartbeat());
}));
}
_scheduleHeartbeat() {
this._wsPingTimer = setTimeout(() => {
this._sendHeartbeat();
}, this.pingInterval);
}
_sendHeartbeat() {
if (!this._wsOpen()) {
eO.log("Cannot send heartbeat, because socket closed");
return;
}
let e = JSON.stringify({ type: O.Heartbeat });
this._socket.send(e), this._scheduleHeartbeat();
}
_wsOpen() {
return !!this._socket && 1 === this._socket.readyState;
}
_sendQueuedMessages() {
let e = [...this._messagesQueue];
for (let t of ((this._messagesQueue = []), e)) this.send(t);
}
send(e) {
if (this._disconnected) return;
if (!this._id) {
this._messagesQueue.push(e);
return;
}
if (!e.type) {
this.emit(M.Error, "Invalid message");
return;
}
if (!this._wsOpen()) return;
let t = JSON.stringify(e);
this._socket.send(t);
}
close() {
this._disconnected || (this._cleanup(), (this._disconnected = !0));
}
_cleanup() {
this._socket &&
((this._socket.onopen =
this._socket.onmessage =
this._socket.onclose =
null),
this._socket.close(),
(this._socket = void 0)),
clearTimeout(this._wsPingTimer);
}
constructor(e, t, n, r, i, o = 5e3) {
super(),
(this.pingInterval = o),
(this._disconnected = !0),
(this._messagesQueue = []),
(this._baseUrl =
(e ? "wss://" : "ws://") + t + ":" + n + r + "peerjs?key=" + i);
}
}
class eV {
startConnection(e) {
let t = this._startPeerConnection();
if (
((this.connection.peerConnection = t),
this.connection.type === P.Media &&
e._stream &&
this._addTracksToConnection(e._stream, t),
e.originator)
) {
let n = this.connection,
r = { ordered: !!e.reliable },
i = t.createDataChannel(n.label, r);
n._initializeDataChannel(i), this._makeOffer();
} else this.handleSDP("OFFER", e.sdp);
}
_startPeerConnection() {
eO.log("Creating RTCPeerConnection.");
let e = new RTCPeerConnection(this.connection.provider.options.config);
return this._setupListeners(e), e;
}
_setupListeners(e) {
let t = this.connection.peer,
n = this.connection.connectionId,
r = this.connection.type,
i = this.connection.provider;
eO.log("Listening for ICE candidates."),
(e.onicecandidate = (e) => {
e.candidate &&
e.candidate.candidate &&
(eO.log(`Received ICE candidates for ${t}:`, e.candidate),
i.socket.send({
type: O.Candidate,
payload: { candidate: e.candidate, type: r, connectionId: n },
dst: t,
}));
}),
(e.oniceconnectionstatechange = () => {
switch (e.iceConnectionState) {
case "failed":
eO.log(
"iceConnectionState is failed, closing connections to " + t
),
this.connection.emitError(
D.NegotiationFailed,
"Negotiation of connection to " + t + " failed."
),
this.connection.close();
break;
case "closed":
eO.log(
"iceConnectionState is closed, closing connections to " + t
),
this.connection.emitError(
D.ConnectionClosed,
"Connection to " + t + " closed."
),
this.connection.close();
break;
case "disconnected":
eO.log(
"iceConnectionState changed to disconnected on the connection with " +
t
);
break;
case "completed":
e.onicecandidate = () => {};
}
this.connection.emit("iceStateChanged", e.iceConnectionState);
}),
eO.log("Listening for data channel"),
(e.ondatachannel = (e) => {
eO.log("Received data channel");
let r = e.channel;
i.getConnection(t, n)._initializeDataChannel(r);
}),
eO.log("Listening for remote stream"),
(e.ontrack = (e) => {
eO.log("Received remote stream");
let r = e.streams[0],
o = i.getConnection(t, n);
o.type === P.Media && this._addStreamToMediaConnection(r, o);
});
}
cleanup() {
eO.log("Cleaning up PeerConnection to " + this.connection.peer);
let e = this.connection.peerConnection;
if (!e) return;
(this.connection.peerConnection = null),
(e.onicecandidate =
e.oniceconnectionstatechange =
e.ondatachannel =
e.ontrack =
() => {});
let t = "closed" !== e.signalingState,
n = !1,
r = this.connection.dataChannel;
r && (n = !!r.readyState && "closed" !== r.readyState),
(t || n) && e.close();
}
async _makeOffer() {
let e = this.connection.peerConnection,
t = this.connection.provider;
try {
let n = await e.createOffer(this.connection.options.constraints);
eO.log("Created offer."),
this.connection.options.sdpTransform &&
"function" == typeof this.connection.options.sdpTransform &&
(n.sdp = this.connection.options.sdpTransform(n.sdp) || n.sdp);
try {
await e.setLocalDescription(n),
eO.log("Set localDescription:", n, `for:${this.connection.peer}`);
let r = {
sdp: n,
type: this.connection.type,
connectionId: this.connection.connectionId,
metadata: this.connection.metadata,
};
if (this.connection.type === P.Data) {
let e = this.connection;
r = {
...r,
label: e.label,
reliable: e.reliable,
serialization: e.serialization,
};
}
t.socket.send({
type: O.Offer,
payload: r,
dst: this.connection.peer,
});
} catch (e) {
"OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer" !=
e &&
(t.emitError(E.WebRTC, e),
eO.log("Failed to setLocalDescription, ", e));
}
} catch (e) {
t.emitError(E.WebRTC, e), eO.log("Failed to createOffer, ", e);
}
}
async _makeAnswer() {
let e = this.connection.peerConnection,
t = this.connection.provider;
try {
let n = await e.createAnswer();
eO.log("Created answer."),
this.connection.options.sdpTransform &&
"function" == typeof this.connection.options.sdpTransform &&
(n.sdp = this.connection.options.sdpTransform(n.sdp) || n.sdp);
try {
await e.setLocalDescription(n),
eO.log("Set localDescription:", n, `for:${this.connection.peer}`),
t.socket.send({
type: O.Answer,
payload: {
sdp: n,
type: this.connection.type,
connectionId: this.connection.connectionId,
},
dst: this.connection.peer,
});
} catch (e) {
t.emitError(E.WebRTC, e),
eO.log("Failed to setLocalDescription, ", e);
}
} catch (e) {
t.emitError(E.WebRTC, e), eO.log("Failed to create answer, ", e);
}
}
async handleSDP(e, t) {
t = new RTCSessionDescription(t);
let n = this.connection.peerConnection,
r = this.connection.provider;
eO.log("Setting remote description", t);
try {
await n.setRemoteDescription(t),
eO.log(`Set remoteDescription:${e} for:${this.connection.peer}`),
"OFFER" === e && (await this._makeAnswer());
} catch (e) {
r.emitError(E.WebRTC, e), eO.log("Failed to setRemoteDescription, ", e);
}
}
async handleCandidate(e) {
eO.log("handleCandidate:", e);
try {
await this.connection.peerConnection.addIceCandidate(e),
eO.log(`Added ICE candidate for:${this.connection.peer}`);
} catch (e) {
this.connection.provider.emitError(E.WebRTC, e),
eO.log("Failed to handleCandidate, ", e);
}
}
_addTracksToConnection(e, t) {
if (
(eO.log(`add tracks from stream ${e.id} to peer connection`),
!t.addTrack)
)
return eO.error(
"Your browser does't support RTCPeerConnection#addTrack. Ignored."
);
e.getTracks().forEach((n) => {
t.addTrack(n, e);
});
}
_addStreamToMediaConnection(e, t) {
eO.log(`add stream ${e.id} to media connection ${t.connectionId}`),
t.addStream(e);
}
constructor(e) {
this.connection = e;
}
}
class eG extends ej.EventEmitter {
emitError(e, t) {
eO.error("Error:", t), this.emit("error", new eW(`${e}`, t));
}
}
class eW extends Error {
constructor(e, t) {
"string" == typeof t ? super(t) : (super(), Object.assign(this, t)),
(this.type = e);
}
}
class eH extends eG {
get open() {
return this._open;
}
constructor(e, t, n) {
super(),
(this.peer = e),
(this.provider = t),
(this.options = n),
(this._open = !1),
(this.metadata = n.metadata);
}
}
class eY extends eH {
get type() {
return P.Media;
}
get localStream() {
return this._localStream;
}
get remoteStream() {
return this._remoteStream;
}
_initializeDataChannel(e) {
(this.dataChannel = e),
(this.dataChannel.onopen = () => {
eO.log(`DC#${this.connectionId} dc connection success`),
this.emit("willCloseOnRemote");
}),
(this.dataChannel.onclose = () => {
eO.log(`DC#${this.connectionId} dc closed for:`, this.peer),
this.close();
});
}
addStream(e) {
eO.log("Receiving stream", e),
(this._remoteStream = e),
super.emit("stream", e);
}
handleMessage(e) {
let t = e.type,
n = e.payload;
switch (e.type) {
case O.Answer:
this._negotiator.handleSDP(t, n.sdp), (this._open = !0);
break;
case O.Candidate:
this._negotiator.handleCandidate(n.candidate);
break;
default:
eO.warn(`Unrecognized message type:${t} from peer:${this.peer}`);
}
}
answer(e, t = {}) {
if (this._localStream) {
eO.warn(
"Local stream already exists on this MediaConnection. Are you answering a call twice?"
);
return;
}
for (let n of ((this._localStream = e),
t && t.sdpTransform && (this.options.sdpTransform = t.sdpTransform),
this._negotiator.startConnection({
...this.options._payload,
_stream: e,
}),
this.provider._getMessages(this.connectionId)))
this.handleMessage(n);
this._open = !0;
}
close() {
this._negotiator &&
(this._negotiator.cleanup(), (this._negotiator = null)),
(this._localStream = null),
(this._remoteStream = null),
this.provider &&
(this.provider._removeConnection(this), (this.provider = null)),
this.options && this.options._stream && (this.options._stream = null),
this.open && ((this._open = !1), super.emit("close"));
}
constructor(e, t, n) {
super(e, t, n),
(this._localStream = this.options._stream),
(this.connectionId =
this.options.connectionId || eY.ID_PREFIX + eM.randomToken()),
(this._negotiator = new eV(this)),
this._localStream &&
this._negotiator.startConnection({
_stream: this._localStream,
originator: !0,
});
}
}
eY.ID_PREFIX = "mc_";
class eK {
_buildRequest(e) {
let t = this._options.secure ? "https" : "http",
{ host: n, port: r, path: i, key: o } = this._options,
s = new URL(`${t}://${n}:${r}${i}${o}/${e}`);
return (
s.searchParams.set("ts", `${Date.now()}${Math.random()}`),
s.searchParams.set("version", e$.version),
fetch(s.href, { referrerPolicy: this._options.referrerPolicy })
);
}
async retrieveId() {
try {
let e = await this._buildRequest("id");
if (200 !== e.status) throw Error(`Error. Status:${e.status}`);
return e.text();
} catch (t) {
eO.error("Error retrieving ID", t);
let e = "";
throw (
("/" === this._options.path &&
this._options.host !== eM.CLOUD_HOST &&
(e =
" If you passed in a `path` to your self-hosted PeerServer, you'll also need to pass in that same path when creating a new Peer."),
Error("Could not get an ID from the server." + e))
);
}
}
async listAllPeers() {
try {
let e = await this._buildRequest("peers");
if (200 !== e.status) {
if (401 === e.status) {
let e = "";
throw (
((e =
this._options.host === eM.CLOUD_HOST
? "It looks like you're using the cloud server. You can email team@peerjs.com to enable peer listing for your API key."
: "You need to enable `allow_discovery` on your self-hosted PeerServer to use this feature."),
Error(
"It doesn't look like you have permission to list peers IDs. " +
e
))
);
}
throw Error(`Error. Status:${e.status}`);
}
return e.json();
} catch (e) {
throw (
(eO.error("Error retrieving list peers", e),
Error("Could not get list peers from the server." + e))
);
}
}
constructor(e) {
this._options = e;
}
}
class eX extends eH {
get type() {
return P.Data;
}
_initializeDataChannel(e) {
(this.dataChannel = e),
(this.dataChannel.onopen = () => {
eO.log(`DC#${this.connectionId} dc connection success`),
(this._open = !0),
this.emit("open");
}),
(this.dataChannel.onmessage = (e) => {
eO.log(`DC#${this.connectionId} dc onmessage:`, e.data);
}),
(this.dataChannel.onclose = () => {
eO.log(`DC#${this.connectionId} dc closed for:`, this.peer),
this.close();
});
}
close(e) {
if (e?.flush) {
this.send({ __peerData: { type: "close" } });
return;
}
this._negotiator &&
(this._negotiator.cleanup(), (this._negotiator = null)),
this.provider &&
(this.provider._removeConnection(this), (this.provider = null)),
this.dataChannel &&
((this.dataChannel.onopen = null),
(this.dataChannel.onmessage = null),
(this.dataChannel.onclose = null),
(this.dataChannel = null)),
this.open && ((this._open = !1), super.emit("close"));
}
send(e, t = !1) {
if (!this.open) {
this.emitError(
x.NotOpenYet,
"Connection is not open. You should listen for the `open` event before sending messages."
);
return;
}
return this._send(e, t);
}
async handleMessage(e) {
let t = e.payload;
switch (e.type) {
case O.Answer:
await this._negotiator.handleSDP(e.type, t.sdp);
break;
case O.Candidate:
await this._negotiator.handleCandidate(t.candidate);
break;
default:
eO.warn(
"Unrecognized message type:",
e.type,
"from peer:",
this.peer
);
}
}
constructor(e, t, n) {
super(e, t, n),
(this.connectionId = this.options.connectionId || eX.ID_PREFIX + ex()),
(this.label = this.options.label || this.connectionId),
(this.reliable = !!this.options.reliable),
(this._negotiator = new eV(this)),
this._negotiator.startConnection(
this.options._payload || { originator: !0, reliable: this.reliable }
);
}
}
(eX.ID_PREFIX = "dc_"), (eX.MAX_BUFFERED_AMOUNT = 8388608);
class eq extends eX {
get bufferSize() {
return this._bufferSize;
}
_initializeDataChannel(e) {
super._initializeDataChannel(e),
(this.dataChannel.binaryType = "arraybuffer"),
this.dataChannel.addEventListener("message", (e) =>
this._handleDataMessage(e)
);
}
_bufferedSend(e) {
(this._buffering || !this._trySend(e)) &&
(this._buffer.push(e), (this._bufferSize = this._buffer.length));
}
_trySend(e) {
if (!this.open) return !1;
if (this.dataChannel.bufferedAmount > eX.MAX_BUFFERED_AMOUNT)
return (
(this._buffering = !0),
setTimeout(() => {
(this._buffering = !1), this._tryBuffer();
}, 50),
!1
);
try {
this.dataChannel.send(e);
} catch (e) {
return (
eO.error(`DC#:${this.connectionId} Error when sending:`, e),
(this._buffering = !0),
this.close(),
!1
);
}
return !0;
}
_tryBuffer() {
if (!this.open || 0 === this._buffer.length) return;
let e = this._buffer[0];
this._trySend(e) &&
(this._buffer.shift(),
(this._bufferSize = this._buffer.length),
this._tryBuffer());
}
close(e) {
if (e?.flush) {
this.send({ __peerData: { type: "close" } });
return;
}
(this._buffer = []), (this._bufferSize = 0), super.close();
}
constructor(...e) {
super(...e),
(this._buffer = []),
(this._bufferSize = 0),
(this._buffering = !1);
}
}
class eQ extends eq {
close(e) {
super.close(e), (this._chunkedData = {});
}
_handleDataMessage({ data: e }) {
let t = i(e),
n = t.__peerData;
if (n) {
if ("close" === n.type) {
this.close();
return;
}
this._handleChunk(t);
return;
}
this.emit("data", t);
}
_handleChunk(e) {
let t = e.__peerData,
n = this._chunkedData[t] || { data: [], count: 0, total: e.total };
if (
((n.data[e.n] = new Uint8Array(e.data)),
n.count++,
(this._chunkedData[t] = n),
n.total === n.count)
) {
delete this._chunkedData[t];
let e = (function (e) {
let t = 0;
for (let n of e) t += n.byteLength;
let n = new Uint8Array(t),
r = 0;
for (let t of e) n.set(t, r), (r += t.byteLength);
return n;
})(n.data);
this._handleDataMessage({ data: e });
}
}
_send(e, t) {
let n = o(e);
if (n instanceof Promise) return this._send_blob(n);
if (!t && n.byteLength > this.chunker.chunkedMTU) {
this._sendChunks(n);
return;
}
this._bufferedSend(n);
}
async _send_blob(e) {
let t = await e;
if (t.byteLength > this.chunker.chunkedMTU) {
this._sendChunks(t);
return;
}
this._bufferedSend(t);
}
_sendChunks(e) {
let t = this.chunker.chunk(e);
for (let e of (eO.log(
`DC#${this.connectionId} Try to send ${t.length} chunks...`
),
t))
this.send(e, !0);
}
constructor(e, t, r) {
super(e, t, r),
(this.chunker = new n()),
(this.serialization = I.Binary),
(this._chunkedData = {});
}
}
class eZ extends eq {
_handleDataMessage({ data: e }) {
super.emit("data", e);
}
_send(e, t) {
this._bufferedSend(e);
}
constructor(...e) {
super(...e), (this.serialization = I.None);
}
}
class e0 extends eq {
_handleDataMessage({ data: e }) {
let t = this.parse(this.decoder.decode(e)),
n = t.__peerData;
if (n && "close" === n.type) {
this.close();
return;
}
this.emit("data", t);
}
_send(e, t) {
let n = this.encoder.encode(this.stringify(e));
if (n.byteLength >= eM.chunkedMTU) {
this.emitError(x.MessageToBig, "Message too big for JSON channel");
return;
}
this._bufferedSend(n);
}
constructor(...e) {
super(...e),
(this.serialization = I.JSON),
(this.encoder = new TextEncoder()),
(this.decoder = new TextDecoder()),
(this.stringify = JSON.stringify),
(this.parse = JSON.parse);
}
}
class e1 extends eG {
get id() {
return this._id;
}
get options() {
return this._options;
}
get open() {
return this._open;
}
get socket() {
return this._socket;
}
get connections() {
let e = Object.create(null);
for (let [t, n] of this._connections) e[t] = n;
return e;
}
get destroyed() {
return this._destroyed;
}
get disconnected() {
return this._disconnected;
}
_createServerConnection() {
let e = new eJ(
this._options.secure,
this._options.host,
this._options.port,
this._options.path,
this._options.key,
this._options.pingInterval
);
return (
e.on(M.Message, (e) => {
this._handleMessage(e);
}),
e.on(M.Error, (e) => {
this._abort(E.SocketError, e);
}),
e.on(M.Disconnected, () => {
this.disconnected ||
(this.emitError(E.Network, "Lost connection to server."),
this.disconnect());
}),
e.on(M.Close, () => {
this.disconnected ||
this._abort(E.SocketClosed, "Underlying socket is already closed.");
}),
e
);
}
_initialize(e) {
(this._id = e), this.socket.start(e, this._options.token);
}
_handleMessage(e) {
let t = e.type,
n = e.payload,
r = e.src;
switch (t) {
case O.Open:
(this._lastServerId = this.id),
(this._open = !0),
this.emit("open", this.id);
break;
case O.Error:
this._abort(E.ServerError, n.msg);
break;
case O.IdTaken:
this._abort(E.UnavailableID, `ID "${this.id}" is taken`);
break;
case O.InvalidKey:
this._abort(
E.InvalidKey,
`API KEY "${this._options.key}" is invalid`
);
break;
case O.Leave:
eO.log(`Received leave message from ${r}`),
this._cleanupPeer(r),
this._connections.delete(r);
break;
case O.Expire:
this.emitError(E.PeerUnavailable, `Could not connect to peer ${r}`);
break;
case O.Offer: {
let e = n.connectionId,
t = this.getConnection(r, e);
if (
(t &&
(t.close(),
eO.warn(`Offer received for existing Connection ID:${e}`)),
n.type === P.Media)
) {
let i = new eY(r, this, {
connectionId: e,
_payload: n,
metadata: n.metadata,
});
(t = i), this._addConnection(r, t), this.emit("call", i);
} else if (n.type === P.Data) {
let i = new this._serializers[n.serialization](r, this, {
connectionId: e,
_payload: n,
metadata: n.metadata,
label: n.label,
serialization: n.serialization,
reliable: n.reliable,
});
(t = i), this._addConnection(r, t), this.emit("connection", i);
} else {
eO.warn(`Received malformed connection type:${n.type}`);
return;
}
for (let n of this._getMessages(e)) t.handleMessage(n);
break;
}
default: {
if (!n) {
eO.warn(`You received a malformed message from ${r} of type ${t}`);
return;
}
let i = n.connectionId,
o = this.getConnection(r, i);
o && o.peerConnection
? o.handleMessage(e)
: i
? this._storeMessage(i, e)
: eO.warn("You received an unrecognized message:", e);
}
}
}
_storeMessage(e, t) {
this._lostMessages.has(e) || this._lostMessages.set(e, []),
this._lostMessages.get(e).push(t);
}
_getMessages(e) {
let t = this._lostMessages.get(e);
return t ? (this._lostMessages.delete(e), t) : [];
}
connect(e, t = {}) {
if (((t = { serialization: "default", ...t }), this.disconnected)) {
eO.warn(
"You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect, or call reconnect on this peer if you believe its ID to still be available."
),
this.emitError(
E.Disconnected,
"Cannot connect to new Peer after disconnecting from server."
);
return;
}
let n = new this._serializers[t.serialization](e, this, t);
return this._addConnection(e, n), n;
}
call(e, t, n = {}) {
if (this.disconnected) {
eO.warn(
"You cannot connect to a new Peer because you called .disconnect() on this Peer and ended your connection with the server. You can create a new Peer to reconnect."
),
this.emitError(
E.Disconnected,
"Cannot connect to new Peer after disconnecting from server."
);
return;
}
if (!t) {
eO.error(
"To call a peer, you must provide a stream from your browser's `getUserMedia`."
);
return;
}
let r = new eY(e, this, { ...n, _stream: t });
return this._addConnection(e, r), r;
}
_addConnection(e, t) {
eO.log(`add connection ${t.type}:${t.connectionId} to peerId:${e}`),
this._connections.has(e) || this._connections.set(e, []),
this._connections.get(e).push(t);
}
_removeConnection(e) {
let t = this._connections.get(e.peer);
if (t) {
let n = t.indexOf(e);
-1 !== n && t.splice(n, 1);
}
this._lostMessages.delete(e.connectionId);
}
getConnection(e, t) {
let n = this._connections.get(e);
if (!n) return null;
for (let e of n) if (e.connectionId === t) return e;
return null;
}
_delayedAbort(e, t) {
setTimeout(() => {
this._abort(e, t);
}, 0);
}
_abort(e, t) {
eO.error("Aborting!"),
this.emitError(e, t),
this._lastServerId ? this.disconnect() : this.destroy();
}
destroy() {
this.destroyed ||
(eO.log(`Destroy peer with ID:${this.id}`),
this.disconnect(),
this._cleanup(),
(this._destroyed = !0),
this.emit("close"));
}
_cleanup() {
for (let e of this._connections.keys())
this._cleanupPeer(e), this._connections.delete(e);
this.socket.removeAllListeners();
}
_cleanupPeer(e) {
let t = this._connections.get(e);
if (t) for (let e of t) e.close();
}
disconnect() {
if (this.disconnected) return;
let e = this.id;
eO.log(`Disconnect peer with ID:${e}`),
(this._disconnected = !0),
(this._open = !1),
this.socket.close(),
(this._lastServerId = e),
(this._id = null),
this.emit("disconnected", e);
}
reconnect() {
if (this.disconnected && !this.destroyed)
eO.log(
`Attempting reconnection to server with ID ${this._lastServerId}`
),
(this._disconnected = !1),
this._initialize(this._lastServerId);
else if (this.destroyed)
throw Error(
"This peer cannot reconnect to the server. It has already been destroyed."
);
else if (this.disconnected || this.open)
throw Error(
`Peer ${this.id} cannot reconnect because it is not disconnected from the server!`
);
else
eO.error(
"In a hurry? We're still trying to make the initial connection!"
);
}
listAllPeers(e = (e) => {}) {
this._api
.listAllPeers()
.then((t) => e(t))
.catch((e) => this._abort(E.ServerError, e));
}
constructor(e, t) {
let n;
if (
(super(),
(this._serializers = {
raw: eZ,
json: e0,
binary: eQ,
"binary-utf8": eQ,
default: eQ,
}),
(this._id = null),
(this._lastServerId = null),
(this._destroyed = !1),
(this._disconnected = !1),
(this._open = !1),
(this._connections = new Map()),
(this._lostMessages = new Map()),
e && e.constructor == Object ? (t = e) : e && (n = e.toString()),
(t = {
debug: 0,
host: eM.CLOUD_HOST,
port: eM.CLOUD_PORT,
path: "/",
key: e1.DEFAULT_KEY,
token: eM.randomToken(),
config: eM.defaultConfig,
referrerPolicy: "strict-origin-when-cross-origin",
serializers: {},
...t,
}),
(this._options = t),
(this._serializers = {
...this._serializers,
...this.options.serializers,
}),
"/" === this._options.host &&
(this._options.host = window.location.hostname),
this._options.path &&
("/" !== this._options.path[0] &&
(this._options.path = "/" + this._options.path),
"/" !== this._options.path[this._options.path.length - 1] &&
(this._options.path += "/")),
void 0 === this._options.secure && this._options.host !== eM.CLOUD_HOST
? (this._options.secure = eM.isSecure())
: this._options.host == eM.CLOUD_HOST && (this._options.secure = !0),
this._options.logFunction &&
eO.setLogFunction(this._options.logFunction),
(eO.logLevel = this._options.debug || 0),
(this._api = new eK(t)),
(this._socket = this._createServerConnection()),
!eM.supports.audioVideo && !eM.supports.data)
) {
this._delayedAbort(
E.BrowserIncompatible,
"The current browser does not support WebRTC"
);
return;
}
if (n && !eM.validateId(n)) {
this._delayedAbort(E.InvalidID, `ID "${n}" is invalid`);
return;
}
n
? this._initialize(n)
: this._api
.retrieveId()
.then((e) => this._initialize(e))
.catch((e) => this._abort(E.ServerError, e));
}
}
(e1.DEFAULT_KEY = "peerjs"),
(window.peerjs = { Peer: e1, util: eM }),
(window.Peer = e1);
})();
//# sourceMappingURL=peerjs.min.js.map
/**
* @license
* Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
*/
;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function e(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n););return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;
return true}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!(null==n||!n.length)&&-1<v(n,t,0)}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);
return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function p(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function _(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function v(n,t,r){if(t===t)n:{--r;for(var e=n.length;++r<e;)if(n[r]===t){n=r;break n}n=-1}else n=_(n,d,r);return n}function g(n,t,r,e){
--r;for(var u=n.length;++r<u;)if(e(n[r],t))return r;return-1}function d(n){return n!==n}function y(n,t){var r=null==n?0:n.length;return r?m(n,t)/r:F}function b(n){return function(t){return null==t?T:t[n]}}function x(n){return function(t){return null==n?T:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function w(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function m(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==T&&(r=r===T?i:r+i)}return r;
}function A(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function E(n,t){return c(t,function(t){return[t,n[t]]})}function k(n){return function(t){return n(t)}}function S(n,t){return c(t,function(t){return n[t]})}function O(n,t){return n.has(t)}function I(n,t){for(var r=-1,e=n.length;++r<e&&-1<v(t,n[r],0););return r}function R(n,t){for(var r=n.length;r--&&-1<v(t,n[r],0););return r}function z(n){return"\\"+Un[n]}function W(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n];
}),r}function B(n,t){return function(r){return n(t(r))}}function L(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&"__lodash_placeholder__"!==o||(n[r]="__lodash_placeholder__",i[u++]=r)}return i}function U(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function C(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function D(n){if(Rn.test(n)){for(var t=On.lastIndex=0;On.test(n);)++t;n=t}else n=Qn(n);return n}function M(n){return Rn.test(n)?n.match(On)||[]:n.split("");
}var T,$=1/0,F=NaN,N=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],P=/\b__p\+='';/g,Z=/\b(__p\+=)''\+/g,q=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,G=RegExp(V.source),H=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,Q=/<%=([\s\S]+?)%>/g,X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nn=/^\w*$/,tn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rn=/[\\^$.*+?()[\]{}|]/g,en=RegExp(rn.source),un=/^\s+|\s+$/g,on=/^\s+/,fn=/\s+$/,cn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,an=/\{\n\/\* \[wrapped with (.+)\] \*/,ln=/,? & /,sn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,hn=/\\(\\)?/g,pn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,_n=/\w*$/,vn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,dn=/^\[object .+?Constructor\]$/,yn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\d*)$/,xn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,jn=/($^)/,wn=/['\n\r\u2028\u2029\\]/g,mn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*",An="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+mn,En="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]?|[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",kn=RegExp("['\u2019]","g"),Sn=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g"),On=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+En+mn,"g"),In=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+",An].join("|"),"g"),Rn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Bn={};
Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=true,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object DataView]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=false;
var Ln={};Ln["[object Arguments]"]=Ln["[object Array]"]=Ln["[object ArrayBuffer]"]=Ln["[object DataView]"]=Ln["[object Boolean]"]=Ln["[object Date]"]=Ln["[object Float32Array]"]=Ln["[object Float64Array]"]=Ln["[object Int8Array]"]=Ln["[object Int16Array]"]=Ln["[object Int32Array]"]=Ln["[object Map]"]=Ln["[object Number]"]=Ln["[object Object]"]=Ln["[object RegExp]"]=Ln["[object Set]"]=Ln["[object String]"]=Ln["[object Symbol]"]=Ln["[object Uint8Array]"]=Ln["[object Uint8ClampedArray]"]=Ln["[object Uint16Array]"]=Ln["[object Uint32Array]"]=true,
Ln["[object Error]"]=Ln["[object Function]"]=Ln["[object WeakMap]"]=false;var Un={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Cn=parseFloat,Dn=parseInt,Mn=typeof global=="object"&&global&&global.Object===Object&&global,Tn=typeof self=="object"&&self&&self.Object===Object&&self,$n=Mn||Tn||Function("return this")(),Fn=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nn=Fn&&typeof module=="object"&&module&&!module.nodeType&&module,Pn=Nn&&Nn.exports===Fn,Zn=Pn&&Mn.process,qn=function(){
try{var n=Nn&&Nn.f&&Nn.f("util").types;return n?n:Zn&&Zn.binding&&Zn.binding("util")}catch(n){}}(),Vn=qn&&qn.isArrayBuffer,Kn=qn&&qn.isDate,Gn=qn&&qn.isMap,Hn=qn&&qn.isRegExp,Jn=qn&&qn.isSet,Yn=qn&&qn.isTypedArray,Qn=b("length"),Xn=x({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I",
"\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C",
"\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i",
"\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r",
"\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij",
"\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),nt=x({"&":"&","<":"<",">":">",'"':""","'":"'"}),tt=x({"&":"&","<":"<",">":">",""":'"',"'":"'"}),rt=function x(mn){function An(n){if(yu(n)&&!ff(n)&&!(n instanceof Un)){if(n instanceof On)return n;if(oi.call(n,"__wrapped__"))return Fe(n)}return new On(n)}function En(){}function On(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=T}function Un(n){this.__wrapped__=n,
this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Tn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Fn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Nn(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Fn;++t<r;)this.add(n[t]);
}function Zn(n){this.size=(this.__data__=new Tn(n)).size}function qn(n,t){var r,e=ff(n),u=!e&&of(n),i=!e&&!u&&af(n),o=!e&&!u&&!i&&_f(n),u=(e=e||u||i||o)?A(n.length,ni):[],f=u.length;for(r in n)!t&&!oi.call(n,r)||e&&("length"==r||i&&("offset"==r||"parent"==r)||o&&("buffer"==r||"byteLength"==r||"byteOffset"==r)||Se(r,f))||u.push(r);return u}function Qn(n){var t=n.length;return t?n[ir(0,t-1)]:T}function et(n,t){return De(Ur(n),pt(t,0,n.length))}function ut(n){return De(Ur(n))}function it(n,t,r){(r===T||lu(n[t],r))&&(r!==T||t in n)||st(n,t,r);
}function ot(n,t,r){var e=n[t];oi.call(n,t)&&lu(e,r)&&(r!==T||t in n)||st(n,t,r)}function ft(n,t){for(var r=n.length;r--;)if(lu(n[r][0],t))return r;return-1}function ct(n,t,r,e){return uo(n,function(n,u,i){t(e,n,r(n),i)}),e}function at(n,t){return n&&Cr(t,Wu(t),n)}function lt(n,t){return n&&Cr(t,Bu(t),n)}function st(n,t,r){"__proto__"==t&&Ai?Ai(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function ht(n,t){for(var r=-1,e=t.length,u=Ku(e),i=null==n;++r<e;)u[r]=i?T:Ru(n,t[r]);return u;
}function pt(n,t,r){return n===n&&(r!==T&&(n=n<=r?n:r),t!==T&&(n=n>=t?n:t)),n}function _t(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==T)return f;if(!du(n))return n;if(u=ff(n)){if(f=me(n),!c)return Ur(n,f)}else{var s=vo(n),h="[object Function]"==s||"[object GeneratorFunction]"==s;if(af(n))return Ir(n,c);if("[object Object]"==s||"[object Arguments]"==s||h&&!i){if(f=a||h?{}:Ae(n),!c)return a?Mr(n,lt(f,n)):Dr(n,at(f,n))}else{if(!Ln[s])return i?n:{};f=Ee(n,s,c)}}if(o||(o=new Zn),
i=o.get(n))return i;o.set(n,f),pf(n)?n.forEach(function(r){f.add(_t(r,t,e,r,n,o))}):sf(n)&&n.forEach(function(r,u){f.set(u,_t(r,t,e,u,n,o))});var a=l?a?ve:_e:a?Bu:Wu,p=u?T:a(n);return r(p||n,function(r,u){p&&(u=r,r=n[u]),ot(f,u,_t(r,t,e,u,n,o))}),f}function vt(n){var t=Wu(n);return function(r){return gt(r,n,t)}}function gt(n,t,r){var e=r.length;if(null==n)return!e;for(n=Qu(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===T&&!(u in n)||!i(o))return false}return true}function dt(n,t,r){if(typeof n!="function")throw new ti("Expected a function");
return bo(function(){n.apply(T,r)},t)}function yt(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,k(r))),e?(i=f,a=false):200<=t.length&&(i=O,a=false,t=new Nn(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p),p=e||0!==p?p:0;if(a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function bt(n,t){var r=true;return uo(n,function(n,e,u){return r=!!t(n,e,u)}),r}function xt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===T?o===o&&!wu(o):r(o,f)))var f=o,c=i;
}return c}function jt(n,t){var r=[];return uo(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function wt(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=ke),u||(u=[]);++i<o;){var f=n[i];0<t&&r(f)?1<t?wt(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function mt(n,t){return n&&oo(n,t,Wu)}function At(n,t){return n&&fo(n,t,Wu)}function Et(n,t){return i(t,function(t){return _u(n[t])})}function kt(n,t){t=Sr(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[Me(t[r++])];return r&&r==e?n:T}function St(n,t,r){return t=t(n),
ff(n)?t:a(t,r(n))}function Ot(n){if(null==n)n=n===T?"[object Undefined]":"[object Null]";else if(mi&&mi in Qu(n)){var t=oi.call(n,mi),r=n[mi];try{n[mi]=T;var e=true}catch(n){}var u=ai.call(n);e&&(t?n[mi]=r:delete n[mi]),n=u}else n=ai.call(n);return n}function It(n,t){return n>t}function Rt(n,t){return null!=n&&oi.call(n,t)}function zt(n,t){return null!=n&&t in Qu(n)}function Wt(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=Ku(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,k(t))),s=Ci(p.length,s),
l[a]=!r&&(t||120<=u&&120<=p.length)?new Nn(a&&p):T}var p=n[0],_=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],d=t?t(g):g,g=r||0!==g?g:0;if(v?!O(v,d):!e(h,d,r)){for(a=i;--a;){var y=l[a];if(y?!O(y,d):!e(n[a],d,r))continue n}v&&v.push(d),h.push(g)}}return h}function Bt(n,t,r){var e={};return mt(n,function(n,u,i){t(e,r(n),u,i)}),e}function Lt(t,r,e){return r=Sr(r,t),t=2>r.length?t:kt(t,hr(r,0,-1)),r=null==t?t:t[Me(Ve(r))],null==r?T:n(r,t,e)}function Ut(n){return yu(n)&&"[object Arguments]"==Ot(n)}function Ct(n){
return yu(n)&&"[object ArrayBuffer]"==Ot(n)}function Dt(n){return yu(n)&&"[object Date]"==Ot(n)}function Mt(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!yu(n)&&!yu(t))t=n!==n&&t!==t;else n:{var i=ff(n),o=ff(t),f=i?"[object Array]":vo(n),c=o?"[object Array]":vo(t),f="[object Arguments]"==f?"[object Object]":f,c="[object Arguments]"==c?"[object Object]":c,a="[object Object]"==f,o="[object Object]"==c;if((c=f==c)&&af(n)){if(!af(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Zn),t=i||_f(n)?se(n,t,r,e,Mt,u):he(n,t,f,r,e,Mt,u);else{
if(!(1&r)&&(i=a&&oi.call(n,"__wrapped__"),f=o&&oi.call(t,"__wrapped__"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Zn),t=Mt(n,t,r,e,u);break n}if(c)t:if(u||(u=new Zn),i=1&r,f=_e(n),o=f.length,c=_e(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:oi.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++a<o;){var l=f[a],h=n[l],p=t[l];if(e)var _=i?e(p,h,l,t,n,u):e(h,p,l,n,t,u);if(_===T?h!==p&&!Mt(h,p,r,e,u):!_){c=false;break}s||(s="constructor"==l);
}c&&!s&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(c=false)),u.delete(n),u.delete(t),t=c}}else t=false;else t=false}}return t}function Tt(n){return yu(n)&&"[object Map]"==vo(n)}function $t(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=Qu(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){var f=r[u],c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===T&&!(c in n))return false;
}else{if(f=new Zn,e)var s=e(a,l,c,n,t,f);if(s===T?!Mt(l,a,3,e,f):!s)return false}}return true}function Ft(n){return!(!du(n)||ci&&ci in n)&&(_u(n)?hi:dn).test(Te(n))}function Nt(n){return yu(n)&&"[object RegExp]"==Ot(n)}function Pt(n){return yu(n)&&"[object Set]"==vo(n)}function Zt(n){return yu(n)&&gu(n.length)&&!!Bn[Ot(n)]}function qt(n){return typeof n=="function"?n:null==n?$u:typeof n=="object"?ff(n)?Jt(n[0],n[1]):Ht(n):Zu(n)}function Vt(n){if(!ze(n))return Li(n);var t,r=[];for(t in Qu(n))oi.call(n,t)&&"constructor"!=t&&r.push(t);
return r}function Kt(n,t){return n<t}function Gt(n,t){var r=-1,e=su(n)?Ku(n.length):[];return uo(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Ht(n){var t=xe(n);return 1==t.length&&t[0][2]?We(t[0][0],t[0][1]):function(r){return r===n||$t(r,n,t)}}function Jt(n,t){return Ie(n)&&t===t&&!du(t)?We(Me(n),t):function(r){var e=Ru(r,n);return e===T&&e===t?zu(r,n):Mt(t,e,3)}}function Yt(n,t,r,e,u){n!==t&&oo(t,function(i,o){if(u||(u=new Zn),du(i)){var f=u,c=Le(n,o),a=Le(t,o),l=f.get(a);if(l)it(n,o,l);else{
var l=e?e(c,a,o+"",n,t,f):T,s=l===T;if(s){var h=ff(a),p=!h&&af(a),_=!h&&!p&&_f(a),l=a;h||p||_?ff(c)?l=c:hu(c)?l=Ur(c):p?(s=false,l=Ir(a,true)):_?(s=false,l=zr(a,true)):l=[]:xu(a)||of(a)?(l=c,of(c)?l=Ou(c):du(c)&&!_u(c)||(l=Ae(a))):s=false}s&&(f.set(a,l),Yt(l,a,r,e,f),f.delete(a)),it(n,o,l)}}else f=e?e(Le(n,o),i,o+"",n,t,u):T,f===T&&(f=i),it(n,o,f)},Bu)}function Qt(n,t){var r=n.length;if(r)return t+=0>t?r:0,Se(t,r)?n[t]:T}function Xt(n,t,r){var e=-1;return t=c(t.length?t:[$u],k(ye())),n=Gt(n,function(n){return{
a:c(t,function(t){return t(n)}),b:++e,c:n}}),w(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Wr(u[e],i[e]);if(c){e=e>=f?c:c*("desc"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function nr(n,t){return tr(n,t,function(t,r){return zu(n,r)})}function tr(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=kt(n,o);r(f,o)&&lr(i,Sr(o,n),f)}return i}function rr(n){return function(t){return kt(t,n)}}function er(n,t,r,e){var u=e?g:v,i=-1,o=t.length,f=n;for(n===t&&(t=Ur(t)),
r&&(f=c(n,k(r)));++i<o;)for(var a=0,l=t[i],l=r?r(l):l;-1<(a=u(f,l,a,e));)f!==n&&xi.call(f,a,1),xi.call(n,a,1);return n}function ur(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Se(u)?xi.call(n,u,1):xr(n,u)}}}function ir(n,t){return n+Ii(Ti()*(t-n+1))}function or(n,t){var r="";if(!n||1>t||9007199254740991<t)return r;do t%2&&(r+=n),(t=Ii(t/2))&&(n+=n);while(t);return r}function fr(n,t){return xo(Be(n,t,$u),n+"")}function cr(n){return Qn(Uu(n))}function ar(n,t){var r=Uu(n);
return De(r,pt(t,0,r.length))}function lr(n,t,r,e){if(!du(n))return n;t=Sr(t,n);for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=Me(t[u]),a=r;if(u!=o){var l=f[c],a=e?e(l,c,f):T;a===T&&(a=du(l)?l:Se(t[u+1])?[]:{})}ot(f,c,a),f=f[c]}return n}function sr(n){return De(Uu(n))}function hr(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Ku(u);++e<u;)r[e]=n[e+t];return r}function pr(n,t){var r;return uo(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}
function _r(n,t,r){var e=0,u=null==n?e:n.length;if(typeof t=="number"&&t===t&&2147483647>=u){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!wu(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return vr(n,t,$u,r)}function vr(n,t,r,e){t=r(t);for(var u=0,i=null==n?0:n.length,o=t!==t,f=null===t,c=wu(t),a=t===T;u<i;){var l=Ii((u+i)/2),s=r(n[l]),h=s!==T,p=null===s,_=s===s,v=wu(s);(o?e||_:a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):p||v?0:e?s<=t:s<t)?u=l+1:i=l}return Ci(i,4294967294)}function gr(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){
var o=n[r],f=t?t(o):o;if(!r||!lu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function dr(n){return typeof n=="number"?n:wu(n)?F:+n}function yr(n){if(typeof n=="string")return n;if(ff(n))return c(n,yr)+"";if(wu(n))return ro?ro.call(n):"";var t=n+"";return"0"==t&&1/n==-$?"-0":t}function br(n,t,r){var e=-1,u=o,i=n.length,c=true,a=[],l=a;if(r)c=false,u=f;else if(200<=i){if(u=t?null:so(n))return U(u);c=false,u=O,l=new Nn}else l=t?[]:a;n:for(;++e<i;){var s=n[e],h=t?t(s):s,s=r||0!==s?s:0;if(c&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;
t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s))}return a}function xr(n,t){return t=Sr(t,n),n=2>t.length?n:kt(n,hr(t,0,-1)),null==n||delete n[Me(Ve(t))]}function jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?hr(n,e?0:i,e?i+1:u):hr(n,e?i+1:0,e?u:i)}function wr(n,t){var r=n;return r instanceof Un&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mr(n,t,r){var e=n.length;if(2>e)return e?br(n[0]):[];for(var u=-1,i=Ku(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=yt(i[u]||o,n[f],t,r));
return br(wt(i,1),t,r)}function Ar(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:T);return o}function Er(n){return hu(n)?n:[]}function kr(n){return typeof n=="function"?n:$u}function Sr(n,t){return ff(n)?n:Ie(n,t)?[n]:jo(Iu(n))}function Or(n,t,r){var e=n.length;return r=r===T?e:r,!t&&r>=e?n:hr(n,t,r)}function Ir(n,t){if(t)return n.slice();var r=n.length,r=gi?gi(r):new n.constructor(r);return n.copy(r),r}function Rr(n){var t=new n.constructor(n.byteLength);return new vi(t).set(new vi(n)),
t}function zr(n,t){return new n.constructor(t?Rr(n.buffer):n.buffer,n.byteOffset,n.length)}function Wr(n,t){if(n!==t){var r=n!==T,e=null===n,u=n===n,i=wu(n),o=t!==T,f=null===t,c=t===t,a=wu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Br(n,t,r,e){var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Ui(i-o,0),l=Ku(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<o;)(e||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];
return l}function Lr(n,t,r,e){var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Ui(i-f,0),s=Ku(l+a);for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++o<f;)(e||u<i)&&(s[l+r[o]]=n[u++]);return s}function Ur(n,t){var r=-1,e=n.length;for(t||(t=Ku(e));++r<e;)t[r]=n[r];return t}function Cr(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):T;c===T&&(c=n[f]),u?st(r,f,c):ot(r,f,c)}return r}function Dr(n,t){return Cr(n,po(n),t)}function Mr(n,t){return Cr(n,_o(n),t);
}function Tr(n,r){return function(e,u){var i=ff(e)?t:ct,o=r?r():{};return i(e,n,ye(u,2),o)}}function $r(n){return fr(function(t,r){var e=-1,u=r.length,i=1<u?r[u-1]:T,o=2<u?r[2]:T,i=3<n.length&&typeof i=="function"?(u--,i):T;for(o&&Oe(r[0],r[1],o)&&(i=3>u?T:i,u=1),t=Qu(t);++e<u;)(o=r[e])&&n(t,o,e,i);return t})}function Fr(n,t){return function(r,e){if(null==r)return r;if(!su(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=Qu(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function Nr(n){return function(t,r,e){
var u=-1,i=Qu(t);e=e(t);for(var o=e.length;o--;){var f=e[n?o:++u];if(false===r(i[f],f,i))break}return t}}function Pr(n,t,r){function e(){return(this&&this!==$n&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=1&t,i=Vr(n);return e}function Zr(n){return function(t){t=Iu(t);var r=Rn.test(t)?M(t):T,e=r?r[0]:t.charAt(0);return t=r?Or(r,1).join(""):t.slice(1),e[n]()+t}}function qr(n){return function(t){return l(Mu(Du(t).replace(kn,"")),n,"")}}function Vr(n){return function(){var t=arguments;switch(t.length){
case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=eo(n.prototype),t=n.apply(r,t);return du(t)?t:r}}function Kr(t,r,e){function u(){for(var o=arguments.length,f=Ku(o),c=o,a=de(u);c--;)f[c]=arguments[c];return c=3>o&&f[0]!==a&&f[o-1]!==a?[]:L(f,a),
o-=c.length,o<e?ue(t,r,Jr,u.placeholder,T,f,c,T,T,e-o):n(this&&this!==$n&&this instanceof u?i:t,this,f)}var i=Vr(t);return u}function Gr(n){return function(t,r,e){var u=Qu(t);if(!su(t)){var i=ye(r,3);t=Wu(t),r=function(n){return i(u[n],n,u)}}return r=n(t,r,e),-1<r?u[i?t[r]:r]:T}}function Hr(n){return pe(function(t){var r=t.length,e=r,u=On.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!="function")throw new ti("Expected a function");if(u&&!o&&"wrapper"==ge(i))var o=new On([],true)}for(e=o?e:r;++e<r;)var i=t[e],u=ge(i),f="wrapper"==u?ho(i):T,o=f&&Re(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?o[ge(f[0])].apply(o,f[3]):1==i.length&&Re(i)?o[u]():o.thru(i);
return function(){var n=arguments,e=n[0];if(o&&1==n.length&&ff(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function Jr(n,t,r,e,u,i,o,f,c,a){function l(){for(var d=arguments.length,y=Ku(d),b=d;b--;)y[b]=arguments[b];if(_){var x,j=de(l),b=y.length;for(x=0;b--;)y[b]===j&&++x}if(e&&(y=Br(y,e,u,_)),i&&(y=Lr(y,i,o,_)),d-=x,_&&d<a)return j=L(y,j),ue(n,t,Jr,l.placeholder,r,y,j,f,c,a-d);if(j=h?r:this,b=p?j[n]:n,d=y.length,f){x=y.length;for(var w=Ci(f.length,x),m=Ur(y);w--;){
var A=f[w];y[w]=Se(A,x)?m[A]:T}}else v&&1<d&&y.reverse();return s&&c<d&&(y.length=c),this&&this!==$n&&this instanceof l&&(b=g||Vr(b)),b.apply(j,y)}var s=128&t,h=1&t,p=2&t,_=24&t,v=512&t,g=p?T:Vr(n);return l}function Yr(n,t){return function(r,e){return Bt(r,n,t(e))}}function Qr(n,t){return function(r,e){var u;if(r===T&&e===T)return t;if(r!==T&&(u=r),e!==T){if(u===T)return e;typeof r=="string"||typeof e=="string"?(r=yr(r),e=yr(e)):(r=dr(r),e=dr(e)),u=n(r,e)}return u}}function Xr(t){return pe(function(r){
return r=c(r,k(ye())),fr(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ne(n,t){t=t===T?" ":yr(t);var r=t.length;return 2>r?r?or(t,n):t:(r=or(t,Oi(n/D(t))),Rn.test(t)?Or(M(r),0,n).join(""):r.slice(0,n))}function te(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=Ku(l+c),h=this&&this!==$n&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];return n(h,o?e:this,s)}var o=1&r,f=Vr(t);return i}function re(n){return function(t,r,e){
e&&typeof e!="number"&&Oe(t,r,e)&&(r=e=T),t=Au(t),r===T?(r=t,t=0):r=Au(r),e=e===T?t<r?1:-1:Au(e);var u=-1;r=Ui(Oi((r-t)/(e||1)),0);for(var i=Ku(r);r--;)i[n?r:++u]=t,t+=e;return i}}function ee(n){return function(t,r){return typeof t=="string"&&typeof r=="string"||(t=Su(t),r=Su(r)),n(t,r)}}function ue(n,t,r,e,u,i,o,f,c,a){var l=8&t,s=l?o:T;o=l?T:o;var h=l?i:T;return i=l?T:i,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),u=[n,t,u,h,s,i,o,f,c,a],r=r.apply(T,u),Re(n)&&yo(r,u),r.placeholder=e,Ue(r,n,t)}function ie(n){
var t=Yu[n];return function(n,r){if(n=Su(n),(r=null==r?0:Ci(Eu(r),292))&&Wi(n)){var e=(Iu(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Iu(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function oe(n){return function(t){var r=vo(t);return"[object Map]"==r?W(t):"[object Set]"==r?C(t):E(t,n(t))}}function fe(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&typeof n!="function")throw new ti("Expected a function");var a=e?e.length:0;if(a||(t&=-97,e=u=T),o=o===T?o:Ui(Eu(o),0),f=f===T?f:Eu(f),a-=u?u.length:0,
64&t){var l=e,s=u;e=u=T}var h=c?T:ho(n);return i=[n,t,r,e,u,l,s,i,o,f],h&&(r=i[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&i[7].length<=h[8]||384==n&&h[7].length<=h[8]&&8==r,131>t||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Br(e,r,h[4]):r,i[4]=e?L(i[3],"__lodash_placeholder__"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Lr(e,r,h[6]):r,i[6]=e?L(i[5],"__lodash_placeholder__"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Ci(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0],
t=i[1],r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===T?c?0:n.length:Ui(i[9]-a,0),!f&&24&t&&(t&=-25),Ue((h?co:yo)(t&&1!=t?8==t||16==t?Kr(n,t,f):32!=t&&33!=t||u.length?Jr.apply(T,i):te(n,t,r,e):Pr(n,t,r),i),n,t)}function ce(n,t,r,e){return n===T||lu(n,ei[r])&&!oi.call(e,r)?t:n}function ae(n,t,r,e,u,i){return du(n)&&du(t)&&(i.set(t,n),Yt(n,t,T,ae,i),i.delete(t)),n}function le(n){return xu(n)?T:n}function se(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t;
var c=-1,a=true,l=2&r?new Nn:T;for(i.set(n,t),i.set(t,n);++c<f;){var s=n[c],p=t[c];if(e)var _=o?e(p,s,c,t,n,i):e(s,p,c,n,t,i);if(_!==T){if(_)continue;a=false;break}if(l){if(!h(t,function(n,t){if(!O(l,t)&&(s===n||u(s,n,r,e,i)))return l.push(t)})){a=false;break}}else if(s!==p&&!u(s,p,r,e,i)){a=false;break}}return i.delete(n),i.delete(t),a}function he(n,t,r,e,u,i,o){switch(r){case"[object DataView]":if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)break;n=n.buffer,t=t.buffer;case"[object ArrayBuffer]":
if(n.byteLength!=t.byteLength||!i(new vi(n),new vi(t)))break;return true;case"[object Boolean]":case"[object Date]":case"[object Number]":return lu(+n,+t);case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var f=W;case"[object Set]":if(f||(f=U),n.size!=t.size&&!(1&e))break;return(r=o.get(n))?r==t:(e|=2,o.set(n,t),t=se(f(n),f(t),e,u,i,o),o.delete(n),t);case"[object Symbol]":if(to)return to.call(n)==to.call(t)}
return false}function pe(n){return xo(Be(n,T,Ze),n+"")}function _e(n){return St(n,Wu,po)}function ve(n){return St(n,Bu,_o)}function ge(n){for(var t=n.name+"",r=Gi[t],e=oi.call(Gi,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function de(n){return(oi.call(An,"placeholder")?An:n).placeholder}function ye(){var n=An.iteratee||Fu,n=n===Fu?qt:n;return arguments.length?n(arguments[0],arguments[1]):n}function be(n,t){var r=n.__data__,e=typeof t;return("string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t)?r[typeof t=="string"?"string":"hash"]:r.map;
}function xe(n){for(var t=Wu(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,u===u&&!du(u)]}return t}function je(n,t){var r=null==n?T:n[t];return Ft(r)?r:T}function we(n,t,r){t=Sr(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=Me(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&gu(u)&&Se(o,u)&&(ff(n)||of(n)))}function me(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&oi.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ae(n){
return typeof n.constructor!="function"||ze(n)?{}:eo(di(n))}function Ee(n,t,r){var e=n.constructor;switch(t){case"[object ArrayBuffer]":return Rr(n);case"[object Boolean]":case"[object Date]":return new e(+n);case"[object DataView]":return t=r?Rr(n.buffer):n.buffer,new n.constructor(t,n.byteOffset,n.byteLength);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":
case"[object Uint16Array]":case"[object Uint32Array]":return zr(n,r);case"[object Map]":return new e;case"[object Number]":case"[object String]":return new e(n);case"[object RegExp]":return t=new n.constructor(n.source,_n.exec(n)),t.lastIndex=n.lastIndex,t;case"[object Set]":return new e;case"[object Symbol]":return to?Qu(to.call(n)):{}}}function ke(n){return ff(n)||of(n)||!!(ji&&n&&n[ji])}function Se(n,t){var r=typeof n;return t=null==t?9007199254740991:t,!!t&&("number"==r||"symbol"!=r&&bn.test(n))&&-1<n&&0==n%1&&n<t;
}function Oe(n,t,r){if(!du(r))return false;var e=typeof t;return!!("number"==e?su(r)&&Se(t,r.length):"string"==e&&t in r)&&lu(r[t],n)}function Ie(n,t){if(ff(n))return false;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!wu(n))||(nn.test(n)||!X.test(n)||null!=t&&n in Qu(t))}function Re(n){var t=ge(n),r=An[t];return typeof r=="function"&&t in Un.prototype&&(n===r||(t=ho(r),!!t&&n===t[0]))}function ze(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||ei)}function We(n,t){
return function(r){return null!=r&&(r[n]===t&&(t!==T||n in Qu(r)))}}function Be(t,r,e){return r=Ui(r===T?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Ui(u.length-r,0),f=Ku(o);++i<o;)f[i]=u[r+i];for(i=-1,o=Ku(r+1);++i<r;)o[i]=u[i];return o[r]=e(f),n(t,this,o)}}function Le(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function Ue(n,t,r){var e=t+"";t=xo;var u,i=$e;return u=(u=e.match(an))?u[1].split(ln):[],r=i(u,r),(i=r.length)&&(u=i-1,r[u]=(1<i?"& ":"")+r[u],
r=r.join(2<i?", ":" "),e=e.replace(cn,"{\n/* [wrapped with "+r+"] */\n")),t(n,e)}function Ce(n){var t=0,r=0;return function(){var e=Di(),u=16-(e-r);if(r=e,0<u){if(800<=++t)return arguments[0]}else t=0;return n.apply(T,arguments)}}function De(n,t){var r=-1,e=n.length,u=e-1;for(t=t===T?e:t;++r<t;){var e=ir(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function Me(n){if(typeof n=="string"||wu(n))return n;var t=n+"";return"0"==t&&1/n==-$?"-0":t}function Te(n){if(null!=n){try{return ii.call(n)}catch(n){}
return n+""}return""}function $e(n,t){return r(N,function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function Fe(n){if(n instanceof Un)return n.clone();var t=new On(n.__wrapped__,n.__chain__);return t.__actions__=Ur(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ne(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),_(n,ye(t,3),r)):-1}function Pe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==T&&(u=Eu(r),u=0>r?Ui(e+u,0):Ci(u,e-1)),
_(n,ye(t,3),u,true)}function Ze(n){return(null==n?0:n.length)?wt(n,1):[]}function qe(n){return n&&n.length?n[0]:T}function Ve(n){var t=null==n?0:n.length;return t?n[t-1]:T}function Ke(n,t){return n&&n.length&&t&&t.length?er(n,t):n}function Ge(n){return null==n?n:$i.call(n)}function He(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){if(hu(n))return t=Ui(n.length,t),true}),A(t,function(t){return c(n,b(t))})}function Je(t,r){if(!t||!t.length)return[];var e=He(t);return null==r?e:c(e,function(t){
return n(r,T,t)})}function Ye(n){return n=An(n),n.__chain__=true,n}function Qe(n,t){return t(n)}function Xe(){return this}function nu(n,t){return(ff(n)?r:uo)(n,ye(t,3))}function tu(n,t){return(ff(n)?e:io)(n,ye(t,3))}function ru(n,t){return(ff(n)?c:Gt)(n,ye(t,3))}function eu(n,t,r){return t=r?T:t,t=n&&null==t?n.length:t,fe(n,128,T,T,T,T,t)}function uu(n,t){var r;if(typeof t!="function")throw new ti("Expected a function");return n=Eu(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=T),
r}}function iu(n,t,r){return t=r?T:t,n=fe(n,8,T,T,T,T,T,t),n.placeholder=iu.placeholder,n}function ou(n,t,r){return t=r?T:t,n=fe(n,16,T,T,T,T,T,t),n.placeholder=ou.placeholder,n}function fu(n,t,r){function e(t){var r=c,e=a;return c=a=T,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===T||r>=t||0>r||g&&n>=l}function i(){var n=Go();if(u(n))return o(n);var r,e=bo;r=n-_,n=t-(n-p),r=g?Ci(n,l-r):n,h=e(i,r)}function o(n){return h=T,d&&c?e(n):(c=a=T,s)}function f(){var n=Go(),r=u(n);if(c=arguments,
a=this,p=n,r){if(h===T)return _=n=p,h=bo(i,t),v?e(n):s;if(g)return lo(h),h=bo(i,t),e(p)}return h===T&&(h=bo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!="function")throw new ti("Expected a function");return t=Su(t)||0,du(r)&&(v=!!r.leading,l=(g="maxWait"in r)?Ui(Su(r.maxWait)||0,t):l,d="trailing"in r?!!r.trailing:d),f.cancel=function(){h!==T&&lo(h),_=0,c=p=a=h=T},f.flush=function(){return h===T?s:o(Go())},f}function cu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;
return i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e)||i,e)}if(typeof n!="function"||null!=t&&typeof t!="function")throw new ti("Expected a function");return r.cache=new(cu.Cache||Fn),r}function au(n){if(typeof n!="function")throw new ti("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function lu(n,t){return n===t||n!==n&&t!==t;
}function su(n){return null!=n&&gu(n.length)&&!_u(n)}function hu(n){return yu(n)&&su(n)}function pu(n){if(!yu(n))return false;var t=Ot(n);return"[object Error]"==t||"[object DOMException]"==t||typeof n.message=="string"&&typeof n.name=="string"&&!xu(n)}function _u(n){return!!du(n)&&(n=Ot(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function vu(n){return typeof n=="number"&&n==Eu(n)}function gu(n){return typeof n=="number"&&-1<n&&0==n%1&&9007199254740991>=n;
}function du(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function yu(n){return null!=n&&typeof n=="object"}function bu(n){return typeof n=="number"||yu(n)&&"[object Number]"==Ot(n)}function xu(n){return!(!yu(n)||"[object Object]"!=Ot(n))&&(n=di(n),null===n||(n=oi.call(n,"constructor")&&n.constructor,typeof n=="function"&&n instanceof n&&ii.call(n)==li))}function ju(n){return typeof n=="string"||!ff(n)&&yu(n)&&"[object String]"==Ot(n)}function wu(n){return typeof n=="symbol"||yu(n)&&"[object Symbol]"==Ot(n);
}function mu(n){if(!n)return[];if(su(n))return ju(n)?M(n):Ur(n);if(wi&&n[wi]){n=n[wi]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=vo(n),("[object Map]"==t?W:"[object Set]"==t?U:Uu)(n)}function Au(n){return n?(n=Su(n),n===$||n===-$?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Eu(n){n=Au(n);var t=n%1;return n===n?t?n-t:n:0}function ku(n){return n?pt(Eu(n),0,4294967295):0}function Su(n){if(typeof n=="number")return n;if(wu(n))return F;if(du(n)&&(n=typeof n.valueOf=="function"?n.valueOf():n,
n=du(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(un,"");var t=gn.test(n);return t||yn.test(n)?Dn(n.slice(2),t?2:8):vn.test(n)?F:+n}function Ou(n){return Cr(n,Bu(n))}function Iu(n){return null==n?"":yr(n)}function Ru(n,t,r){return n=null==n?T:kt(n,t),n===T?r:n}function zu(n,t){return null!=n&&we(n,t,zt)}function Wu(n){return su(n)?qn(n):Vt(n)}function Bu(n){if(su(n))n=qn(n,true);else if(du(n)){var t,r=ze(n),e=[];for(t in n)("constructor"!=t||!r&&oi.call(n,t))&&e.push(t);n=e}else{if(t=[],
null!=n)for(r in Qu(n))t.push(r);n=t}return n}function Lu(n,t){if(null==n)return{};var r=c(ve(n),function(n){return[n]});return t=ye(t),tr(n,r,function(n,r){return t(n,r[0])})}function Uu(n){return null==n?[]:S(n,Wu(n))}function Cu(n){return $f(Iu(n).toLowerCase())}function Du(n){return(n=Iu(n))&&n.replace(xn,Xn).replace(Sn,"")}function Mu(n,t,r){return n=Iu(n),t=r?T:t,t===T?zn.test(n)?n.match(In)||[]:n.match(sn)||[]:n.match(t)||[]}function Tu(n){return function(){return n}}function $u(n){return n;
}function Fu(n){return qt(typeof n=="function"?n:_t(n,1))}function Nu(n,t,e){var u=Wu(t),i=Et(t,u);null!=e||du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Et(t,Wu(t)));var o=!(du(e)&&"chain"in e&&!e.chain),f=_u(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Ur(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function Pu(){}
function Zu(n){return Ie(n)?b(Me(n)):rr(n)}function qu(){return[]}function Vu(){return false}mn=null==mn?$n:rt.defaults($n.Object(),mn,rt.pick($n,Wn));var Ku=mn.Array,Gu=mn.Date,Hu=mn.Error,Ju=mn.Function,Yu=mn.Math,Qu=mn.Object,Xu=mn.RegExp,ni=mn.String,ti=mn.TypeError,ri=Ku.prototype,ei=Qu.prototype,ui=mn["__core-js_shared__"],ii=Ju.prototype.toString,oi=ei.hasOwnProperty,fi=0,ci=function(){var n=/[^.]+$/.exec(ui&&ui.keys&&ui.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),ai=ei.toString,li=ii.call(Qu),si=$n._,hi=Xu("^"+ii.call(oi).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pi=Pn?mn.Buffer:T,_i=mn.Symbol,vi=mn.Uint8Array,gi=pi?pi.g:T,di=B(Qu.getPrototypeOf,Qu),yi=Qu.create,bi=ei.propertyIsEnumerable,xi=ri.splice,ji=_i?_i.isConcatSpreadable:T,wi=_i?_i.iterator:T,mi=_i?_i.toStringTag:T,Ai=function(){
try{var n=je(Qu,"defineProperty");return n({},"",{}),n}catch(n){}}(),Ei=mn.clearTimeout!==$n.clearTimeout&&mn.clearTimeout,ki=Gu&&Gu.now!==$n.Date.now&&Gu.now,Si=mn.setTimeout!==$n.setTimeout&&mn.setTimeout,Oi=Yu.ceil,Ii=Yu.floor,Ri=Qu.getOwnPropertySymbols,zi=pi?pi.isBuffer:T,Wi=mn.isFinite,Bi=ri.join,Li=B(Qu.keys,Qu),Ui=Yu.max,Ci=Yu.min,Di=Gu.now,Mi=mn.parseInt,Ti=Yu.random,$i=ri.reverse,Fi=je(mn,"DataView"),Ni=je(mn,"Map"),Pi=je(mn,"Promise"),Zi=je(mn,"Set"),qi=je(mn,"WeakMap"),Vi=je(Qu,"create"),Ki=qi&&new qi,Gi={},Hi=Te(Fi),Ji=Te(Ni),Yi=Te(Pi),Qi=Te(Zi),Xi=Te(qi),no=_i?_i.prototype:T,to=no?no.valueOf:T,ro=no?no.toString:T,eo=function(){
function n(){}return function(t){return du(t)?yi?yi(t):(n.prototype=t,t=new n,n.prototype=T,t):{}}}();An.templateSettings={escape:J,evaluate:Y,interpolate:Q,variable:"",imports:{_:An}},An.prototype=En.prototype,An.prototype.constructor=An,On.prototype=eo(En.prototype),On.prototype.constructor=On,Un.prototype=eo(En.prototype),Un.prototype.constructor=Un,Mn.prototype.clear=function(){this.__data__=Vi?Vi(null):{},this.size=0},Mn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n],
this.size-=n?1:0,n},Mn.prototype.get=function(n){var t=this.__data__;return Vi?(n=t[n],"__lodash_hash_undefined__"===n?T:n):oi.call(t,n)?t[n]:T},Mn.prototype.has=function(n){var t=this.__data__;return Vi?t[n]!==T:oi.call(t,n)},Mn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Vi&&t===T?"__lodash_hash_undefined__":t,this},Tn.prototype.clear=function(){this.__data__=[],this.size=0},Tn.prototype.delete=function(n){var t=this.__data__;return n=ft(t,n),!(0>n)&&(n==t.length-1?t.pop():xi.call(t,n,1),
--this.size,true)},Tn.prototype.get=function(n){var t=this.__data__;return n=ft(t,n),0>n?T:t[n][1]},Tn.prototype.has=function(n){return-1<ft(this.__data__,n)},Tn.prototype.set=function(n,t){var r=this.__data__,e=ft(r,n);return 0>e?(++this.size,r.push([n,t])):r[e][1]=t,this},Fn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(Ni||Tn),string:new Mn}},Fn.prototype.delete=function(n){return n=be(this,n).delete(n),this.size-=n?1:0,n},Fn.prototype.get=function(n){return be(this,n).get(n);
},Fn.prototype.has=function(n){return be(this,n).has(n)},Fn.prototype.set=function(n,t){var r=be(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Nn.prototype.add=Nn.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Nn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Zn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Zn.prototype.get=function(n){
return this.__data__.get(n)},Zn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Tn){var e=r.__data__;if(!Ni||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Fn(e)}return r.set(n,t),this.size=r.size,this};var uo=Fr(mt),io=Fr(At,true),oo=Nr(),fo=Nr(true),co=Ki?function(n,t){return Ki.set(n,t),n}:$u,ao=Ai?function(n,t){return Ai(n,"toString",{configurable:true,enumerable:false,value:Tu(t),writable:true})}:$u,lo=Ei||function(n){
return $n.clearTimeout(n)},so=Zi&&1/U(new Zi([,-0]))[1]==$?function(n){return new Zi(n)}:Pu,ho=Ki?function(n){return Ki.get(n)}:Pu,po=Ri?function(n){return null==n?[]:(n=Qu(n),i(Ri(n),function(t){return bi.call(n,t)}))}:qu,_o=Ri?function(n){for(var t=[];n;)a(t,po(n)),n=di(n);return t}:qu,vo=Ot;(Fi&&"[object DataView]"!=vo(new Fi(new ArrayBuffer(1)))||Ni&&"[object Map]"!=vo(new Ni)||Pi&&"[object Promise]"!=vo(Pi.resolve())||Zi&&"[object Set]"!=vo(new Zi)||qi&&"[object WeakMap]"!=vo(new qi))&&(vo=function(n){
var t=Ot(n);if(n=(n="[object Object]"==t?n.constructor:T)?Te(n):"")switch(n){case Hi:return"[object DataView]";case Ji:return"[object Map]";case Yi:return"[object Promise]";case Qi:return"[object Set]";case Xi:return"[object WeakMap]"}return t});var go=ui?_u:Vu,yo=Ce(co),bo=Si||function(n,t){return $n.setTimeout(n,t)},xo=Ce(ao),jo=function(n){n=cu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(tn,function(n,r,e,u){
t.push(e?u.replace(hn,"$1"):r||n)}),t}),wo=fr(function(n,t){return hu(n)?yt(n,wt(t,1,hu,true)):[]}),mo=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),ye(r,2)):[]}),Ao=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),T,r):[]}),Eo=fr(function(n){var t=c(n,Er);return t.length&&t[0]===n[0]?Wt(t):[]}),ko=fr(function(n){var t=Ve(n),r=c(n,Er);return t===Ve(r)?t=T:r.pop(),r.length&&r[0]===n[0]?Wt(r,ye(t,2)):[]}),So=fr(function(n){var t=Ve(n),r=c(n,Er);return(t=typeof t=="function"?t:T)&&r.pop(),
r.length&&r[0]===n[0]?Wt(r,T,t):[]}),Oo=fr(Ke),Io=pe(function(n,t){var r=null==n?0:n.length,e=ht(n,t);return ur(n,c(t,function(n){return Se(n,r)?+n:n}).sort(Wr)),e}),Ro=fr(function(n){return br(wt(n,1,hu,true))}),zo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),br(wt(n,1,hu,true),ye(t,2))}),Wo=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return br(wt(n,1,hu,true),T,t)}),Bo=fr(function(n,t){return hu(n)?yt(n,t):[]}),Lo=fr(function(n){return mr(i(n,hu))}),Uo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),
mr(i(n,hu),ye(t,2))}),Co=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return mr(i(n,hu),T,t)}),Do=fr(He),Mo=fr(function(n){var t=n.length,t=1<t?n[t-1]:T,t=typeof t=="function"?(n.pop(),t):T;return Je(n,t)}),To=pe(function(n){function t(t){return ht(t,n)}var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return!(1<r||this.__actions__.length)&&u instanceof Un&&Se(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(T),
n})):this.thru(t)}),$o=Tr(function(n,t,r){oi.call(n,r)?++n[r]:st(n,r,1)}),Fo=Gr(Ne),No=Gr(Pe),Po=Tr(function(n,t,r){oi.call(n,r)?n[r].push(t):st(n,r,[t])}),Zo=fr(function(t,r,e){var u=-1,i=typeof r=="function",o=su(t)?Ku(t.length):[];return uo(t,function(t){o[++u]=i?n(r,t,e):Lt(t,r,e)}),o}),qo=Tr(function(n,t,r){st(n,r,t)}),Vo=Tr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ko=fr(function(n,t){if(null==n)return[];var r=t.length;return 1<r&&Oe(n,t[0],t[1])?t=[]:2<r&&Oe(t[0],t[1],t[2])&&(t=[t[0]]),
Xt(n,wt(t,1),[])}),Go=ki||function(){return $n.Date.now()},Ho=fr(function(n,t,r){var e=1;if(r.length)var u=L(r,de(Ho)),e=32|e;return fe(n,e,t,r,u)}),Jo=fr(function(n,t,r){var e=3;if(r.length)var u=L(r,de(Jo)),e=32|e;return fe(t,e,n,r,u)}),Yo=fr(function(n,t){return dt(n,1,t)}),Qo=fr(function(n,t,r){return dt(n,Su(t)||0,r)});cu.Cache=Fn;var Xo=fr(function(t,r){r=1==r.length&&ff(r[0])?c(r[0],k(ye())):c(wt(r,1),k(ye()));var e=r.length;return fr(function(u){for(var i=-1,o=Ci(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);
return n(t,this,u)})}),nf=fr(function(n,t){return fe(n,32,T,t,L(t,de(nf)))}),tf=fr(function(n,t){return fe(n,64,T,t,L(t,de(tf)))}),rf=pe(function(n,t){return fe(n,256,T,T,T,t)}),ef=ee(It),uf=ee(function(n,t){return n>=t}),of=Ut(function(){return arguments}())?Ut:function(n){return yu(n)&&oi.call(n,"callee")&&!bi.call(n,"callee")},ff=Ku.isArray,cf=Vn?k(Vn):Ct,af=zi||Vu,lf=Kn?k(Kn):Dt,sf=Gn?k(Gn):Tt,hf=Hn?k(Hn):Nt,pf=Jn?k(Jn):Pt,_f=Yn?k(Yn):Zt,vf=ee(Kt),gf=ee(function(n,t){return n<=t}),df=$r(function(n,t){
if(ze(t)||su(t))Cr(t,Wu(t),n);else for(var r in t)oi.call(t,r)&&ot(n,r,t[r])}),yf=$r(function(n,t){Cr(t,Bu(t),n)}),bf=$r(function(n,t,r,e){Cr(t,Bu(t),n,e)}),xf=$r(function(n,t,r,e){Cr(t,Wu(t),n,e)}),jf=pe(ht),wf=fr(function(n,t){n=Qu(n);var r=-1,e=t.length,u=2<e?t[2]:T;for(u&&Oe(t[0],t[1],u)&&(e=1);++r<e;)for(var u=t[r],i=Bu(u),o=-1,f=i.length;++o<f;){var c=i[o],a=n[c];(a===T||lu(a,ei[c])&&!oi.call(n,c))&&(n[c]=u[c])}return n}),mf=fr(function(t){return t.push(T,ae),n(Of,T,t)}),Af=Yr(function(n,t,r){
null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),n[t]=r},Tu($u)),Ef=Yr(function(n,t,r){null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),oi.call(n,t)?n[t].push(r):n[t]=[r]},ye),kf=fr(Lt),Sf=$r(function(n,t,r){Yt(n,t,r)}),Of=$r(function(n,t,r,e){Yt(n,t,r,e)}),If=pe(function(n,t){var r={};if(null==n)return r;var e=false;t=c(t,function(t){return t=Sr(t,n),e||(e=1<t.length),t}),Cr(n,ve(n),r),e&&(r=_t(r,7,le));for(var u=t.length;u--;)xr(r,t[u]);return r}),Rf=pe(function(n,t){return null==n?{}:nr(n,t);
}),zf=oe(Wu),Wf=oe(Bu),Bf=qr(function(n,t,r){return t=t.toLowerCase(),n+(r?Cu(t):t)}),Lf=qr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Uf=qr(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Cf=Zr("toLowerCase"),Df=qr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Mf=qr(function(n,t,r){return n+(r?" ":"")+$f(t)}),Tf=qr(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),$f=Zr("toUpperCase"),Ff=fr(function(t,r){try{return n(t,T,r)}catch(n){return pu(n)?n:new Hu(n)}}),Nf=pe(function(n,t){
return r(t,function(t){t=Me(t),st(n,t,Ho(n[t],n))}),n}),Pf=Hr(),Zf=Hr(true),qf=fr(function(n,t){return function(r){return Lt(r,n,t)}}),Vf=fr(function(n,t){return function(r){return Lt(n,r,t)}}),Kf=Xr(c),Gf=Xr(u),Hf=Xr(h),Jf=re(),Yf=re(true),Qf=Qr(function(n,t){return n+t},0),Xf=ie("ceil"),nc=Qr(function(n,t){return n/t},1),tc=ie("floor"),rc=Qr(function(n,t){return n*t},1),ec=ie("round"),uc=Qr(function(n,t){return n-t},0);return An.after=function(n,t){if(typeof t!="function")throw new ti("Expected a function");
return n=Eu(n),function(){if(1>--n)return t.apply(this,arguments)}},An.ary=eu,An.assign=df,An.assignIn=yf,An.assignInWith=bf,An.assignWith=xf,An.at=jf,An.before=uu,An.bind=Ho,An.bindAll=Nf,An.bindKey=Jo,An.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return ff(n)?n:[n]},An.chain=Ye,An.chunk=function(n,t,r){if(t=(r?Oe(n,t,r):t===T)?1:Ui(Eu(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Ku(Oi(r/t));e<r;)i[u++]=hr(n,e,e+=t);return i},An.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){
var i=n[t];i&&(u[e++]=i)}return u},An.concat=function(){var n=arguments.length;if(!n)return[];for(var t=Ku(n-1),r=arguments[0];n--;)t[n-1]=arguments[n];return a(ff(r)?Ur(r):[r],wt(t,1))},An.cond=function(t){var r=null==t?0:t.length,e=ye();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new ti("Expected a function");return[e(n[0]),n[1]]}):[],fr(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})},An.conforms=function(n){return vt(_t(n,1))},An.constant=Tu,
An.countBy=$o,An.create=function(n,t){var r=eo(n);return null==t?r:at(r,t)},An.curry=iu,An.curryRight=ou,An.debounce=fu,An.defaults=wf,An.defaultsDeep=mf,An.defer=Yo,An.delay=Qo,An.difference=wo,An.differenceBy=mo,An.differenceWith=Ao,An.drop=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),hr(n,0>t?0:t,e)):[]},An.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0,0>t?0:t)):[]},An.dropRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true,true):[];
},An.dropWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true):[]},An.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!="number"&&Oe(n,t,r)&&(r=0,e=u),u=n.length,r=Eu(r),0>r&&(r=-r>u?0:u+r),e=e===T||e>u?u:Eu(e),0>e&&(e+=u),e=r>e?0:ku(e);r<e;)n[r++]=t;return n},An.filter=function(n,t){return(ff(n)?i:jt)(n,ye(t,3))},An.flatMap=function(n,t){return wt(ru(n,t),1)},An.flatMapDeep=function(n,t){return wt(ru(n,t),$)},An.flatMapDepth=function(n,t,r){return r=r===T?1:Eu(r),
wt(ru(n,t),r)},An.flatten=Ze,An.flattenDeep=function(n){return(null==n?0:n.length)?wt(n,$):[]},An.flattenDepth=function(n,t){return null!=n&&n.length?(t=t===T?1:Eu(t),wt(n,t)):[]},An.flip=function(n){return fe(n,512)},An.flow=Pf,An.flowRight=Zf,An.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},An.functions=function(n){return null==n?[]:Et(n,Wu(n))},An.functionsIn=function(n){return null==n?[]:Et(n,Bu(n))},An.groupBy=Po,An.initial=function(n){
return(null==n?0:n.length)?hr(n,0,-1):[]},An.intersection=Eo,An.intersectionBy=ko,An.intersectionWith=So,An.invert=Af,An.invertBy=Ef,An.invokeMap=Zo,An.iteratee=Fu,An.keyBy=qo,An.keys=Wu,An.keysIn=Bu,An.map=ru,An.mapKeys=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,t(n,e,u),n)}),r},An.mapValues=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,e,t(n,e,u))}),r},An.matches=function(n){return Ht(_t(n,1))},An.matchesProperty=function(n,t){return Jt(n,_t(t,1))},An.memoize=cu,
An.merge=Sf,An.mergeWith=Of,An.method=qf,An.methodOf=Vf,An.mixin=Nu,An.negate=au,An.nthArg=function(n){return n=Eu(n),fr(function(t){return Qt(t,n)})},An.omit=If,An.omitBy=function(n,t){return Lu(n,au(ye(t)))},An.once=function(n){return uu(2,n)},An.orderBy=function(n,t,r,e){return null==n?[]:(ff(t)||(t=null==t?[]:[t]),r=e?T:r,ff(r)||(r=null==r?[]:[r]),Xt(n,t,r))},An.over=Kf,An.overArgs=Xo,An.overEvery=Gf,An.overSome=Hf,An.partial=nf,An.partialRight=tf,An.partition=Vo,An.pick=Rf,An.pickBy=Lu,An.property=Zu,
An.propertyOf=function(n){return function(t){return null==n?T:kt(n,t)}},An.pull=Oo,An.pullAll=Ke,An.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,ye(r,2)):n},An.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,T,r):n},An.pullAt=Io,An.range=Jf,An.rangeRight=Yf,An.rearg=rf,An.reject=function(n,t){return(ff(n)?i:jt)(n,au(ye(t,3)))},An.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ye(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),
u.push(e))}return ur(n,u),r},An.rest=function(n,t){if(typeof n!="function")throw new ti("Expected a function");return t=t===T?t:Eu(t),fr(n,t)},An.reverse=Ge,An.sampleSize=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),(ff(n)?et:ar)(n,t)},An.set=function(n,t,r){return null==n?n:lr(n,t,r)},An.setWith=function(n,t,r,e){return e=typeof e=="function"?e:T,null==n?n:lr(n,t,r,e)},An.shuffle=function(n){return(ff(n)?ut:sr)(n)},An.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!="number"&&Oe(n,t,r)?(t=0,
r=e):(t=null==t?0:Eu(t),r=r===T?e:Eu(r)),hr(n,t,r)):[]},An.sortBy=Ko,An.sortedUniq=function(n){return n&&n.length?gr(n):[]},An.sortedUniqBy=function(n,t){return n&&n.length?gr(n,ye(t,2)):[]},An.split=function(n,t,r){return r&&typeof r!="number"&&Oe(n,t,r)&&(t=r=T),r=r===T?4294967295:r>>>0,r?(n=Iu(n))&&(typeof t=="string"||null!=t&&!hf(t))&&(t=yr(t),!t&&Rn.test(n))?Or(M(n),0,r):n.split(t,r):[]},An.spread=function(t,r){if(typeof t!="function")throw new ti("Expected a function");return r=null==r?0:Ui(Eu(r),0),
fr(function(e){var u=e[r];return e=Or(e,0,r),u&&a(e,u),n(t,this,e)})},An.tail=function(n){var t=null==n?0:n.length;return t?hr(n,1,t):[]},An.take=function(n,t,r){return n&&n.length?(t=r||t===T?1:Eu(t),hr(n,0,0>t?0:t)):[]},An.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0>t?0:t,e)):[]},An.takeRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),false,true):[]},An.takeWhile=function(n,t){return n&&n.length?jr(n,ye(t,3)):[]},An.tap=function(n,t){return t(n),
n},An.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ti("Expected a function");return du(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),fu(n,t,{leading:e,maxWait:t,trailing:u})},An.thru=Qe,An.toArray=mu,An.toPairs=zf,An.toPairsIn=Wf,An.toPath=function(n){return ff(n)?c(n,Me):wu(n)?[n]:Ur(jo(Iu(n)))},An.toPlainObject=Ou,An.transform=function(n,t,e){var u=ff(n),i=u||af(n)||_f(n);if(t=ye(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:du(n)&&_u(o)?eo(di(n)):{};
}return(i?r:mt)(n,function(n,r,u){return t(e,n,r,u)}),e},An.unary=function(n){return eu(n,1)},An.union=Ro,An.unionBy=zo,An.unionWith=Wo,An.uniq=function(n){return n&&n.length?br(n):[]},An.uniqBy=function(n,t){return n&&n.length?br(n,ye(t,2)):[]},An.uniqWith=function(n,t){return t=typeof t=="function"?t:T,n&&n.length?br(n,T,t):[]},An.unset=function(n,t){return null==n||xr(n,t)},An.unzip=He,An.unzipWith=Je,An.update=function(n,t,r){return null==n?n:lr(n,t,kr(r)(kt(n,t)),void 0)},An.updateWith=function(n,t,r,e){
return e=typeof e=="function"?e:T,null!=n&&(n=lr(n,t,kr(r)(kt(n,t)),e)),n},An.values=Uu,An.valuesIn=function(n){return null==n?[]:S(n,Bu(n))},An.without=Bo,An.words=Mu,An.wrap=function(n,t){return nf(kr(t),n)},An.xor=Lo,An.xorBy=Uo,An.xorWith=Co,An.zip=Do,An.zipObject=function(n,t){return Ar(n||[],t||[],ot)},An.zipObjectDeep=function(n,t){return Ar(n||[],t||[],lr)},An.zipWith=Mo,An.entries=zf,An.entriesIn=Wf,An.extend=yf,An.extendWith=bf,Nu(An,An),An.add=Qf,An.attempt=Ff,An.camelCase=Bf,An.capitalize=Cu,
An.ceil=Xf,An.clamp=function(n,t,r){return r===T&&(r=t,t=T),r!==T&&(r=Su(r),r=r===r?r:0),t!==T&&(t=Su(t),t=t===t?t:0),pt(Su(n),t,r)},An.clone=function(n){return _t(n,4)},An.cloneDeep=function(n){return _t(n,5)},An.cloneDeepWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,5,t)},An.cloneWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,4,t)},An.conformsTo=function(n,t){return null==t||gt(n,t,Wu(t))},An.deburr=Du,An.defaultTo=function(n,t){return null==n||n!==n?t:n},An.divide=nc,An.endsWith=function(n,t,r){
n=Iu(n),t=yr(t);var e=n.length,e=r=r===T?e:pt(Eu(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},An.eq=lu,An.escape=function(n){return(n=Iu(n))&&H.test(n)?n.replace(K,nt):n},An.escapeRegExp=function(n){return(n=Iu(n))&&en.test(n)?n.replace(rn,"\\$&"):n},An.every=function(n,t,r){var e=ff(n)?u:bt;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.find=Fo,An.findIndex=Ne,An.findKey=function(n,t){return p(n,ye(t,3),mt)},An.findLast=No,An.findLastIndex=Pe,An.findLastKey=function(n,t){return p(n,ye(t,3),At);
},An.floor=tc,An.forEach=nu,An.forEachRight=tu,An.forIn=function(n,t){return null==n?n:oo(n,ye(t,3),Bu)},An.forInRight=function(n,t){return null==n?n:fo(n,ye(t,3),Bu)},An.forOwn=function(n,t){return n&&mt(n,ye(t,3))},An.forOwnRight=function(n,t){return n&&At(n,ye(t,3))},An.get=Ru,An.gt=ef,An.gte=uf,An.has=function(n,t){return null!=n&&we(n,t,Rt)},An.hasIn=zu,An.head=qe,An.identity=$u,An.includes=function(n,t,r,e){return n=su(n)?n:Uu(n),r=r&&!e?Eu(r):0,e=n.length,0>r&&(r=Ui(e+r,0)),ju(n)?r<=e&&-1<n.indexOf(t,r):!!e&&-1<v(n,t,r);
},An.indexOf=function(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),v(n,t,r)):-1},An.inRange=function(n,t,r){return t=Au(t),r===T?(r=t,t=0):r=Au(r),n=Su(n),n>=Ci(t,r)&&n<Ui(t,r)},An.invoke=kf,An.isArguments=of,An.isArray=ff,An.isArrayBuffer=cf,An.isArrayLike=su,An.isArrayLikeObject=hu,An.isBoolean=function(n){return true===n||false===n||yu(n)&&"[object Boolean]"==Ot(n)},An.isBuffer=af,An.isDate=lf,An.isElement=function(n){return yu(n)&&1===n.nodeType&&!xu(n)},An.isEmpty=function(n){
if(null==n)return true;if(su(n)&&(ff(n)||typeof n=="string"||typeof n.splice=="function"||af(n)||_f(n)||of(n)))return!n.length;var t=vo(n);if("[object Map]"==t||"[object Set]"==t)return!n.size;if(ze(n))return!Vt(n).length;for(var r in n)if(oi.call(n,r))return false;return true},An.isEqual=function(n,t){return Mt(n,t)},An.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:T)?r(n,t):T;return e===T?Mt(n,t,T,r):!!e},An.isError=pu,An.isFinite=function(n){return typeof n=="number"&&Wi(n)},An.isFunction=_u,
An.isInteger=vu,An.isLength=gu,An.isMap=sf,An.isMatch=function(n,t){return n===t||$t(n,t,xe(t))},An.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:T,$t(n,t,xe(t),r)},An.isNaN=function(n){return bu(n)&&n!=+n},An.isNative=function(n){if(go(n))throw new Hu("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Ft(n)},An.isNil=function(n){return null==n},An.isNull=function(n){return null===n},An.isNumber=bu,An.isObject=du,An.isObjectLike=yu,An.isPlainObject=xu,An.isRegExp=hf,
An.isSafeInteger=function(n){return vu(n)&&-9007199254740991<=n&&9007199254740991>=n},An.isSet=pf,An.isString=ju,An.isSymbol=wu,An.isTypedArray=_f,An.isUndefined=function(n){return n===T},An.isWeakMap=function(n){return yu(n)&&"[object WeakMap]"==vo(n)},An.isWeakSet=function(n){return yu(n)&&"[object WeakSet]"==Ot(n)},An.join=function(n,t){return null==n?"":Bi.call(n,t)},An.kebabCase=Lf,An.last=Ve,An.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==T&&(u=Eu(r),u=0>u?Ui(e+u,0):Ci(u,e-1)),
t===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=_(n,d,u,true);return n},An.lowerCase=Uf,An.lowerFirst=Cf,An.lt=vf,An.lte=gf,An.max=function(n){return n&&n.length?xt(n,$u,It):T},An.maxBy=function(n,t){return n&&n.length?xt(n,ye(t,2),It):T},An.mean=function(n){return y(n,$u)},An.meanBy=function(n,t){return y(n,ye(t,2))},An.min=function(n){return n&&n.length?xt(n,$u,Kt):T},An.minBy=function(n,t){return n&&n.length?xt(n,ye(t,2),Kt):T},An.stubArray=qu,An.stubFalse=Vu,An.stubObject=function(){return{}},An.stubString=function(){
return""},An.stubTrue=function(){return true},An.multiply=rc,An.nth=function(n,t){return n&&n.length?Qt(n,Eu(t)):T},An.noConflict=function(){return $n._===this&&($n._=si),this},An.noop=Pu,An.now=Go,An.pad=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return!t||e>=t?n:(t=(t-e)/2,ne(Ii(t),r)+n+ne(Oi(t),r))},An.padEnd=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?n+ne(t-e,r):n},An.padStart=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?ne(t-e,r)+n:n},An.parseInt=function(n,t,r){
return r||null==t?t=0:t&&(t=+t),Mi(Iu(n).replace(on,""),t||0)},An.random=function(n,t,r){if(r&&typeof r!="boolean"&&Oe(n,t,r)&&(t=r=T),r===T&&(typeof t=="boolean"?(r=t,t=T):typeof n=="boolean"&&(r=n,n=T)),n===T&&t===T?(n=0,t=1):(n=Au(n),t===T?(t=n,n=0):t=Au(t)),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Ti(),Ci(n+r*(t-n+Cn("1e-"+((r+"").length-1))),t)):ir(n,t)},An.reduce=function(n,t,r){var e=ff(n)?l:j,u=3>arguments.length;return e(n,ye(t,4),r,u,uo)},An.reduceRight=function(n,t,r){var e=ff(n)?s:j,u=3>arguments.length;
return e(n,ye(t,4),r,u,io)},An.repeat=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),or(Iu(n),t)},An.replace=function(){var n=arguments,t=Iu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},An.result=function(n,t,r){t=Sr(t,n);var e=-1,u=t.length;for(u||(u=1,n=T);++e<u;){var i=null==n?T:n[Me(t[e])];i===T&&(e=u,i=r),n=_u(i)?i.call(n):i}return n},An.round=ec,An.runInContext=x,An.sample=function(n){return(ff(n)?Qn:cr)(n)},An.size=function(n){if(null==n)return 0;if(su(n))return ju(n)?D(n):n.length;
var t=vo(n);return"[object Map]"==t||"[object Set]"==t?n.size:Vt(n).length},An.snakeCase=Df,An.some=function(n,t,r){var e=ff(n)?h:pr;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.sortedIndex=function(n,t){return _r(n,t)},An.sortedIndexBy=function(n,t,r){return vr(n,t,ye(r,2))},An.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=_r(n,t);if(e<r&&lu(n[e],t))return e}return-1},An.sortedLastIndex=function(n,t){return _r(n,t,true)},An.sortedLastIndexBy=function(n,t,r){return vr(n,t,ye(r,2),true);
},An.sortedLastIndexOf=function(n,t){if(null==n?0:n.length){var r=_r(n,t,true)-1;if(lu(n[r],t))return r}return-1},An.startCase=Mf,An.startsWith=function(n,t,r){return n=Iu(n),r=null==r?0:pt(Eu(r),0,n.length),t=yr(t),n.slice(r,r+t.length)==t},An.subtract=uc,An.sum=function(n){return n&&n.length?m(n,$u):0},An.sumBy=function(n,t){return n&&n.length?m(n,ye(t,2)):0},An.template=function(n,t,r){var e=An.templateSettings;r&&Oe(n,t,r)&&(t=T),n=Iu(n),t=bf({},t,e,ce),r=bf({},t.imports,e.imports,ce);var u,i,o=Wu(r),f=S(r,o),c=0;
r=t.interpolate||jn;var a="__p+='";r=Xu((t.escape||jn).source+"|"+r.source+"|"+(r===Q?pn:jn).source+"|"+(t.evaluate||jn).source+"|$","g");var l=oi.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";if(n.replace(r,function(t,r,e,o,f,l){return e||(e=o),a+=n.slice(c,l).replace(wn,z),r&&(u=true,a+="'+__e("+r+")+'"),f&&(i=true,a+="';"+f+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=oi.call(t,"variable")&&t.variable)||(a="with(obj){"+a+"}"),
a=(i?a.replace(P,""):a).replace(Z,"$1").replace(q,"$1;"),a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=Ff(function(){return Ju(o,l+"return "+a).apply(T,f)}),t.source=a,pu(t))throw t;return t},An.times=function(n,t){if(n=Eu(n),1>n||9007199254740991<n)return[];var r=4294967295,e=Ci(n,4294967295);for(t=ye(t),n-=4294967295,e=A(e,t);++r<n;)t(r);return e},An.toFinite=Au,
An.toInteger=Eu,An.toLength=ku,An.toLower=function(n){return Iu(n).toLowerCase()},An.toNumber=Su,An.toSafeInteger=function(n){return n?pt(Eu(n),-9007199254740991,9007199254740991):0===n?n:0},An.toString=Iu,An.toUpper=function(n){return Iu(n).toUpperCase()},An.trim=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(un,""):n&&(t=yr(t))?(n=M(n),r=M(t),t=I(n,r),r=R(n,r)+1,Or(n,t,r).join("")):n},An.trimEnd=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(fn,""):n&&(t=yr(t))?(n=M(n),t=R(n,M(t))+1,
Or(n,0,t).join("")):n},An.trimStart=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(on,""):n&&(t=yr(t))?(n=M(n),t=I(n,M(t)),Or(n,t).join("")):n},An.truncate=function(n,t){var r=30,e="...";if(du(t))var u="separator"in t?t.separator:u,r="length"in t?Eu(t.length):r,e="omission"in t?yr(t.omission):e;n=Iu(n);var i=n.length;if(Rn.test(n))var o=M(n),i=o.length;if(r>=i)return n;if(i=r-D(e),1>i)return e;if(r=o?Or(o,0,i).join(""):n.slice(0,i),u===T)return r+e;if(o&&(i+=r.length-i),hf(u)){if(n.slice(i).search(u)){
var f=r;for(u.global||(u=Xu(u.source,Iu(_n.exec(u))+"g")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===T?i:c)}}else n.indexOf(yr(u),i)!=i&&(u=r.lastIndexOf(u),-1<u&&(r=r.slice(0,u)));return r+e},An.unescape=function(n){return(n=Iu(n))&&G.test(n)?n.replace(V,tt):n},An.uniqueId=function(n){var t=++fi;return Iu(n)+t},An.upperCase=Tf,An.upperFirst=$f,An.each=nu,An.eachRight=tu,An.first=qe,Nu(An,function(){var n={};return mt(An,function(t,r){oi.call(An.prototype,r)||(n[r]=t)}),n}(),{chain:false
}),An.VERSION="4.17.15",r("bind bindKey curry curryRight partial partialRight".split(" "),function(n){An[n].placeholder=An}),r(["drop","take"],function(n,t){Un.prototype[n]=function(r){r=r===T?1:Ui(Eu(r),0);var e=this.__filtered__&&!t?new Un(this):this.clone();return e.__filtered__?e.__takeCount__=Ci(r,e.__takeCount__):e.__views__.push({size:Ci(r,4294967295),type:n+(0>e.__dir__?"Right":"")}),e},Un.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){
var r=t+1,e=1==r||3==r;Un.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ye(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){var r="take"+(t?"Right":"");Un.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Un.prototype[n]=function(){return this.__filtered__?new Un(this):this[r](1)}}),Un.prototype.compact=function(){return this.filter($u)},Un.prototype.find=function(n){
return this.filter(n).head()},Un.prototype.findLast=function(n){return this.reverse().find(n)},Un.prototype.invokeMap=fr(function(n,t){return typeof n=="function"?new Un(this):this.map(function(r){return Lt(r,n,t)})}),Un.prototype.reject=function(n){return this.filter(au(ye(n)))},Un.prototype.slice=function(n,t){n=Eu(n);var r=this;return r.__filtered__&&(0<n||0>t)?new Un(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==T&&(t=Eu(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Un.prototype.takeRightWhile=function(n){
return this.reverse().takeWhile(n).reverse()},Un.prototype.toArray=function(){return this.take(4294967295)},mt(Un.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=An[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(An.prototype[t]=function(){function t(n){return n=u.apply(An,a([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Un,l=f[0],s=c||ff(o);s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,l=i&&!h,c=c&&!p;
return!i&&s?(o=c?o:new Un(this),o=n.apply(o,f),o.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(o,h)):l&&c?n.apply(this,f):(o=this.thru(t),l?e?o.value()[0]:o.value():o)})}),r("pop push shift sort splice unshift".split(" "),function(n){var t=ri[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);An.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(ff(u)?u:[],n)}return this[r](function(r){return t.apply(ff(r)?r:[],n)});
}}),mt(Un.prototype,function(n,t){var r=An[t];if(r){var e=r.name+"";oi.call(Gi,e)||(Gi[e]=[]),Gi[e].push({name:t,func:r})}}),Gi[Jr(T,2).name]=[{name:"wrapper",func:T}],Un.prototype.clone=function(){var n=new Un(this.__wrapped__);return n.__actions__=Ur(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ur(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ur(this.__views__),n},Un.prototype.reverse=function(){if(this.__filtered__){var n=new Un(this);
n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Un.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=ff(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c<a;){var l=o[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Ci(n,f+s);break;case"takeRight":f=Ui(f,n-s)}}if(n={start:f,end:n},o=n.start,f=n.end,n=f-o,o=u?f:o-1,f=this.__iteratees__,c=f.length,a=0,l=Ci(n,this.__takeCount__),!e||!u&&i==n&&l==n)return wr(t,this.__actions__);
e=[];n:for(;n--&&a<l;){for(o+=r,u=-1,i=t[o];++u<c;){var h=f[u],s=h.type,h=(0,h.iteratee)(i);if(2==s)i=h;else if(!h){if(1==s)continue n;break n}}e[a++]=i}return e},An.prototype.at=To,An.prototype.chain=function(){return Ye(this)},An.prototype.commit=function(){return new On(this.value(),this.__chain__)},An.prototype.next=function(){this.__values__===T&&(this.__values__=mu(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?T:this.__values__[this.__index__++]}},An.prototype.plant=function(n){
for(var t,r=this;r instanceof En;){var e=Fe(r);e.__index__=0,e.__values__=T,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},An.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Un?(this.__actions__.length&&(n=new Un(this)),n=n.reverse(),n.__actions__.push({func:Qe,args:[Ge],thisArg:T}),new On(n,this.__chain__)):this.thru(Ge)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return wr(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head,
wi&&(An.prototype[wi]=Xe),An}();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($n._=rt, define(function(){return rt})):Nn?((Nn.exports=rt)._=rt,Fn._=rt):$n._=rt}).call(this);
/*! jquery.cookie v1.4.1 | MIT */
!(function (a) {
"function" == typeof define && define.amd
? define(["jquery"], a)
: "object" == typeof exports
? a(require("jquery"))
: a(jQuery);
})(function (a) {
function b(a) {
return h.raw ? a : encodeURIComponent(a);
}
function c(a) {
return h.raw ? a : decodeURIComponent(a);
}
function d(a) {
return b(h.json ? JSON.stringify(a) : String(a));
}
function e(a) {
0 === a.indexOf('"') &&
(a = a.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\"));
try {
return (
(a = decodeURIComponent(a.replace(g, " "))), h.json ? JSON.parse(a) : a
);
} catch (b) {}
}
function f(b, c) {
var d = h.raw ? b : e(b);
return a.isFunction(c) ? c(d) : d;
}
var g = /\+/g,
h = (a.cookie = function (e, g, i) {
if (void 0 !== g && !a.isFunction(g)) {
if (((i = a.extend({}, h.defaults, i)), "number" == typeof i.expires)) {
var j = i.expires,
k = (i.expires = new Date());
k.setTime(+k + 864e5 * j);
}
return (document.cookie = [
b(e),
"=",
d(g),
i.expires ? "; expires=" + i.expires.toUTCString() : "",
i.path ? "; path=" + i.path : "",
i.domain ? "; domain=" + i.domain : "",
i.secure ? "; secure" : "",
].join(""));
}
for (
var l = e ? void 0 : {},
m = document.cookie ? document.cookie.split("; ") : [],
n = 0,
o = m.length;
o > n;
n++
) {
var p = m[n].split("="),
q = c(p.shift()),
r = p.join("=");
if (e && e === q) {
l = f(r, g);
break;
}
e || void 0 === (r = f(r)) || (l[q] = r);
}
return l;
});
(h.defaults = {}),
(a.removeCookie = function (b, c) {
return void 0 === a.cookie(b)
? !1
: (a.cookie(b, "", a.extend({}, c, { expires: -1 })), !a.cookie(b));
});
});
!(function (u, D) {
"object" == typeof exports && "undefined" != typeof module
? (module.exports = D())
: "function" == typeof define && define.amd
? define(D)
: (u.JSON5 = D());
})(this, function () {
"use strict";
function u(u, D) {
return u((D = { exports: {} }), D.exports), D.exports;
}
var D = u(function (u) {
var D = (u.exports =
"undefined" != typeof window && window.Math == Math
? window
: "undefined" != typeof self && self.Math == Math
? self
: Function("return this")());
"number" == typeof __g && (__g = D);
}),
e = u(function (u) {
var D = (u.exports = { version: "2.6.5" });
"number" == typeof __e && (__e = D);
}),
r =
(e.version,
function (u) {
return "object" == typeof u ? null !== u : "function" == typeof u;
}),
t = function (u) {
if (!r(u)) throw TypeError(u + " is not an object!");
return u;
},
n = function (u) {
try {
return !!u();
} catch (u) {
return !0;
}
},
F = !n(function () {
return (
7 !=
Object.defineProperty({}, "a", {
get: function () {
return 7;
},
}).a
);
}),
C = D.document,
A = r(C) && r(C.createElement),
i =
!F &&
!n(function () {
return (
7 !=
Object.defineProperty(
((u = "div"), A ? C.createElement(u) : {}),
"a",
{
get: function () {
return 7;
},
}
).a
);
var u;
}),
E = Object.defineProperty,
o = {
f: F
? Object.defineProperty
: function (u, D, e) {
if (
(t(u),
(D = (function (u, D) {
if (!r(u)) return u;
var e, t;
if (
D &&
"function" == typeof (e = u.toString) &&
!r((t = e.call(u)))
)
return t;
if ("function" == typeof (e = u.valueOf) && !r((t = e.call(u))))
return t;
if (
!D &&
"function" == typeof (e = u.toString) &&
!r((t = e.call(u)))
)
return t;
throw TypeError("Can't convert object to primitive value");
})(D, !0)),
t(e),
i)
)
try {
return E(u, D, e);
} catch (u) {}
if ("get" in e || "set" in e)
throw TypeError("Accessors not supported!");
return "value" in e && (u[D] = e.value), u;
},
},
a = F
? function (u, D, e) {
return o.f(
u,
D,
(function (u, D) {
return {
enumerable: !(1 & u),
configurable: !(2 & u),
writable: !(4 & u),
value: D,
};
})(1, e)
);
}
: function (u, D, e) {
return (u[D] = e), u;
},
c = {}.hasOwnProperty,
B = function (u, D) {
return c.call(u, D);
},
s = 0,
f = Math.random(),
l = u(function (u) {
var r = D["__core-js_shared__"] || (D["__core-js_shared__"] = {});
(u.exports = function (u, D) {
return r[u] || (r[u] = void 0 !== D ? D : {});
})("versions", []).push({
version: e.version,
mode: "global",
copyright: "© 2019 Denis Pushkarev (zloirock.ru)",
});
})("native-function-to-string", Function.toString),
d = u(function (u) {
var r,
t = "Symbol(".concat(
void 0 === (r = "src") ? "" : r,
")_",
(++s + f).toString(36)
),
n = ("" + l).split("toString");
(e.inspectSource = function (u) {
return l.call(u);
}),
(u.exports = function (u, e, r, F) {
var C = "function" == typeof r;
C && (B(r, "name") || a(r, "name", e)),
u[e] !== r &&
(C && (B(r, t) || a(r, t, u[e] ? "" + u[e] : n.join(String(e)))),
u === D
? (u[e] = r)
: F
? u[e]
? (u[e] = r)
: a(u, e, r)
: (delete u[e], a(u, e, r)));
})(Function.prototype, "toString", function () {
return ("function" == typeof this && this[t]) || l.call(this);
});
}),
v = function (u, D, e) {
if (
((function (u) {
if ("function" != typeof u)
throw TypeError(u + " is not a function!");
})(u),
void 0 === D)
)
return u;
switch (e) {
case 1:
return function (e) {
return u.call(D, e);
};
case 2:
return function (e, r) {
return u.call(D, e, r);
};
case 3:
return function (e, r, t) {
return u.call(D, e, r, t);
};
}
return function () {
return u.apply(D, arguments);
};
},
p = function (u, r, t) {
var n,
F,
C,
A,
i = u & p.F,
E = u & p.G,
o = u & p.S,
c = u & p.P,
B = u & p.B,
s = E ? D : o ? D[r] || (D[r] = {}) : (D[r] || {}).prototype,
f = E ? e : e[r] || (e[r] = {}),
l = f.prototype || (f.prototype = {});
for (n in (E && (t = r), t))
(C = ((F = !i && s && void 0 !== s[n]) ? s : t)[n]),
(A =
B && F
? v(C, D)
: c && "function" == typeof C
? v(Function.call, C)
: C),
s && d(s, n, C, u & p.U),
f[n] != C && a(f, n, A),
c && l[n] != C && (l[n] = C);
};
(D.core = e),
(p.F = 1),
(p.G = 2),
(p.S = 4),
(p.P = 8),
(p.B = 16),
(p.W = 32),
(p.U = 64),
(p.R = 128);
var h,
m = p,
g = Math.ceil,
y = Math.floor,
w = function (u) {
return isNaN((u = +u)) ? 0 : (u > 0 ? y : g)(u);
},
b =
((h = !1),
function (u, D) {
var e,
r,
t = String(
(function (u) {
if (null == u) throw TypeError("Can't call method on " + u);
return u;
})(u)
),
n = w(D),
F = t.length;
return n < 0 || n >= F
? h
? ""
: void 0
: (e = t.charCodeAt(n)) < 55296 ||
e > 56319 ||
n + 1 === F ||
(r = t.charCodeAt(n + 1)) < 56320 ||
r > 57343
? h
? t.charAt(n)
: e
: h
? t.slice(n, n + 2)
: r - 56320 + ((e - 55296) << 10) + 65536;
});
m(m.P, "String", {
codePointAt: function (u) {
return b(this, u);
},
});
e.String.codePointAt;
var S = Math.max,
x = Math.min,
N = String.fromCharCode,
P = String.fromCodePoint;
m(m.S + m.F * (!!P && 1 != P.length), "String", {
fromCodePoint: function (u) {
for (
var D, e, r, t = arguments, n = [], F = arguments.length, C = 0;
F > C;
) {
if (
((D = +t[C++]),
(r = 1114111),
((e = w((e = D))) < 0 ? S(e + r, 0) : x(e, r)) !== D)
)
throw RangeError(D + " is not a valid code point");
n.push(
D < 65536 ? N(D) : N(55296 + ((D -= 65536) >> 10), (D % 1024) + 56320)
);
}
return n.join("");
},
});
e.String.fromCodePoint;
var _,
O,
j,
I,
V,
J,
M,
k,
L,
T,
z,
H,
$,
R,
G = {
Space_Separator: /[\u1680\u2000-\u200A\u202F\u205F\u3000]/,
ID_Start:
/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,
ID_Continue:
/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,
},
U = {
isSpaceSeparator: function (u) {
return "string" == typeof u && G.Space_Separator.test(u);
},
isIdStartChar: function (u) {
return (
"string" == typeof u &&
((u >= "a" && u <= "z") ||
(u >= "A" && u <= "Z") ||
"$" === u ||
"_" === u ||
G.ID_Start.test(u))
);
},
isIdContinueChar: function (u) {
return (
"string" == typeof u &&
((u >= "a" && u <= "z") ||
(u >= "A" && u <= "Z") ||
(u >= "0" && u <= "9") ||
"$" === u ||
"_" === u ||
"" === u ||
"" === u ||
G.ID_Continue.test(u))
);
},
isDigit: function (u) {
return "string" == typeof u && /[0-9]/.test(u);
},
isHexDigit: function (u) {
return "string" == typeof u && /[0-9A-Fa-f]/.test(u);
},
};
function Z() {
for (T = "default", z = "", H = !1, $ = 1; ; ) {
R = q();
var u = X[T]();
if (u) return u;
}
}
function q() {
if (_[I]) return String.fromCodePoint(_.codePointAt(I));
}
function W() {
var u = q();
return (
"\n" === u ? (V++, (J = 0)) : u ? (J += u.length) : J++,
u && (I += u.length),
u
);
}
var X = {
default: function () {
switch (R) {
case "\t":
case "\v":
case "\f":
case " ":
case " ":
case "\ufeff":
case "\n":
case "\r":
case "\u2028":
case "\u2029":
return void W();
case "/":
return W(), void (T = "comment");
case void 0:
return W(), K("eof");
}
if (!U.isSpaceSeparator(R)) return X[O]();
W();
},
comment: function () {
switch (R) {
case "*":
return W(), void (T = "multiLineComment");
case "/":
return W(), void (T = "singleLineComment");
}
throw ru(W());
},
multiLineComment: function () {
switch (R) {
case "*":
return W(), void (T = "multiLineCommentAsterisk");
case void 0:
throw ru(W());
}
W();
},
multiLineCommentAsterisk: function () {
switch (R) {
case "*":
return void W();
case "/":
return W(), void (T = "default");
case void 0:
throw ru(W());
}
W(), (T = "multiLineComment");
},
singleLineComment: function () {
switch (R) {
case "\n":
case "\r":
case "\u2028":
case "\u2029":
return W(), void (T = "default");
case void 0:
return W(), K("eof");
}
W();
},
value: function () {
switch (R) {
case "{":
case "[":
return K("punctuator", W());
case "n":
return W(), Q("ull"), K("null", null);
case "t":
return W(), Q("rue"), K("boolean", !0);
case "f":
return W(), Q("alse"), K("boolean", !1);
case "-":
case "+":
return "-" === W() && ($ = -1), void (T = "sign");
case ".":
return (z = W()), void (T = "decimalPointLeading");
case "0":
return (z = W()), void (T = "zero");
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
return (z = W()), void (T = "decimalInteger");
case "I":
return W(), Q("nfinity"), K("numeric", 1 / 0);
case "N":
return W(), Q("aN"), K("numeric", NaN);
case '"':
case "'":
return (H = '"' === W()), (z = ""), void (T = "string");
}
throw ru(W());
},
identifierNameStartEscape: function () {
if ("u" !== R) throw ru(W());
W();
var u = Y();
switch (u) {
case "$":
case "_":
break;
default:
if (!U.isIdStartChar(u)) throw nu();
}
(z += u), (T = "identifierName");
},
identifierName: function () {
switch (R) {
case "$":
case "_":
case "":
case "":
return void (z += W());
case "\\":
return W(), void (T = "identifierNameEscape");
}
if (!U.isIdContinueChar(R)) return K("identifier", z);
z += W();
},
identifierNameEscape: function () {
if ("u" !== R) throw ru(W());
W();
var u = Y();
switch (u) {
case "$":
case "_":
case "":
case "":
break;
default:
if (!U.isIdContinueChar(u)) throw nu();
}
(z += u), (T = "identifierName");
},
sign: function () {
switch (R) {
case ".":
return (z = W()), void (T = "decimalPointLeading");
case "0":
return (z = W()), void (T = "zero");
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
return (z = W()), void (T = "decimalInteger");
case "I":
return W(), Q("nfinity"), K("numeric", $ * (1 / 0));
case "N":
return W(), Q("aN"), K("numeric", NaN);
}
throw ru(W());
},
zero: function () {
switch (R) {
case ".":
return (z += W()), void (T = "decimalPoint");
case "e":
case "E":
return (z += W()), void (T = "decimalExponent");
case "x":
case "X":
return (z += W()), void (T = "hexadecimal");
}
return K("numeric", 0 * $);
},
decimalInteger: function () {
switch (R) {
case ".":
return (z += W()), void (T = "decimalPoint");
case "e":
case "E":
return (z += W()), void (T = "decimalExponent");
}
if (!U.isDigit(R)) return K("numeric", $ * Number(z));
z += W();
},
decimalPointLeading: function () {
if (U.isDigit(R)) return (z += W()), void (T = "decimalFraction");
throw ru(W());
},
decimalPoint: function () {
switch (R) {
case "e":
case "E":
return (z += W()), void (T = "decimalExponent");
}
return U.isDigit(R)
? ((z += W()), void (T = "decimalFraction"))
: K("numeric", $ * Number(z));
},
decimalFraction: function () {
switch (R) {
case "e":
case "E":
return (z += W()), void (T = "decimalExponent");
}
if (!U.isDigit(R)) return K("numeric", $ * Number(z));
z += W();
},
decimalExponent: function () {
switch (R) {
case "+":
case "-":
return (z += W()), void (T = "decimalExponentSign");
}
if (U.isDigit(R)) return (z += W()), void (T = "decimalExponentInteger");
throw ru(W());
},
decimalExponentSign: function () {
if (U.isDigit(R)) return (z += W()), void (T = "decimalExponentInteger");
throw ru(W());
},
decimalExponentInteger: function () {
if (!U.isDigit(R)) return K("numeric", $ * Number(z));
z += W();
},
hexadecimal: function () {
if (U.isHexDigit(R)) return (z += W()), void (T = "hexadecimalInteger");
throw ru(W());
},
hexadecimalInteger: function () {
if (!U.isHexDigit(R)) return K("numeric", $ * Number(z));
z += W();
},
string: function () {
switch (R) {
case "\\":
return (
W(),
void (z += (function () {
switch (q()) {
case "b":
return W(), "\b";
case "f":
return W(), "\f";
case "n":
return W(), "\n";
case "r":
return W(), "\r";
case "t":
return W(), "\t";
case "v":
return W(), "\v";
case "0":
if ((W(), U.isDigit(q()))) throw ru(W());
return "\0";
case "x":
return (
W(),
(function () {
var u = "",
D = q();
if (!U.isHexDigit(D)) throw ru(W());
if (((u += W()), (D = q()), !U.isHexDigit(D)))
throw ru(W());
return (u += W()), String.fromCodePoint(parseInt(u, 16));
})()
);
case "u":
return W(), Y();
case "\n":
case "\u2028":
case "\u2029":
return W(), "";
case "\r":
return W(), "\n" === q() && W(), "";
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case void 0:
throw ru(W());
}
return W();
})())
);
case '"':
return H ? (W(), K("string", z)) : void (z += W());
case "'":
return H ? void (z += W()) : (W(), K("string", z));
case "\n":
case "\r":
throw ru(W());
case "\u2028":
case "\u2029":
!(function (u) {
console.warn(
"JSON5: '" +
Fu(u) +
"' in strings is not valid ECMAScript; consider escaping"
);
})(R);
break;
case void 0:
throw ru(W());
}
z += W();
},
start: function () {
switch (R) {
case "{":
case "[":
return K("punctuator", W());
}
T = "value";
},
beforePropertyName: function () {
switch (R) {
case "$":
case "_":
return (z = W()), void (T = "identifierName");
case "\\":
return W(), void (T = "identifierNameStartEscape");
case "}":
return K("punctuator", W());
case '"':
case "'":
return (H = '"' === W()), void (T = "string");
}
if (U.isIdStartChar(R)) return (z += W()), void (T = "identifierName");
throw ru(W());
},
afterPropertyName: function () {
if (":" === R) return K("punctuator", W());
throw ru(W());
},
beforePropertyValue: function () {
T = "value";
},
afterPropertyValue: function () {
switch (R) {
case ",":
case "}":
return K("punctuator", W());
}
throw ru(W());
},
beforeArrayValue: function () {
if ("]" === R) return K("punctuator", W());
T = "value";
},
afterArrayValue: function () {
switch (R) {
case ",":
case "]":
return K("punctuator", W());
}
throw ru(W());
},
end: function () {
throw ru(W());
},
};
function K(u, D) {
return { type: u, value: D, line: V, column: J };
}
function Q(u) {
for (var D = 0, e = u; D < e.length; D += 1) {
var r = e[D];
if (q() !== r) throw ru(W());
W();
}
}
function Y() {
for (var u = "", D = 4; D-- > 0; ) {
var e = q();
if (!U.isHexDigit(e)) throw ru(W());
u += W();
}
return String.fromCodePoint(parseInt(u, 16));
}
var uu = {
start: function () {
if ("eof" === M.type) throw tu();
Du();
},
beforePropertyName: function () {
switch (M.type) {
case "identifier":
case "string":
return (k = M.value), void (O = "afterPropertyName");
case "punctuator":
return void eu();
case "eof":
throw tu();
}
},
afterPropertyName: function () {
if ("eof" === M.type) throw tu();
O = "beforePropertyValue";
},
beforePropertyValue: function () {
if ("eof" === M.type) throw tu();
Du();
},
beforeArrayValue: function () {
if ("eof" === M.type) throw tu();
"punctuator" !== M.type || "]" !== M.value ? Du() : eu();
},
afterPropertyValue: function () {
if ("eof" === M.type) throw tu();
switch (M.value) {
case ",":
return void (O = "beforePropertyName");
case "}":
eu();
}
},
afterArrayValue: function () {
if ("eof" === M.type) throw tu();
switch (M.value) {
case ",":
return void (O = "beforeArrayValue");
case "]":
eu();
}
},
end: function () {},
};
function Du() {
var u;
switch (M.type) {
case "punctuator":
switch (M.value) {
case "{":
u = {};
break;
case "[":
u = [];
}
break;
case "null":
case "boolean":
case "numeric":
case "string":
u = M.value;
}
if (void 0 === L) L = u;
else {
var D = j[j.length - 1];
Array.isArray(D)
? D.push(u)
: Object.defineProperty(D, k, {
value: u,
writable: !0,
enumerable: !0,
configurable: !0,
});
}
if (null !== u && "object" == typeof u)
j.push(u),
(O = Array.isArray(u) ? "beforeArrayValue" : "beforePropertyName");
else {
var e = j[j.length - 1];
O =
null == e
? "end"
: Array.isArray(e)
? "afterArrayValue"
: "afterPropertyValue";
}
}
function eu() {
j.pop();
var u = j[j.length - 1];
O =
null == u
? "end"
: Array.isArray(u)
? "afterArrayValue"
: "afterPropertyValue";
}
function ru(u) {
return Cu(
void 0 === u
? "JSON5: invalid end of input at " + V + ":" + J
: "JSON5: invalid character '" + Fu(u) + "' at " + V + ":" + J
);
}
function tu() {
return Cu("JSON5: invalid end of input at " + V + ":" + J);
}
function nu() {
return Cu("JSON5: invalid identifier character at " + V + ":" + (J -= 5));
}
function Fu(u) {
var D = {
"'": "\\'",
'"': '\\"',
"\\": "\\\\",
"\b": "\\b",
"\f": "\\f",
"\n": "\\n",
"\r": "\\r",
"\t": "\\t",
"\v": "\\v",
"\0": "\\0",
"\u2028": "\\u2028",
"\u2029": "\\u2029",
};
if (D[u]) return D[u];
if (u < " ") {
var e = u.charCodeAt(0).toString(16);
return "\\x" + ("00" + e).substring(e.length);
}
return u;
}
function Cu(u) {
var D = new SyntaxError(u);
return (D.lineNumber = V), (D.columnNumber = J), D;
}
return {
parse: function (u, D) {
(_ = String(u)),
(O = "start"),
(j = []),
(I = 0),
(V = 1),
(J = 0),
(M = void 0),
(k = void 0),
(L = void 0);
do {
(M = Z()), uu[O]();
} while ("eof" !== M.type);
return "function" == typeof D
? (function u(D, e, r) {
var t = D[e];
if (null != t && "object" == typeof t)
if (Array.isArray(t))
for (var n = 0; n < t.length; n++) {
var F = String(n),
C = u(t, F, r);
void 0 === C
? delete t[F]
: Object.defineProperty(t, F, {
value: C,
writable: !0,
enumerable: !0,
configurable: !0,
});
}
else
for (var A in t) {
var i = u(t, A, r);
void 0 === i
? delete t[A]
: Object.defineProperty(t, A, {
value: i,
writable: !0,
enumerable: !0,
configurable: !0,
});
}
return r.call(D, e, t);
})({ "": L }, "", D)
: L;
},
stringify: function (u, D, e) {
var r,
t,
n,
F = [],
C = "",
A = "";
if (
(null == D ||
"object" != typeof D ||
Array.isArray(D) ||
((e = D.space), (n = D.quote), (D = D.replacer)),
"function" == typeof D)
)
t = D;
else if (Array.isArray(D)) {
r = [];
for (var i = 0, E = D; i < E.length; i += 1) {
var o = E[i],
a = void 0;
"string" == typeof o
? (a = o)
: ("number" == typeof o ||
o instanceof String ||
o instanceof Number) &&
(a = String(o)),
void 0 !== a && r.indexOf(a) < 0 && r.push(a);
}
}
return (
e instanceof Number
? (e = Number(e))
: e instanceof String && (e = String(e)),
"number" == typeof e
? e > 0 &&
((e = Math.min(10, Math.floor(e))), (A = " ".substr(0, e)))
: "string" == typeof e && (A = e.substr(0, 10)),
c("", { "": u })
);
function c(u, D) {
var e = D[u];
switch (
(null != e &&
("function" == typeof e.toJSON5
? (e = e.toJSON5(u))
: "function" == typeof e.toJSON && (e = e.toJSON(u))),
t && (e = t.call(D, u, e)),
e instanceof Number
? (e = Number(e))
: e instanceof String
? (e = String(e))
: e instanceof Boolean && (e = e.valueOf()),
e)
) {
case null:
return "null";
case !0:
return "true";
case !1:
return "false";
}
return "string" == typeof e
? B(e)
: "number" == typeof e
? String(e)
: "object" == typeof e
? Array.isArray(e)
? (function (u) {
if (F.indexOf(u) >= 0)
throw TypeError("Converting circular structure to JSON5");
F.push(u);
var D = C;
C += A;
for (var e, r = [], t = 0; t < u.length; t++) {
var n = c(String(t), u);
r.push(void 0 !== n ? n : "null");
}
if (0 === r.length) e = "[]";
else if ("" === A) {
var i = r.join(",");
e = "[" + i + "]";
} else {
var E = ",\n" + C,
o = r.join(E);
e = "[\n" + C + o + ",\n" + D + "]";
}
return F.pop(), (C = D), e;
})(e)
: (function (u) {
if (F.indexOf(u) >= 0)
throw TypeError("Converting circular structure to JSON5");
F.push(u);
var D = C;
C += A;
for (
var e, t, n = r || Object.keys(u), i = [], E = 0, o = n;
E < o.length;
E += 1
) {
var a = o[E],
B = c(a, u);
if (void 0 !== B) {
var f = s(a) + ":";
"" !== A && (f += " "), (f += B), i.push(f);
}
}
if (0 === i.length) e = "{}";
else if ("" === A) (t = i.join(",")), (e = "{" + t + "}");
else {
var l = ",\n" + C;
(t = i.join(l)), (e = "{\n" + C + t + ",\n" + D + "}");
}
return F.pop(), (C = D), e;
})(e)
: void 0;
}
function B(u) {
for (
var D = { "'": 0.1, '"': 0.2 },
e = {
"'": "\\'",
'"': '\\"',
"\\": "\\\\",
"\b": "\\b",
"\f": "\\f",
"\n": "\\n",
"\r": "\\r",
"\t": "\\t",
"\v": "\\v",
"\0": "\\0",
"\u2028": "\\u2028",
"\u2029": "\\u2029",
},
r = "",
t = 0;
t < u.length;
t++
) {
var F = u[t];
switch (F) {
case "'":
case '"':
D[F]++, (r += F);
continue;
case "\0":
if (U.isDigit(u[t + 1])) {
r += "\\x00";
continue;
}
}
if (e[F]) r += e[F];
else if (F < " ") {
var C = F.charCodeAt(0).toString(16);
r += "\\x" + ("00" + C).substring(C.length);
} else r += F;
}
var A =
n ||
Object.keys(D).reduce(function (u, e) {
return D[u] < D[e] ? u : e;
});
return A + (r = r.replace(new RegExp(A, "g"), e[A])) + A;
}
function s(u) {
if (0 === u.length) return B(u);
var D = String.fromCodePoint(u.codePointAt(0));
if (!U.isIdStartChar(D)) return B(u);
for (var e = D.length; e < u.length; e++)
if (!U.isIdContinueChar(String.fromCodePoint(u.codePointAt(e))))
return B(u);
return u;
}
},
};
});
'use strict';
if (typeof IS_DOCKER === 'undefined' || typeof IS_PROCESS_SERVER === 'undefined') {
var SESSION_OBJ = {};
var DOCS_OBJ = {};
}
var glb = {};
var func = {};
func.UI = {};
func.GLB = {};
func.mobile = {};
glb.IS_STUDIO = null;
var PROJECT_OBJ = {};
var APP_OBJ = {};
var SESSION_ID = null;
var EXP_BUSY = false;
glb.PROTECTED_VARS = ['_NULL', '_THIS', '_FOR_KEY', '_FOR_VAL', '_ROWNO', '_ROWID', '_ROWDOC', '_KEY', '_VAL'];
// glb.newRecord = 999999;
func.common = {};
func.common.find_item_by_key = function (arr, key, val) {
return _.find(arr, function (e) {
return e.data[key] === val;
});
};
func.common.find_item_by_key_root = function (arr, key, val) {
return _.find(arr, function (e) {
return e[key] === val;
});
};
func.common.find_ROWID_idx = function (_ds, rowId) {
if (!_ds?.data_feed?.rows) {
throw new Error('data_feed not found');
}
// Find the index of the object with the given _ROWID
const index = _ds.data_feed.rows.findIndex((item) => item._ROWID === rowId);
// }
// If the index is -1, the ROWID was not found, so throw an error
if (index === -1) {
throw new Error(`ROWID "${rowId}" not found`);
}
// Return the found index
return index;
};
func.common.input_mask = async function (actionP, valP, typeP, maskP, elemP, grid_objP, grid_row_idP, grid_col_idP, dsSessionP) {
const module = await func.common.get_module(SESSION_ID, 'xuda-input-musk-utils-module.mjs');
module.input_mask(actionP, valP, typeP, maskP, elemP, grid_objP, grid_row_idP, grid_col_idP, dsSessionP);
};
glb.MAIN_WINDOW_TYPES_ARR = ['screen', 'program'];
glb.FUNCTION_NODES_ARR = ['batch', 'get_data', 'set_data', 'Alert_error', 'Alert_warning', 'Alert_info', 'Alert_ok', 'javascript', 'SQL'];
glb.emailRegex = /^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$/;
const FIREBASE_AUTH_PROPERTIES_ARR = ['provider', 'token', 'first_name', 'last_name', 'email', 'user_id', 'picture', 'verified_email', 'locale', 'error_code', 'error_msg'];
const CLIENT_INFO_PROPERTIES_ARR = [
'fingerprint',
'device',
'user_agent',
'browser_version',
'browser_name',
'engine_version',
'engine_name',
'client_ip',
'os_name',
'os_version',
'device_model',
'device_vendor',
'device_type',
'screen_current_resolution_x',
'screen_current_resolution_y',
'screen_available_resolution_x',
'screen_available_resolution_y',
'language',
'time_zone',
'cpu_architecture',
'uuid',
'cursor_pos_x',
'cursor_pos_y',
];
const APP_PROPERTIES_ARR = ['build', 'author', 'date', 'name'];
const DATASOURCE_PROPERTIES_ARR = ['rows', 'type', 'first_row_id', 'last_row_id', 'query_from_segments_json', 'query_to_segments_json', 'locate_query_from_segments_json', 'locate_query_to_segments_json', 'first_row_segments_json', 'last_row_segments_json', 'rowid_snapshot', 'rowid'];
glb.MOBILE_ARR = ['component', 'web_app', 'ios_app', 'android_app', 'electron_app', 'osx_app', 'windows_app'];
glb.SYS_DATE_ARR = ['SYS_DATE', 'SYS_DATE_TIME', 'SYS_DATE_VALUE', 'SYS_DATE_WEEK_YEAR', 'SYS_DATE_MONTH_YEAR', 'SYS_TIME_SHORT', 'SYS_TIME'];
glb.API_OUTPUT_ARR = ['json', 'html', 'xml', 'text', 'css', 'javascript'];
const PROTECTED_NAMES_ARR = ['THIS', 'ROWID']; //tbd
func.common.db = async function (SESSION_ID, serviceP, dataP, opt = {}, dsSession) {
return new Promise(async function (resolve, reject) {
var _session = SESSION_OBJ[SESSION_ID];
const app_id = _session.app_id;
if (glb.DEBUG_MODE) {
console.log('request', dataP);
}
var data = {
app_id: app_id,
fingerprint: _session?.SYS_GLOBAL_OBJ_CLIENT_INFO?.fingerprint,
debug: glb.DEBUG_MODE,
session_id: SESSION_ID,
gtp_token: _session.gtp_token,
app_token: _session.app_token,
res_token: _session.res_token,
engine_mode: _session.engine_mode,
req_id: 'rt_req_' + crypto.randomUUID(),
app_replicate: APP_OBJ[app_id].app_replicate,
};
try {
if (typeof firebase !== 'undefined' && firebase?.auth()?.currentUser?.displayName) {
data.device_name = firebase.auth().currentUser.displayName;
}
} catch (error) {}
for (const [key, val] of Object.entries(dataP)) {
data[key] = val;
}
const success_callback = function (ret) {
if (dataP.table_id && DOCS_OBJ[app_id][dataP.table_id]) {
func.utils.debug.watch(SESSION_ID, dataP.table_id, 'table', DOCS_OBJ[app_id][dataP.table_id].properties.menuName, {
req: data,
res: ret,
});
}
if (glb.DEBUG_MODE) {
console.log('response', ret);
}
resolve(ret, true);
};
const error_callback = function (err) {
reject(err);
};
function cleanString(json) {
let str = JSON.stringify(json);
// Replace all non-alphanumeric characters with an empty string
return str.replace(/[^a-zA-Z0-9]/g, '');
}
const get_rep_id = function () {
let _data = {};
const fields_to_skip = ['fields', 'viewSourceDesc', 'skip', 'limit', 'count', 'reduce', 'prog_id', 'sortModel', 'filterModelMongo', 'filterModelSql', 'filterModelUserMongo', 'filterModelUserSql'];
for (let [key, val] of Object.entries(dataP)) {
if (typeof val !== 'undefined' && val !== null && !fields_to_skip.includes(key)) {
_data[key] = val;
}
}
return cleanString(_data);
};
const validate_existence_of_whole_table_request = async function (db) {
let table_req_id;
try {
table_req_id = cleanString({
key: data.table_id,
table_id: data.table_id,
});
const doc = await db.get(table_req_id);
let ret = await db.find({
selector: {
docType: 'rep_request',
table_id: data.table_id,
},
});
if (doc.stat < 3) {
throw 'not ready';
}
/// delete table refunded requests
for (let doc of ret.docs) {
if (doc.entire_table) continue;
func.db.pouch.remove_db_replication_from_server(SESSION_ID, doc._id);
}
return { code: 1, data: table_req_id };
} catch (err) {
return { code: -1, data: table_req_id };
}
};
const read_dbs_pouch = async function (db) {
if (_session?.DS_GLB?.[dsSession]?.refreshed && (dataP.filterModelMongo || dataP.filterModelSql)) {
return {
code: 1,
data: await func.db.pouch[serviceP](SESSION_ID, data),
};
}
const rep_id = get_rep_id();
const { code: table_req_code, data: table_req_id } = await validate_existence_of_whole_table_request(db);
if (table_req_code > 0) {
return {
code: 1,
data: await func.db.pouch[serviceP](SESSION_ID, data),
};
}
try {
const doc = await db.get(rep_id);
if (doc.stat < 3) throw 'replication not ready';
const json = {
code: 1,
data: await func.db.pouch[serviceP](SESSION_ID, data),
};
return json;
} catch (err) {
const json = await func.common.perform_rpi_request(SESSION_ID, serviceP, opt, data);
if (json.data.opt) {
try {
try {
await db.get(rep_id);
} catch (err) {
await db.put({
_id: rep_id,
selector: json.data.opt.selector,
stat: 1,
ts: Date.now(),
docType: 'rep_request',
table_id: dataP.table_id,
prog_id: dataP.prog_id,
entire_table: table_req_id === rep_id,
source: 'runtime',
e: data,
});
}
func.db.pouch.set_db_replication_from_server(SESSION_ID);
} catch (err) {}
}
return json;
}
};
const update_dbs_pouch = async function (db) {
try {
// if (_session.DS_GLB[0].data_system.SYS_GLOBAL_BOL_ONLINE) {
// throw "online";
// }
const { code: table_req_code, data: table_req_id } = await validate_existence_of_whole_table_request(db);
if (table_req_code > 0) {
data.full_table_downloaded = true;
}
await db.get(dataP.row_id);
return await func.db.pouch[serviceP](SESSION_ID, data);
} catch (err) {
return await func.common.perform_rpi_request(SESSION_ID, serviceP, opt, data);
}
};
const create_dbs_pouch = async function (db) {
try {
const { code: table_req_code, data: table_req_id } = await validate_existence_of_whole_table_request(db);
if (table_req_code > 0) {
data.full_table_downloaded = true;
}
return await func.db.pouch[serviceP](SESSION_ID, data);
} catch (err) {
return await func.common.perform_rpi_request(SESSION_ID, serviceP, opt, data);
}
};
const delete_dbs_pouch = async function (db) {
for await (let row_id of dataP.ids || []) {
try {
const { code: table_req_code, data: table_req_id } = await validate_existence_of_whole_table_request(db);
if (table_req_code > 0) {
data.full_table_downloaded = true;
}
await db.get(row_id);
let _data = _.cloneDeep(dataP);
_data.ids = [row_id];
return await func.db.pouch['dbs_delete'](SESSION_ID, _data);
} catch (err) {
return await func.common.perform_rpi_request(SESSION_ID, serviceP, opt, data);
}
}
};
if (typeof IS_DOCKER === 'undefined' && typeof IS_PROCESS_SERVER === 'undefined') {
try {
if (!SESSION_OBJ?.[SESSION_ID]?.rpi_http_methods?.includes(serviceP)) {
throw '';
}
if (!(await func?.db?.pouch?.get_replication_stat(SESSION_ID))) throw '';
const db = await func.utils.connect_pouchdb(SESSION_ID);
switch (serviceP) {
case 'dbs_read': {
try {
return success_callback(await read_dbs_pouch(db));
} catch (err) {
if (err === 'creating index in progress') {
throw '';
}
return error_callback(err);
}
break;
}
case 'dbs_update': {
try {
const ret = {
code: 1,
data: await update_dbs_pouch(db),
};
return success_callback(ret);
} catch (err) {
return error_callback(err);
}
break;
}
case 'dbs_create': {
try {
const ret = {
code: 1,
data: await create_dbs_pouch(db),
};
return success_callback(ret);
} catch (err) {
return error_callback(err);
}
break;
}
case 'dbs_delete': {
try {
const ret = {
code: 1,
data: await delete_dbs_pouch(db),
};
return success_callback(ret);
} catch (err) {
return error_callback(err);
}
break;
}
default:
throw '';
break;
}
} catch (err) {
try {
const json = await func.common.perform_rpi_request(SESSION_ID, serviceP, opt, data);
return success_callback(json, true);
} catch (err) {
return error_callback(err);
}
}
}
// DOCKER // PROCESS_SERVER
const response = function (res, ret) {
if (ret.code < 0) {
return error_callback(ret);
}
success_callback(ret);
};
const get_white_spaced_data = function (data) {
var e = {};
_.forEach(data, function (val, key) {
if (!val) {
if (typeof val === 'boolean') {
e[key] = 'false';
} else {
e[key] = '';
}
} else {
if (typeof val === 'boolean') {
e[key] = 'true';
} else {
e[key] = val;
}
}
});
if (data.fields && !data.fields.length) {
e.fields = '';
}
return e;
};
if (dataP.table_id) {
await func.utils.FILES_OBJ.get(SESSION_ID, dataP.table_id);
await func.utils.TREE_OBJ.get(SESSION_ID, dataP.table_id);
}
data.db_driver = 'xuda';
__.rpi.http_calls(serviceP, { body: get_white_spaced_data(data) }, null, response);
});
};
func.common.getJsonFromUrl = function () {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
return urlParams;
};
func.common.getParametersFromUrl = function () {
const searchParams = new URLSearchParams(window.location.search);
const parameters = {};
for (const [key, value] of searchParams.entries()) {
parameters[key] = value;
}
return parameters;
};
func.common.getObjectFromUrl = function (url, element_attributes_obj, embed_params_obj) {
var result = {};
if (element_attributes_obj) {
for (let [key, val] of Object.entries(element_attributes_obj)) {
result[key] = val;
}
}
if (embed_params_obj) {
for (let [key, val] of Object.entries(embed_params_obj)) {
result[key] = val;
}
}
if (!url && typeof IS_DOCKER === 'undefined' && typeof IS_PROCESS_SERVER === 'undefined') {
url = location.href;
}
var question = url.indexOf('?');
var hash = url.indexOf('#');
if (hash == -1 && question == -1) return result;
if (hash == -1) hash = url.length;
var query = question == -1 || hash == question + 1 ? url.substring(hash) : url.substring(question + 1, hash);
// var result = {};
query.split('&').forEach(function (part) {
if (!part) return;
part = part.split('+').join(' '); // replace every + with space, regexp-free version
var eq = part.indexOf('=');
var key = eq > -1 ? part.substr(0, eq) : part;
var val = eq > -1 ? decodeURIComponent(part.substr(eq + 1)) : '';
var from = key.indexOf('[');
if (from == -1) {
result[decodeURIComponent(key)] = val;
} else {
var to = key.indexOf(']', from);
var index = decodeURIComponent(key.substring(from + 1, to));
key = decodeURIComponent(key.substring(0, from));
if (!result[key]) result[key] = [];
if (!index) result[key].push(val);
else result[key][index] = val;
}
});
return result;
};
func.common.getContrast_color = function (hexcolor) {
function colourNameToHex(colour) {
var colours = {
aliceblue: '#f0f8ff',
antiquewhite: '#faebd7',
aqua: '#00ffff',
aquamarine: '#7fffd4',
azure: '#f0ffff',
beige: '#f5f5dc',
bisque: '#ffe4c4',
black: '#000000',
blanchedalmond: '#ffebcd',
blue: '#0000ff',
blueviolet: '#8a2be2',
brown: '#a52a2a',
burlywood: '#deb887',
cadetblue: '#5f9ea0',
chartreuse: '#7fff00',
chocolate: '#d2691e',
coral: '#ff7f50',
cornflowerblue: '#6495ed',
cornsilk: '#fff8dc',
crimson: '#dc143c',
cyan: '#00ffff',
darkblue: '#00008b',
darkcyan: '#008b8b',
darkgoldenrod: '#b8860b',
darkgray: '#a9a9a9',
darkgreen: '#006400',
darkkhaki: '#bdb76b',
darkmagenta: '#8b008b',
darkolivegreen: '#556b2f',
darkorange: '#ff8c00',
darkorchid: '#9932cc',
darkred: '#8b0000',
darksalmon: '#e9967a',
darkseagreen: '#8fbc8f',
darkslateblue: '#483d8b',
darkslategray: '#2f4f4f',
darkturquoise: '#00ced1',
darkviolet: '#9400d3',
deeppink: '#ff1493',
deepskyblue: '#00bfff',
dimgray: '#696969',
dodgerblue: '#1e90ff',
firebrick: '#b22222',
floralwhite: '#fffaf0',
forestgreen: '#228b22',
fuchsia: '#ff00ff',
gainsboro: '#dcdcdc',
ghostwhite: '#f8f8ff',
gold: '#ffd700',
goldenrod: '#daa520',
gray: '#808080',
green: '#008000',
greenyellow: '#adff2f',
honeydew: '#f0fff0',
hotpink: '#ff69b4',
'indianred ': '#cd5c5c',
indigo: '#4b0082',
ivory: '#fffff0',
khaki: '#f0e68c',
lavender: '#e6e6fa',
lavenderblush: '#fff0f5',
lawngreen: '#7cfc00',
lemonchiffon: '#fffacd',
lightblue: '#add8e6',
lightcoral: '#f08080',
lightcyan: '#e0ffff',
lightgoldenrodyellow: '#fafad2',
lightgrey: '#d3d3d3',
lightgreen: '#90ee90',
lightpink: '#ffb6c1',
lightsalmon: '#ffa07a',
lightseagreen: '#20b2aa',
lightskyblue: '#87cefa',
lightslategray: '#778899',
lightsteelblue: '#b0c4de',
lightyellow: '#ffffe0',
lime: '#00ff00',
limegreen: '#32cd32',
linen: '#faf0e6',
magenta: '#ff00ff',
maroon: '#800000',
mediumaquamarine: '#66cdaa',
mediumblue: '#0000cd',
mediumorchid: '#ba55d3',
mediumpurple: '#9370d8',
mediumseagreen: '#3cb371',
mediumslateblue: '#7b68ee',
mediumspringgreen: '#00fa9a',
mediumturquoise: '#48d1cc',
mediumvioletred: '#c71585',
midnightblue: '#191970',
mintcream: '#f5fffa',
mistyrose: '#ffe4e1',
moccasin: '#ffe4b5',
navajowhite: '#ffdead',
navy: '#000080',
oldlace: '#fdf5e6',
olive: '#808000',
olivedrab: '#6b8e23',
orange: '#ffa500',
orangered: '#ff4500',
orchid: '#da70d6',
palegoldenrod: '#eee8aa',
palegreen: '#98fb98',
paleturquoise: '#afeeee',
palevioletred: '#d87093',
papayawhip: '#ffefd5',
peachpuff: '#ffdab9',
peru: '#cd853f',
pink: '#ffc0cb',
plum: '#dda0dd',
powderblue: '#b0e0e6',
purple: '#800080',
rebeccapurple: '#663399',
red: '#ff0000',
rosybrown: '#bc8f8f',
royalblue: '#4169e1',
saddlebrown: '#8b4513',
salmon: '#fa8072',
sandybrown: '#f4a460',
seagreen: '#2e8b57',
seashell: '#fff5ee',
sienna: '#a0522d',
silver: '#c0c0c0',
skyblue: '#87ceeb',
slateblue: '#6a5acd',
slategray: '#708090',
snow: '#fffafa',
springgreen: '#00ff7f',
steelblue: '#4682b4',
tan: '#d2b48c',
teal: '#008080',
thistle: '#d8bfd8',
tomato: '#ff6347',
turquoise: '#40e0d0',
violet: '#ee82ee',
wheat: '#f5deb3',
white: '#ffffff',
whitesmoke: '#f5f5f5',
yellow: '#ffff00',
yellowgreen: '#9acd32',
};
if (typeof colours[colour.toLowerCase()] != 'undefined') return colours[colour.toLowerCase()];
return false;
}
if (!hexcolor.includes('#')) {
hexcolor = colourNameToHex(hexcolor);
}
// If a leading # is provided, remove it
if (hexcolor.slice(0, 1) === '#') {
hexcolor = hexcolor.slice(1);
}
// Convert to RGB value
var r = Number(hexcolor.substr(0, 2), 16);
var g = Number(hexcolor.substr(2, 2), 16);
var b = Number(hexcolor.substr(4, 2), 16);
// Get YIQ ratio
var yiq = (r * 299 + g * 587 + b * 114) / 1000;
// Check contrast
return yiq >= 128 ? 'black' : 'white';
};
func.common.get_url = function (SESSION_ID, method, path) {
return `https://${SESSION_OBJ[SESSION_ID].domain}/${method}${path ? '/' + path : '/'}`;
};
var UI_FRAMEWORK_INSTALLED = null;
var UI_FRAMEWORK_PLUGIN = {};
func.common.get_cast_val = async function (SESSION_ID, source, attributeP, typeP, valP, errorP) {
const report_conversion_error = function (res) {
if (errorP) {
return func.utils.debug_report(SESSION_ID, _.capitalize(source), errorP, 'W');
}
var msg = `error converting ${attributeP} from ${valP} to ${typeP}`;
func.utils.debug_report(SESSION_ID, _.capitalize(source), msg, 'E');
};
const report_conversion_warn = function (msg) {
var msg = `type mismatch auto conversion made to ${attributeP} from value ${valP} to ${typeP}`;
func.utils.debug_report(SESSION_ID, _.capitalize(source), msg, 'W');
};
const module = await func.common.get_module(SESSION_ID, `xuda-get-cast-util-module.mjs`);
return module.cast(typeP, valP, report_conversion_error, report_conversion_warn);
};
var WEB_WORKER = {};
var WEB_WORKER_CALLBACK_QUEUE = {};
glb.DEBUG_MODE = null;
var DS_UI_EVENTS_GLB = {};
var RUNTIME_SERVER_WEBSOCKET = null;
var RUNTIME_SERVER_WEBSOCKET_CONNECTED = null;
var WEBSOCKET_PROCESS_PID = null;
glb.worker_queue_num = 0;
glb.websocket_queue_num = 0;
func.common.get_module = async function (SESSION_ID, module, paramsP = {}) {
let ret;
const get_ret = async function (src) {
const module_ret = await import(src);
var params = get_params();
const ret = module_ret.XudaModule ? new module_ret.XudaModule(params) : await invoke_init_module(module_ret, params);
return ret;
};
const get_params = function () {
let params = {
glb,
func,
APP_OBJ,
SESSION_ID,
PROJECT_OBJ,
DOCS_OBJ,
SESSION_OBJ,
_,
...paramsP,
};
if (typeof IS_PROCESS_SERVER !== 'undefined') params.IS_PROCESS_SERVER = IS_PROCESS_SERVER;
if (typeof IS_API_SERVER !== 'undefined') params.IS_API_SERVER = IS_API_SERVER;
if (typeof IS_DOCKER !== 'undefined') params.IS_DOCKER = IS_DOCKER;
return params;
};
const invoke_init_module = async function (module_ret, params) {
if (!module_ret.init_module) return module_ret;
await module_ret.init_module(params);
return module_ret;
};
const _session = SESSION_OBJ[SESSION_ID];
if (_session.worker_type === 'Dev') {
ret = await get_ret('./modules/' + module);
return ret;
}
if (_session.worker_type === 'Debug') {
if (typeof IS_DOCKER !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') {
ret = await get_ret(func.utils.get_resource_filename(['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session?.opt?.app_build_id, `${_conf.xuda_home}root/dist/runtime/js/modules/` + module));
} else {
ret = await get_ret(func.common.get_url(SESSION_ID, 'dist', func.utils.get_resource_filename(['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session?.opt?.app_build_id, 'runtime/js/modules/' + module)));
}
return ret;
}
const rep = function () {
return _.endsWith(module, '.js') ? module.replace('.js', '.min.js') : module.replace('.mjs', '.min.mjs');
};
if (typeof IS_DOCKER !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') {
ret = await get_ret(func.utils.get_resource_filename(['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session?.opt?.app_build_id, `${_conf.xuda_home}root/dist/runtime/js/modules/` + rep()));
} else {
ret = await get_ret(func.common.get_url(SESSION_ID, 'dist', func.utils.get_resource_filename(['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session?.opt?.app_build_id, 'runtime/js/modules/' + rep())));
}
return ret;
};
func.api = {};
func.api.set_field_value = async function (field_id, value, avoid_refresh) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.set_field_value(field_id, value, avoid_refresh);
};
func.api.get_field_value = async function (field_id) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.get_field_value(field_id);
};
func.api.invoke_event = async function (event_id) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.invoke_event(event_id);
};
func.api.call_project_api = async function (prog_id, params) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.call_project_api(prog_id, params, null);
};
func.api.call_system_api = async function (api_method, payload) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.call_system_api(api_method, payload, null);
};
func.api.dbs_create = async function (table_id, data, cb) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.dbs_create(table_id, row_id, data, cb);
};
func.api.dbs_read = async function (table_id, selector, fields, sort, limit, skip, cb) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.dbs_read(table_id, selector, fields, sort, limit, skip, cb);
};
func.api.dbs_update = async function (table_id, row_id, data, cb) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.dbs_update(table_id, row_id, data, cb);
};
func.api.dbs_delete = async function (table_id, row_id, cb) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.dbs_delete(table_id, row_id, cb);
};
func.api.call_javascript = async function (prog_id, params, evaluate) {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
return await api_utils.call_javascript(prog_id, params, evaluate);
};
// func.api.call_javascript = async function (prog_id, params, evaluate) {
// const SESSION_ID = Object.keys(SESSION_OBJ)[0];
// const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
// func,
// glb,
// SESSION_OBJ,
// SESSION_ID,
// APP_OBJ,
// dsSession: func.utils.get_last_datasource_no(SESSION_ID),
// });
// return await api_utils.call_javascript(prog_id, params, evaluate);
// };
glb.rpi_request_queue_num = 0;
func.common.perform_rpi_request = async function (SESSION_ID, serviceP, opt = {}, data) {
var _session = SESSION_OBJ[SESSION_ID];
var _data_system = _session?.DS_GLB?.[0]?.data_system;
const set_ajax = async function (stat) {
var datasource_changes = {
[0]: {
['data_system']: { SYS_GLOBAL_BOL_AJAX_BUSY: stat },
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
};
if (_data_system) {
// _data_system.SYS_GLOBAL_BOL_AJAX_BUSY = 1;
await set_ajax(1);
if (!_data_system.SYS_GLOBAL_BOL_CONNECTED) {
func.utils.alerts.toast(SESSION_ID, 'Server connection error', 'You are not connected to the server, so your request cannot be processed.', 'error');
return { code: 88, data: {} };
}
}
const http = async function () {
const fetchWithTimeout = (url, options = {}, timeout = 600000) => {
// 100 seconds
const controller = new AbortController();
const { signal } = controller;
const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => {
controller.abort();
reject(new Error('Request timed out'));
}, timeout),
);
const fetchPromise = fetch(url, { ...options, signal });
return Promise.race([fetchPromise, timeoutPromise]);
};
var url = func.common.get_url(SESSION_ID, 'rpi', '');
var _session = SESSION_OBJ[SESSION_ID];
const app_id = _session.app_id;
if (APP_OBJ[app_id].is_deployment && _session.rpi_http_methods?.includes(serviceP)) {
url = 'https://' + _session.host + '/rpi/';
}
url += serviceP;
try {
const response = await fetchWithTimeout(url, {
method: opt.type ? opt.type : 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'xu-gtp-token': _session.gtp_token,
'xu-app-token': _session.app_token,
},
body: JSON.stringify(data),
});
if (!response.ok) {
throw response.status;
}
const json = await response.json();
return json;
} catch (err) {
console.error(err);
if (err === 503) {
_this.func.UI.utils.progressScreen.show(SESSION_ID, `Error code ${err}, reloading in 5 sec`);
setTimeout(async () => {
await func.index.delete_pouch(SESSION_ID);
location.reload();
}, 5000);
}
return {};
}
};
try {
if (_session.engine_mode === 'live_preview') {
throw new Error('live_preview');
}
if (SESSION_OBJ?.[SESSION_ID]?.rpi_http_methods?.includes(serviceP)) {
const ret = await func.common.get_data_from_websocket(SESSION_ID, serviceP, data);
if (_data_system) {
// _data_system.SYS_GLOBAL_BOL_AJAX_BUSY = 0;
await set_ajax(0);
}
return ret;
} else {
throw new Error('method not found in rpi_http_methods');
}
} catch (err) {
const ret = await http();
if (_data_system) {
// _data_system.SYS_GLOBAL_BOL_AJAX_BUSY = 0;
await set_ajax(0);
}
return ret;
}
};
func.common.get_data_from_websocket = async function (SESSION_ID, serviceP, data) {
var _session = SESSION_OBJ[SESSION_ID];
return new Promise(function (resolve, reject) {
const dbs_calls = function () {
glb.websocket_queue_num++;
const obj = {
service: serviceP,
data,
websocket_queue_num: glb.websocket_queue_num,
};
if (glb.IS_WORKER) {
func.utils.post_back_to_client(SESSION_ID, 'get_dbs_data_from_websocket', _session.worker_id, obj);
self.addEventListener('get_ws_data_worker_' + glb.websocket_queue_num, (event) => {
resolve(event.detail.data);
});
// throw new Error("not ready yet");
} else {
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED) {
RUNTIME_SERVER_WEBSOCKET.emit('message', obj);
$('body').on('get_ws_data_response_' + glb.websocket_queue_num, (e, data) => {
resolve(data.data);
$('body').off('get_ws_data_response_' + data.e.websocket_queue_num);
});
} else {
throw new Error('fail to fetch from ws websocket inactive');
}
}
};
const heartbeat = function () {
const obj = {
service: 'heartbeat',
data,
};
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED) {
RUNTIME_SERVER_WEBSOCKET.emit('message', obj);
$('body').on('heartbeat_response', (e, data) => {
resolve(data.data);
$('body').off('heartbeat_response');
});
} else {
throw new Error('fail to fetch from ws websocket inactive');
}
};
if (serviceP === 'heartbeat') {
return heartbeat();
}
dbs_calls();
});
};
func.common.sha256 = async function (inputString) {
// const enc = new TextEncoder();
// const buf = await crypto.subtle.digest('SHA-256', enc.encode(str));
// const bytes = new Uint8Array(buf);
// return [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');
// 1. Create a hash buffer from the input string using SHA-256.
// This part remains the same as it provides a strong, unique cryptographic starting point.
const buffer = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(inputString));
// 2. Interpret the first 8 bytes (64 bits) of the hash as one big number.
const view = new DataView(buffer);
const bigInt = view.getBigUint64(0, false); // `false` for big-endian
// 3. Convert the BigInt to a Base36 string.
// The .toString(36) method handles the conversion to an alphanumeric representation (0-9, a-z).
const base36Hash = bigInt.toString(36);
// 4. Take the first 10 characters. If it's shorter, it will just return the whole string.
// For a 64-bit integer, the Base36 representation will be about 13 characters long,
// so slicing is a reliable way to get a fixed length.
const shortHash = base36Hash.slice(0, 10);
// 5. Pad the start in the unlikely case the hash is shorter than 10 characters.
// This ensures the output is always exactly 10 characters long.
return shortHash.padStart(10, '0');
};
glb.new_xu_render = false;
glb.DEBUG_INFO_OBJ = {};
// var CONNECTION_ATTEMPTS = 0;
glb.APP_INFO = {};
// var vars = {};
// var USERS_CACHE = {};
var SYSTEM_READY = null;
// var CPI_WEBSOCKET;
var GLB_JS_SCRIPTS_LOADED = [];
var STUDIO_WEBSOCKET = null;
var STUDIO_WEBSOCKET_CONNECTION_ID = null;
var STUDIO_PEER = null;
var STUDIO_PEER_CONN_SEND_METHOD = null;
var STUDIO_PEER_CONN_ID = null;
var SUPPORT_PEER = null;
var SUPPORT_PEER_CONN = null;
var STUDIO_PEER_CONN_MSG_QUEUE = [];
var CLIENT_ACTIVITY_TS;
glb.REFERENCE_LESS_FUNCTIONS = ['update', 'raise_event', 'call_library', 'invoke_action', 'loader_on', 'loader_off', 'emit_event', 'delay', 'execute_evaluate_javascript', 'execute_native_javascript'];
var CACHE_PROG_UI = {};
var ALERT_IS_ACTIVE = false;
glb.WORKER_ATTEMPTS_NOT_RESPONDING = 200000;
glb.WORKER_TIMEOUT = 600000;
glb.WORKER_PAUSE = false;
// glb.EMAIL_SEND_RECEIVE_STATUS = {};
var DATASOURCE_INTERVALS = {};
var APP_MODAL_OBJ = {};
var CURRENT_APP_POPOVER = null;
var ELEMENT_CLICK_EVENT = null;
var posX = 0; //cursor x
var posY = 0; //cursor x
var LOADER_ACTIVE = false;
var LOADER_TEXT = '';
var REFRESHER_IN_PROGRESS = false;
glb.screen_num = 0;
var RESPONSE_FROM_STUDIO_QUEUE = {};
var SCREEN_BLOCKER_OBJ = {};
var IS_PROGRESS_SCREEN_OPEN = null;
// var UI_ENGINE_OBJ = null;
var UI_WORKER_OBJ = {
jobs: [],
num: 9000,
cache: {},
viewport_height_set_ids: [],
xu_render_cache: {},
// pending_for_viewport_render: {}
};
glb.html5_events_handler = [
'onabort',
'onafterprint',
'onautocomplete',
'onautocompleteerror',
'onbeforeprint',
'onbeforeunload',
'onblur',
'oncancel',
'oncanplay',
'oncanplaythrough',
'onchange',
'onclick',
'onclose',
'oncontextmenu',
'oncopy',
'oncuechange',
'oncut',
'ondblclick',
'ondrag',
'ondragend',
'ondragenter',
'ondragexit',
'ondragleave',
'ondragover',
'ondragstart',
'ondrop',
'ondurationchange',
'onemptied',
'onended',
'onerror',
'onfocus',
'onhashchange',
'oninput',
'oninvalid',
'onkeydown',
'onkeypress',
'onkeyup',
'onload',
'onloadeddata',
'onloadedmetadata',
'onloadstart',
'onmessage',
'onmousedown',
'onmouseenter',
'onmouseleave',
'onmousemove',
'onmouseout',
'onmouseover',
'onmouseup',
'onmousewheel',
'onoffline',
'ononline',
'onpagehide',
'onpageshow',
'onpaste',
'onpause',
'onplay',
'onplaying',
'onpopstate',
'onprogress',
'onratechange',
'onreset',
'onresize',
'onscroll',
'onsearch',
'onseeked',
'onseeking',
'onselect',
'onshow',
'onsort',
'onstalled',
'onstorage',
'onsubmit',
'onsuspend',
'ontimeupdate',
'ontoggle',
'onunload',
'onvolumechange',
'onwaiting',
];
glb.lifecycle = {
plugins: {},
// queue: [],
fn_arr: ['beforeInit', 'initialized', 'systemReady', 'beforeMounted', 'mounted'],
// add(type, fn, params) {
// this.queue.push({ type, fn, params });
// },
execute: async function (SESSION_ID, event) {
const _session = SESSION_OBJ[SESSION_ID];
const xu_api = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: func.utils.get_last_datasource_no(SESSION_ID),
});
var params = {
SESSION_ID,
session_data: _session,
app_obj: APP_OBJ[_session.app_id],
xu_api,
};
for await (const [plugin_name, val] of Object.entries(glb.lifecycle.plugins)) {
if (val?.plugin_script?.[event]) {
params.setup_data = val.setup_data;
await val.plugin_script[event](params);
}
}
},
};
glb.run_xu_before = [
'xu-cdn',
'xu-style',
'xu-render',
'xu-for-key',
'xu-for-val',
// "xu-ui-plugin",
// "programParameters",
];
glb.run_xu_after = ['xu-bind', 'xu-class', 'xu-script', 'xu-ui-plugin'];
glb.attr_abbreviations_arr = ['xu-click', 'xu-dblclick', 'xu-contextmenu', 'xu-focus', 'xu-keyup', 'xu-change', 'xu-blur', 'xu-init'];
glb.solid_attributes = ['disabled'];
func.utils = {};
func.utils.debug = {};
func.utils.debug.watch = async function (SESSION_ID, key, type, info, result, condition, not_executed) {
if (!glb.DEBUG_MODE) return;
const debug_utils = await func.common.get_module(SESSION_ID, 'xuda-debug-utils-module.mjs');
debug_utils.watch(SESSION_ID, key, type, info, result, condition, not_executed);
};
func.utils.debug.log = async function (SESSION_ID, node_idP, jsonP) {
if (typeof IS_PROCESS_SERVER !== 'undefined') return;
if (!glb.DEBUG_MODE && !glb.TRACE_ON) return;
const debug_utils = await func.common.get_module(SESSION_ID, 'xuda-debug-utils-module.mjs');
debug_utils.log(SESSION_ID, node_idP, jsonP);
};
func.utils.debug.write = async function (SESSION_ID, logP, callbackP) {
if (!glb.DEBUG_MODE) return;
const debug_utils = await func.common.get_module(SESSION_ID, 'xuda-debug-utils-module.mjs');
debug_utils.write(SESSION_ID, logP, callbackP);
};
func.utils.debug.read_command = async function (data) {
if (!glb.DEBUG_MODE) return;
const debug_utils = await func.common.get_module(SESSION_ID, 'xuda-debug-utils-module.mjs');
debug_utils.read_command(data);
};
func.utils.DOCS_OBJ = {};
func.utils.DOCS_OBJ.get = async function (SESSION_ID, idP) {
if (!idP || idP === '0') return;
var _session = SESSION_OBJ[SESSION_ID];
const _app_id = _session.app_id;
if (!DOCS_OBJ[_app_id]) {
DOCS_OBJ[_app_id] = {};
}
if (DOCS_OBJ[_app_id][idP]) {
return DOCS_OBJ[_app_id][idP];
}
if (_session.project_data) {
if (idP === 'system') {
if (_session.project_data.globals) {
DOCS_OBJ[_app_id][idP] = _session.project_data.globals;
} else {
DOCS_OBJ[_app_id][idP] = {};
}
return DOCS_OBJ[_app_id][idP];
}
let val = _session.project_data?.programs?.[idP];
if (val) {
return (DOCS_OBJ[_app_id][idP] = val);
}
}
if (typeof _session.SLIM_BUNDLE === 'undefined' || !_session.SLIM_BUNDLE) {
const module = await func.common.get_module(SESSION_ID, `xuda-progs-loader-module.mjs`);
if (idP !== 'system') {
DOCS_OBJ[_app_id][idP] = await module.DOCS_OBJ_get(SESSION_ID, idP);
if (DOCS_OBJ[_app_id][idP] && _.isEmpty(DOCS_OBJ[_app_id][idP])) {
await func.utils.remove_cached_objects(SESSION_ID);
delete DOCS_OBJ[_app_id][idP];
}
return DOCS_OBJ[_app_id][idP];
}
DOCS_OBJ[_app_id][idP] = await module.DOCS_OBJ_get(SESSION_ID, 'global_' + (APP_OBJ[_app_id].app_replicate || _app_id));
if (APP_OBJ[_app_id].app_imported_projects) {
for await (const imported_app_id of APP_OBJ[_app_id].app_imported_projects) {
var view_ret = await module.DOCS_OBJ_get(SESSION_ID, 'global_' + imported_app_id);
DOCS_OBJ[_app_id][idP] = _.merge(DOCS_OBJ[_app_id][idP], view_ret);
}
}
return DOCS_OBJ[_app_id][idP];
}
console.error(`${idP} not found`);
};
func.utils.FILES_OBJ = {};
func.utils.FILES_OBJ.get = async function (SESSION_ID, idP) {
if (!idP) return;
return await func.utils.DOCS_OBJ.get(SESSION_ID, idP);
};
func.utils.VIEWS_OBJ = {};
func.utils.VIEWS_OBJ.get = async function (SESSION_ID, idP) {
if (!idP) return;
return await func.utils.DOCS_OBJ.get(SESSION_ID, idP);
};
func.utils.TREE_OBJ = {};
func.utils.TREE_OBJ.get = async function (SESSION_ID, idP) {
if (!idP) return;
var ret = await func.utils.DOCS_OBJ.get(SESSION_ID, idP);
if (ret?.properties) {
ret.properties.id = idP;
}
return ret.properties;
};
func.utils.get_dateTime = async function (SESSION_ID, typeP, dateP) {
// const getUTC = function (ts) {
// var date = new Date(ts);
// var utc_date = new Date(
// date.getUTCFullYear(),
// date.getUTCMonth(),
// date.getUTCDate(),
// date.getUTCHours(),
// date.getUTCMinutes(),
// date.getUTCSeconds(),
// date.getUTCMilliseconds()
// );
// return utc_date;
// };
const get_server_ts = async function () {
var _session = SESSION_OBJ[SESSION_ID];
const response = await fetch(`https://${_session.domain}/cpi/get_utc_ts`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const json = await response.json();
return json.data;
// }
};
function getWeekNumber(d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(0, 0, 0);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
// Get first day of year
var yearStart = new Date(d.getFullYear(), 0, 1);
// Calculate full weeks to nearest Thursday
var weekNo = Math.ceil(((d - yearStart) / 86400000 + 1) / 7);
// Return array of year and week number
return weekNo;
}
var sysDate = new Date(dateP); // getUTC(dateP); //new Date(dateP);
if (!dateP) {
let ts = await get_server_ts();
sysDate = new Date(ts);
}
var day = _.padStart(sysDate.getDate(), 2, '0');
var month = _.padStart(sysDate.getMonth() + 1, 2, '0');
var year = sysDate.getFullYear();
var week = _.padStart(getWeekNumber(sysDate), 2, '0');
var hour = _.padStart(sysDate.getHours(), 2, '0');
var minute = _.padStart(sysDate.getMinutes(), 2, '0');
var second = _.padStart(sysDate.getSeconds(), 2, '0');
if (typeP === 'SYS_DATE') return year + '-' + month + '-' + day;
if (typeP === 'SYS_DATE_TIME') return year + '-' + month + '-' + day + 'T' + hour + ':' + minute;
if (typeP === 'SYS_DATE_VALUE') return sysDate.valueOf();
if (typeP === 'SYS_DATE_WEEK_YEAR') return year + 'W' + week;
if (typeP === 'SYS_DATE_MONTH_YEAR') return year + '-' + month;
if (typeP === 'SYS_TIME') return hour + ':' + minute + ':' + second;
if (typeP === 'SYS_TIME_SHORT') return hour + ':' + minute;
};
func.utils.is_onscreen_event = function (functionP) {
const arr = ['invoke_action', 'cache_refresh', 'call_popover', 'call_modal', 'call_page', 'loader_on', 'loader_off', 'emit_event'];
return arr.includes(functionP);
};
func.utils.get_screen_obj = async function (SESSION_ID, id) {
const prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, id);
if (!prog_obj) return console.error('prog not found: ' + id);
if (prog_obj.properties.menuType === 'screen' || prog_obj.properties.menuType === 'api' || glb.FUNCTION_NODES_ARR.includes(prog_obj.properties.menuType) || glb.MOBILE_ARR.includes(prog_obj.properties.menuType)) {
return prog_obj;
}
return;
};
func.utils.clean_returned_datasource = function (SESSION_ID, DS) {
const clean_object_functions = function (obj) {
for (const [key, val] of Object.entries(obj)) {
if (typeof val === 'function') {
delete obj[key];
}
}
};
var _session = SESSION_OBJ[SESSION_ID];
if (!_session.DS_GLB[DS]) return;
var obj = _.clone(_session.DS_GLB[DS]);
delete obj.screen_params;
try {
clean_object_functions(obj);
obj = JSON.parse(JSON.stringify(obj, func.utils.clean_stringify_null, '\t'));
} catch (e) {
console.error(e);
}
delete obj.pre_init_fields;
delete obj.oninit_triggers_to_run;
// delete obj.raw_data;
delete obj.debug;
const clean_empty_objects = function () {
for (const [key, val] of Object.entries(obj)) {
if (typeof val === 'object' && !Array.isArray(val) && _.isEmpty(val)) {
delete obj[key];
}
}
for (const [key, val] of Object.entries(obj)) {
if (typeof val === 'object' && Array.isArray(val) && !val.length) {
delete obj[key];
}
}
};
delete obj.screenInfo;
delete obj.viewEventsProp;
delete obj.viewSourceDesc;
delete obj.viewSourceProp;
delete obj.v;
clean_empty_objects();
// clean_dataset();
return obj;
};
func.utils.post_back_to_client = function (SESSION_ID, service, id, data) {
if (typeof IS_PROCESS_SERVER !== 'undefined') return;
worker_post_message({
fx_to_execute: service,
params: data,
session_id: SESSION_ID,
worker_id: id,
});
};
func.utils.job_worker = {};
func.utils.job_worker = function (session_id) {
var SESSION_ID = session_id;
var _session = SESSION_OBJ[SESSION_ID];
var is_progressScreen_on;
var is_not_responding;
var attempt = 0;
const lock = function (dsP) {
if (!_session.WORKER_OBJ.jobs[_session.WORKER_OBJ.stat] || _session.WORKER_OBJ.jobs[_session.WORKER_OBJ.stat].typeP === 'system_interval' || _session.WORKER_OBJ.jobs[_session.WORKER_OBJ.stat].typeP === 'system event') {
return;
}
if (glb.IS_WORKER) {
func.utils.post_back_to_client(SESSION_ID, 'screen_blocker_on', _session.worker_id, null);
} else {
func.UI.utils.screen_blocker(true, 'Worker', dsP);
}
};
const unlock = function () {
if (glb.IS_WORKER) {
} else {
func.UI.utils.screen_blocker(false, 'Worker');
}
};
const not_responding = function () {
is_not_responding = true;
func.UI.utils.progressScreen.hide('Working, Please wait..');
setTimeout(function () {
if (!is_not_responding) return;
reset();
}, 500);
};
const idle = function () {
if (is_progressScreen_on) {
setTimeout(function () {
if (!attempt && is_progressScreen_on) {
is_progressScreen_on = false;
is_not_responding = false;
func.UI.utils.progressScreen.hide('Working, Please wait..');
} else if (attempt > 300 && is_not_responding) {
is_not_responding = false;
busy();
}
}, 310);
} else {
if (!glb.IS_WORKER) {
// func.UI.screen.garbage_collector(SESSION_ID);
}
}
};
const busy = function () {
if (glb.IS_WORKER) return;
func.utils.debug_report(SESSION_ID, 'utils.worker.busy', 'worker processing more then 10 second', 'W', '', _session.WORKER_OBJ.jobs);
is_progressScreen_on = true;
};
const reset = function () {
func.utils.debug_report(SESSION_ID, 'utils.worker.reset', 'worker not responding', 'E', '', _session.WORKER_OBJ.jobs);
_session.WORKER_OBJ.jobs = [];
_session.WORKER_OBJ.stat = null;
$('.screen_blocker').remove();
};
return {
_interval: null,
_was_busy: null,
init: async function () {
var _this = this;
this._interval = setInterval(async function () {
var _session = SESSION_OBJ[SESSION_ID];
if (!_session?.WORKER_OBJ) return;
if (typeof _session.WORKER_OBJ.stat === 'undefined' || _session.WORKER_OBJ.stat === 'undefined' || _session.WORKER_OBJ.stat === null) {
// idle
// if (_this._was_busy) {
// if (glb.IS_WORKER) {
// func.utils.post_back_to_client(
// SESSION_ID,
// "worker_busy_off",
// _session.worker_id,
// null
// );
// } else {
// func.UI.utils.indicator.worker.normal();
// }
// _this._was_busy = false;
// }
unlock();
if (_session.WORKER_OBJ.jobs.length) {
for await (const [key, val] of Object.entries(_session.WORKER_OBJ.jobs)) {
if (val.stat) {
break;
}
// if (!_session.WORKER_OBJ.stat) {
if (!_session.WORKER_OBJ.jobs[Number(key)] || val.job_num === 9999999) {
continue;
}
if (val.dsSessionP && !_session.DS_GLB[val.dsSessionP]) {
func.events.delete_job(SESSION_ID, val.job_num);
break;
}
await func.events.execute(
SESSION_ID,
val.job_num,
val.eventIdP,
val.triggerP,
val.functionP,
val.refIdP,
val.containerP,
val.elementP,
val.rowP,
val.evt,
val.descP,
val.rootScreenIdP,
val.dsSessionP,
null,
val.typeP,
null,
val.event_propertiesP,
val.calling_triggerP,
null,
val.paramsP,
val.target_frame_idP,
val.calling_trigger_prop,
val.calling_program,
val.argumentsP,
val.prog_id,
val.nodeId,
val.parentDataSourceNo,
val.$container,
);
}
_this._was_busy = true;
} else {
// idle
if (_this._was_busy) {
if (glb.IS_WORKER) {
func.utils.post_back_to_client(SESSION_ID, 'worker_busy_off', _session.worker_id, null);
} else {
func.UI.utils.indicator.worker.normal();
}
}
_this._was_busy = false;
}
attempt = 0;
is_not_responding = false;
idle();
} else {
//busy
_this._was_busy = true;
if (glb.IS_WORKER) {
func.utils.post_back_to_client(SESSION_ID, 'worker_busy_on', _session.worker_id, null);
} else {
func.UI.utils.indicator.worker.busy();
}
if (glb.WORKER_PAUSE) return;
attempt++;
if (!is_progressScreen_on && attempt > glb.WORKER_TIMEOUT) busy();
if (!is_not_responding && attempt >= glb.WORKER_ATTEMPTS_NOT_RESPONDING) {
not_responding();
}
var ds = null;
if (_session.WORKER_OBJ.jobs[0]) ds = _session.WORKER_OBJ.jobs[0].dsSessionP;
lock(ds);
}
}, 1);
},
stop: function () {
clearInterval(this._interval);
},
};
};
func.utils.base64MimeType = function (encoded) {
var result = null;
if (typeof encoded !== 'string') {
return result;
}
var mime = encoded.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/);
if (mime && mime.length) {
result = mime[1];
}
return result;
};
func.utils.makeid = function (length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
};
func.utils.get_device = function () {
var device;
try {
if (window.cordova) {
device = window.cordova.platformId;
}
} catch (e) {
console.error('error using ui element in server side request');
}
return device;
};
func.utils.ws_worker = {};
func.utils.ws_worker.functions = {
init: async function (data) {
var SESSION_ID = data.SESSION_ID;
APP_OBJ[data.app_id] = data.APP_OBJ;
PROJECT_OBJ[data.app_id] = data.PROJECT_OBJ;
if (['live_preview', 'miniapp'].includes(data.SESSION_INFO.engine_mode)) {
DOCS_OBJ[data.app_id] = data.DOCS_OBJ;
} else if (typeof IS_DOCKER === 'undefined' && typeof IS_PROCESS_SERVER === 'undefined') {
if (!DOCS_OBJ[data.app_id]) {
DOCS_OBJ[data.app_id] = {};
}
}
glb.APP_INFO[data.app_id] = data.APP_INFO;
glb.DEBUG_MODE = data.DEBUG_MODE;
glb.DEBUG_INFO_OBJ = data.DEBUG_INFO_OBJ;
glb.WINDOW_LOCATION_SEARCH = data.WINDOW_LOCATION_SEARCH;
glb.ROOT_ELEMENT_ATTRIBUTES = data.ROOT_ELEMENT_ATTRIBUTES;
DATASOURCE_INTERVALS[SESSION_ID] = {};
SESSION_OBJ[SESSION_ID] = data.SESSION_INFO;
var _session = SESSION_OBJ[SESSION_ID];
glb.SESSION_INFO = data.SESSION_INFO;
_session.engine_mode = data.engine_mode;
STUDIO_WEBSOCKET_CONNECTION_ID = data.STUDIO_WEBSOCKET_CONNECTION_ID;
for (let [key, val] of Object.entries(_session.DS_GLB)) {
if (Number(key) > _session.dataSourceSessionGlobal) {
_session.dataSourceSessionGlobal = Number(key);
}
}
if (typeof _session.SLIM_BUNDLE === 'undefined' || !_session.SLIM_BUNDLE) {
const db_adapter = await func.common.get_module(SESSION_ID, 'xuda-db-adapter-module.mjs');
func.db = db_adapter._db;
}
_session.WORKER_OBJ.fx = new func.utils.job_worker(SESSION_ID);
_session.WORKER_OBJ.fx.init();
if (_session.app_id === 'unknown') {
worker_post_message({
fx_to_execute: 'init_done',
worker_id: ws_worker_id,
session_id: SESSION_ID,
});
} else {
const module = await func.common.get_module(SESSION_ID, `xuda-progs-loader-module.mjs`);
await module.load_objects_cache(SESSION_ID);
worker_post_message({
fx_to_execute: 'init_done',
worker_id: ws_worker_id,
session_id: SESSION_ID,
});
}
WEB_WORKER_CALLBACK_QUEUE[SESSION_ID] = {};
},
datasource_create: async function (params, promise_queue_id) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
_session.ts = new Date().getTime();
var args = params;
args.SESSION_ID = SESSION_ID;
if (show_log) {
console.log('DATASOURCE EXECUTING SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
}
if (Number(params.dataSourceSessionGlobal) > _session.dataSourceSessionGlobal) {
_session.dataSourceSessionGlobal = Number(params.dataSourceSessionGlobal);
}
const ret = await func.datasource.prepare(
args.SESSION_ID,
args.prog_id,
args.dataSourceNoP,
args.parentDataSourceNoP,
args.containerIdP,
args.rowIdP,
args.jobNoP,
args.calling_trigger_prop,
args.parameters_raw_obj,
null,
args.callingSourceP,
args.calling_jobP,
args.screen_dsP,
args.is_panelP,
args.parameters_obj_inP,
args.static_refreshP,
args.run_atP,
args.worker_id,
);
try {
let _ds = _session.DS_GLB[ret.dsSessionP];
if (show_log) console.log('DATASOURCE EXECUTION DONE ' + ret.dsSessionP + ' ' + _ds?.tree_obj?.menuName || '' + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
var obj = func.utils.clean_returned_datasource(SESSION_ID, ret?.dsSessionP);
obj.dataSourceSessionGlobal = _session.dataSourceSessionGlobal;
worker_post_message({
promise_queue_id,
params: obj,
worker_id: ws_worker_id,
session_id: SESSION_ID,
process_pid: params.process_pid,
service: params.service,
});
_ds.stat = 'idle';
} catch (error) {
debugger;
}
},
datasource_delete: function (params, promise_queue_id) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
if (DATASOURCE_INTERVALS[SESSION_ID] && DATASOURCE_INTERVALS[SESSION_ID][params.dssession]) {
DATASOURCE_INTERVALS[SESSION_ID][params.dssession].clear();
}
delete _session.DS_GLB[params.dssession];
if (show_log) console.log('DATASOURCE DELETE SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name, params.dssession);
// debugger;
worker_post_message({
promise_queue_id,
worker_id: ws_worker_id,
session_id: SESSION_ID,
process_pid: params.process_pid,
service: params.service,
});
},
update_datasource_changes_from_client: async function (params, promise_queue_id) {
if (_.isEmpty(SESSION_OBJ)) return;
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
if (!_session) {
_session = {};
_session.app_id = params.app_id;
_session.dataSourceSessionGlobal = -1;
_session.DS_GLB = {};
}
if (show_log) console.log('DATASOURCE UPDATE SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name, params.dssession);
await func.datasource.update(SESSION_ID, params.datasource_changes, true);
worker_post_message({
promise_queue_id,
params: params.dssession,
worker_id: ws_worker_id,
session_id: SESSION_ID,
process_pid: params.process_pid,
service: params.service,
});
},
return_to_data_source: function (params, promise_queue_id) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
var ds = _session.DS_GLB[params.dssession];
var type = params.return_to_data_source_type;
var args = ds.args;
if (show_log) console.log('DATASOURCE RETURN TO DATASOURCE ' + params.dssession + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
_session.DS_GLB[params.dssession].v.onscreen_events_active = params.onscreen_events_active;
if (params.viewEventExec_arr) _session.DS_GLB[params.dssession].viewEventExec_arr = JSON.parse(params.viewEventExec_arr);
var done = function (SESSION_ID, DS) {
if (show_log) console.log('DATASOURCE RETURN TO DATASOURCE DONE ' + DS + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
var obj = func.utils.clean_returned_datasource(SESSION_ID, DS);
obj.dataSourceSessionGlobal = _session.dataSourceSessionGlobal;
worker_post_message({
fx_to_execute: 'post_datasource',
params: {
ds_obj: obj,
dsSessionP: params.dssession,
},
worker_id: ws_worker_id,
session_id: SESSION_ID,
process_pid: params.process_pid,
service: params.service,
});
};
done(SESSION_ID, params.dssession);
},
acknowledged_worker_with_eventChangesResults_done: function (params) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
var ds = _session.DS_GLB[params.dssession];
if (show_log) console.log('UPDATE CHANGE EVENT DONE TO DATASOURCE ' + params.dssession + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
ds.eventChangesResults_done = true;
},
return_from_db_query: function (params) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
var id = params.id;
if (show_log) console.log('RETURN FROM DB_QUERY ' + params.dssession + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
debugger;
var callback = func.utils.get_callback_queue(SESSION_ID, params.callback_id);
if (callback) callback(params.data);
},
return_from_sava_data: function (params) {
var SESSION_ID = params.session_id;
var _session = SESSION_OBJ[SESSION_ID];
var id = params.id;
if (show_log) console.log('RETURN FROM SAVE_DATA ' + params.dssession + ' SESSION_ID: ' + SESSION_ID, APP_OBJ[_session.app_id].app_name);
func.utils.get_callback_queue(SESSION_ID, params.callback_id)();
},
update_debug_info: function (params) {
glb.DEBUG_INFO_OBJ = params;
},
// update_VIEWS_OBJ: function (params) {
// delete VIEWS_OBJ[APP_ID][params.id];
// },
// update_TREE_OBJ: function (params) {
// delete TREE_OBJ[APP_ID][params.id];
// },
// send_object_to_worker: function (params) {
// if (RESPONSE_FROM_STUDIO_QUEUE[params.req_id]) {
// RESPONSE_FROM_STUDIO_QUEUE[params.req_id].data = params;
// }
// },
get_dataSourceSessionGlobal: function (params) {
var SESSION_ID = params.session_id;
SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal++;
let new_dataSourceSessionGlobal = SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal;
return { new_dataSourceSessionGlobal };
},
create_webworker_globals: function (params) {
var SESSION_ID = params.session_id;
SESSION_OBJ[SESSION_ID].DS_GLB[0] = params.ds_data;
},
return_doc_from_studio: function (params) {
var SESSION_ID = params.session_id;
function emitCustomEvent(eventName, detail) {
const event = new CustomEvent(eventName, { detail });
self.dispatchEvent(event);
}
emitCustomEvent('live_preview_get_obj_response_worker_' + params._id, {
data: params,
});
},
return_doc_from_websocket: function (params) {
var SESSION_ID = params.session_id;
function emitCustomEvent(eventName, detail) {
const event = new CustomEvent(eventName, { detail });
self.dispatchEvent(event);
}
emitCustomEvent('get_doc_obj_from_build_worker_' + params._id, {
data: params,
});
},
return_dbs_data_from_websocket: function (params) {
var SESSION_ID = params.session_id;
function emitCustomEvent(eventName, detail) {
const event = new CustomEvent(eventName, { detail });
self.dispatchEvent(event);
}
emitCustomEvent('get_ws_data_worker_' + params.websocket_queue_num, {
data: params.data,
});
},
heartbeat: async function (params) {
var SESSION_ID = params.session_id;
try {
const do_heartbeat = async function (app_replicate, app_id, token_id, fingerprint, device_name, stat) {
try {
module.exports.close_expired_device_log_sessions(app_id);
return await update_device(app_replicate, app_id, token_id, fingerprint, device_name, stat);
} catch (err) {
return { code: -400, data: err.message };
}
};
let ret = await do_heartbeat(params.app_replicate, params.app_id, params.gtp_token || req.body.app_token, params.fingerprint, params.device_name, params.stat);
// session_status: ret_session.data.stat
if (params.token) {
try {
const couch = await __.rpi.get_app_couch(req.body.app_id);
const session_doc = await couch.get(req.body.app_token);
ret.session_stat = session_doc.stat;
} catch (error) {}
}
} catch (error) {
debugger;
}
},
return_rpi_request_from_studio: function (params) {
var SESSION_ID = params.session_id;
function emitCustomEvent(eventName, detail) {
const event = new CustomEvent(eventName, { detail });
self.dispatchEvent(event);
}
emitCustomEvent('rpi_request_response_worker_' + params.table_id, {
data: params.data,
});
},
};
func.utils.set_callback_queue = function (SESSION_ID, func) {
var t = new Date().valueOf().toString() + Math.random().toString();
try {
WEB_WORKER_CALLBACK_QUEUE[SESSION_ID][t] = func;
} catch (e) {
console.error(id);
func.utils.remove_cached_objects(SESSION_ID);
}
return t;
};
func.utils.get_callback_queue = function (SESSION_ID, t) {
var func = WEB_WORKER_CALLBACK_QUEUE[SESSION_ID][t];
setTimeout(function () {
if (WEB_WORKER_CALLBACK_QUEUE[SESSION_ID][t]) delete WEB_WORKER_CALLBACK_QUEUE[SESSION_ID][t];
}, 1000);
return func;
};
func.utils.clean_stringify_null = function (key, value) {
// Filtering out properties
if (value === null) {
return undefined;
}
return value;
};
func.utils.load_js_on_demand = async function (js_src, type) {
const get_script = function (callback) {
function getScript(scriptUrl, callback) {
const script = document.createElement('script');
script.src = scriptUrl;
if (type) script.type = type;
script.onload = callback;
document.head.appendChild(script);
}
if (glb.IS_WORKER) {
callback(script);
return;
}
function isScriptLoaded(src) {
return GLB_JS_SCRIPTS_LOADED.includes(src);
}
if (isScriptLoaded(js_src)) {
callback(false);
} else {
getScript(js_src, function (response, status) {
// console.log(response,status)
callback(true);
GLB_JS_SCRIPTS_LOADED.push(js_src);
});
}
};
return new Promise((resolve) => {
get_script(resolve);
});
};
func.utils.load_css_on_demand = function (css_href) {
function isCssLoaded(src) {
try {
return document.querySelector('link[href="' + src + '"]') ? true : false;
} catch (err) {
console.warn(`load css ${css_href} failed`);
return true;
}
}
if (isCssLoaded(css_href)) {
return;
}
return $('<link/>', {
rel: 'stylesheet',
type: 'text/css',
href: css_href,
}).prependTo('head');
};
func.utils.remove_js_css_file = function (filename, filetype) {
var targetelement = filetype == 'js' ? 'script' : filetype == 'css' ? 'link' : 'none'; //determine element type to create nodelist from
var targetattr = filetype == 'js' ? 'src' : filetype == 'css' ? 'href' : 'none'; //determine corresponding attribute to test for
var allsuspects = document.getElementsByTagName(targetelement);
for (var i = allsuspects.length; i >= 0; i--) {
//search backwards within node list for matching elements to remove
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null && allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1) allsuspects[i].parentNode.removeChild(allsuspects[i]); //remove element by calling parentNode.removeChild()
}
};
func.utils.replace_studio_drive_url = function (SESSION_ID, val) {
var _session = SESSION_OBJ[SESSION_ID];
if (!_session.is_deployment) return val;
try {
return val.replaceAll(`https://xuda.io/studio-drive/${APP_OBJ[_session.app_id].app_replicate}`, `https://${_session.domain}/studio-drive/${APP_OBJ[_session.app_id].app_replicate}`);
} catch (err) {
return val;
}
};
func.utils.get_drive_url = function (SESSION_ID, val, wrap) {
// wrap = false; // tbd bypass
var _session = SESSION_OBJ[SESSION_ID];
function replaceFiletoURL(fileString) {
const _app = APP_OBJ[_session.app_id];
let url = `https://${_session.domain}/workspace-drive/${_app.is_deployment ? _app.app_datacenter_id : _app.app_id_reference}/`;
let FILE_REPLACE_URL = `${url}${val}`;
if (!_app.is_deployment) {
// the deployment server will handle the app_token
FILE_REPLACE_URL += `?app_token=${_session.app_token}&ts=${Date.now()}`;
} else {
FILE_REPLACE_URL += `?ts=${_session?.opt?.app_build_id || 0}`;
}
let match = `drv_${_app.app_replicate || _session.app_id}_[0-9a-f\\-]+\\.[a-zA-Z0-9]+`;
let pat = new RegExp(match, 'g');
let URLString = fileString.replace(pat, function (match, idx) {
// debugger;
const hasURLbefore = fileString.substring(idx - url.length, idx) === url;
if (hasURLbefore) {
return match;
}
return FILE_REPLACE_URL.replace('{val}', match);
});
return URLString;
}
if (typeof val === 'string' || typeof val === 'object') {
if (typeof val === 'string') {
if (val.includes('.') && val.includes('drv_') && val.length > 30) {
var ret = replaceFiletoURL(val);
if (wrap) {
return { value: '"' + ret + '"', changed: true };
} else {
return { value: ret, changed: true };
}
} else {
return { value: val, changed: false };
}
}
if (typeof val === 'object') {
try {
let str = JSON.stringify(val);
if (str.includes('.') && str.includes('drv_') && str.length > 30) {
let new_val = replaceFiletoURL(str);
return { value: new_val, changed: true };
} else {
return { value: val, changed: false };
}
} catch (err) {
return { value: val, changed: false };
}
}
} else {
return { value: val, changed: false };
}
};
func.utils.debug_report = async function (SESSION_ID, sourceP, msgP, typeP, errP, objP) {
var _session = SESSION_OBJ[SESSION_ID];
var details = [sourceP];
if (errP) details.push(errP);
if (objP) details.push(objP);
if (!typeP || typeP === 'E') {
setTimeout(() => {
// if (
// typeof IS_DOCKER === "undefined" &&
// typeof IS_API_SERVER === "undefined" &&
// typeof IS_PROCESS_SERVER === "undefined" &&
// !glb?.IS_WORKER
// ) {
// func.index.delete_pouch(SESSION_ID);
// }
}, 1000);
// // temp inactive cause to loop
// func.utils.alerts.invoke(
// SESSION_ID,
// "system_msg",
// "SYS_MSG_1240",
// "debug",
// null,
// msgP,
// sourceP //arguments.callee.caller.toString()- deprecated es6
// );
console.error('XUDA', 'ERROR', sourceP, msgP, details);
if (typeof IS_API_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') {
return __.rpi.write_log(SESSION_OBJ[SESSION_ID].app_id, 'error', 'worker', 'runtime', msgP, null, objP, sourceP);
}
if (glb.IS_WORKER) {
let obj = {
service: 'write_log',
data: msgP,
log_type: 'error',
id: STUDIO_WEBSOCKET_CONNECTION_ID,
uid: _session.USR_OBJ._id,
source: 'runtime',
app_id: _session.app_id,
gtp_token: _session.gtp_token,
app_token: _session.app_token,
};
return func.utils.post_back_to_client(SESSION_ID, 'write_log', _session.worker_id, obj);
}
// // temp inactive cause to loop
// if (!glb.IS_WORKER) {
// await func.common.db(SESSION_ID, "write_log", {
// client_id: _session?.SYS_GLOBAL_OBJ_CLIENT_INFO?.fingerprint,
// source: sourceP,
// log_type: "error",
// msg: msgP,
// });
// }
}
if (typeP === 'W') console.warn('XUDA', 'WARNING', msgP, details);
if (typeP === 'I') console.log('XUDA', 'INFO', msgP, details);
};
func.utils.request_error = function (SESSION_ID, type, e) {
var _session = SESSION_OBJ[SESSION_ID];
console.error(type, e);
if (typeof IS_PROCESS_SERVER !== 'undefined') return;
if (!glb.IS_WORKER) {
func.utils.debug_report(SESSION_ID, type, e, 'E');
setTimeout(function () {
if (!glb.debug_js) {
// location.reload();
console.warn('** reload request');
}
}, 2000);
} else {
func.utils.post_back_to_client(SESSION_ID, 'ajax_error', _session.worker_id, null);
}
};
func.utils.alerts = {};
func.utils.alerts.invoke = async function (SESSION_ID, typeP, paramsP, sourceP, dsSessionP, msgP) {
try {
var _session = SESSION_OBJ[SESSION_ID];
if (ALERT_IS_ACTIVE) return;
ALERT_IS_ACTIVE = true;
var title;
var message = '';
var alert_type = 'console';
var alertDisplay;
var expRet = {};
var _ds = _session.DS_GLB[dsSessionP];
var type = '';
var createLog;
const get_alert_properties = async function (value, fx) {
var ret = value || '';
if (fx) {
const exp_ret = await func.expression.get(SESSION_ID, fx, dsSessionP, 'alert');
ret = exp_ret.result;
}
return ret;
};
switch (typeP) {
case 'alert':
type = 'User defined alert';
title = await get_alert_properties(paramsP.alertTitle, paramsP.alertTitleFx);
alert_type = await get_alert_properties(paramsP.alertType, paramsP.alertTypeFx);
message = await get_alert_properties(paramsP.alertBody, paramsP.alertBodyFx);
alertDisplay = await get_alert_properties(paramsP.alertDisplay, paramsP.alertDisplayFx);
createLog = paramsP.createLog;
break;
case 'call_alert':
type = 'User defined call alert';
let prop = await func.utils.TREE_OBJ.get(SESSION_ID, paramsP.prog);
if (!prop) {
console.log('events.execute', 'Missing details for alert message object: ' + paramsP.prog, 'W');
}
// user defined
let ret = await func.utils.VIEWS_OBJ.get(SESSION_ID, paramsP.prog);
if (ret?.alertData) {
title = await get_alert_properties(ret.alertData.alertTitle, ret.alertData.alertTitleFx);
alert_type = await get_alert_properties(ret.alertData.alertType, ret.alertData.alertTypeFx);
message = await get_alert_properties(ret.alertData.alertBody, ret.alertData.alertBodyFx);
alertDisplay = await get_alert_properties(ret.alertData.alertDisplay, ret.alertData.alertDisplayFx);
createLog = ret.alertData.createLog;
}
if (!title) {
title = prop.menuTitle;
}
if (!alert_type) {
alert_type = 'console';
}
if (!alertDisplay) {
alertDisplay = 'modal';
} //window alert by definition
break;
case 'system_msg': {
type = 'System alert';
const sys_alerts_obj = func.utils.get_system_error_msg();
if (sys_alerts_obj[paramsP]) {
title = sys_alerts_obj[paramsP].subject;
alert_type = sys_alerts_obj[paramsP].alert_type;
alertDisplay = sys_alerts_obj[paramsP].alertDisplay;
expRet = await func.expression.get(SESSION_ID, sys_alerts_obj[paramsP].msg, dsSessionP, 'alert');
message = func.expression.remove_quotes(expRet.result);
if (msgP) message = msgP;
if (alert_type === 'error') {
if (_ds) _ds.error = title + ' ' + sourceP;
func.utils.debug_report(SESSION_ID, sourceP, title + ' ' + sourceP, 'E', '', _ds);
}
}
break;
}
default:
message = msgP;
break;
}
} catch (err) {
console.error(err);
ALERT_IS_ACTIVE = false;
return;
}
if (glb.IS_WORKER) {
if (_session.IS_API) {
if (_ds) {
_ds.api_rendered_output = message;
} else {
console.error(message);
}
return;
}
// if (typeof IS_PROCESS_SERVER !== "undefined") return;
ALERT_IS_ACTIVE = false;
return func.utils.post_back_to_client(SESSION_ID, 'alert', _session.worker_id, [SESSION_ID, alert_type, alertDisplay, message, title]);
}
// const sys_alerts_obj = func.utils.get_system_error_msg();
// if (sys_alerts_obj[paramsP]) {
// var str = paramsP + " " + title + " " + message;
// if (sys_alerts_obj[paramsP].alert_type === "error") {
// console.error(str);
// } else if (sys_alerts_obj[paramsP].alert_type === "warning") {
// console.warn(str);
// } else {
// console.log(str);
// }
// } else {
// console.log(str);
// }
ALERT_IS_ACTIVE = false;
func.utils.alerts.execute(SESSION_ID, alert_type, alertDisplay, message, title, type);
if (createLog) {
func.utils.write_log(SESSION_ID, title, message, alert_type);
}
};
func.utils.alerts.execute = function (SESSION_ID, alert_type, alertDisplay, message, title, type) {
if (!UI_FRAMEWORK_INSTALLED) {
ALERT_IS_ACTIVE = false;
if (alertDisplay !== 'console') {
return alert(title + '\n \n' + message);
}
return console[alert_type === 'error' ? 'error' : 'log'](alert_type, title, message);
}
switch (alertDisplay) {
case 'console':
console[alert_type === 'success' ? 'log' : alert_type === 'warning' ? 'warn' : alert_type](alert_type, title, message);
ALERT_IS_ACTIVE = false;
break;
case 'modal':
func.utils.alerts.popup(title, message, alert_type);
break;
case 'toast':
func.utils.alerts.toast(SESSION_ID, title, message, alert_type);
ALERT_IS_ACTIVE = false;
break;
case 'browser':
alert(title + '\n \n' + message);
ALERT_IS_ACTIVE = false;
default:
console.log(alert_type, title, message);
ALERT_IS_ACTIVE = false;
}
};
func.utils.alerts.toast = function (SESSION_ID, title, message, alert_type) {
if (!UI_FRAMEWORK_PLUGIN.toast) return;
const toast = new UI_FRAMEWORK_PLUGIN.toast();
toast.create(alert_type, message, title, func.common.get_url(SESSION_ID, 'dist', `runtime/images/${alert_type}_alert_ico.svg`));
ALERT_IS_ACTIVE = false;
};
func.utils.alerts.popup = function (title, message, alert_type) {
const popup = new UI_FRAMEWORK_PLUGIN.popup();
var buttons = [
{
text: 'Ok',
role: 'cancel',
// cssClass: "primary",
handler: () => {
ALERT_IS_ACTIVE = false;
},
},
];
popup.create(_.upperFirst(alert_type), title, message, buttons);
};
func.utils.get_system_error_msg = function () {
var m = {};
m['SYS_MSG_0101'] = {
alert_type: 'success',
alertDisplay: 'toast',
subject: 'Save Success',
msg: 'Settings successfully saved',
};
m['SYS_MSG_0102'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Save Failed CouchDB',
msg: 'Data fail save to database',
};
m['SYS_MSG_0103'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Save Failed Table Empty',
msg: 'Table empty, no fields declared',
};
m['SYS_MSG_0104'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Save Failed Missing Primary Index',
msg: 'Update failed, table missing Primary index',
};
m['SYS_MSG_0105'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Save Failed Table Missing',
msg: 'Table repository missing',
};
m['SYS_MSG_0106'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Save Failed Record Not Exist',
msg: 'Save update failed record not exist',
};
m['SYS_MSG_0107'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Save Failed Unique Key',
msg: 'Save Failed, record already exist',
};
m['SYS_MSG_0108'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Error reading document',
msg: 'Save Failed, record not found',
};
m['SYS_MSG_0110'] = {
alert_type: 'warning',
alertDisplay: 'toast',
subject: 'Record Changed',
msg: 'Record changed by other user, reload to get the latest changes',
};
m['SYS_MSG_0120'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Create Mode Denied',
msg: 'Create mode not allowed for this program',
};
m['SYS_MSG_0122'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Modify Mode Denied',
msg: 'Modify mode not allowed for this program',
};
m['SYS_MSG_0124'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Delete Mode Denied',
msg: 'Delete mode not allowed for this program',
};
m['SYS_MSG_0126'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Program Read Only',
msg: 'Program set to Read Only',
};
m['SYS_MSG_0130'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Error Reduce',
msg: 'Select Index to Reduce',
};
m['SYS_MSG_0201'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Failed to change GUI Property',
msg: 'Failed to change GUI element property, GUI element missing',
};
m['SYS_MSG_0310'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Missing Reference Parameters Out',
msg: 'Parameter out not exist in dataset',
};
m['SYS_MSG_0400'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Delete Widget Folder Denied',
msg: 'The selected folder contains data, Please clean or move content to another folder',
};
m['SYS_MSG_0410'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Recipient Error',
msg: 'Check recipient data',
};
m['SYS_MSG_0412'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Recipient Empty',
msg: 'No recipients entered or selected',
};
m['SYS_MSG_0414'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Data Save Error',
msg: 'Widget has no content',
};
m['SYS_MSG_0416'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Required Field',
msg: 'Edit url field is empty',
};
m['SYS_MSG_0418'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Required Field',
msg: 'Publish url field is empty',
};
m['SYS_MSG_0420'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Connection Error',
msg: 'Cannot connect to mailbox',
};
m['SYS_MSG_0422'] = {
alert_type: 'success',
alertDisplay: 'modal',
subject: 'Connection Ok',
msg: 'Connection Ok :)',
};
m['SYS_MSG_0424'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Connection Failed',
msg: 'Connection to POP3 failed',
};
m['SYS_MSG_0426'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Connection Failed',
msg: 'SMTP Connection error, Test Email was not sent',
};
m['SYS_MSG_0430'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Email Account Error',
msg: 'No email account found, Right Click Tree -> Settings->Manage Accounts -> Right click for menu options',
};
m['SYS_MSG_0440'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Widget Initiation Error',
msg: 'Missing information for Link Type or Link Name',
};
m['SYS_MSG_0442'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Error Init Widget',
msg: 'Missing record Id on Create Mode',
};
m['SYS_MSG_0450'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Validation Failed',
msg: 'Fix fields highlight in Red',
};
m['SYS_MSG_0501'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Mandatory Alert Save',
msg: 'Save action failed, Mandatory fields missing',
};
m['SYS_MSG_0550'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Illegal input number',
msg: "@SYS_GLOBAL_OBJ_ACTIVE_FIELD_INFO.nameform +' only allow numbers!'",
};
m['SYS_MSG_0610'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Form Field Conflict',
msg: 'Field declared more than once for the form',
};
m['SYS_MSG_0612'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Missing Definition',
msg: 'Missing mask definition',
};
m['SYS_MSG_0614'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Wrong Definition',
msg: 'Wrong mask definition',
};
m['SYS_MSG_0616'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Size Parser',
msg: 'Size parser error',
};
m['SYS_MSG_0618'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Illegal Z switch',
msg: "Illegal 'Z' in string mask",
};
m['SYS_MSG_0620'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Illegal N switch',
msg: "Illegal 'N' in string mask",
};
m['SYS_MSG_0622'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Illegal + switch',
msg: "Illegal '+' in string mask",
};
m['SYS_MSG_0624'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Illegal - switch',
msg: "Illegal '-' in string mask",
};
m['SYS_MSG_0626'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Illegal C switch',
msg: "Illegal 'C' in string mask",
};
m['SYS_MSG_0628'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Invalid switch',
msg: 'Invalid switch in string mask',
};
m['SYS_MSG_0630'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Missing DOM Element',
msg: 'Missing DOM element',
};
m['SYS_MSG_0632'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Mask Error - Too Big',
msg: 'Size to big, max: 15.5',
};
m['SYS_MSG_0700'] = {
alert_type: 'warning',
alertDisplay: 'console',
subject: 'Table Warning - Empty',
msg: 'Table has no content',
};
m['SYS_MSG_0702'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - No Fields',
msg: 'Table missing fields content',
};
m['SYS_MSG_0704'] = {
alert_type: 'warning',
alertDisplay: 'console',
subject: 'Table Warning - Not In Use',
msg: 'Table not in use by any object',
};
m['SYS_MSG_0706'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - No Primary Index',
msg: 'Table must have at least one index',
};
m['SYS_MSG_0708'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Bad Index Name',
msg: 'Index name is invalid or cannot contain any of non word characters',
};
m['SYS_MSG_0710'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Empty Index',
msg: 'Index has no keys',
};
m['SYS_MSG_0712'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Key Not Exist',
msg: 'Key not exist in the table fields repository',
};
m['SYS_MSG_0714'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Duplicate Fields',
msg: 'Duplicate fields in the table fields repository',
};
m['SYS_MSG_0716'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Bad Field Name',
msg: 'Field name is invalid or cannot contain any of non word characters',
};
m['SYS_MSG_0718'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Integrity Broken',
msg: 'Field broken from its properties, edit the field and save',
};
m['SYS_MSG_0720'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Table Error - Model Not Exist',
msg: 'Model assigned to the field not exist',
};
m['SYS_MSG_0722'] = {
alert_type: 'warning',
alertDisplay: 'console',
subject: 'Object Warning - Not In Use',
msg: 'Object not in use or not call by any object',
};
m['SYS_MSG_0724'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Table Not Exist',
msg: 'Table assigned in object datasource not exist',
};
m['SYS_MSG_0726'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Keys Mismatch',
msg: 'Table index has different structure',
};
m['SYS_MSG_0728'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Key From Empty',
msg: 'Index key From must have a value',
};
m['SYS_MSG_0730'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Key From Reference',
msg: 'Field reference not exist in any dataset or parameters',
};
m['SYS_MSG_0732'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Key To Empty',
msg: 'Index key To must have a value',
};
m['SYS_MSG_0734'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Key To Reference',
msg: 'Field reference not exist in any dataset or parameters',
};
m['SYS_MSG_0736'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Locate From Reference',
msg: 'Field reference not exist in any dataset or parameters',
};
m['SYS_MSG_0738'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Locate To Reference',
msg: 'Field reference not exist in any dataset or parameters',
};
m['SYS_MSG_0740'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Empty',
msg: 'Index empty - no keys defined',
};
m['SYS_MSG_0742'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Index Reference',
msg: 'Table index reference error',
};
m['SYS_MSG_0744'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Duplicate Fields',
msg: 'Duplicate fields in the dataset fields repository',
};
m['SYS_MSG_0746'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Field reference error',
msg: 'Field not exist in datasource table fields repository',
};
m['SYS_MSG_0748'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Mismatch Reference Type',
msg: 'Mismatch in calling reference type',
};
m['SYS_MSG_0750'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Reference Broken',
msg: 'Reference broken calling object not exist',
};
m['SYS_MSG_0752'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Empty Reference',
msg: 'Reference empty',
};
m['SYS_MSG_0754'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Action Not Exist',
msg: 'Action not exist',
};
m['SYS_MSG_0756'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Empty Event Reference',
msg: 'Empty event reference',
};
m['SYS_MSG_0758'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Bad Field Name',
msg: 'Field name is invalid or cannot contain any of non word characters',
};
m['SYS_MSG_0760'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Integrity Broken',
msg: 'Field broken from its properties, edit the object and save',
};
m['SYS_MSG_0762'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Model Not Exist',
msg: 'Model assigned to the field not exist',
};
m['SYS_MSG_0764'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Empty Dataset',
msg: 'Dataset empty from fields',
};
m['SYS_MSG_0766'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Field Type Mismatch',
msg: 'Field type not match to the underlined table field definition',
};
m['SYS_MSG_0768'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Field Mask Mismatch',
msg: 'Field masks not match to the underlined table field definition',
};
m['SYS_MSG_0770'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - Bad Event Name',
msg: 'Event name is invalid or cannot contain any of non word characters',
};
m['SYS_MSG_0772'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - UI Field Not Exist',
msg: 'UI Field not exist in the dataset repository',
};
m['SYS_MSG_0774'] = {
alert_type: 'error',
alertDisplay: 'console',
subject: 'Object Error - UI Field Reference Broken',
msg: 'UI Field reference broken',
};
m['SYS_MSG_0780'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'UI element error',
msg: 'UI element not exist',
};
m['SYS_MSG_1210'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Program error',
msg: 'Program not exist',
};
m['SYS_MSG_1220'] = {
alert_type: 'error',
alertDisplay: 'modal',
subject: 'Program error',
msg: 'Non grid output defined',
};
m['SYS_MSG_1240'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Debug error',
msg: '',
};
m['SYS_MSG_1250'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Debug log error',
msg: '',
};
m['SYS_MSG_1260'] = {
alert_type: 'error',
alertDisplay: 'toast',
subject: 'Session Expired',
msg: 'Renew token session in Studio',
};
return m;
};
func.utils.find_key_in_ViewUITreeObj = function (arr, key, val) {
return arr.reduce((a, item) => {
if (a) return a;
if (item[key] === val) return item;
if (item.children) return findId(val, item.children);
}, null);
};
func.utils.get_plugin_setup = function (SESSION_ID, plugin_name) {
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, plugin_name, {
module: 'plugin',
action: 'Init',
source: 'get_plugin_setup',
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'plugin',
});
};
return new Promise(async (resolve, reject) => {
try {
const db = await func.utils.connect_pouchdb(SESSION_ID);
try {
let ret = await db.get(`cache_plugin_setup_${plugin_name}`);
return resolve(ret.data);
} catch (err) {
// cache not found
const json = await func.common.db(SESSION_ID, 'get_plugin_setup', {
plugin_name,
});
if (json.code < 0) {
report_error('Error: ' + json.data, json.error_type === 'W' ? true : false);
}
resolve(json);
var doc = {
_id: `cache_plugin_setup_${plugin_name}`,
data: json,
docType: 'cache_plugin',
};
db.put(doc);
}
} catch (e) {
console.error(e);
report_error('Error: ' + e.msg, e.error_type === 'W' ? true : false);
resolve(e.msg);
}
});
};
func.utils.connect_pouchdb = async function (SESSION_ID) {
const app_id = SESSION_OBJ[SESSION_ID].app_id;
return new PouchDB('xuda_rt_' + app_id);
};
// func.utils.validate_pouchdb = async function (SESSION_ID) {
// const app_id = SESSION_OBJ[SESSION_ID].app_id;
// const db = new PouchDB("xuda_rt_" + app_id);
// // db.info()
// // .then((info) => {
// // console.log("Database exists", info);
// // })
// // .catch((error) => {
// // if (error.status === 404) {
// // throw new Error("Database does not exist");
// // } else {
// // throw new Error("Error accessing database", error);
// // }
// // });
// try {
// let ret = await db.get(`cache_rt_info`);
// } catch (error) {
// throw new Error("new pouch detect");
// }
// };
func.utils.call_plugin_api = function (SESSION_ID, plugin_nameP, dataP) {
var _session = SESSION_OBJ[SESSION_ID];
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, plugin_nameP, {
module: 'plugin',
action: 'Init',
source: 'call_plugin_api',
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'plugin',
});
};
return new Promise(async (resolve) => {
var data = {
app_id: APP_OBJ[_session.app_id]._id,
debug: glb.DEBUG_MODE,
uid: _session.USR_OBJ._id,
gtp_token: _session.gtp_token,
app_token: _session.app_token,
};
data = _.assignIn(data, dataP);
fetch(`https://xuda.io/ppi/${plugin_nameP}`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => {
if (!response.ok) {
return response.text().then((text) => {
throw new Error(text);
});
}
return response.json();
})
.then((json) => {
if (json.code < 0) {
report_error('Error: ' + json.data, json.error_type === 'W' ? true : false);
}
resolve(json.data);
// var doc = {
// _id: `cache_plugin_${plugin_nameP}`,
// data: json,
// docType: "cache_plugin",
// };
// db.put(doc);
})
.catch((err) => {
report_error('Error: ' + err.message);
resolve(err.message);
});
// }
});
};
func.utils.get_plugin_resource = function (SESSION_ID, plugin_name, plugin_resource) {
var _session = SESSION_OBJ[SESSION_ID];
const get_path = function (resource) {
if (_session.worker_type === 'Dev') {
return `../../plugins/${plugin_name}/${resource}`;
}
if (typeof IS_PROCESS_SERVER !== 'undefined') {
return `${_conf.plugins_drive_path}/${_session.app_id}/node_modules/${plugin_name}/${resource}`;
} else {
// return `./node_modules/${plugin_name}/${resource}?app_id=${_session.app_id}`;
return `https://${_session.domain}/plugins/${plugin_name}/${resource}?app_id=${_session.app_id}&ts=${_session?.opt?.app_build_id || 0}`;
}
};
return new Promise(async (resolve, reject) => {
// const db = await func.utils.connect_pouchdb(SESSION_ID);
// try {
// if (_session.worker_type === "Dev") throw "bypass cache";
// let ret = await db.get(`cache_plugin_${plugin_name}_${plugin_resource}`);
// return resolve(ret.data);
// } catch (err) {
// try {
// const plugin_resource_res = await import(
// `${get_path(plugin_resource)}`
// );
// resolve(plugin_resource_res);
// // var doc = {
// // _id: `cache_plugin_${plugin_name}_${plugin_resource}`,
// // data: JSON.stringify(plugin_resource_res),
// // docType: "cache_plugin",
// // };
// // db.put(doc);
// } catch (err) {
// console.error(err);
// }
// }
try {
const plugin_resource_res = await import(`${get_path(plugin_resource)}`);
resolve(plugin_resource_res);
} catch (err) {
console.error(err);
reject();
}
});
};
func.utils.remove_cached_objects = async function (SESSION_ID) {
if (typeof IS_DOCKER !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') return;
try {
const db = await func.utils.connect_pouchdb(SESSION_ID);
let opt = {
$or: [
{
docType: 'cache_objects',
},
{
docType: 'cache_plugin',
},
{
docType: 'cache_app',
},
],
};
const res = await db.find({ selector: opt });
for await (let val of res.docs) {
await db.remove(val);
}
} catch (err) {
return;
}
};
func.utils.get_plugin_npm_cdn = async function (SESSION_ID, plugin_name, resource) {
const _session = SESSION_OBJ[SESSION_ID];
const get_path = function (resource) {
if (_session.worker_type === 'Dev') {
return `../../plugins/${plugin_name}/${resource}`;
}
return `https://${_session.domain}/plugins/${plugin_name}/${resource}?app_id=${_session.app_id}&ts=${_session?.opt?.app_build_id || 0}`;
};
return get_path(resource);
};
func.utils.write_log = async function (SESSION_ID, method = '', msg = '', log_type = 'error', source = 'runtime', details) {
const _session = SESSION_OBJ[SESSION_ID];
if (typeof IS_API_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') {
return __.rpi.write_log(_session.app_id, log_type, source, msg, details);
}
await func.common.db(SESSION_ID, 'write_log', {
msg,
log_type,
source,
details,
method,
});
};
func.utils.get_resource_filename = function (build, filename) {
if (build) {
return filename.replace(/(\.\w+)$/, `.${build}$1`);
}
return filename;
};
func.utils.set_SYS_GLOBAL_OBJ_WIDGET_INFO = async function (SESSION_ID, docP) {
var obj = _.clone(docP);
obj.date = await func.utils.get_dateTime(SESSION_ID, 'SYS_DATE', docP.date);
obj.time = await func.utils.get_dateTime(SESSION_ID, 'SYS_TIME', docP.date);
var datasource_changes = {
[0]: {
['data_system']: {
['SYS_GLOBAL_OBJ_WIDGET_INFO']: obj,
},
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
};
func.utils.get_last_datasource_no = function (SESSION_ID) {
if (typeof IS_PROCESS_SERVER !== 'undefined') {
return Object.keys(SESSION_OBJ[SESSION_ID].DS_GLB).at?.(-1);
} else {
const filtered = Object.values(SESSION_OBJ[SESSION_ID].DS_GLB).filter((e) => e.tree_obj.menuType !== 'api');
return filtered?.at?.(-1)?.dsSession;
}
};
func.UI.utils = {};
func.UI.utils.indicator = {};
func.UI.utils.indicator.worker = {};
func.UI.utils.indicator.worker.busy = function () {
$('.progressLoader').addClass('progress_busy');
};
func.UI.utils.indicator.worker.normal = function () {
$('.progressLoader').removeClass('progress_busy');
};
func.UI.utils.indicator.server = {};
func.UI.utils.indicator.server.busy = function () {
func.UI.utils.indicator.worker.busy();
};
func.UI.utils.indicator.server.normal = function () {
func.UI.utils.indicator.worker.normal();
};
func.UI.utils.indicator.screen = {};
func.UI.utils.indicator.screen.busy = function () {
$('.progressLoader').addClass('progress_busy2');
};
func.UI.utils.indicator.screen.normal = function () {
$('.progressLoader').removeClass('progress_busy2');
};
func.UI.utils.save = function (SESSION_ID, stateP) {
if (stateP) func.UI.utils.indicator.worker.busy();
else func.UI.utils.indicator.worker.normal();
};
func.UI.utils.screen_blocker = function (onP, idP, dsP) {
if (!idP) {
func.utils.debug_report('', 'Worker', 'Missing reference id', 'E');
return;
}
window.oncontextmenu = function () {
if (onP) return false;
else return true;
};
if (!onP) {
delete SCREEN_BLOCKER_OBJ[idP];
return;
}
if (idP !== 'Worker') {
SCREEN_BLOCKER_OBJ[idP] = Date.now();
}
};
func.UI.utils.get_node_elm = function (SESSION_ID, dsSessionP, ui_idP, $container, is_app_panel, ui_type, functionP) {
if (!$container) {
$container = $('body');
}
var $elm = func.UI.utils.find_in_element_data(is_app_panel ? 'xuPanelData' : 'xuData', $container, 'ui_id', ui_idP);
const _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSessionP];
if (_ds.tree_obj.renderType === 'form') {
return $elm;
}
var $grid_elm;
$.each($elm, function (key, val) {
if ($(val.data().xuData.recordid) === _ds.currentRecordId) {
$grid_elm = $(val);
return false;
}
});
return $grid_elm;
return $elm;
};
func.UI.utils.get_nodeId = function (SESSION_ID, dsSessionP, ui_idP, $container, is_app_panel) {
var $elm = func.UI.utils.get_node_elm(SESSION_ID, dsSessionP, ui_idP, $container, is_app_panel, null, null);
if (is_app_panel) {
return $elm.data().xuData.panel_info.prop.id;
} else {
return $elm.attr('nodeId');
}
};
// func.UI.utils.get_element_info = function (SESSION_ID, dsSessionP, ui_idP, $container, is_app_panel, ui_type, functionP) {
// var $elm = func.UI.utils.get_node_elm(SESSION_ID, dsSessionP, ui_idP, $container, is_app_panel, ui_type, functionP);
// var ret = {};
// if ($elm?.length) {
// //length added 20210209
// // if (is_app_panel) {
// // if ($elm?.data()?.xuData.panel_info) {
// // ret.nodeId = $elm.data().xuData.panel_info.prop.id;
// // } else {
// // ret.nodeId = $elm.data().xuData.properties.id;
// // }
// // } else {
// // ret.nodeId = $elm.data().xuData.nodeId;
// ret.nodeId = $elm.data().xuData.xu_id;
// // ret.nodeId = $elm.attr('xu-ui-id');
// // }
// }
// ret.$elm = $elm;
// return ret;
// };
func.UI.utils.get_ui_id_count = function (SESSION_ID, dsSessionP, ui_idP, $container) {
return func.UI.utils.get_node_elm(SESSION_ID, dsSessionP, ui_idP, $container, null, null).length;
};
// func.UI.utils.get_ui_info_tree_scope = function (SESSION_ID, dsP, ui_id, is_app_panel, ui_type, $container, functionP) {
// var drill_parent = function () {
// if (SESSION_OBJ[SESSION_ID].DS_GLB[dsP].parentDataSourceNo) {
// return func.UI.utils.get_ui_info_tree_scope(SESSION_ID, SESSION_OBJ[SESSION_ID].DS_GLB[dsP].parentDataSourceNo, ui_id, is_app_panel, ui_type);
// } else if (ui_type === 'xu-app-page') {
// if (elm_info.$elm.length) {
// return {
// ds: dsP,
// id: id,
// $elm: elm_info.$elm,
// };
// }
// }
// };
// if (!SESSION_OBJ[SESSION_ID].DS_GLB[dsP]) return;
// var elm_info = func.UI.utils.get_element_info(SESSION_ID, dsP, ui_id, $container, is_app_panel, ui_type, functionP);
// var id = elm_info.nodeId;
// if (!id) {
// return drill_parent();
// } else {
// if (is_app_panel) {
// return {
// ds: func.UI.utils.get_node_elm(SESSION_ID, dsP, ui_id, $container, is_app_panel).data().xuData.paramsP.dsSessionP,
// id: id,
// $elm: elm_info.$elm,
// };
// } else {
// return {
// ds: dsP,
// id: id,
// $elm: elm_info.$elm,
// };
// }
// }
// };
func.UI.utils.clean_node_busy = function (node) {
var run_node = function (node) {
node.busy = false;
$.each(node.children, function (key, val) {
run_node(val);
});
};
run_node(node);
return node;
};
// func.UI.utils.get_ui_info_tree_scope_sync = function (SESSION_ID, dsP, ui_id, ui_type, callback, $container, functionP) {
// var ret;
// var is_app_panel = false;
// if (ui_type === 'xu-panel') {
// is_app_panel = true;
// }
// ret = func.UI.utils.get_ui_info_tree_scope(SESSION_ID, dsP, ui_id, is_app_panel, ui_type, $container, functionP);
// if (!ret) {
// var attempts = 0;
// const run = function () {
// ret = func.UI.utils.get_ui_info_tree_scope(SESSION_ID, dsP, ui_id, is_app_panel, ui_type, $container, functionP);
// if (ret || attempts > 10) {
// callback(ret);
// } else {
// attempts++;
// console.log(attempts, dsP, ui_id, is_app_panel);
// setTimeout(function () {
// run();
// }, 100);
// }
// };
// run();
// } else {
// callback(ret);
// }
// };
func.UI.utils.live_preview_element_inspect_on = function (SESSION_ID, service) {
$.each($('[xu-ui-id]'), function (key, val) {
$(val).on('mouseenter.live_preview_element_inspector', function () {
$('body').find('.preview_mark').removeClass('preview_mark').off('click.live_preview_element_inspector');
$(this).addClass('preview_mark');
$(this).on('click.live_preview_element_inspector', function (e) {
const _session = SESSION_OBJ[SESSION_ID];
console.log($(this).data());
const data = $(this).data();
const obj = {
service: service + '_result',
id: STUDIO_WEBSOCKET_CONNECTION_ID,
uid: _session.USR_OBJ._id,
source: 'runtime',
app_id: _session.app_id,
gtp_token: _session.gtp_token,
session_id: SESSION_ID,
app_token: _session.app_token,
};
switch (service) {
case 'live_preview_element_reference':
obj.data = { prog_id: data.xuData.prog_id, node: data.xuData.node };
break;
case 'live_preview_element_info':
obj.data = {
element_info: data.debug_info,
datasource: _session.DS_GLB[data.paramsP.dsSessionP],
};
break;
case 'live_preview_element_dnd':
// code block
break;
default:
// code block
}
STUDIO_PEER_CONN_SEND_METHOD(obj);
// STUDIO_WEBSOCKET.emit("message", obj);
func.UI.utils.live_preview_element_inspect_off();
if (typeof LIVE_PREVIEW_APP_ACTIVE !== 'undefined') {
$(`#live_preview_element_reference_btn`).css('color', 'unset');
$(`#live_preview_element_info_btn`).css('color', 'unset');
}
});
});
$(val).on('mouseleave.live_preview_element_inspector', function () {
$(this).removeClass('preview_mark');
$(this).off('click.live_preview_element_inspector');
});
});
};
func.UI.utils.live_preview_element_inspect_off = function () {
$.each($('[xu-ui-id]'), function (key, val) {
$(val).off('mouseenter.live_preview_element_inspector mouseleave.live_preview_element_inspector');
});
$('body').find('.preview_mark').removeClass('preview_mark').off('click.live_preview_element_inspector');
};
func.UI.utils.live_preview_show_selected_element = function (nodeid) {
$('body').find('.preview_mark').removeClass('preview_mark');
$(`[nodeid="${nodeid}"]`).addClass('preview_mark');
};
func.UI.utils.get_url_attribute = function (SESSION_ID, key) {
var ret = glb.URL_PARAMS.get(key);
const _session = SESSION_OBJ[SESSION_ID];
return glb.URL_PARAMS.get(key) || $(_session.root_element).attr(key) || _session.opt?.params?.[key] || _session.opt[key] || $.cookie(key) || window.localStorage.getItem(key);
};
func.UI.utils.get_root_element_attributes = function (SESSION_ID) {
// test2345
var ret = {};
$(SESSION_OBJ[SESSION_ID].root_element).each(function () {
$.each(this.attributes, function () {
// this.attributes is not a plain object, but an array
// of attribute nodes, which contain both the name and value
if (this.specified) {
ret[this.name] = this.value;
}
});
});
return ret;
};
func.UI.utils.prompt_confirm_window = async function (SESSION_ID, messageP, picP, confirmYesFuncP, confirmNoFuncP, confirmCancelFuncP, title, colorP) {
if (confirmNoFuncP) {
buttons.push({
text: 'Disagree',
role: 'no',
cssClass: 'secondary',
handler: () => {
confirmNoFuncP();
},
});
}
if (confirmYesFuncP) {
buttons.push({
text: 'Agree',
role: 'yes',
cssClass: 'secondary',
handler: () => {
confirmYesFuncP();
},
});
}
if (confirmCancelFuncP) {
buttons.push({
text: 'Dismiss',
role: 'cancel',
cssClass: 'secondary',
handler: () => {
confirmCancelFuncP();
},
});
}
UI_FRAMEWORK_PLUGIN.modal(title, messageP, buttons);
};
func.UI.utils.alert = function (msg) {
console.error(msg);
};
func.UI.utils.progressScreen = {};
func.UI.utils.progressScreen.show = function (SESSION_ID, textP, show_bytesP, error, progress_off, logo_off) {
if (glb.IS_WORKER) {
return;
}
const app_obj = APP_OBJ?.[SESSION_OBJ?.[SESSION_ID]?.app_id];
var background_color = '';
var icon = app_obj?._conf?.logo_url || 'https://xuda.io/dist/images/xuda_logo.png';
if (app_obj?.app_pic) {
icon = app_obj.app_pic;
}
if (app_obj && app_obj.app_icon_prop) {
if (app_obj.app_icon_prop.app_icon_background_color) {
background_color = app_obj.app_icon_prop.app_icon_background_color;
}
// if (app_obj.app_type === "master_team" && app_obj.app_pic) {
// let app_id = APP_OBJ[SESSION_OBJ[SESSION_ID].app_id];
// if (app_obj.app_replicate) {
// app_id = app_obj.app_replicate;
// }
// }
}
IS_PROGRESS_SCREEN_OPEN = true;
var $progressScreen = $('#progressScreen2').empty();
$('.loader').hide();
$progressScreen = $('#progressScreen2').css({});
if (background_color) {
$progressScreen.css({
color: func.common.getContrast_color(background_color),
'background-color': background_color,
});
}
setTimeout(function () {
if (IS_PROGRESS_SCREEN_OPEN) {
var error_msg = `<h4>${textP}</h4>`;
// $("#progressScreen2_text").fadeIn(500, function () {
// if (!logo_off) {
// $(this).prepend(`<img class='progressScreen_logo' src='${icon}'>`);
// }
// $(this).append(
// error
// ? error_msg
// : typeof textP === "object"
// ? textP
// : `<p>${textP}</p>`
// );
// });
$('#progressScreen2_text').show(500, function () {
if (!logo_off) {
$(this).prepend(`<img class='progressScreen_logo' src='${icon}'>`);
}
$(this).append(error ? error_msg : typeof textP === 'object' ? textP : `<p>${textP}</p>`);
});
}
}, 500);
$('#progressScreen2').show();
$('<div>').attr('id', 'progressScreen2_text').hide().appendTo($progressScreen);
// .hide()
// .fadeIn("slow"); //.append(textP)
};
func.UI.utils.progressScreen.hide = function () {
if (glb.IS_WORKER) {
return;
}
IS_PROGRESS_SCREEN_OPEN = false;
// window.clearInterval(PROGRESS_INTERVAL);
// setTimeout(function () {
$('#progressScreen2').hide(); //fadeOut('fast');
$('#progressScreen2_text').empty(); //.fadeOut('fast').empty();
// $("#progressScreen2").css({
// height: "0px",
// top: "-100px",
// "background-image": "none"
// });
};
func.UI.utils.find_in_element_data = function (folder, $elm, key, val) {
return $elm.find('*').filter(function () {
if (typeof val === 'undefined') {
return $(this).data()?.[folder]?.[key];
}
return $(this).data()?.[folder]?.[key] == val;
});
};
func.UI.utils.init_ui_framework = async function (SESSION_ID, prog_id) {
if (typeof glb.SLIM_BUNDLE !== 'undefined' || glb.SLIM_BUNDLE) return;
var _session = SESSION_OBJ[SESSION_ID];
var tree_obj = await func.utils.TREE_OBJ.get(SESSION_ID, prog_id);
if (_.isEmpty(tree_obj)) {
return console.error('Error: prog ' + prog_id + ' not found.');
}
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, prog_id, {
module: 'component',
action: 'Init',
source: 'install ui framework',
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'component',
prog_id: prog_id,
});
};
const plugin_name = tree_obj.uiFramework;
if (!plugin_name) {
return report_error('no frameworks plugin defined', true);
}
if (plugin_name === UI_FRAMEWORK_INSTALLED) return;
const _plugin = APP_OBJ[_session.app_id]?.app_plugins_purchased?.[plugin_name];
if (!_plugin?.installed) {
return report_error(`plugin ${plugin_name} not installed`);
}
const get_path = function (plugin_name, resource) {
var path = `https://${_session.domain}/plugins/${plugin_name}${resource ? '/' + resource : ''}?app_id=${_session.app_id}`;
return path;
};
var _ui_framework_index;
try {
const runtime_mjs = `${_plugin.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`;
_ui_framework_index = await import(get_path(plugin_name, runtime_mjs));
} catch (error) {
return report_error(`plugin ${plugin_name} not found`);
}
if (!_ui_framework_index) {
return report_error(`plugin ${plugin_name} is empty`);
}
if (!_ui_framework_index.core) {
return report_error(`plugin core not found in ${plugin_name} `);
}
// if (!_ui_framework_index.resources) {
// return report_error(`plugin resources not found in ${plugin_name} `);
// }
var _ui_framework_dashboard_setup;
var _ui_framework_dashboard_setup_data_ret;
const ui_framework_core = new _ui_framework_index.core();
if (ui_framework_core.init) {
try {
const setup_mjs = `${_plugin.manifest['index.mjs'].dist ? 'dist/' : ''}index.mjs`;
_ui_framework_dashboard_setup = await import(get_path(plugin_name, setup_mjs));
if (_ui_framework_dashboard_setup) {
_ui_framework_dashboard_setup_data_ret = await func.utils.get_plugin_setup(SESSION_ID, plugin_name);
}
} catch (error) {}
}
if (plugin_name !== UI_FRAMEWORK_INSTALLED) {
UI_FRAMEWORK_INSTALLED = plugin_name;
const _plugin_INSTALLED = APP_OBJ[_session.app_id]?.app_plugins_purchased?.[UI_FRAMEWORK_INSTALLED];
UI_FRAMEWORK_PLUGIN = _ui_framework_index;
if (UI_FRAMEWORK_INSTALLED) {
var _current_ui_framework_runtime;
try {
const _runtime_mjs = `${_plugin_INSTALLED.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`;
_current_ui_framework_runtime = await import(get_path(UI_FRAMEWORK_INSTALLED, _runtime_mjs));
} catch (error) {
return report_error(`plugin ${UI_FRAMEWORK_INSTALLED} not found`);
}
// remove
if (UI_FRAMEWORK_PLUGIN.core.discard && UI_FRAMEWORK_PLUGIN.init_id) {
UI_FRAMEWORK_PLUGIN.core.discard(UI_FRAMEWORK_PLUGIN.init_id);
}
if (_ui_framework_index.resources) {
$.each(_current_ui_framework_runtime.resources, function (key, val) {
func.utils.remove_js_css_file(val.url, val.type);
});
}
}
// install
var init_id;
if (_ui_framework_index.resources) {
for await (var val of _ui_framework_index.resources) {
var ret = undefined;
var url = val.url;
switch (val.type) {
case 'module':
try {
// ret = await load_module(url);
ret = await func.utils.load_js_on_demand(url, 'module');
} catch (error) {
debugger;
}
break;
case 'css':
ret = func.utils.load_css_on_demand(url);
break;
case 'js':
ret = await func.utils.load_js_on_demand(url);
break;
default:
break;
}
if (val.callback) {
val.callback(ret);
}
}
}
if (ui_framework_core.init) {
init_id = await ui_framework_core.init(_ui_framework_dashboard_setup_data_ret?.code > -1 && _ui_framework_dashboard_setup_data_ret.data);
UI_FRAMEWORK_PLUGIN.init_id = init_id;
}
}
};
// old
// func.UI.utils.get_panels_from_dom = function (SESSION_ID, ignore_disableAutoRefresh) {
// const $elm = func.UI.utils.find_in_element_data('xuPanelData', $(SESSION_OBJ[SESSION_ID].root_element), 'parent_element_ui_id');
// var panels_obj = {};
// // set panels_obj
// for (const [elem_key, elem_val] of Object.entries($elm)) {
// if (elem_key === 'length') break;
// var $div = $(elem_val);
// let xuData = $div.data().xuData;
// if (!$div.data().xuPanelData) continue;
// let dsSession = xuData.paramsP.dsSessionP;
// var _session = SESSION_OBJ[SESSION_ID];
// let _ds = _session?.DS_GLB[dsSession];
// if (!_ds) continue;
// if (!ignore_disableAutoRefresh && _ds.tree_obj.disableAutoRefresh) {
// continue;
// }
// const parent_element_ui_id = $div.data().xuPanelData.parent_element_ui_id;
// if (!panels_obj[parent_element_ui_id]) {
// panels_obj[parent_element_ui_id] = {
// _ds,
// $div,
// ids: [],
// };
// }
// panels_obj[parent_element_ui_id].ids.push($div.attr('xu-ui-id'));
// }
// return panels_obj;
// };
func.UI.utils.get_panels_wrapper_from_dom = async function (SESSION_ID, $xu_embed_container, ignore_disableAutoRefresh) {
const $elm = func.UI.utils.find_in_element_data('xuPanelWrapper', $(SESSION_OBJ[SESSION_ID].root_element), 'isWrapper');
var panels_obj = {};
// set panels_obj
for (const [elem_key, elem_val] of Object.entries($elm)) {
if (elem_key === 'length') break;
var $panel_div = $(elem_val);
const panelXuAttributes = $panel_div?.data().xuPanelWrapper?.panelXuAttributes;
const panelDivData = $panel_div?.data().xuPanelWrapper?.panelDivData;
if (!panelXuAttributes) continue; // skip if no longer in dom
const xu_ui_id = $panel_div.attr('xu-ui-id');
if (!panels_obj[xu_ui_id]) {
var _session = SESSION_OBJ[SESSION_ID];
let _ds = _session?.DS_GLB[panelDivData.xuData.paramsP.dsSessionP];
if (!_ds) continue;
let prog_doc = await func.utils.DOCS_OBJ.get(SESSION_ID, _ds.prog_id);
if (!ignore_disableAutoRefresh && prog_doc.properties.disableAutoRefresh) {
continue;
}
let ids = [];
$.each($panel_div.children(), function (key, val) {
if ($(val).data().xuPanelData) {
ids.push($(val).attr('xu-ui-id'));
}
});
panels_obj[xu_ui_id] = {
// prog_id,
panelXuAttributes,
progUi: prog_doc.progUi,
prog_doc,
$panel_div,
_ds,
ids,
};
}
}
return panels_obj;
};
func.UI.worker = {};
func.UI.worker.ID = null;
func.UI.worker.init = async function (SESSION_ID) {
$.fn.isInViewport = function () {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
let last_job_in_queue = 0;
// let run_stat;
const job_iterator2 = async function () {
let from_job_num_to_run = last_job_in_queue;
last_job_in_queue = UI_WORKER_OBJ.num - from_job_num_to_run;
if (typeof UI_WORKER_OBJ.stat === 'undefined' || UI_WORKER_OBJ.stat === 'undefined' || UI_WORKER_OBJ.stat === null) {
// idle
this.attempt = 0;
if (UI_WORKER_OBJ.jobs.length) {
// clearInterval(this._interval);
for await (const [key, val] of Object.entries(UI_WORKER_OBJ.jobs)) {
// if (val.job_num < from_job_num_to_run) continue;
try {
if (val.stat) {
break;
}
await func.UI.worker.execute(val.SESSION_ID, val);
// break;
} catch (err) {
console.error(err);
}
}
}
} else {
//busy
this.attempt++;
}
};
const job_iterator = async function () {
let from_job_num_to_run = last_job_in_queue;
last_job_in_queue = UI_WORKER_OBJ.num - from_job_num_to_run;
// if (typeof UI_WORKER_OBJ.stat === 'undefined' || UI_WORKER_OBJ.stat === 'undefined' || UI_WORKER_OBJ.stat === null) {
// idle
this.attempt = 0;
if (UI_WORKER_OBJ.jobs.length) {
let running_job_children_elements = [];
let active_job_children_elements = [];
for await (const [key, val] of Object.entries(UI_WORKER_OBJ.jobs)) {
try {
if (val.stat === 'busy') continue;
if (!val.elementP) {
await func.UI.worker.execute(val.SESSION_ID, val);
continue;
}
const active_xu_ui_id = val.elementP.attr('xu-ui-id');
if (!active_xu_ui_id) continue;
const running_job_obj = UI_WORKER_OBJ.jobs[0];
if (running_job_obj.job_num !== val.job_num) {
const running_xu_ui_id = running_job_obj?.elementP?.attr('xu-ui-id');
if (!running_xu_ui_id) continue;
$.each(running_job_obj.elementP.find('*'), function (key, val) {
const xu_ui_id = $(val).attr('xu-ui-id');
if (!xu_ui_id) return true;
running_job_children_elements.push(xu_ui_id);
});
$.each(val.elementP.find('*'), function (key, val) {
const xu_ui_id = $(val).attr('xu-ui-id');
if (!xu_ui_id) return true;
active_job_children_elements.push(xu_ui_id);
});
// skip - if job element exist in the active job ui as child element
if (running_job_children_elements.includes(active_xu_ui_id)) {
continue;
}
// abort - if active job element exist in the current job ui (parent element changed)
if (active_job_children_elements.includes(running_xu_ui_id)) {
if (val.functionP === 'execute_xu_render_attributes') {
$.each(active_job_children_elements, function (key, val) {
const $elm = $(`[xu-ui-id=${val}]`);
if (!$elm.length) return true;
if (!$elm.data().xuData) return true;
$elm.data().xuData.pending_to_delete = true;
});
await func.UI.worker.delete_job(SESSION_ID, running_job_obj.job_num);
break;
}
}
}
// execute - if active job element not exist the current job ui and not detected as parent element
await func.UI.worker.execute(val.SESSION_ID, val);
continue;
// active_job_children_elements = [];
// if (val.elementP) {
// // get active_job children elements only if job handle ui job (not update)
// $.each(val.elementP.find('*'), function (key, val) {
// const xu_ui_id = val.elementP.attr('xu-ui-id');
// if (!xu_ui_id) return true;
// active_job_children_elements.push(xu_ui_id);
// });
// func.UI.worker.execute(val.SESSION_ID, val);
// continue;
// } else {
// // non ui job
// await func.UI.worker.execute(val.SESSION_ID, val);
// break;
// }
// if (UI_WORKER_OBJ.jobs.length > 1 && val.elementP) {
// const xu_ui_id = val.elementP.attr('xu-ui-id');
// if (!xu_ui_id) continue;
// // skip - if job element exist in the active job ui as child element
// if (active_job_children_elements.includes(xu_ui_id)) {
// continue;
// }
// // abort - if active job element exist in the current job ui (parent element changed)
// $.each(val.elementP.find('*'), function (key, val) {
// const xu_ui_id = val.elementP.attr('xu-ui-id');
// if (!xu_ui_id) return true;
// active_job_children_elements.push(xu_ui_id);
// });
// // execute - if active job element not exist the current job ui and not detected as parent element
// const active_job = UI_WORKER_OBJ.jobs[0];
// }
// break;
} catch (err) {
console.error(err);
}
}
}
// } else {
// //busy
// this.attempt++;
// }
};
this._interval = setInterval(job_iterator, 1);
setInterval(async function () {
func.UI.ds_garbage_collector();
}, 10000);
setInterval(async function () {
func.UI.refs_garbage_collector();
func.UI.teleport_garbage_collector();
}, 1000);
};
func.UI.worker.add_to_queue = async function (SESSION_ID, source, functionP, paramsP, calling_job, elementP, dsSession, calling_trigger_prop) {
var obj = {
SESSION_ID,
source,
functionP,
paramsP,
calling_job,
elementP,
dsSession,
calling_trigger_prop,
job_num: UI_WORKER_OBJ.num,
};
if (functionP === 'execute_xu_all_attributes') {
const queue_key = source + '_' + functionP + '_' + (elementP?.attr('xu-ui-id') || '') + '_' + (paramsP?.fields_arr?.toString() || '');
obj.queue_key = queue_key;
let exist_job = UI_WORKER_OBJ.jobs.find((e) => {
if (e.queue_key === queue_key) {
return e;
}
});
if (exist_job) {
// func.UI.worker.delete_job(SESSION_ID, exist_job.job_num);
// exist_job = obj;
exist_job.paramsP = paramsP;
exist_job.calling_trigger_prop = calling_trigger_prop;
return;
}
}
// if (calling_job) {
// var job_index = func.UI.worker.find_job_index(SESSION_ID, calling_job);
// if (job_index === null || typeof job_index === 'undefined') return;
// try {
// if (!UI_WORKER_OBJ.jobs[job_index].splice_count) {
// UI_WORKER_OBJ.jobs[job_index].splice_count = 0;
// }
// UI_WORKER_OBJ.jobs[job_index].splice_count++;
// UI_WORKER_OBJ.jobs.splice(job_index + UI_WORKER_OBJ.jobs[job_index].splice_count, 0, obj);
// // }
// } catch (e) {
// console.error('bug');
// // UI_WORKER_OBJ.jobs.splice(0, 0, obj);
// }
// } else {
// // check case of xu-render if queue has child node of the element then delete job
// // check case of execute attributes that queue not contain the element then add to parallel queue
// UI_WORKER_OBJ.jobs.push(obj);
// }
UI_WORKER_OBJ.jobs.push(obj);
UI_WORKER_OBJ.num++;
return UI_WORKER_OBJ.num - 1;
};
func.UI.worker.delete_job = async function (SESSION_ID, jobNoP) {
// func.UI.worker.ID.postMessage({
// method: "delete_job",
// params: {
// job_num: jobNoP,
// },
// });
// return;
var _session = SESSION_OBJ[SESSION_ID];
var job_index = func.UI.worker.find_job_index(SESSION_ID, jobNoP);
if (!UI_WORKER_OBJ.jobs[job_index]) {
// UI_WORKER_OBJ.stat = null;
return;
}
var dsSession = UI_WORKER_OBJ.jobs[job_index].dsSession;
let ds_obj = _session?.DS_GLB[dsSession];
if (ds_obj) {
delete SCREEN_BLOCKER_OBJ[ds_obj.screenId + (ds_obj.callingScreenId ? '_' + ds_obj.callingScreenId : '')];
}
if (dsSession && ds_obj?.loops_limit && ds_obj?.loops_count < ds_obj?.loops_limit - 1) {
return;
}
// UI_WORKER_OBJ.stat = null;
UI_WORKER_OBJ.jobs.splice(job_index, 1);
};
func.UI.worker.execute = async function (SESSION_ID, queue_obj) {
var job_index = func.UI.worker.find_job_index(SESSION_ID, queue_obj.job_num);
// if (UI_WORKER_OBJ.jobs?.[job_index]?.stat === 'busy') {
// if (queue_obj.jobNoP) UI_WORKER_OBJ.stat = job_index;
// return;
// }
// if (queue_obj.jobNoP && !UI_WORKER_OBJ.jobs[job_index]) {
// UI_WORKER_OBJ.stat = null;
// return;
// }
if (queue_obj.jobNoP) UI_WORKER_OBJ.stat = job_index;
if (UI_WORKER_OBJ.jobs[job_index]) {
UI_WORKER_OBJ.jobs[job_index].stat = 'busy';
}
const fx = {
update_datasource: async function () {
if (queue_obj?.paramsP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[queue_obj.dsSession];
_ds.currentRecordId = queue_obj.paramsP.currentRecordId;
var datasource_changes = {
[_ds.dsSession]: { [_ds.currentRecordId]: 'set' },
};
await func.datasource.update(SESSION_ID, datasource_changes);
if (queue_obj.paramsP.field_id) {
datasource_changes = {
[_ds.dsSession]: {
[_ds.currentRecordId]: {
[queue_obj.paramsP.field_id]: queue_obj.paramsP.field_value,
},
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
execute_xu_render_attributes: async function () {
const _data = queue_obj.paramsP.elem_val.$elm.data();
if (_data?.xuData?.paramsP) {
await func.UI.screen.execute_xu_functions(
SESSION_ID,
null,
_data.xuData.$root_container,
_data.xuData.node,
$(`[xu-ui-id="${_data.xuData.parent_element_ui_id}"`),
_data.xuData.paramsP,
{},
queue_obj.jobNoP,
_data.xuData.key,
_data.xuData.parent_node,
'xu-render',
queue_obj.paramsP.elem_val.$elm,
{
key: 'xu-render',
value: queue_obj.paramsP.attr_value, //? "Y" : "N",
fields_arr: queue_obj.paramsP.fields_arr,
jobNoP: queue_obj.jobNoP,
},
);
}
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
execute_xu_all_attributes: async function () {
const done = function () {
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
};
// var $elm = func.UI.utils.find_in_element_data('xuData', $(SESSION_OBJ[SESSION_ID].root_element), 'xu_id', queue_obj.paramsP.elem_key);
var $elm = $(`[xu-ui-id="${queue_obj.paramsP.elem_key}"]`);
// if (glb.new_xu_render) {
// $elm = $(`[xu-ui-id="${queue_obj.paramsP.elem_key}"]`);
// }
if (!$elm.length) {
return done();
}
for await (const [key, attr] of Object.entries(queue_obj.paramsP.elem_val.attributes)) {
if (attr === 'xu-exp:xu-render' || attr === 'xu-exp:xu-for' || attr === 'xu-for' || attr === 'xu-exp:xu-bind') {
// if (attr === 'xu-exp:xu-for' || attr === 'xu-for' || attr === 'xu-exp:xu-bind') {
continue;
}
var res = {
result: queue_obj.paramsP.elem_val.$elm.data().xuAttributes[attr],
};
if (attr !== 'xu-class' && attr !== 'xu-ui-plugin') {
res = await func.expression.get(
queue_obj.paramsP.SESSION_ID,
queue_obj.paramsP.elem_val.$elm.data().xuAttributes[attr],
queue_obj.paramsP.elem_val.$elm.data().xuData.paramsP.dsSessionP,
'UI Property EXP',
queue_obj.paramsP.elem_val.$elm.data().xuData.recordid,
null,
null,
null,
null,
null,
queue_obj.paramsP.elem_val.$elm.data().xuData.iterate_info,
);
// console.log(res);
}
const attr_new = attr.split('xu-exp:')[1];
// REGULAR ATTRIBUTE
if (attr_new && attr_new.substr(0, 2) !== 'xu') {
queue_obj.paramsP.elem_val.$elm.attr(attr_new !== 'viewBox' ? attr_new.toLowerCase() : attr_new, res.result);
} else {
try {
// XU ATTRIBUTE
let _data = queue_obj.paramsP.elem_val.$elm.data();
if (!_data || _.isEmpty(_data)) {
continue;
}
await func.UI.screen.execute_xu_functions(SESSION_ID, null, _data.xuData.$root_container, _data.xuData.node, _data.xuData.$container, _data.xuData.paramsP, {}, queue_obj.jobNoP, null, null, attr_new || attr, queue_obj.paramsP.elem_val.$elm, {
key: attr_new || attr,
value: res.result,
});
} catch (error) {
debugger;
}
}
}
return done();
},
execute_xu_for: async function () {
try {
var $elm = queue_obj?.paramsP?.elem_val?.$elm; // $(SESSION_OBJ[SESSION_ID].root_element).find(`[xu-ui-id=${queue_obj.paramsP.elem_key}]`)
if (!$elm?.length) {
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
}
// $elm.empty();
$.each($elm.children(), (key, val) => {
if (!$(val)?.data()?.xuData) return true;
if ($(val).data().xuData.nodeid === queue_obj?.paramsP?.xu_for_item_id) {
$(val).remove();
}
});
let _data = queue_obj.paramsP.elem_val.$elm.data();
const node_to_render = _data.xuData.node_org.children?.find((e) => e.id === queue_obj?.paramsP?.xu_for_item_id);
await func.UI.screen.render_ui_tree(queue_obj.paramsP.SESSION_ID, queue_obj.paramsP.elem_val.$elm, node_to_render, null, _data.xuData.paramsP, queue_obj.jobNoP, null, _data.xuData.key, null, _data.xuData.parent_node, null, _data.xuData.$root_container);
} catch (error) {}
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
render_viewport: async function () {
const { nodeP, $div, parent_infoP, $root_container, jobNoP, is_skeleton, paramsP, $container } = queue_obj?.paramsP || {};
if (nodeP?.children?.length && !$div.children().length) {
$div.removeClass('skeleton');
for await (const [key, val] of Object.entries(nodeP.children)) {
const ret = await func.UI.screen.render_ui_tree(SESSION_ID, $div, nodeP.children[key], parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, nodeP, null, $root_container);
}
$div[0].style.removeProperty('height');
$div.data().xuData.viewport_height = $div.height();
// set initial default height for all children
const parent_id = $div.parent().attr('xu-ui-id');
if (!UI_WORKER_OBJ.viewport_height_set_ids.includes(parent_id)) {
UI_WORKER_OBJ.viewport_height_set_ids.push(parent_id);
func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'set_viewport_height', { $div, height: $div.height() }, null, null, paramsP.dsSessionP);
}
}
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
set_viewport_height: async function () {
const { $div, height } = queue_obj?.paramsP || {};
$.each($div.parent().children(), function (key, elm) {
if (!$(elm)[0].style.height && !$(elm).children().length) {
$(elm).css('height', height);
}
});
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
execute_xu_widget: async function () {
try {
var $elm = queue_obj?.paramsP?.elem_val?.$elm; // $(SESSION_OBJ[SESSION_ID].root_element).find(`[xu-ui-id=${queue_obj.paramsP.elem_key}]`)
if (!$elm?.length) {
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
}
// $elm.empty();
// $.each($elm.children(), (key, val) => {
// if (!$(val)?.data()?.xuData) return true;
// if ($(val).data().xuData.nodeid === queue_obj?.paramsP?.xu_for_item_id) {
// $(val).remove();
// }
// });
const _$elm = queue_obj.paramsP.elem_val.$elm.clone(true);
const parent_id = $elm.parent().attr('xu-ui-id');
let _data = _$elm.data();
$elm.remove();
const node_to_render = _data.xuData.node_org; //_data.xuData.node_org.children?.find((e) => e.id === queue_obj?.paramsP?.xu_for_item_id);
await func.UI.screen.render_ui_tree(queue_obj.paramsP.SESSION_ID, $(`[xu-ui-id="${parent_id}"]`), node_to_render, null, _data.xuData.paramsP, queue_obj.jobNoP, null, _data.xuData.key, null, _data.xuData.parent_node, null, _data.xuData.$root_container);
} catch (error) {}
return func.UI.worker.delete_job(SESSION_ID, queue_obj.job_num);
},
};
return await fx[queue_obj.functionP]();
};
func.UI.worker.find_job_index = function (SESSION_ID, jobNoP) {
var ret = null;
if (!UI_WORKER_OBJ) return ret;
for (let [key, val] of Object.entries(UI_WORKER_OBJ.jobs)) {
if (val && val.job_num == jobNoP) {
ret = Number(key);
break;
}
}
return ret;
};
func.UI.ds_garbage_collector = function (SESSION_ID = Object.keys(SESSION_OBJ)[0], re_check) {
let _session = SESSION_OBJ[SESSION_ID];
const _data_system = _session?.DS_GLB?.[0]?.data_system;
if (_data_system?.SYS_GLOBAL_BOL_AJAX_BUSY) return;
if (!_data_system?.SYS_GLOBAL_BOL_IDLE) return;
let abort;
for (const [dsP, _ds] of Object.entries(_session.DS_GLB)) {
if (_ds.stat === 'busy') {
abort = true;
break;
}
}
if (abort) {
return;
}
let ds_pending_to_delete = [],
ds_approve_to_delete = [];
const $elm = $('body').find('*');
for (const [dsP, _ds] of Object.entries(_session.DS_GLB)) {
if (!_ds.screen_params) continue;
let found;
$.each($elm, (key, val) => {
const _xuData = $(val).data().xuData;
if (!_xuData || !_xuData.paramsP) return true;
if (_xuData.paramsP.dsSessionP == dsP) {
found = true;
return false;
}
});
if (!found) {
ds_pending_to_delete.push(dsP);
}
}
// console.log(ds_pending_to_delete);
const sortedKeys = Object.keys(_session.DS_GLB).sort((a, b) => b.localeCompare(a));
sortedKeys.forEach((key) => {
const val = _session.DS_GLB[key];
if (!ds_pending_to_delete.includes(key) && typeof val.parentDataSourceNo !== 'undefined' && ds_pending_to_delete.includes(val.parentDataSourceNo.toString())) {
ds_pending_to_delete = ds_pending_to_delete.filter((item) => item !== val.parentDataSourceNo.toString());
}
});
// console.log(ds_pending_to_delete);
for (const val of ds_pending_to_delete) {
func.datasource.del(SESSION_ID, val);
}
};
func.UI.refs_garbage_collector = function (SESSION_ID = Object.keys(SESSION_OBJ)[0]) {
if (!_.isEmpty(SCREEN_BLOCKER_OBJ)) {
// let dom to finish build
return;
}
let _session = SESSION_OBJ[SESSION_ID];
const _data_system = _session?.DS_GLB?.[0]?.data_system;
for (const [key, val] of Object.entries(_data_system?.SYS_GLOBAL_OBJ_REFS || {})) {
if (!$(`[xu-ui-id='${val.xu_ui_id}`)?.length && !$(`[xu-panel-wrapper-id='${val.xu_ui_id}`)?.length) {
delete _data_system.SYS_GLOBAL_OBJ_REFS[key];
}
}
};
func.UI.teleport_garbage_collector = function (SESSION_ID = Object.keys(SESSION_OBJ)[0]) {
if (!_.isEmpty(SCREEN_BLOCKER_OBJ)) {
// let dom to finish build
return;
}
const $teleport_elements = $(`[xu-teleport-parent-id^='node-`);
$.each($teleport_elements, (key, val) => {
const xu_teleport_parent_id = $(val).attr('xu-teleport-parent-id');
if (!$(`[xu-ui-id='${xu_teleport_parent_id}`)?.length) {
$(val).remove();
}
});
};
func.UI.update_xu_ref = function (SESSION_ID, dsSessionP, ref_field_id, $elm) {
let ret;
const _session = SESSION_OBJ[SESSION_ID];
let _ds_0 = _session.DS_GLB[0];
const _ds = func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
let obj = { ds: _ds, data: {}, props: _ds.in_parameters || {} };
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
obj.data = _ds?.data_feed?.rows?.[row_idx];
} catch (error) {
// error normal if find_ROWID_idx fail
}
let SYS_GLOBAL_OBJ_REFS = _ds_0.data_system['SYS_GLOBAL_OBJ_REFS'];
if ($elm) {
const attributes = $elm?.data()?.xuData?.xuPanelProps || $elm?.data()?.xuData?.debug_info?.attribute_stat || {};
obj.attributes = attributes;
obj.xu_ui_id = $elm.attr('xu-ui-id');
}
if (!_.isEqual(SYS_GLOBAL_OBJ_REFS?.[ref_field_id] || {}, obj)) {
if (!SYS_GLOBAL_OBJ_REFS[ref_field_id]) {
SYS_GLOBAL_OBJ_REFS[ref_field_id] = {};
}
SYS_GLOBAL_OBJ_REFS[ref_field_id] = obj;
ret = true;
}
return ret;
};
func.UI.find_field_in_progUi_attributes = function (progUi, field_id, prop, tag_name) {
let elm_nodes = [];
const iterate_progUi = function (node) {
for (let item of node) {
if (!tag_name || item.tagName === tag_name) {
if (prop) {
if (!_.isEmpty(item.attributes)) {
for (const [attr, val] of Object.entries(item.attributes)) {
if (attr === `xu-exp:${prop}` || attr === prop) {
// found = val.includes('@' + field_id);
if (val.includes('@' + field_id)) {
elm_nodes.push(item);
break;
}
}
}
}
} else {
if (tag_name) {
elm_nodes.push(item);
}
}
}
// if (elm_node) break;
if (item.children) {
iterate_progUi(item.children);
}
}
};
iterate_progUi(progUi);
return elm_nodes;
};
func.datasource = {};
func.datasource.create = async function (
SESSION_ID,
prog_id,
dataSourceNoP = null, // if exist then refresh
parentDataSourceNoP,
containerIdP,
rowIdP,
jobNoP,
calling_trigger_prop,
parameters_raw_obj,
NA_isInitP,
NA_callingSourceP,
calling_jobP,
NA_screen_dsP,
is_panelP,
parameters_obj_inP,
static_refreshP,
worker_id,
NA_eventChangesResults,
) {
return new Promise(async function (resolve, reject) {
if (!prog_id) return reject('Program is empty');
var _session = SESSION_OBJ[SESSION_ID];
if (!_session.DS_GLB) return reject('DS_GLB not exist');
var _prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
if (!_prog_obj) return reject('Program not found');
var args = {
SESSION_ID,
prog_id,
dataSourceNoP,
parentDataSourceNoP,
containerIdP,
rowIdP,
jobNoP,
calling_trigger_prop,
calling_jobP,
is_panelP,
parameters_obj_inP,
static_refreshP,
worker_id,
parameters_raw_obj,
};
var IS_DATASOURCE_REFRESH = null;
var _ds = _session.DS_GLB[dataSourceNoP];
var old_dataSource_vars = {};
if (_ds) IS_DATASOURCE_REFRESH = true;
if (IS_DATASOURCE_REFRESH) {
old_dataSource_vars.sortOrder = _ds.sortOrder;
old_dataSource_vars.sortOrderTypeExp = _ds.sortOrderTypeExp;
if (_ds.data_system) {
old_dataSource_vars.SYS_OBJ_WIN_MODE = _ds.data_system.SYS_OBJ_WIN_MODE;
// old_dataSource_vars.SYS_OBJ_WIN_UI = _ds.data_system.SYS_OBJ_WIN_UI;
old_dataSource_vars.SYS_STR_WIN_ID = _ds.data_system.SYS_STR_WIN_ID;
old_dataSource_vars.SYS_STR_WIN_NAME = _ds.data_system.SYS_STR_WIN_NAME;
}
if (static_refreshP) old_dataSource_vars.in_parameters = _ds.in_parameters;
await func.datasource.update(SESSION_ID, {
[dataSourceNoP]: {
['datasource_main']: {
stat: 'busy',
stat_ts: Date.now(),
is_worker: glb.IS_WORKER,
},
},
});
}
const restore_old_dataSource_vars = function (dsSessionP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (_ds.data_system) {
_ds.data_system.SYS_OBJ_WIN_MODE = old_dataSource_vars.SYS_OBJ_WIN_MODE;
// _ds.data_system.SYS_OBJ_WIN_UI = old_dataSource_vars.SYS_OBJ_WIN_UI;
_ds.data_system.SYS_STR_WIN_ID = old_dataSource_vars.SYS_STR_WIN_ID;
_ds.data_system.SYS_STR_WIN_NAME = old_dataSource_vars.SYS_STR_WIN_NAME;
}
if (static_refreshP) _ds.in_parameters = old_dataSource_vars.in_parameters;
};
var run_at = _prog_obj?.properties?.runAt;
if (!['live_preview', 'miniapp'].includes(_session.engine_mode)) {
if (_session.opt.app_computing_mode === 'main') {
run_at = 'client';
}
}
if (_prog_obj?.properties.menuType === 'globals') {
run_at = 'client';
}
if (!run_at && parentDataSourceNoP && _session.DS_GLB[parentDataSourceNoP]) {
if (_session.DS_GLB[parentDataSourceNoP]._run_at) run_at = _session.DS_GLB[parentDataSourceNoP].v.run_at;
}
const done = function (SESSION_ID, dsSessionP, response_returned_from_worker) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (IS_DATASOURCE_REFRESH) {
restore_old_dataSource_vars(dsSessionP);
}
if (!IS_DATASOURCE_REFRESH) {
if (!glb.IS_WORKER) {
DATASOURCE_INTERVALS[SESSION_ID][dsSessionP] = new func.datasource.interval(SESSION_ID, dsSessionP, 'client_interval');
DATASOURCE_INTERVALS[SESSION_ID][dsSessionP].init();
}
}
const set_stat_idle = async function () {
let ds_connected = [];
for (const [dsP, _ds] of Object.entries(_session.DS_GLB)) {
if (_ds.parentDataSourceNo == dsSessionP) {
ds_connected.push(dsP);
}
}
const datasource_changes = {
[dsSessionP]: {
['datasource_main']: {
stat: 'idle',
stat_ts: Date.now(),
is_worker: glb.IS_WORKER,
},
},
};
if (!ds_connected.length) {
return await func.datasource.update(SESSION_ID, datasource_changes);
}
let interval = setInterval(() => {
let idle_count = 0;
for (const dsSession of ds_connected) {
const _ds = _session.DS_GLB[dsSession];
if (_ds.stat == 'idle') {
idle_count++;
}
}
if (ds_connected.length === idle_count) {
clearInterval(interval);
func.datasource.update(SESSION_ID, datasource_changes);
}
}, 1000);
};
set_stat_idle();
resolve({
SESSION_ID,
dsSessionP,
rowIdP: _ds.args.rowIdP,
jobNoP: _ds.args.jobNoP,
callingLogId: _ds.callingLogId,
calling_jobP: _ds.calling_jobP,
});
};
var db_driver;
var is_system_client_vars = false;
if (jobNoP) {
}
if (glb.IS_WORKER || run_at === 'client' || is_system_client_vars || db_driver === 'pouchdb') {
const ret = await func.datasource.prepare(
args.SESSION_ID,
args.prog_id,
args.dataSourceNoP,
args.parentDataSourceNoP,
args.containerIdP,
args.rowIdP,
args.jobNoP,
args.calling_trigger_prop,
args.parameters_raw_obj,
null,
null,
args.calling_jobP,
null,
args.is_panelP,
args.parameters_obj_inP,
args.static_refreshP,
run_at,
worker_id,
);
return done(SESSION_ID, ret.dsSessionP);
}
// vvvv run at worker vvvv
if (_ds) IS_DATASOURCE_REFRESH = true;
var data = _.assignIn(
{
session_id: SESSION_ID,
dataSourceSessionGlobal: SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal,
parentDataSourceNo: IS_DATASOURCE_REFRESH ? _ds.parentDataSourceNo : null,
IS_DATASOURCE_REFRESH,
},
args,
);
delete data.SESSION_ID;
const jsonP = await func.index.call_worker(SESSION_ID, {
service: 'datasource_create',
data,
id: SESSION_OBJ[SESSION_ID].worker_id,
});
_session.DS_GLB[jsonP.dsSession] = jsonP;
if (jsonP.dataSourceSessionGlobal > _session.dataSourceSessionGlobal) {
_session.dataSourceSessionGlobal = jsonP.dataSourceSessionGlobal;
}
return done(SESSION_ID, jsonP.dsSession, true);
});
};
func.datasource.prepare = async function (SESSION_ID, prog_id, dataSourceNoP, parentDataSourceNoP, containerIdP, rowIdP, jobNoP, calling_trigger_prop, parameters_raw_obj, NA_isInitP, callingSourceP, calling_jobP, NA_screen_dsP, is_panelP, parameters_obj_inP, static_refreshP, run_atP, worker_id) {
const set_parameters = async function () {
var _session = SESSION_OBJ[SESSION_ID];
const get_Out_parameters = async function (fieldIdP, located_field_param_idxP, param_row_idP) {
var ret = parameters_obj_inP?.[fieldIdP] || fieldIdP;
PARAM_OUT_INFO[prog_id + '_' + param_row_idP] = {
module: _ds.viewModule,
action: 'parameters',
prop: 'out',
details: ret,
result: ret,
source: _ds.viewSourceDesc,
type: 'parameters',
prog_id: prog_id,
dsSession: dataSourceSession,
fieldId: fieldIdP,
parentDataSourceNo: parentDataSourceNoP,
};
return ret;
};
// set parameters list
const screenInfo = await func.utils.get_screen_obj(SESSION_ID, prog_id); // locate root receiving parameters screen id - get root screen info
if (
screenInfo?.properties?.progParams
// &&
// glb.PARAMETER_NODES_ARR.includes(screenInfo.properties.menuType)
) {
if (!_.isEmpty(screenInfo.properties.progParams)) {
_ds.in_parameters = {};
_ds.out_parameters = {};
for await (let [key, val] of Object.entries(screenInfo.properties?.progParams)) {
// run on parameters arr
if (val.data.dir === 'in') {
_ds.in_parameters[val.data.parameter] = {
// value: parameters_obj_inP?.[val.data.parameter],
type: val.data.type,
};
if (typeof parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
_ds.in_parameters[val.data.parameter].value = parameters_obj_inP[val.data.parameter];
} else if (['live_preview', 'miniapp'].includes(_session.engine_mode)) {
_ds.in_parameters[val.data.parameter].value = _session?.url_params?.[val.data.parameter];
}
continue;
}
if (val.data.dir === 'out' && val.data.parameter) {
_ds.out_parameters[val.data.parameter] = await get_Out_parameters(val.data.parameter, key, val.id);
}
}
_ds.PARAM_OUT_INFO = PARAM_OUT_INFO;
}
}
};
const build_GLOBAL_SYS_fields = function () {
if (!_ds.data_system) _ds.data_system = {};
_ds.data_system['SYS_GLOBAL_UTC'] = -new Date().getTimezoneOffset() / 60;
_ds.data_system['SYS_GLOBAL_STR_APP_ID'] = APP_OBJ[_session.app_id]._id;
_ds.data_system['SYS_GLOBAL_STR_SESSION_ID'] = SESSION_ID;
_ds.data_system['SYS_GLOBAL_STR_LOGIN_USER_ID'] = _session.USR_OBJ._id;
if (!['live_preview', 'miniapp'].includes(_session.engine_mode) && PROJECT_OBJ[_session.app_id].info) {
_ds.data_system['SYS_GLOBAL_OBJ_APP_INFO'] = {
build: PROJECT_OBJ[_session.app_id].info.build_id,
author: PROJECT_OBJ[_session.app_id].info.author,
date: PROJECT_OBJ[_session.app_id].info.build_date,
name: APP_OBJ[_session.app_id].app_name,
};
}
_ds.data_system['SYS_GLOBAL_OBJ_LOGIN_USER_INFO'] = {
id: _session.USR_OBJ._id,
user_name: _session.USR_OBJ.usr_name,
first_name: _session.USR_OBJ.usr_first_name,
last_name: _session.USR_OBJ.usr_last_name,
email: _session.USR_OBJ.usr_email,
profile_picture: _session.USR_OBJ.usr_profile_picture,
};
_ds.data_system['SYS_GLOBAL_STR_BROWSER_HASH_ID'] = _session.SYS_GLOBAL_STR_BROWSER_HASH_ID;
_ds.data_system['SYS_GLOBAL_STR_BROWSER_TITLE'] = _session.SYS_GLOBAL_STR_BROWSER_TITLE;
// }
_ds.data_system['SYS_GLOBAL_STR_SITE_CSS'] = {};
_ds.data_system['SYS_GLOBAL_BOL_SHIFT_KEY_STATE'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_COMMAND_KEY_STATE'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_CONTROL_KEY_STATE'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_ALT_KEY_STATE'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_ONLINE'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_REPLICATION_STAT'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_AJAX_BUSY'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_CONNECTED'] = 1;
_ds.data_system['SYS_GLOBAL_BOL_IDLE'] = 0;
_ds.data_system['SYS_GLOBAL_STR_FIREBASE_TOKEN_ID'] = 0;
_ds.data_system['SYS_GLOBAL_BOL_PUSH_NOTIFICATION_GRANTED'] = _session.PUSH_NOTIFICATION_GRANTED;
_ds.data_system['SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO'] = _session.SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO;
_ds.data_system['SYS_GLOBAL_OBJ_CLIENT_INFO'] = _session.SYS_GLOBAL_OBJ_CLIENT_INFO;
_ds.data_system['SYS_GLOBAL_OBJ_REFS'] = {};
};
if (!SESSION_OBJ[SESSION_ID].DS_GLB) return;
if (dataSourceNoP && !SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceNoP]) {
return func.utils.debug_report(SESSION_ID, 'Datasource', 'Datasource not exist: ' + dataSourceNoP, 'E');
}
if (!prog_id) {
return func.utils.debug_report(SESSION_ID, 'Datasource', 'Program is null', 'E');
}
const args = {
SESSION_ID,
prog_id,
dataSourceNoP,
parentDataSourceNoP,
containerIdP,
rowIdP,
jobNoP,
calling_trigger_prop,
calling_jobP,
is_panelP,
parameters_obj_inP,
static_refreshP,
run_atP,
worker_id,
parameters_raw_obj,
};
var dataSourceSession = null;
var IS_DATASOURCE_REFRESH = null;
var PARAM_OUT_INFO = {};
const init_dataSource = async function () {
const init_new_dataSource = async function () {
if (!['main'].includes(SESSION_OBJ[SESSION_ID].opt.app_computing_mode) && run_atP === 'client' && prog_id !== 'system') {
const ret = await func.index.call_worker(SESSION_ID, {
service: 'get_dataSourceSessionGlobal',
data: { session_id: SESSION_ID },
id: SESSION_OBJ[SESSION_ID].worker_id,
});
SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal = ret?.new_dataSourceSessionGlobal || 1;
} else {
SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal++;
}
dataSourceSession = SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal;
SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession] = {
data_feed: { rows: [] },
};
};
const init_existing_dataSource = function () {
let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceNoP];
console.log('DATASOURCE_REFRESH', dataSourceNoP);
IS_DATASOURCE_REFRESH = true;
_ds.refreshed = true;
try {
if (!_ds.v) _ds.v = {};
delete _ds.v.old_dataSource; // to eliminate parse error
delete _ds.rows_found;
// _ds.raw_data = {};
_ds.data_feed = {};
_ds.v.old_dataSource = _.cloneDeep(_ds);
} catch (err) {
console.error('function: init_existing_dataSource - error');
return;
}
dataSourceSession = dataSourceNoP;
};
if (typeof dataSourceNoP === 'undefined' || dataSourceNoP === null) {
await init_new_dataSource();
} else {
init_existing_dataSource();
}
return SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
};
var _ds = await init_dataSource();
_ds.stat = 'busy';
_ds._run_at = run_atP;
if (_ds.refreshed) {
await func.datasource.update(SESSION_ID, {
[_ds.dsSession]: {
['datasource_main']: {
stat: 'busy',
stat_ts: Date.now(),
is_worker: glb.IS_WORKER,
},
},
});
}
// init_v();
if (IS_DATASOURCE_REFRESH) {
if (!static_refreshP) await set_parameters(); // do only on new datasource or refresh
return func.datasource.execute(SESSION_ID, dataSourceSession, true);
}
_ds.tree_obj = await func.utils.TREE_OBJ.get(SESSION_ID, prog_id);
if (!_ds.tree_obj) {
return func.utils.debug_report(SESSION_ID, 'Datasource', 'Program not exist: ' + prog_id, 'E');
}
await func.datasource.set_VIEW_data(SESSION_ID, args, _ds);
if (
!_ds.v.viewSourceDesc // in case of event
) {
_ds.v.viewSourceDesc = callingSourceP;
}
if (dataSourceSession === 0) _ds.v.viewSourceDesc = 'system startup';
var _session = SESSION_OBJ[SESSION_ID];
const set_DS_GLB = async function () {
_ds.dataSource_init_arr = {};
_ds.containerId = containerIdP;
_ds.jobNoP = jobNoP;
_ds.viewSourceDesc = _ds.v.viewSourceDesc;
_ds.callingSource = callingSourceP;
_ds.calling_jobP = calling_jobP;
_ds.viewModule = _ds.v.viewModule;
_ds.viewSourceProp = _ds.v.viewSourceProp;
_ds.dsSession = dataSourceSession;
// _ds.v = v;
_ds.args = args;
_ds.worker_id = worker_id;
_ds.prog_id = prog_id;
// if (!IS_DATASOURCE_REFRESH) {
_ds.parentDataSourceNo = parentDataSourceNoP;
// }
};
await set_DS_GLB();
if (
prog_id === 'system' &&
!parentDataSourceNoP // do only on first time datasource 0 call
) {
build_GLOBAL_SYS_fields();
}
// ======================================
// PARAMETERS
//======================================
await set_parameters();
// ======================================
// INTERVALS
//======================================
_ds.client_interval = func.datasource.get_event_interval_arr(SESSION_ID, dataSourceSession, 'client_interval');
if (prog_id === 'system') {
_ds.server_interval = func.datasource.get_event_interval_arr(SESSION_ID, dataSourceSession, 'server_interval');
}
// if (static_refreshP) {
// delete _ds.raw_data;
// }
// if (!static_refreshP) await set_parameters(); // do only on new datasource or refresh
// try {
let ret_execute = await func.datasource.execute(SESSION_ID, dataSourceSession);
return ret_execute;
// } catch (e) {
// console.error(e);
// }
};
func.datasource.execute = async function (SESSION_ID, dataSourceSession, IS_DATASOURCE_REFRESH) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dataSourceSession];
var args = _ds.args;
// var v = _ds.v;
let tree_obj = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
let prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
const callback_datasource = async function () {
if (typeof IS_WORKER === 'undefined' && typeof IS_DOCKER === 'undefined' && typeof IS_PROCESS_SERVER === 'undefined' && _ds.viewSourceProp === 'globals') {
if (!['main'].includes(_session.opt.app_computing_mode)) {
await func.index.call_worker(SESSION_ID, {
service: 'create_webworker_globals',
data: { ds_data: _ds, session_id: SESSION_ID },
});
}
}
if (await func.datasource.get_view_events_count(SESSION_ID, dataSourceSession, 'on_load')) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'on_load');
}
// }
return await func.datasource.callback(SESSION_ID, dataSourceSession, args.rowIdP, args.jobNoP, _ds.prog_id);
};
const get_limit = async function () {
var ret = 0;
let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
if (tree_ret.menuType === 'get_data') {
return 1;
}
ret = _ds.progDataSource?.dataSourceLimit;
if (prog_obj.progDataSource?.dataSourceLoopExp) {
ret = (await func.expression.get(SESSION_ID, prog_obj.progDataSource.dataSourceLoopExp, dataSourceSession, 'view_loop', args.rowIdP)).result;
}
return ret;
};
const get_skip = async function () {
var ret = 0;
ret = _ds.progDataSource?.dataSourceSkip;
if (prog_obj.progDataSource?.dataSourceSkipExp) {
ret = (await func.expression.get(SESSION_ID, prog_obj.progDataSource.dataSourceSkipExp, dataSourceSession, 'view_loop', args.rowIdP)).result;
}
return ret;
};
const calc_batch_loops = async () => {
if (!prog_obj.progDataSource?.dataSourceType || _ds.progDataSource.dataSourceType === 'none') {
_ds.v.batch_loops = await get_limit();
return false;
}
_ds.v.batch_loops = (await get_limit()) <= _ds.v.raw_data?.rows?.length ? await get_limit() : _ds.v.raw_data?.rows?.length;
return true;
};
const render_api_output = async function () {
if (prog_obj?.scriptData?.value) {
var exp = await func.expression.get(SESSION_ID, prog_obj.scriptData.value, dataSourceSession, 'api_rendered_output', null, null, null, null, null, null, null, null, null, tree_obj.apiOutput);
let output_result = exp.result;
if (tree_obj.apiOutput === 'json') {
// iterate object to fix expressions
try {
// let output_result_obj = JSON5.parse(output_result)
let output_result_obj = await func.expression.secure_eval(SESSION_ID, 'api_rendered_output', '(' + output_result + ')', null, dataSourceSession);
// for await (let [key, val] of Object.entries(output_result_obj)) {
// output_result_obj[key] = (await func.expression.get(
// SESSION_ID,
// val,
// dataSourceSession, "object_property")).result
// }
output_result = JSON.stringify(output_result_obj);
} catch (err) {
console.error(err);
}
}
_ds.api_rendered_output += output_result + (tree_obj.apiOutput === 'json' ? ',' : '');
} else {
_ds.api_rendered_output = ''; //empty
}
};
// ======================================
// COMPUTE GLOBALS
// ======================================
if (_ds.prog_id === 'system') {
//TBD tree_obj.menuType === "globals"
_ds.currentRecordId = 'dataset';
await func.datasource.render_fields_dataset(SESSION_ID, dataSourceSession, {
id: 'dataset',
value: _session.url_params,
});
return await callback_datasource();
}
// ======================================
// BUILD DATA SOURCE
//======================================
let db_adapter_module;
if (prog_obj.progDataSource?.dataSourceType) {
db_adapter_module = await func.common.get_module(SESSION_ID, 'xuda-datasource-db-adapter-module.mjs');
}
const get_data_from_source = async function () {
switch (prog_obj.progDataSource.dataSourceSrcType) {
case 'input': {
const { result, error } = await func.expression.get(SESSION_ID, prog_obj.progDataSource.progDataSourceInput, dataSourceSession, 'datasource select');
if (error) {
func.utils.debug_report(SESSION_ID, 'Data source', `Datasource parse error using ${prog_obj.progDataSource?.dataSourceType} input`, 'E');
return null;
}
return result;
break;
}
case 'url': {
let opt = {
method: prog_obj.progDataSource.dataSourceMethod || 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
};
let data = {};
if (prog_obj.progDataSource.dataSourceMethod == 'POST' && prog_obj.progDataSource.dataSourceParameters) {
for (let val of prog_obj.progDataSource.dataSourceParameters) {
data[val.key] = val.val;
}
opt.body = JSON.stringify(data);
}
try {
const response = await fetch('https://' + prog_obj.progDataSource.dataSourceDataUrl, opt);
const json = await response.json();
return json.data;
} catch (err) {
func.utils.debug_report(SESSION_ID, 'Data source', err.message + ' https://' + prog_obj.progDataSource.dataSourceDataUrl, 'E');
return null;
}
break;
}
default:
return null;
break;
}
};
if (!_ds.v.raw_data) {
_ds.v.raw_data = { rows: [] };
}
_ds.data_feed.rows = [];
switch (prog_obj.progDataSource?.dataSourceType) {
case 'table': {
_ds._dataSourceTableId = prog_obj.progDataSource?.dataSourceTableId; // get file id
if (prog_obj.progDataSource?.dataSourceTableIdExp) {
_ds.v.dataSourceTableIdExp = await func.expression.get(SESSION_ID, prog_obj.progDataSource?.dataSourceTableIdExp, dataSourceSession, 'dataSourceTableIdExp', args.rowIdP);
if (_ds.v.dataSourceTableIdExp.result) {
_ds._dataSourceTableId = _ds.v.dataSourceTableIdExp.result;
} else {
func.utils.debug_report(SESSION_ID, 'get_VIEW_data', 'Table Expression returned empty result', 'W');
}
}
if (!_ds._dataSourceTableId) {
return func.utils.debug_report(SESSION_ID, 'Data source', 'Table cannot be empty when Db Table selected', 'E');
}
let table_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds._dataSourceTableId);
if (!table_ret) {
return func.utils.debug_report(SESSION_ID, 'Data source', 'Table not found: ' + _ds._dataSourceTableId, 'E');
}
await db_adapter_module.build_filter(SESSION_ID, dataSourceSession, _ds.v, _ds);
let filterModelMongo = _ds.progDataSource.filterModelMongo;
if (_ds.progDataSource.filterModelMongoFx) {
let ret = await func.expression.get(SESSION_ID, _ds.progDataSource.filterModelMongoFx, dataSourceSession, 'query');
filterModelMongo = ret.result;
}
let filterModelSql = _ds.progDataSource.filterModelSql;
if (_ds.progDataSource.filterModelSqlFx) {
let ret = await func.expression.get(SESSION_ID, _ds.progDataSource.filterModelSqlFx, dataSourceSession, 'query');
filterModelSql = ret.result;
}
const filterModel = {
filterModelNative: _ds.progDataSource.filterModelNative,
filterModelMongo,
filterModelSql,
filterModelUserMongo: _ds.progDataSource.filterModelUserMongo,
filterModelUserSql: _ds.progDataSource.filterModelUserSql,
};
let _dataSourceFilterModelType = _ds?.progDataSource?.dataSourceFilterModelType;
if (_ds?.progDataSource?.dataSourceFilterModelTypeFx) {
const fx_ret = await func.expression.get(SESSION_ID, _ds.progDataSource.dataSourceFilterModelTypeFx, dataSourceSession, 'query');
_dataSourceFilterModelType = fx_ret.result;
}
if (_dataSourceFilterModelType && !['query', 'index'].includes(_dataSourceFilterModelType)) {
return func.utils.debug_report(SESSION_ID, 'Data source', `Valid values for dataSourceFilterModelType are: "query" or "index" (${_dataSourceFilterModelType})`, 'E');
}
_ds.v.raw_data = await func.db.get_query(
SESSION_ID,
_ds._dataSourceTableId,
_ds.v.couchView,
dataSourceSession,
_ds.viewSourceDesc,
'datasource table',
prog_obj.progDataSource.dataSourceReduce,
await get_skip(),
(await get_limit()) || 99999999,
null,
null,
_ds?.progDataSource?.sortModel,
null,
filterModel,
_dataSourceFilterModelType,
);
if (_ds?.progDataSource?.dataSourceLimit) {
const ret_rows_found = await func.db.get_query(SESSION_ID, _ds._dataSourceTableId, _ds.v.couchView, dataSourceSession, _ds.viewSourceDesc, 'datasource table', prog_obj.progDataSource.dataSourceReduce, null, null, true, null, null, null, filterModel, _dataSourceFilterModelType);
_ds.rows_found = ret_rows_found?.rows?.[0]?.value || 0;
} else {
_ds.rows_found = _ds?.v?.raw_data?.rows?.length || 0;
}
break;
}
case 'array': {
let data = await get_data_from_source();
if (data === null) {
data = [];
}
// let _KEY = 0;
// for (const _VAL of data) {
// _ds.data_feed.rows[_KEY] = { _KEY, _VAL };
// _KEY++;
// }
_ds.rows_found = data?.length || 0;
// if (!_ds.v.raw_data) {
// _ds.v.raw_data = { rows: [] };
// }
let _KEY = 0;
for (const _VAL of data) {
_ds.v.raw_data.rows.push({ id: _KEY, value: { _KEY, _VAL } });
_KEY++;
}
break;
}
case 'json': {
let data = await get_data_from_source();
if (data === null) {
data = {};
}
// for (let [_KEY, _VAL] of Object.keys(data)) {
// _ds.data_feed.rows[_KEY] = { _KEY, _VAL };
// }
_ds.rows_found = Object.keys(data)?.length || 0;
// if (!_ds.v.raw_data) {
// _ds.v.raw_data = { rows: [] };
// }
for (let [_KEY, _VAL] of Object.keys(data)) {
_ds.v.raw_data.rows.push({ id: _KEY, value: { _KEY, _VAL } });
}
break;
}
case 'csv': {
let data = await get_data_from_source();
if (data === null) {
data = '';
}
// if (!_ds.v.raw_data) {
// _ds.v.raw_data = { rows: [] };
// }
// let _KEY = 0;
// let arr = data.split(",");
// for (const _VAL of arr) {
// _ds.data_feed.rows[_KEY] = { _KEY, _VAL };
// _KEY++;
// }
// _ds.rows_found = arr?.length || 0;
// if (!_ds.v.raw_data) {
// _ds.v.raw_data = { rows: [] };
// }
let _KEY = 0;
let arr = data.split(',');
for (const _VAL of arr) {
_ds.v.raw_data.rows.push({ id: _KEY, value: { _KEY, _VAL } });
_KEY++;
}
_ds.rows_found = arr?.length || 0;
break;
}
default:
break;
}
// ======================================
// EXECUTE
// ======================================
let ret;
const get_before_record_count = async () => {
return await func.datasource.get_view_events_count(SESSION_ID, dataSourceSession, 'before_record');
};
const get_after_record_count = async () => {
return await func.datasource.get_view_events_count(SESSION_ID, dataSourceSession, 'after_record');
};
let _raw_data_rows = [];
switch (tree_obj.menuType) {
case 'api': {
_ds.api_rendered_output = '';
let has_datasource = await calc_batch_loops();
_raw_data_rows = _ds.v.raw_data.rows || [];
if (!has_datasource) {
for (n = 0; n < _ds.v.batch_loops; n++) {
_raw_data_rows.push({ id: n, value: {} });
}
}
_ds.currentRecordId = 'dataset';
for await (let [key, raw_data_row] of Object.entries(_raw_data_rows)) {
if (has_datasource && Number(key) >= _ds.v.batch_loops) break;
if (!has_datasource) {
raw_data_row = _ds?.v.raw_data?.rows?.[key] || { id: key, value: {} };
}
if (await get_before_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'before_record');
}
await func.datasource.render_fields_dataset(SESSION_ID, dataSourceSession, raw_data_row);
if (await get_after_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'after_record');
}
await render_api_output();
}
if (tree_obj.apiOutput === 'json') {
var str = _ds.api_rendered_output.substring(0, _ds.api_rendered_output.length - 1);
if (Number(_ds.progDataSource?.dataSourceLimit) === 1) {
_ds.api_rendered_output = str;
} else {
_ds.api_rendered_output = '[' + str + ']';
}
}
break;
}
case 'batch': {
let has_datasource = await calc_batch_loops();
_raw_data_rows = _ds?.v.raw_data?.rows || [];
if (!has_datasource) {
for (n = 0; n < _ds.v.batch_loops; n++) {
_raw_data_rows.push({ id: n, value: {} });
}
}
_ds.currentRecordId = 'dataset';
for await (let [key, raw_data_row] of Object.entries(_raw_data_rows)) {
if (has_datasource && Number(key) >= _ds.v.batch_loops) break;
if (!has_datasource) {
raw_data_row = _ds?.v.raw_data?.rows?.[key] || { id: key, value: {} };
}
if (await get_before_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'before_record');
}
await func.datasource.render_fields_dataset(SESSION_ID, dataSourceSession, raw_data_row);
if (await get_after_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'after_record');
}
}
await func.datasource.set_outputField(SESSION_ID, dataSourceSession, _ds?.v?.raw_data?.rows, _ds.args);
break;
}
case 'get_data': {
if (await get_before_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'before_record');
}
ret = await db_adapter_module.process_view_dataset(SESSION_ID, dataSourceSession, _ds);
if (await get_after_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'after_record');
}
await func.datasource.set_outputField(SESSION_ID, dataSourceSession, _ds?.v?.raw_data?.rows, _ds.args);
break;
}
case 'set_data': {
if (!prog_obj.progDataSource?.dataSourceType || _ds.progDataSource.dataSourceType !== 'table' || !_ds._dataSourceTableId) {
return func.utils.debug_report(SESSION_ID, 'Data source', 'Datasource DB Table must be defined for Set Data operation', 'E');
}
const find_ROWID_idx_from_raw_data_arr = function (rowId) {
if (!_raw_data_rows) {
throw new Error('_raw_data_rows not found');
}
const index = _raw_data_rows.findIndex((item) => item.id === rowId);
if (index === -1) {
throw new Error(`ROWID "${rowId}" not found`);
}
return index;
};
if (tree_obj.crudMode === 'U') {
_ds.set_mode = 'U';
_raw_data_rows = _ds?.v.raw_data?.rows || [];
}
if (tree_obj.crudMode === 'D') {
_ds.set_mode = 'D';
_raw_data_rows = _ds?.v.raw_data?.rows || [];
}
// initiated with Update but no rows found
if (tree_obj.crudMode === 'U' && tree_obj.allowCreate && !_raw_data_rows?.length) {
_ds.set_mode = 'C';
try {
const row_idx = find_ROWID_idx_from_raw_data_arr('newRecord');
_raw_data_rows[row_idx] = [{ id: 'newRecord', value: {} }];
} catch (error) {
_raw_data_rows.push({ _ROWID: 'newRecord' });
}
}
if (tree_obj.crudMode === 'C') {
_ds.set_mode = 'C';
try {
const row_idx = find_ROWID_idx_from_raw_data_arr('newRecord');
_raw_data_rows[row_idx] = [{ id: 'newRecord', value: {} }];
} catch (error) {
_raw_data_rows.push({ id: 'newRecord', value: {} });
}
}
for await (let raw_data_row of _raw_data_rows) {
_ds.currentRecordId = raw_data_row.id;
if (await get_before_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'before_record');
}
await func.datasource.render_fields_dataset(SESSION_ID, dataSourceSession, raw_data_row);
let data_feed_str = JSON.stringify(_ds.data_feed);
if (await get_after_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'after_record');
}
if (_ds.set_mode === 'C' || JSON.stringify(_ds.data_feed) !== data_feed_str) {
const dbMsgP = await func.db.save_data(SESSION_ID, dataSourceSession);
if (dbMsgP) _ds.currentRecordId = dbMsgP.id;
_ds.set_mode = 'U';
}
if (_ds.set_mode === 'D') {
const dbMsgP = await func.db.save_data(SESSION_ID, dataSourceSession);
if (dbMsgP) _ds.currentRecordId = dbMsgP.id;
}
}
await func.datasource.set_outputField(SESSION_ID, dataSourceSession, _ds?.v?.raw_data?.rows, _ds.args);
break;
}
case 'component': {
_raw_data_rows = _ds?.v.raw_data?.rows || [];
_ds.rows_processed = 0;
_ds.viewRangeExp_rows_deleted = 0;
let rows = _ds?.v.raw_data?.rows?.length;
_ds.data_feed.rows_changed = [];
_ds.data_feed.rows_deleted = [];
_ds.data_feed.rows_added = [];
if (tree_obj.rwMode === 'U') {
_ds.set_mode = 'U';
} else {
_ds.set_mode = 'R';
}
const row_not_found = async function () {
if (!prog_obj.progDataSource?.dataSourceType || prog_obj.properties.renderType === 'form' || (tree_obj.rwMode === 'U' && tree_obj.allowCreate)) {
_ds.currentRecordId = 'newRecord';
if (tree_obj.rwMode === 'U' && tree_obj.allowCreate) {
_ds.set_mode = 'C';
}
if (prog_obj.progDataSource?.dataSourceType) {
_ds.record_not_found = true;
}
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
} catch (error) {
await func.datasource.render_fields_form(SESSION_ID, dataSourceSession, { id: 'newRecord', value: {} });
}
var count = await func.datasource.get_field_init_count(SESSION_ID, dataSourceSession, 'newRecord', false);
if (
count > 0 // was: && !args.dataSourceNoP
) {
await func.datasource.execute_field_init_events(SESSION_ID, dataSourceSession, 'form', 'newRecord');
}
}
await func.datasource.callback(SESSION_ID, dataSourceSession, args.rowIdP, args.jobNoP, _ds.prog_id);
};
if (!rows) {
await row_not_found();
break;
}
_ds.firstRecordId = _raw_data_rows[0].id;
const finish_form = async function () {
// check if locatedRecordId exist in SESSION_OBJ[SESSION_ID].DS_GLB
if (_ds.locatedRecordId) {
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.locatedRecordId);
} catch (error) {
delete _ds.locatedRecordId;
}
}
_ds.finalRecordId = func.datasource.get_currentRecordId(SESSION_ID, dataSourceSession, true);
_ds.currentRecordId = _ds.finalRecordId;
};
for await (const [key, raw_data_row] of Object.entries(_raw_data_rows)) {
const idx = Number(key);
if (await get_before_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'before_record');
}
_ds.currentRecordId = raw_data_row.id; // set temporary to allow expression decoder work
await func.datasource.render_fields_form(SESSION_ID, dataSourceSession, raw_data_row);
try {
const init_count = await func.datasource.get_field_init_count(SESSION_ID, dataSourceSession, raw_data_row.id, false, _ds.oninit_triggers_to_run);
if (init_count > 0) {
await func.datasource.execute_field_init_events(SESSION_ID, dataSourceSession, 'form', raw_data_row.id);
}
} catch (err) {
console.error(err);
}
if (await get_after_record_count()) {
await func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'after_record');
}
}
await finish_form();
break;
}
default:
return func.utils.debug_report(SESSION_ID, 'Data source', 'Program type not defined', 'E');
}
ret = await callback_datasource();
return ret;
};
func.datasource.render_fields_dataset = async function (SESSION_ID, dataSourceSession, raw_data_row) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSourceSession);
if (!_progFields) {
return;
}
const get_value = async (field_id, value) => {
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
var fieldType = view_field_obj?.props?.fieldType;
let table_field_obj;
if (view_field_obj.data.type === 'table' && field_id !== 'REDUCE_VALUE') {
if (!_ds.progDataSource?.dataSourceTableId) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `Table type defined without dataSourceTableId deceleration`, 'E');
}
let table_obj = await func.utils.FILES_OBJ.get(SESSION_ID, _ds._dataSourceTableId);
if (!table_obj) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `dataSourceTableId reference error: ` + _ds._dataSourceTableId, 'E');
}
table_field_obj = func.common.find_item_by_key(table_obj.tableFields, 'field_id', field_id);
fieldType = table_field_obj.props?.fieldType;
}
return await func.common.get_cast_val(SESSION_ID, `render fields dataset ${_ds.viewSourceDesc}`, field_id, fieldType, value, null);
};
if (!_ds.data_feed) {
_ds.data_feed = { rows: [{ _ROWID: _ds.currentRecordId }] };
}
let row_idx;
try {
row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
} catch (err) {
_ds.data_feed.rows.push({ _ROWID: _ds.currentRecordId });
row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
// console.error(err);
}
_ds.dataset_alias = {};
for await (const val of _progFields) {
try {
var fieldId = val.data.field_id;
if (val.data.type === 'virtual' || _ds.set_mode === 'C') {
if (typeof raw_data_row?.value?.[fieldId] !== 'undefined') {
// supports x=x+1
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, raw_data_row.value[fieldId]);
continue;
}
if (val.props?.propExpressions?.fieldValue) {
let ret = await func.expression.get(SESSION_ID, val.props?.propExpressions?.fieldValue, dataSourceSession, 'update', args.rowIdP);
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, ret.result);
continue;
}
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, val.props?.fieldValue);
continue;
}
if (val.data.type === 'table' || val.data.type === 'datasource') {
if (typeof raw_data_row.value[fieldId] === 'undefined') {
throw 'field do not exist in data: ' + fieldId;
}
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, raw_data_row.value[fieldId]);
}
} catch (err) {
func.utils.debug_report(SESSION_ID, 'Datasource', err, 'E', null, _ds);
}
}
};
func.datasource.run_events_functions = async function (SESSION_ID, dataSourceSession, event_id, calling_job, async_event, event_parameters) {
if (typeof dataSourceSession === 'undefined' || dataSourceSession === null) {
console.warn(`Event ${event_id} not exist or not found`);
return;
}
// return new Promise(async (resolve, reject) => {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
// var v = _ds.v;
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
let job_promises = [];
if (_view_obj.progEvents) {
for await (const [key, val] of Object.entries(_view_obj.progEvents)) {
if (val.data.type === 'user_defined' && val.data.event_name && val.data.event_name === event_id) {
const jobs = await func.events.validate(
SESSION_ID,
'user_defined',
dataSourceSession,
val.data.event_name,
args.callingSourceP,
event_parameters, // val.data.parameters
);
if (calling_job || async_event) continue;
for (let job_num of jobs) {
job_promises.push(
new Promise((resolve, reject) => {
let i = 0;
const interval = setInterval(() => {
i++;
var job_index = func.events.find_job_index(SESSION_ID, job_num);
if (job_index == null) {
clearInterval(interval);
resolve(job_num);
}
if (i > 200) {
console.error('deadlock detected');
clearInterval(interval);
resolve(job_num);
}
}, 100);
}),
);
}
}
}
}
if (job_promises.length) {
await Promise.all(job_promises);
}
};
func.datasource.render_fields_form = async function (SESSION_ID, dataSourceSession, raw_data_row) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSourceSession);
if (!_progFields) {
return;
}
const get_value = async (field_id, value) => {
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
var fieldType = view_field_obj.props?.fieldType;
let table_field_obj;
if (view_field_obj.data.type === 'table' && field_id !== 'REDUCE_VALUE') {
if (!_ds._dataSourceTableId) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `Table type defined without dataSourceTableId deceleration`, 'E');
}
let table_obj = await func.utils.FILES_OBJ.get(SESSION_ID, _ds._dataSourceTableId);
if (!table_obj) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `dataSourceTableId reference error: ` + _ds._dataSourceTableId, 'E');
}
table_field_obj = func.common.find_item_by_key(table_obj.tableFields, 'field_id', field_id);
if (!table_field_obj) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `Field Id: ${field_id} not exist in table ${table_obj.properties.menuName}`, 'E');
}
fieldType = table_field_obj.props?.fieldType;
}
return await func.common.get_cast_val(SESSION_ID, `render fields datasource ${_ds.viewSourceDesc}`, field_id, fieldType, value, null);
};
let row_idx;
try {
row_idx = func.common.find_ROWID_idx(_ds, raw_data_row.id);
} catch (error) {
_ds.data_feed.rows.push({ _ROWID: raw_data_row.id });
row_idx = func.common.find_ROWID_idx(_ds, raw_data_row.id);
}
_ds.dataset_alias = {};
for await (const val of _progFields) {
try {
var fieldId = val.data.field_id;
if (val.data.type === 'virtual' || raw_data_row.id === 'newRecord') {
if (glb.PROTECTED_VARS.includes(fieldId)) {
switch (fieldId) {
case '_ROWNO': {
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, row_idx);
continue;
}
case '_ROWID': {
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, raw_data_row.id);
continue;
}
case '_ROWDOC': {
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, raw_data_row.value);
continue;
}
}
}
if (val.props?.propExpressions?.fieldValue) {
// check init exp existence
let ret = await func.expression.get(SESSION_ID, val.props?.propExpressions?.fieldValue, dataSourceSession, 'update', raw_data_row.id);
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, ret.result);
continue;
}
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, val.props?.fieldValue);
continue;
}
if (val.data.type === 'table' || val.data.type === 'datasource') {
if (typeof raw_data_row.value[fieldId] === 'undefined') {
throw 'field do not exist in data: ' + fieldId;
}
_ds.data_feed.rows[row_idx][fieldId] = await get_value(fieldId, raw_data_row.value[fieldId]);
}
} catch (err) {
func.utils.debug_report(SESSION_ID, 'Datasource', err, 'E', null, _ds);
}
}
};
func.datasource.execute_field_init_events = async function (SESSION_ID, dataSourceSession, sourceP, rowIdP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
var arr = _ds.dataSource_init_arr[rowIdP];
// for await (const [key, val] of Object.entries(arr)) {
for await (const val of arr) {
if (!func.utils.is_onscreen_event(val.eventInfo.data.action)) {
var cond = val?.eventInfo?.data?.enabled;
var expression = undefined;
if (val.eventInfo.props.condition) expression = val.eventInfo.props.condition;
var expCond = {};
if (expression && !_.isEmpty(expression)) {
// check if expression exist
expCond = await func.expression.get(SESSION_ID, expression, dataSourceSession, 'condition', rowIdP, null, null, val.fieldId); // execute expression
cond = expCond.result;
expCond.conditional = true;
val.DEBUG_INFO_OBJ.result = expCond.result;
val.DEBUG_INFO_OBJ.error = expCond.error;
val.DEBUG_INFO_OBJ.fields = expCond.fields;
val.DEBUG_INFO_OBJ.conditional = expCond.conditional;
val.DEBUG_INFO_OBJ.details = expression;
}
func.utils.debug.log(SESSION_ID, val.node_id, val.DEBUG_INFO_OBJ);
if (cond) {
// check condition again
if (!_ds) continue;
var ds = _ds.prog_id;
await func.events.execute(
SESSION_ID,
null,
val.triggerId,
val.eventInfo.data.name, //val.eventInfo.data.trigger,
val.eventInfo.data.action,
val.eventInfo.data.name, //eventInfo[5],
null,
val.fieldId,
val.rowId,
val.colId,
null,
null,
dataSourceSession,
val.eventInfo.id, //eventInfo[2],
sourceP,
true,
null,
null,
args.jobNoP,
null,
null,
val.eventInfo,
null,
null,
null,
null,
ds.parentDataSourceNo,
null,
);
}
}
}
};
func.datasource.get_field_init_count = async function (SESSION_ID, dataSourceSession, rowIdP, pre_initP, oninit_triggers_to_runP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
// _ds.dataSource_init_arr[rowIdP] = {};
var ret = 0;
// if (_ds.v.ViewFieldsObjs) {
for await (const field_obj of _view_obj.progFields) {
var fieldId = field_obj.data.field_id;
if (!field_obj?.workflow?.length) {
continue;
}
for await (const trigger_obj of field_obj.workflow) {
if (oninit_triggers_to_runP && !oninit_triggers_to_runP?.includes(trigger_obj.id)) {
continue;
}
if (
// trigger_obj.data.trigger === "oninit" &&
['get_data', 'set_data', 'batch', 'update', 'raise_event'].includes(trigger_obj.data.action)
) {
if (!trigger_obj.data.action) {
func.utils.debug_report(SESSION_ID, '_ds.get_field_init_count', `Error initiating event for field: ${fieldId} prog: ${_ds.v.viewSourceDesc} row: ${rowIdP} reason: missing action`, 'E');
break;
}
if (trigger_obj.data.enabled) {
if (!_ds.dataSource_init_arr[rowIdP]) {
_ds.dataSource_init_arr[rowIdP] = [];
}
// _ds.dataSource_init_arr[rowIdP][ret] = {
// eventInfo: trigger_obj,
// triggerId: trigger_obj.id,
// fieldId: fieldId,
// rowId: rowIdP,
// colId: field_obj.id,
// node_id: args.prog_id + "_" + trigger_obj.id + "_" + field_obj.id,
// fieldProp: field_obj,
// DEBUG_INFO_OBJ: {
// module: _ds.viewModule,
// action: "init field event",
// prop: fieldId,
// source: _ds.viewSourceDesc,
// type: "event",
// prog_id: args.prog_id,
// dsSession: dataSourceSession,
// },
// };
_ds.dataSource_init_arr[rowIdP].push({
eventInfo: trigger_obj,
triggerId: trigger_obj.id,
fieldId: fieldId,
rowId: rowIdP,
colId: field_obj.id,
node_id: args.prog_id + '_' + trigger_obj.id + '_' + field_obj.id,
fieldProp: field_obj,
DEBUG_INFO_OBJ: {
module: _ds.viewModule,
action: 'init field event',
prop: fieldId,
source: _ds.viewSourceDesc,
type: 'event',
prog_id: args.prog_id,
dsSession: dataSourceSession,
},
});
ret++;
}
}
}
}
// }
return ret;
};
func.datasource.get_view_events_count = async function (SESSION_ID, dataSourceSession, typeP, eventIdP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
if (!_ds) return 0;
var args = _ds.args;
var index = typeP;
if (eventIdP) index = typeP + '_' + eventIdP;
// client interval
if (!_ds.viewEventExec_arr) _ds.viewEventExec_arr = {};
_ds.viewEventExec_arr[index] = [];
if (!_prog.progEvents || _.isEmpty(_prog.progEvents)) return 0;
for (const event_obj of _prog.progEvents) {
if (event_obj.data.type !== typeP) continue; // was false?? changed to true 020317
if (eventIdP && event_obj.id !== eventIdP) continue; // match w ID added 03312017
if (event_obj.data.condition) {
let res = await func.expression.get(SESSION_ID, event_obj.data.condition, dataSourceSession, 'condition', args.rowIdP, null, null, null, null, event_obj);
if (!res.result) {
continue;
}
}
if (_.isEmpty(event_obj.workflow)) continue;
for (const trigger_obj of event_obj.workflow) {
if (trigger_obj.data.enabled) {
var expression;
if (trigger_obj.props.condition) expression = trigger_obj.props.condition;
var expCond = {};
if (expression) {
expCond.conditional = true;
}
func.utils.debug.log(SESSION_ID, args.prog_id + '_' + trigger_obj.id, {
module: _ds.viewModule,
action: trigger_obj.data.action,
prop: event_obj.data.type,
details: expression,
result: expCond.result,
error: expCond.error,
source: _ds.viewSourceDesc,
fields: expCond.fields,
type: 'event',
prog_id: args.prog_id,
dsSession: dataSourceSession,
conditional: expCond.conditional,
});
}
if (!trigger_obj.data.action) {
func.utils.debug_report(SESSION_ID, 'get_view_events_count', `Error initiating ${typeP} prog:${_ds.v.viewSourceDesc} reason: missing action`, 'E');
break;
}
if (!glb.REFERENCE_LESS_FUNCTIONS.includes(trigger_obj.data.action) && !trigger_obj.data.action) {
func.utils.debug_report(SESSION_ID, 'get_view_events_count', `Error initiating ${typeP} prog: ${_ds.v.viewSourceDesc} reason: missing reference`, 'E');
break;
}
if (trigger_obj.data.enabled) {
_ds.viewEventExec_arr[index].push({
eventInfo: trigger_obj,
eventId: event_obj.id,
triggerId: trigger_obj.id,
expression: expression,
});
// ret++;
}
}
}
return _ds.viewEventExec_arr[index].length;
};
func.datasource.execute_view_events = async function (SESSION_ID, dataSourceSession, typeP, eventIdP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
var i = -1;
var index = typeP;
if (eventIdP) index = typeP + '_' + eventIdP;
var arr = _ds.viewEventExec_arr[index];
if (_.isEmpty(arr)) return;
for await (const val of arr) {
if (!glb.IS_WORKER || !func.utils.is_onscreen_event(val.eventInfo.data.action) || (glb.IS_WORKER && _ds.v.run_at === 'server' && !func.utils.is_onscreen_event(val.eventInfo.data.action))) {
// val.done = true;
var cond = true;
if (val.expression) {
var expCond = await func.expression.get(SESSION_ID, val.expression, dataSourceSession, 'condition', args.rowIdP, null, null, null, null, val.eventInfo); // execute expression
cond = expCond.result;
}
if (cond) {
var elem_params = undefined;
if (!glb.IS_WORKER) {
elem_params = $('#' + _ds.containerId).data('params');
}
const ret = await func.events.execute(
SESSION_ID,
null,
val.triggerId,
val.eventInfo.data.trigger,
val.eventInfo.data.action,
val.eventInfo.data.name,
null,
null,
null,
null,
val.eventInfo.data.action,
null,
dataSourceSession,
val.eventId,
_ds.tree_obj.menuType + ' event',
true,
null,
null,
args.jobNoP,
elem_params,
null,
val.eventInfo,
);
}
continue;
}
// on screen event
if (typeP == 'before_record' || typeP == 'after_record' || typeP == 'on_load' || typeP == 'on_exit') {
_ds.v.onscreen_events_active = {
i: i,
type: typeP,
};
var parent_ds_chain = func.datasource.get_parent_ds_chain(SESSION_ID, dataSourceSession);
var obj = {
ds_obj: func.utils.clean_returned_datasource(SESSION_ID, dataSourceSession),
dsSessionP: dataSourceSession,
};
obj.ds_obj.parent_ds_chain = parent_ds_chain;
}
}
};
func.datasource.get_parent_ds_chain = function (SESSION_ID, dataSourceSession) {
var arr = [];
var drill = function (ds) {
if (SESSION_OBJ[SESSION_ID].DS_GLB[ds]) {
if (typeof SESSION_OBJ[SESSION_ID].DS_GLB[ds].parentDataSourceNo !== 'undefined') {
arr.push(SESSION_OBJ[SESSION_ID].DS_GLB[ds].parentDataSourceNo);
drill(SESSION_OBJ[SESSION_ID].DS_GLB[ds].parentDataSourceNo);
}
}
};
drill(dataSourceSession);
return arr;
};
func.datasource.execute_onscreen_view_events = async function (SESSION_ID, dataSourceSession, sourceP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
var i = _ds.v.onscreen_events_active.i;
var type = _ds.v.onscreen_events_active.type;
var evnt;
if (_ds.viewEventExec_arr?.[type]?.[i]) {
evnt = _ds.viewEventExec_arr[type][i];
evnt.done = true;
var cond = true;
if (evnt.expression) {
var expCond = await func.expression.get(SESSION_ID, evnt.expression, dataSourceSession, 'condition', args.rowIdP); // execute expression
cond = expCond.result;
}
if (cond) {
let ret = await func.events.execute(
SESSION_ID,
null,
evnt.triggerId,
evnt.eventInfo.data.trigger,
evnt.eventInfo.data.action,
evnt.eventInfo.data.name, //eventInfo[5],
null,
null,
null,
null,
evnt.eventInfo.data.name, //eventInfo[4],
null,
dataSourceSession,
null,
sourceP + ' event',
true,
null,
null,
args.jobNoP,
);
}
} else console.error('*execute_onscreen_view_events error');
};
func.datasource.get_event_interval_arr = function (SESSION_ID, dataSourceSession, typeP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
// var v = _ds.v;
var arr = [];
var ret = 0;
if (!_ds.v.progEvents) return 0;
for (let val of _ds.v.progEvents) {
if (val.data.type !== typeP) continue;
arr.push([val.id, val.data.properties, val.data.condition]);
}
return arr;
};
func.datasource.clean_all = function (SESSION_ID, dsP) {
var arr = [dsP];
var get_child_ds = function (ds) {
var arr = [];
_.forEach(SESSION_OBJ[SESSION_ID].DS_GLB, function (val, key) {
if (val.parentDataSourceNo == ds) {
arr.push(key);
arr = arr.concat(get_child_ds(key));
}
});
return arr;
};
arr = arr.concat(get_child_ds(dsP));
for (let val of arr) {
func.datasource.del(SESSION_ID, val);
}
};
func.datasource.clean = function (SESSION_ID, screenIdP) {
var arr = [];
for (const [key, val] of Object.entries(SESSION_OBJ[SESSION_ID].DS_GLB)) {
try {
if (
Number(key) > 0 &&
(val.screenId === screenIdP ||
val.rootScreenId === screenIdP ||
$('#' + val.screenId)
.parent()
.attr('id') === screenIdP ||
(val && val.parentDataSourceNo && arr.includes(val.parentDataSourceNo.toString())))
) {
arr.push(key);
if (val.screenId) func.UI.utils.screen_blocker(false, val.screenId);
}
} catch (err) {
console.warn('func.datasource.clean failed');
func.datasource.reset_jobs(SESSION_ID, key, 'datasource.clean', err);
}
}
for (let val of arr) {
func.datasource.del(SESSION_ID, val);
}
};
func.datasource.del = function (SESSION_ID, dsP) {
if ((SESSION_OBJ[SESSION_ID].DS_GLB[dsP] && SESSION_OBJ[SESSION_ID].DS_GLB[dsP].keep_alive) || dsP == 0) return;
if (DATASOURCE_INTERVALS[SESSION_ID] && DATASOURCE_INTERVALS[SESSION_ID][dsP]) {
DATASOURCE_INTERVALS[SESSION_ID][dsP].clear();
}
const perform_delete = async function () {
var response = {
success: function (jsonP, ajaxP) {},
error: function (status) {
console.error('error datasource:' + status);
},
fail: function (status) {
console.error('error datasource:' + status);
},
};
var data = {
session_id: SESSION_ID,
dssession: dsP,
};
if (!SESSION_OBJ[SESSION_ID].DS_GLB[dsP]) return;
if (!glb.IS_WORKER) {
let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsP];
if (_ds.worker_id) {
// if (_ds.data_xuda) console.log(dsP);
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
WEB_WORKER[SESSION_ID][_ds.worker_id].emit('message', {
service: 'close_websocket',
});
} else {
WEB_WORKER[SESSION_ID][_ds.worker_id].worker.terminate();
}
delete WEB_WORKER[SESSION_ID][_ds.worker_id];
} else {
const json = await func.index.call_worker(SESSION_ID, {
service: 'datasource_delete',
data: data,
id: _ds.worker_id,
});
response.success(json, true);
}
if (DS_UI_EVENTS_GLB) delete DS_UI_EVENTS_GLB[dsP];
}
delete SESSION_OBJ[SESSION_ID].DS_GLB[dsP];
};
var delete_pending_jobs = function () {
var arr = [];
_.forEach(SESSION_OBJ[SESSION_ID].WORKER_OBJ.jobs, function (val, key) {
if (val && val.dsSessionP == dsP) {
arr.push(key);
for (const [key, val] of Object.entries($('.screen_blocker'))) {
$(val).remove();
}
}
});
for (let val of arr.reverse()) {
SESSION_OBJ[SESSION_ID].WORKER_OBJ.jobs.splice(val, 1);
}
if (!SESSION_OBJ[SESSION_ID].WORKER_OBJ.jobs.length) SESSION_OBJ[SESSION_ID].WORKER_OBJ.stat = null;
};
if (!glb.IS_WORKER) {
if (SESSION_OBJ[SESSION_ID].DS_GLB[dsP]) {
delete SCREEN_BLOCKER_OBJ[SESSION_OBJ[SESSION_ID].DS_GLB[dsP].screenId + '_' + SESSION_OBJ[SESSION_ID].DS_GLB[dsP].callingScreenId];
delete_pending_jobs();
if (glb.new_xu_render) {
for (const [ui_cache_key, ui_cache_val] of Object.entries(UI_WORKER_OBJ.xu_render_cache)) {
if (ui_cache_val.paramsP.dsSessionP === dsP) {
delete UI_WORKER_OBJ.xu_render_cache[ui_cache_key];
}
}
}
}
if ($(SESSION_OBJ[SESSION_ID].root_element).find('xu-nav').length) {
var ds_obj = $(SESSION_OBJ[SESSION_ID].root_element).find('xu-nav')?.data()?.xuData.nav_params;
if (ds_obj) {
delete ds_obj[dsP];
}
}
}
perform_delete();
};
func.datasource.update = async function (SESSION_ID, datasource_changes, update_local_scope_only, avoid_xu_for_refresh, trigger) {
return new Promise(async (resolve, reject) => {
var _session = SESSION_OBJ[SESSION_ID];
if (_session.IS_API || typeof IS_MASTER_WEBSOCKET !== 'undefined' || typeof IS_PROCESS_SERVER !== 'undefined') {
update_local_scope_only = true;
}
if (typeof glb.GLOBAL_VARS === 'undefined') {
glb.GLOBAL_VARS = (await func.common.get_module(SESSION_ID, 'xuda-system-globals-module.mjs')).system_globals;
}
const set_fieldComputed_dependencies = async function (dsNo, field_id, parent_ds) {
// iterate child ds
for (const [dsSession, _ds] of Object.entries(_session.DS_GLB)) {
if (parent_ds !== null) {
if (_ds.parentDataSourceNo != parent_ds) continue;
} else {
if (dsSession != dsNo) continue;
}
let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
if (tree_ret.menuType === 'component' || tree_ret.menuType === 'globals') {
// check if field has fieldComputed property
const _progFields = await func.datasource.get_progFields(SESSION_ID, dsSession);
// find if field is computed
let fieldComputed_propExpressions, fieldComputed_id;
for await (const val of _progFields) {
const fieldId = val.data.field_id;
// if (fieldId !== field_id) continue
if (val.data.type !== 'virtual' || !val.props.fieldComputed) continue;
const _propExpressions = val.props?.propExpressions?.fieldValue;
if (_propExpressions && JSON.stringify(_propExpressions).includes(field_id)) {
fieldComputed_propExpressions = _propExpressions;
fieldComputed_id = fieldId;
}
}
if (!fieldComputed_id) return;
// iterate ds rows
for (const row of _ds.data_feed?.rows || []) {
// iterate row fields
for (const [key, val] of Object.entries(row)) {
if (key !== fieldComputed_id) continue;
try {
let ret = await func.expression.get(SESSION_ID, fieldComputed_propExpressions, dsNo, 'update', row._ROWID);
const row_idx = func.common.find_ROWID_idx(_ds, row._ROWID);
if (_ds.data_feed.rows[row_idx][fieldComputed_id] !== ret.result) {
_ds.data_feed.rows[row_idx][fieldComputed_id] = ret.result;
if (!fields_changed.includes(fieldComputed_id)) {
fields_changed.push(fieldComputed_id);
}
if (!datasource_changed.includes(dsSession)) {
datasource_changed.push(dsSession);
}
}
} catch (err) {
console.error(err);
}
}
}
}
await set_fieldComputed_dependencies(dsNo, field_id, dsSession);
}
};
var fields_changed = [];
var datasource_changed = [];
let client_datasource_changes = {};
let server_datasource_changes = {};
const update_xu_ref = function (dataSource) {
let ret;
let _ds_0 = _session.DS_GLB[0];
for ([ref_name, val] of Object.entries(_ds_0.data_system['SYS_GLOBAL_OBJ_REFS'])) {
if (val.ds.dsSession == dataSource) {
ret = func.UI.update_xu_ref(SESSION_ID, dataSource, ref_name);
}
}
return ret;
};
// iterate changes datasource
for await (const [dataSource, row_data] of Object.entries(datasource_changes)) {
var _ds = _session.DS_GLB[dataSource];
if (!_ds) {
continue;
}
// iterate changes records
for (const [record_id, fields_data] of Object.entries(row_data)) {
// iterate changes fields
for (const [field_id, value] of Object.entries(fields_data)) {
// mechanism to make update directly on the datasource object
if (record_id === 'datasource_main') {
_.set(_ds, field_id, value);
const ret = update_xu_ref(dataSource);
if (ret) {
fields_changed.push(field_id);
datasource_changed.push(dataSource);
}
continue;
}
if (typeof fields_data === 'object') {
if (glb.GLOBAL_VARS[field_id]) {
_ds.data_system[field_id] = value;
continue;
}
try {
const row_idx = func.common.find_ROWID_idx(_ds, record_id);
// if (_ds.data_feed.rows[row_idx][field_id] !== value) {
if (!_.isEqual(_ds.data_feed.rows[row_idx][field_id], value)) {
_ds.data_feed.rows[row_idx][field_id] = value;
await set_fieldComputed_dependencies(dataSource, field_id, null);
// search the field in refs
update_xu_ref(dataSource);
if (!update_local_scope_only) {
let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
if (glb.IS_WORKER) {
// RUN AT SERVER
if (tree_ret.menuType === 'globals' || tree_ret.menuType === 'component') {
const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSource);
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
if (!view_field_obj?.data?.serverField && record_id !== 'data_system') {
if (!client_datasource_changes[dataSource]) {
client_datasource_changes[dataSource] = {};
}
if (!client_datasource_changes[dataSource][record_id]) {
client_datasource_changes[dataSource][record_id] = {};
}
client_datasource_changes[dataSource][record_id][field_id] = value;
}
}
} else {
// RUN AT CLIENT
if ((tree_ret.menuType === 'component' && _ds._run_at !== 'client') || tree_ret.menuType === 'globals') {
if (!server_datasource_changes[dataSource]) {
server_datasource_changes[dataSource] = {};
}
if (!server_datasource_changes[dataSource][record_id]) {
server_datasource_changes[dataSource][record_id] = {};
}
server_datasource_changes[dataSource][record_id][field_id] = value;
}
}
}
if (!fields_changed.includes(field_id)) {
fields_changed.push(field_id);
///// REFRESH PARAMETERS IN
for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
if (_ds.args.parameters_raw_obj) {
for (const [key, exp] of Object.entries(_ds.args.parameters_raw_obj)) {
if (exp.includes(field_id)) {
let ret = await func.expression.get(SESSION_ID, exp, _dsSession, 'parameters');
_ds.in_parameters[key].value = ret.result;
}
}
}
}
}
if (!datasource_changed.includes(dataSource)) {
datasource_changed.push(dataSource);
}
if (!_ds.data_feed.rows_changed) {
_ds.data_feed.rows_changed = [];
}
if (!_ds.data_feed.rows_changed.includes(record_id)) _ds.data_feed.rows_changed.push(record_id);
}
} catch (error) {
// normal
}
} else if (fields_data === 'set') {
_ds.currentRecordId = record_id;
}
}
}
}
if (glb.IS_WORKER) {
if (!update_local_scope_only && !_.isEmpty(client_datasource_changes)) {
func.utils.post_back_to_client(SESSION_ID, 'update_client_eventChangesResults_from_worker', _session.worker_id, client_datasource_changes);
}
} else {
if (!update_local_scope_only && !_.isEmpty(server_datasource_changes)) {
const ret = await func.index.call_worker(SESSION_ID, {
service: 'update_datasource_changes_from_client',
data: {
session_id: SESSION_ID,
datasource_changes: server_datasource_changes,
},
id: _ds.worker_id,
});
}
///// REFRESH SCREEN
if (fields_changed.length) {
function findMin(arr) {
return Math.min(...arr.map(Number));
}
await func.UI.screen.refresh_xu_attributes(SESSION_ID, _.cloneDeep(fields_changed), null, null, findMin(datasource_changed), avoid_xu_for_refresh, trigger);
// await removed from the below function cause to dead lock Mar 3 25
await func.UI.screen.refresh_screen(
SESSION_ID,
_.cloneDeep(fields_changed),
null,
datasource_changed[0], // refresh the current datasource only
);
}
// ///// REFRESH PARAMETERS IN
// if (fields_changed.length) {
// for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
// if (_ds.args.parameters_raw_obj) {
// for (const [key, val] of Object.entries(_ds.args.parameters_raw_obj)) {
// if (fields_changed.includes(val)) {
// let ret = await func.expression.get(SESSION_ID, '@' + val, _dsSession, 'parameters');
// _ds.in_parameters[val].value = ret.result;
// }
// }
// }
// }
// }
}
resolve();
});
};
func.datasource.callback = async function (SESSION_ID, dsSessionP, rowIdP, jobNoP, nodeIdP) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSessionP];
try {
const row_idx = func.common.find_ROWID_idx(_ds, 'dataset');
if (_ds.PARAM_OUT_INFO) {
// write log for out params
for (const [key, val] of Object.entries(_ds.PARAM_OUT_INFO)) {
if (typeof _ds?.data_feed?.rows?.[row_idx]?.[val.fieldId] === 'undefined') {
// func.utils.debug.log(SESSION_ID, key, val);
func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0310', val.fieldId, dsSessionP);
break;
}
val.result = _ds.data_feed.rows[row_idx][val.fieldId];
}
}
} catch (err) {
// console.error(err);
}
const datasetOutputField = _ds?.progDataSource?.datasetOutputField;
if (datasetOutputField) {
let ret_get_value = await func.datasource.get_value(SESSION_ID, datasetOutputField, _ds.dsSession);
if (ret_get_value.found) {
let datasource_changes = {};
if (!datasource_changes[ret_get_value.dsSessionP]) {
datasource_changes[ret_get_value.dsSessionP] = {};
}
if (!datasource_changes[ret_get_value.dsSessionP][ret_get_value.currentRecordId]) {
datasource_changes[ret_get_value.dsSessionP][ret_get_value.currentRecordId] = {};
datasource_changes[ret_get_value.dsSessionP][ret_get_value.currentRecordId][_ds?.progDataSource?.datasetOutputField] = _ds?.data_feed?.rows || [];
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
}
func.utils.debug.log(SESSION_ID, nodeIdP, {
module: _ds.viewModule,
action: 'close',
source: _ds.viewSourceDesc,
type: 'adapter',
prog_id: _ds.prog_id,
dsSession: dsSessionP,
prop: _ds.log_prop + ' ' + 'adapter',
});
if (!glb.IS_WORKER) $(_session.root_element).css('cursor', 'default');
if (_ds.prog_id) {
let _ds = _session.DS_GLB[dsSessionP];
func.utils.debug.watch(
SESSION_ID,
_ds.prog_id,
'program',
{
in_parameters: _ds.in_parameters,
out_parameters: _ds.out_parameters,
data_feed: _ds.data_feed,
},
_ds.tree_obj.menuType,
);
}
delete _ds.old_dataSource;
return {
SESSION_ID,
dsSessionP,
rowIdP,
jobNoP,
callingLogId: _ds.callingLogId,
calling_jobP: _ds.calling_jobP,
};
};
func.datasource.validate_viewRange = async function (SESSION_ID, viewRangeExpP, dsSessionP, rowIdP, sourceP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (viewRangeExpP && _ds) {
var ret = func.expression.remove_quotes(await func.expression.get(SESSION_ID, viewRangeExpP, dsSessionP, 'range', rowIdP));
ret.result = func.expression.remove_quotes(ret.result);
func.utils.debug.log(SESSION_ID, _ds.prog_id, {
module: _ds.viewModule,
action: 'range Exp',
prop: sourceP,
details: viewRangeExpP,
result: ret.result,
error: ret.error,
source: _ds.viewSourceDesc,
json: ret.explain,
fields: ret.fields,
dsSession: dsSessionP,
});
_ds.viewRangeExpResults = ret.fields;
if (glb.DEBUG_MODE) {
if (!_ds.debug) {
_ds.debug = {};
}
if (!_ds.debug.viewRangeExp) {
_ds.debug.viewRangeExp = [];
}
_ds.debug.viewRangeExp.push(ret);
}
return ret.result;
} else return false;
};
func.datasource.validate_viewLocate = async function (SESSION_ID, viewLocateExpP, dsSessionP, rowIdP, sourceP) {
if (viewLocateExpP && _ds) {
var ret = func.expression.remove_quotes(await func.expression.get(SESSION_ID, viewLocateExpP, dsSessionP, 'locate', rowIdP));
ret.result = func.expression.remove_quotes(ret.result);
func.utils.debug.log(SESSION_ID, _ds.prog_id, {
module: _ds.viewModule,
action: 'locate Exp',
prop: sourceP,
details: viewLocateExpP,
result: ret.result,
error: ret.error,
source: _ds.viewSourceDesc,
json: ret.explain,
fields: ret.fields,
dsSession: dsSessionP,
});
_ds.viewLocateExpResults = ret.fields;
return ret.result;
} else return false;
};
func.datasource.get_viewFields_for_update_function = function (SESSION_ID, calling_trigger_prop, na, dsSessionP) {
var viewFields = [];
var exp = calling_trigger_prop?.data?.name?.value;
if (!exp) {
return viewFields;
}
try {
// parse json
var json = JSON5.parse(exp.replace(/\n/gi, ''));
for (const [key, val] of Object.entries(json)) {
let id = key.substr(1, key.length - 1);
if (!id) continue;
viewFields.push({
val,
id,
});
}
return viewFields;
} catch (e) {
if (!exp) {
return;
}
if (exp.substr(exp.length - 1, 1) === ';') exp = exp.substr(0, exp.length - 1); // remove closing if exist;
var exp_arr = exp.split(/;\s*(?=(?:[^"]|"[^"]*")*$)/g); // split ; outside quotes
if (exp_arr?.length) {
for (let val of exp_arr) {
// run view fields
var pos = val.indexOf(':');
var seg = [val.substring(0, pos), val.substring(pos + 1)];
if (seg && seg.length === 2) {
let id = seg[0].substr(1, seg[0].length);
if (!id) continue;
viewFields.push({
id,
val: seg[1],
// , props: {},
});
} else {
func.utils.debug.log(SESSION_ID, _ds.prog_id, {
module: _ds.viewModule,
action: 'set',
prop: 'parse update exp',
details: exp,
result: '',
error: 'Invalid json; too many segments',
source: _ds.viewSourceDesc,
json: '',
fields: '',
dsSession: dsSessionP,
});
}
}
}
return viewFields;
}
};
func.datasource.get_value = async function (SESSION_ID, fieldIdP, dsSessionP, rowIdP, org_dsSessionP) {
const return_value = async (field_id, value) => {
const _progFields = await func.datasource.get_progFields(SESSION_ID, dsSessionP);
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
var fieldType = view_field_obj?.props?.fieldType || 'string';
var fieldProp = view_field_obj?.props;
let table_field_obj;
if (view_field_obj?.data?.type === 'table') {
if (!_ds._dataSourceTableId) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `Table type defined without dataSourceTableId deceleration`, 'E');
}
let table_obj = await func.utils.FILES_OBJ.get(SESSION_ID, _ds._dataSourceTableId);
if (!table_obj) {
return func.utils.debug_report(SESSION_ID, 'Datasource', `dataSourceTableId reference error: ` + _ds._dataSourceTableId, 'E');
}
table_field_obj = func.common.find_item_by_key(table_obj.tableFields, 'field_id', field_id);
fieldType = table_field_obj.props?.fieldType;
fieldProp = table_field_obj.props;
}
let ret = {
value: await func.common.get_cast_val(SESSION_ID, `datasource get value ${_ds.tree_obj.menuName}`, fieldIdP, fieldType, value, null),
type: fieldType,
prop: fieldProp,
};
if (ret.value && typeof ret.value === 'string' && ret.type !== 'exp') {
if (/"/.test(ret.value) && ret.value.indexOf('\\') === -1) ret.value = ret.value.replace(/"/g, '"');
}
return {
ret,
dsSessionP,
fieldIdP: field_id,
currentRecordId: _ds.currentRecordId,
found: typeof value !== 'undefined',
};
};
const return_dynamic_value = async (field_id, value) => {
let view_field_obj = _ds.dynamic_fields[field_id];
var fieldType = view_field_obj?.props?.fieldType || 'string';
var fieldProp = view_field_obj?.props;
let ret = {
value: view_field_obj.value,
type: fieldType,
prop: fieldProp,
};
if (ret.value && typeof ret.value === 'string' && ret.type !== 'exp') {
if (/"/.test(ret.value) && ret.value.indexOf('\\') === -1) ret.value = ret.value.replace(/"/g, '"');
}
return {
ret,
dsSessionP,
fieldIdP: field_id,
currentRecordId: _ds.currentRecordId,
found: typeof value !== 'undefined',
};
};
const return_value_parameters = async (field_id, value) => {
let ret = {
value: await func.common.get_cast_val(SESSION_ID, 'datasource get value', fieldIdP, value.type, value.value, null),
type: value.type,
prop: null,
};
if (ret.value && typeof ret.value === 'string' && ret.type !== 'exp') {
if (!ret.value.includes('<svg xmlns=') && /"/.test(ret.value) && ret.value.indexOf('\\') === -1) ret.value = ret.value.replace(/"/g, '"');
// if (/"/.test(ret.value) && ret.value.indexOf("\\") === -1)
// ret.value = ret.value.replace(/"/g, '\\"');
}
return {
ret,
dsSessionP,
fieldIdP: field_id,
currentRecordId: _ds.currentRecordId,
found: typeof value !== 'undefined',
};
};
const return_value_system = async (field_id, value) => {
let fieldType = glb.GLOBAL_VARS[field_id].type;
let fieldProp = null;
let ret = {
value: await func.common.get_cast_val(SESSION_ID, `datasource get value ${_ds.tree_obj.menuName}`, field_id, fieldType, value, null),
type: fieldType,
prop: fieldProp,
};
return {
ret,
dsSessionP,
fieldIdP: field_id,
currentRecordId: _ds.currentRecordId,
found: typeof value !== 'undefined',
};
};
const search_in_parameters = async (field_id) => {
if (typeof _ds?.in_parameters?.[field_id]?.value !== 'undefined') {
let ret = await return_value_parameters(field_id, _ds.in_parameters[field_id]);
return ret;
}
if (typeof _ds.parentDataSourceNo !== 'undefined') {
var org_dsSession = org_dsSessionP;
if (!org_dsSessionP) org_dsSession = dsSessionP;
if (recordId && recordId !== 'newRecord') org_dsSession = null;
return await func.datasource.get_value(SESSION_ID, fieldIdP, _ds.parentDataSourceNo, recordId, org_dsSession);
}
return await return_value(field_id);
};
if (typeof glb.GLOBAL_VARS === 'undefined') {
glb.GLOBAL_VARS = (await func.common.get_module(SESSION_ID, 'xuda-system-globals-module.mjs')).system_globals;
}
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (!_ds) {
if (dsSessionP > 0) {
// let prev_ds = dsSessionP - 1;
return await func.datasource.get_value(SESSION_ID, fieldIdP, dsSessionP - 1, rowIdP, org_dsSessionP);
}
return await return_value(fieldIdP);
} //console.error("error: datasource not exist: " + dsSessionP);
let recordId = rowIdP;
if (!recordId) {
recordId = _ds.currentRecordId;
}
if (glb.GLOBAL_VARS[fieldIdP]) {
if (!_ds.data_system) {
_ds.data_system = {};
}
if (dsSessionP > 0) {
_ds.data_system['SYS_STR_ACTIVE_ROW_ID'] = _ds.currentRecordId;
_ds.data_system['SYS_STR_PROG_DS_SESSION'] = dsSessionP;
}
// set system time
if (glb.SYS_DATE_ARR.includes(fieldIdP)) {
var _ds_0 = SESSION_OBJ[SESSION_ID].DS_GLB[0];
if (_ds_0) {
if (!_ds_0.data_system) {
_ds_0.data_system = {};
}
const ts = await func.utils.get_dateTime(SESSION_ID, 'SYS_DATE_VALUE');
for (const val of glb.SYS_DATE_ARR) {
_ds_0.data_system[val] = await func.utils.get_dateTime(SESSION_ID, val, ts);
}
}
}
// await func.datasource.set_system_vars(SESSION_ID, dsSessionP);
if (typeof _ds?.data_system?.[fieldIdP] !== 'undefined') {
return await return_value_system(fieldIdP, _ds?.data_system?.[fieldIdP]);
}
return await search_in_parameters(fieldIdP);
}
// if (glb.PROTECTED_VARS[fieldIdP]) {
// switch (fieldIdP) {
// case "_ROW_NO": {
// let row_no = Object.keys(_ds?.data_feed?.rows).indexOf(recordId) || 0;
// return await return_value(fieldIdP, row_no);
// }
// default:
// break;
// }
// }
if (!_ds.data_feed) {
return await search_in_parameters(fieldIdP);
}
var _field_id = fieldIdP;
if (fieldIdP.substr(0, 1) === '_') {
if (_ds.alias) _field_id = _ds.alias[fieldIdP];
}
if (!org_dsSessionP && recordId) {
try {
const row_idx = func.common.find_ROWID_idx(_ds, recordId);
if (typeof _ds.data_feed?.rows?.[row_idx]?.[_field_id] !== 'undefined') {
if (Object.keys(_ds.data_feed?.rows?.[row_idx] || {})?.includes(_field_id)) {
return await return_value(_field_id, _ds.data_feed.rows[row_idx][_field_id]);
}
if (Object.keys(_ds?.dynamic_fields || {})?.includes(_field_id)) {
return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
}
}
} catch (err) {
// console.error(err);
}
}
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
if (typeof _ds.data_feed?.rows?.[row_idx]?.[_field_id] !== 'undefined') {
return await return_value(_field_id, _ds.data_feed.rows[row_idx][_field_id]);
}
} catch (error) {}
if (typeof _ds?.dynamic_fields?.[_field_id] !== 'undefined') {
return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
}
return await search_in_parameters(fieldIdP);
};
func.datasource.find_event_dataSource = async function (SESSION_ID, eventIdP, dsSessionP) {
const _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
var ret;
//============================
// Search in given datasource
//============================
if (_ds?.prog_id) {
let view_ret = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
if (view_ret?.progEvents && func.common.find_item_by_key(view_ret.progEvents, 'event_name', eventIdP)) {
ret = dsSessionP;
if (_ds.callingSource === 'system') ret = 0;
if (_ds.callingSource === 'program' || !_ds.callingSource) ret = dsSessionP;
// >>> found value
return ret;
}
}
if (!ret && dsSessionP !== 0) {
//=======================================
// continue Search in parent datasource
//=======================================
if (_ds && _ds.parentDataSourceNo && Number(_ds.parentDataSourceNo) > 0 && Number(_ds.parentDataSourceNo) < dsSessionP) {
return await func.datasource.find_event_dataSource(SESSION_ID, eventIdP, _ds.parentDataSourceNo);
} else {
//========================================
// continue Search in global system
//=========================================
if (!ret) return await func.datasource.find_event_dataSource(SESSION_ID, eventIdP, 0);
}
}
};
func.datasource.reset_jobs = function (SESSION_ID, dsSessionP, sourceP, errP) {
for (const [key, val] of Object.entries(SESSION_OBJ[SESSION_ID].WORKER_OBJ.jobs)) {
if (val.dsSessionP === dsSessionP) {
func.events.delete_job(SESSION_ID, val.job_num);
break;
}
}
func.utils.debug_report(SESSION_ID, sourceP + 'Missing datasource: ' + dsSessionP, errP, 'W', null);
};
// func.datasource.set_system_vars = async function (SESSION_ID, dsSessionP) {
// var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
// if (!_ds) return;
// if (!_ds.data_system) {
// _ds.data_system = {};
// }
// if (dsSessionP > 0) {
// _ds.data_system["SYS_STR_ACTIVE_ROW_ID"] = _ds.currentRecordId;
// _ds.data_system["SYS_GLOBAL_STR_PROG_DS_SESSION"] = dsSessionP;
// }
// // _ds.data_system["SYS_OBJ_DS_INFO"] = {
// // rows: _ds.rows_found,
// // first_row_id: _ds.firstRecordId,
// // last_row_id: _ds.lastRecordId,
// // query_from_segments_json: _ds.filter_from,
// // query_to_segments_json: _ds.filter_from,
// // locate_query_from_segments_json: _ds.locate_from,
// // locate_query_to_segments_json: _ds.locate_to,
// // first_row_segments_json: _ds.firstRecordKey_object,
// // last_row_segments_json: _ds.lastRecordKey_object,
// // rowid: _ds.currentRecordId,
// // };
// // if (!_ds.data_system["SYS_OBJ_DS_DATA"] && dsSessionP == 0) {
// // _ds.data_system["SYS_OBJ_DS_DATA"] = {
// // value: _.cloneDeep(_ds.data_system),
// // };
// // }
// var _ds_0 = SESSION_OBJ[SESSION_ID].DS_GLB[0];
// if (!_ds_0) return;
// if (!_ds_0.data_system) {
// _ds_0.data_system = {};
// }
// const ts = await func.utils.get_dateTime(SESSION_ID, "SYS_DATE_VALUE");
// for (const val of glb.SYS_DATE_ARR) {
// _ds_0.data_system[val] = await func.utils.get_dateTime(SESSION_ID, val, ts);
// }
// };
func.datasource.get_currentRecordId = function (SESSION_ID, dsSessionP, from_datasourceP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (_ds._dataSourceTableId !== '') {
var firstRecordId = _ds.firstRecordId; // returns the value of the fist row
var currentRecordId = _ds.currentRecordId; // record id that exist on ds after entering the form
var locatedRecordId = _ds.locatedRecordId; // record id located by ds
if (!currentRecordId || from_datasourceP) {
// first time without locate
if (!locatedRecordId) currentRecordId = firstRecordId;
// set first row when no rec located
else currentRecordId = locatedRecordId; // set with located row
}
} else currentRecordId = 'newRecord'; // create mode
return currentRecordId;
};
func.datasource.interval = function (session_id, dsSessionP, typeP) {
var SESSION_ID = session_id;
var interval = [];
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
// var ds = _ds;
// var v = ds.v;
// var arr = func.datasource.get_event_interval_arr(
// SESSION_ID,
// dsSessionP,
// typeP
// );
var arr = _ds[typeP];
var fx = {
init: async function () {
if (arr?.length) {
for (let val of arr) {
var event_id = val[0];
var interval_rate = val[1];
var condition = val[2];
interval.push(
setInterval(async function () {
if (!SESSION_OBJ[SESSION_ID]) return;
var event_count = await func.datasource.get_view_events_count(SESSION_ID, dsSessionP, typeP, event_id);
if (!event_count) {
fx.clear();
return;
}
var event_condition = await func.expression.get(SESSION_ID, condition, dsSessionP, 'condition'); // execute condition;
if (condition && !event_condition.result) return;
const e = await func.datasource.execute_view_events(SESSION_ID, dsSessionP, typeP, event_id);
// for (const [key, val] of Object.entries(e)) {
// val.done = false;
// }
}, Number(interval_rate) * 1000),
);
}
} else {
await fx.clear();
return;
}
},
clear: function () {
if (DATASOURCE_INTERVALS[session_id]) delete DATASOURCE_INTERVALS[session_id][dsSessionP];
for (const [key, val] of Object.entries(interval)) {
clearInterval(val);
}
},
};
return fx;
};
func.datasource.server_cron = function (session_id) {
var SESSION_ID = session_id;
var jobs = [];
// var ds = SESSION_OBJ[SESSION_ID].DS_GLB[0];
// var v = ds.v;
var arr = func.datasource.get_event_interval_arr(SESSION_ID, 0, 'server_cron');
const schedule = require('node-schedule');
if (!arr.length) {
return jobs;
}
for (let val of arr) {
var event_id = val[0];
var cron_prop = val[1];
var condition = val[2];
jobs.push(
schedule.scheduleJob(cron_prop, async function () {
if (!SESSION_OBJ[SESSION_ID]) return;
var event_count = await func.datasource.get_view_events_count(SESSION_ID, 0, 'server_cron', event_id);
if (!event_count) {
fx.clear();
return;
}
var event_condition = await func.expression.get(SESSION_ID, condition, 0, 'condition'); // execute condition;
if (condition && !event_condition.result) return;
if (event_count) {
const e = await func.datasource.execute_view_events(SESSION_ID, 0, 'server_cron', event_id);
// for (const [key, val] of Object.entries(e)) {
// val.done = false;
// }
}
}),
);
}
return jobs;
};
func.datasource.get_viewLoops = async function (SESSION_ID, dataSourceSession, data, batch_source, default_limit) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
var args = _ds.args;
// var v = _ds.v;
var ret = default_limit;
if (batch_source === 'db_data') ret = _.size(data.rows);
if (batch_source === 'array' || batch_source === 'csv') ret = data.length;
if (batch_source === 'json') ret = Object.keys(data).length;
if (_ds.progDataSource?.dataSourceLimit) {
if (batch_source !== 'no_data' && Number(_ds.progDataSource?.dataSourceLimit) < ret) {
ret = Number(_ds.progDataSource.dataSourceLimit);
}
if (!batch_source) ret = Number(_ds.progDataSource.dataSourceLimit);
}
if (prog_obj.progDataSource?.dataSourceLoopExp) {
var n = (await func.expression.get(SESSION_ID, _ds.v.viewLoopsExp, dataSourceSession, 'view_loop', args.rowIdP)).result;
if (batch_source !== 'no_data' && n < ret) ret = n;
if (!batch_source) ret = n;
}
return ret;
};
func.datasource.set_VIEW_data = async function (SESSION_ID, args, _ds) {
_ds.v = {
viewFieldsProp: {},
segFrom: [],
segTo: [],
segLocateFrom: [],
segLocateTo: [],
viewModule: 'adapter',
};
_ds.viewEventExec_arr = {};
var view = _.cloneDeep(await func.utils.VIEWS_OBJ.get(SESSION_ID, args.prog_id));
_ds.v.dataSourceSrcType = view.dataSourceSrcType;
if (view.progDataSource) _ds.progDataSource = view.progDataSource;
_ds.v.viewIndex = view?.progDataSource?.dataSourceIndexesObj;
let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, args.prog_id);
_ds.v.viewSourceDesc = tree_ret.menuName;
if (!_ds.v.viewSourceDesc && tree_ret) {
_ds.v.viewSourceDesc = tree_ret.menuName;
}
if (glb.FUNCTION_NODES_ARR.includes(tree_ret.menuType)) {
_ds.v.viewModule = 'function';
}
_ds.v.viewSourceProp = tree_ret.menuType;
if (view.progEvents) _ds.v.progEvents = view.progEvents;
_ds._progDataSource_fields = [];
if (_ds.progDataSource) {
let ret = func.expression.parse(JSON.stringify(_ds.progDataSource));
_ds._progDataSource_fields = ret.map((e) => {
if (e.fieldId) return e.fieldId;
});
}
};
func.datasource.get_cast_val = async function (SESSION_ID, source, dsSession, valP, typeP, req, error) {
var prog_id, prog_name;
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSession];
prog_id = _ds.prog_id;
prog_name = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id).menuName;
const prog_info = prog_id ? ` (prog: ${prog_id} ${prog_name})` : '';
const report_conversion_error = function (res) {
var msg = `error converting from ${valP} to ${typeP}`;
if (error) {
return func.utils.debug_report(SESSION_ID, msg, '', 'W');
}
func.utils.debug_report(SESSION_ID, msg + ' ' + _.capitalize(source) + prog_info, '', 'E');
};
const report_conversion_warn = function (res) {
var msg = `type mismatch auto conversion from value ${valP} to ${typeP}`;
func.utils.debug_report(SESSION_ID, msg + ' ' + _.capitalize(source) + prog_info, '', 'W');
};
// var ret = valP;
if (error) {
return report_conversion_error();
}
const module = await func.common.get_module(SESSION_ID, 'xuda-get-cast-util-module.mjs');
return module.cast(typeP, valP, report_conversion_error, report_conversion_warn);
};
func.datasource.get_field_init_triggers_to_run = function (SESSION_ID, dataSourceSession, pre_init_fieldsP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];
if (!_ds) return;
return []; // inactive 021617
}; // inactive temporary, design to execute init workflow when querying large datasets
func.datasource.get_pre_init_fields = function (SESSION_ID, dsSessionP, viewRangeExpP, viewSortExpP, viewGroupByExpP, viewLocateExpP) {
var ret = [];
return; // inactive 021617
}; // temporary inactive, init preformed on the first round
func.datasource.add_dynamic_field_to_ds = function (SESSION_ID, dsSessionP, key, val) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
if (!_ds.dynamic_fields) {
_ds.dynamic_fields = {};
}
const toType = function (obj) {
return {}.toString
.call(obj)
.match(/\s([a-zA-Z]+)/)[1]
.toLowerCase();
};
_ds.dynamic_fields[key] = {
id: crypto.randomUUID(),
data: {
type: 'virtual',
field_id: key,
},
props: {
fieldType: typeof val !== 'undefined' ? toType(val) : 'string',
},
value: val,
};
};
func.datasource.get_progFields = async function (SESSION_ID, dsSessionP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
return _view_obj.progFields;
};
func.datasource.update_changes_for_out_parameter = async function (SESSION_ID, dsSessionP, calling_dsP) {
let _session = SESSION_OBJ[SESSION_ID];
let _ds = _session.DS_GLB[dsSessionP];
const _calling_ds = _session.DS_GLB[calling_dsP];
if (_ds.PARAM_OUT_INFO) {
let data = {};
for await (const [key, val] of Object.entries(_ds.PARAM_OUT_INFO)) {
if (val.prop === 'out') {
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
data[val.details] = _ds.data_feed.rows[row_idx][val.fieldId];
} catch (err) {
console.error(err);
}
}
}
if (!_.isEmpty(data)) {
let datasource_changes = {
[calling_dsP]: { [_calling_ds.currentRecordId]: data },
};
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
};
func.datasource.set_outputField = async function (SESSION_ID, dsSessionP, result, args) {
var _session = SESSION_OBJ[SESSION_ID];
// let _ds = _session.DS_GLB[dsSessionP];
const output_field = await func.datasource.get_args_property_value(SESSION_ID, dsSessionP, args, 'outputField');
if (output_field) {
let datasource_changes = {};
let ret_get_value = await func.datasource.get_value(SESSION_ID, output_field, dsSessionP);
if (ret_get_value.found) {
let _ds = _session.DS_GLB[ret_get_value.dsSessionP];
if (!datasource_changes[_ds.dsSession]) {
datasource_changes[_ds.dsSession] = {};
}
if (!datasource_changes[_ds.dsSession][ret_get_value.currentRecordId]) {
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId] = {};
}
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId][output_field] = result;
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
};
func.datasource.get_args_property_value = async function (SESSION_ID, dsSession, args, prop_name) {
let _prop = args?.calling_trigger_prop?.data?.name;
let _value = _prop[prop_name];
if (_prop?.[`xu-exp:${prop_name}`]) {
_value = (await func.expression.get(SESSION_ID, _prop[`xu-exp:${prop_name}`], dsSession, `${prop_name} expression`)).result;
}
return _value;
};
func.UI.screen = {};
func.UI.screen.init = async function (SESSION_ID, prog_id, sourceScreenP, callingDataSource_objP, $callingContainerP, triggerIdP, rowIdP, jobNoP, is_panelP, parameters_obj_inP, source_functionP, call_screen_propertiesP, refreshed_ds, parameters_raw_obj) {
if (!prog_id) return console.error('program is empty');
let screen_ret = await func.utils.get_screen_obj(SESSION_ID, prog_id);
if (!screen_ret) return console.error('program is not a screen object');
await func.UI.utils.init_ui_framework(SESSION_ID, prog_id);
let _session = SESSION_OBJ[SESSION_ID];
const screenInfo = _.cloneDeep(screen_ret);
// const $callingContainerP_data = $callingContainerP.clone(true)?.data();
var screen_type = source_functionP?.split('_')?.[1]; //|| (is_panelP && "panel");
var screenId = (glb.screen_num++).toString();
if (SCREEN_BLOCKER_OBJ[prog_id + (sourceScreenP ? '_' + sourceScreenP : '')]) {
const wait_for_SCREEN_BLOCKER_release = () => {
return new Promise((resolve) => {
var interval = setInterval(function () {
if (!SCREEN_BLOCKER_OBJ[prog_id + (sourceScreenP ? '_' + sourceScreenP : '')]) {
window.clearInterval(interval);
resolve();
// run_screen();
}
}, 5);
});
};
await wait_for_SCREEN_BLOCKER_release();
}
func.UI.utils.screen_blocker(true, prog_id + (sourceScreenP ? '_' + sourceScreenP : ''));
if ($callingContainerP && !_.isEmpty($callingContainerP)) $callingContainerP.data().xuData.screenInfo = screenInfo;
var $dialogDiv;
var $rootFrame;
var containerId;
var params = {
prog_id,
sourceScreenP,
$callingContainerP,
triggerIdP,
callingDataSource_objP,
rowIdP,
renderType: screenInfo.properties?.renderType,
parameters_obj_inP,
source_functionP,
is_panelP,
screen_type,
screenInfo,
call_screen_propertiesP,
parentDataSourceNoP: _session.DS_GLB?.[callingDataSource_objP?.dsSession]?.dsSession || callingDataSource_objP?.parentDataSourceNo || 0,
parameters_raw_obj,
};
switch (screen_type) {
case 'embed':
$dialogDiv = $('<div>')
.attr({
id: screenId,
ui_engine: UI_FRAMEWORK_INSTALLED,
})
.addClass('xu_embed_container')
.css({ display: 'contents' })
.data({
xuData: {
paramsP: params,
screenInfo: params.screenInfo,
},
});
let rootTagName = 'div';
if (typeof glb.SLIM_BUNDLE === 'undefined' && !glb.SLIM_BUNDLE) {
const ui_plugin_core = new UI_FRAMEWORK_PLUGIN.core();
rootTagName = ui_plugin_core?.rootTagName();
}
$rootFrame = $(`<${rootTagName}>`).data('xuData', {}).data('xuAttributes', {}).appendTo($dialogDiv);
$dialogDiv.appendTo($callingContainerP);
break;
case 'panel':
$dialogDiv = $callingContainerP;
$dialogDiv.data({
xuData: {
paramsP: params,
screenInfo: params.screenInfo,
},
});
$rootFrame = $dialogDiv;
break;
case 'page':
case 'modal':
case 'popover':
$dialogDiv = $('<div>');
$rootFrame = $('<div>').appendTo($dialogDiv);
$dialogDiv.appendTo('body');
break;
default:
}
params.containerIdP = $rootFrame.attr('id');
params.$container = $rootFrame;
containerId = 'container_' + params.screenInfo.properties?.id + '_' + screenId;
var data = {
note: ' ROOT container',
root: true,
screenId,
is_panelP,
prog_id,
screen_type,
container: '#' + containerId, // initiate container that hold the element
};
if (is_panelP) {
$rootFrame.data().xuData.rootFrame = data;
} else {
if (!$rootFrame.data().xuData) {
$rootFrame.data().xuData = {};
}
$rootFrame.attr('id', containerId).data().xuData.rootFrame = data;
$rootFrame.css('display', 'contents');
}
var node = JSON.parse(JSON.stringify(screen_ret.progUi));
func.UI.utils.indicator.screen.busy();
const ret = await func.datasource.create(SESSION_ID, prog_id, refreshed_ds, params.parentDataSourceNoP, $rootFrame.attr('id'), rowIdP, jobNoP, null, parameters_raw_obj, null, null, null, null, null, parameters_obj_inP);
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[ret.dsSessionP];
_ds.screen_params = params;
params.dsSessionP = ret.dsSessionP;
func.UI.screen.update_SYS_OBJ_WIN_INFO(SESSION_ID, params.dsSessionP);
if (ret.dsSessionP >= 0) {
// Call from contact info screen
var viewDoc;
let view_ret = await func.utils.VIEWS_OBJ.get(SESSION_ID, SESSION_OBJ[SESSION_ID].DS_GLB[ret.dsSessionP].prog_id);
if (view_ret) {
viewDoc = view_ret;
}
if (!viewDoc?.progUi) {
return func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0780', params.renderType, ret.dsSessionP);
}
var node;
node = _.cloneDeep(viewDoc.progUi);
if (!node.length) return console.warn('ui node empty');
const ret_render_$container = await func.UI.screen.render_ui_tree(SESSION_ID, $rootFrame, node[0], null, params, jobNoP, null, null, null, null, null, $rootFrame);
// $(".skeleton_wrapper").remove();
// fix for svg // deprecated Aug 12 25
// const fix_svg = function () {
// let $svg = $('svg');
// $.each($svg, function (key, elm) {
// elm.outerHTML = elm.outerHTML;
// });
// };
// setTimeout(function () {
// fix_svg();
// }, 200);
func.UI.utils.indicator.screen.normal();
let ret_screen_loading = await func.UI.screen.screen_loading_done(SESSION_ID, params, ret_render_$container, jobNoP);
// for (const [container_xu_ui_id, val] of Object.entries(UI_WORKER_OBJ.pending_for_viewport_render)) {
// const height = val.base_$div.height();
// if (height) {
// const total_height = height * val.data.length || 1;
// if (total_height > val.$container.height()) {
// val.$container.css('height', height * val.data.length);
// }
// }
// debugger;
// }
return ret_screen_loading;
}
};
func.UI.screen.update_SYS_OBJ_WIN_INFO = function (SESSION_ID, dsNoP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsNoP];
if (!_ds) return;
if (!_ds.data_system) {
_ds.data_system = {};
}
_ds.data_system['SYS_STR_WIN_ID'] = _ds.tree_obj?.id;
_ds.data_system['SYS_STR_WIN_NAME'] = _ds.tree_obj?.menuName;
if (SESSION_OBJ[SESSION_ID].DS_GLB[dsNoP].mode) {
_ds.data_system['SYS_STR_WIN_MODE'] = SESSION_OBJ[SESSION_ID].DS_GLB[dsNoP].mode;
}
// _ds.data_system["SYS_OBJ_WIN_INFO"] = func.UI.screen.get_info(
// SESSION_ID,
// dsNoP
// );
// get all top fields into json
};
func.UI.screen.validate_exit_events = async function (SESSION_ID, div_data_paramsP, forceP) {
return new Promise(async (resolve) => {
await func.events.validate(SESSION_ID, 'on_exit', div_data_paramsP.dsSessionP, null, 'screen');
var interval = setInterval(function () {
if (!SESSION_OBJ[SESSION_ID].WORKER_OBJ.jobs.length || forceP) {
clearInterval(interval);
resolve();
}
}, 5);
});
};
func.UI.screen.call_embed = function (SESSION_ID, prog) {
$('#embed_' + SESSION_ID)
.empty()
.data().xuData.screenInfo = null;
_.forEach(SESSION_OBJ[SESSION_ID].DS_GLB, function (val, key) {
if (key) func.datasource.del(SESSION_ID, key);
});
func.UI.main.embed_prog_execute(SESSION_ID, prog);
};
func.UI.screen.refresh_xu_attributes = async function (SESSION_ID, fields_arr, jobNoP, $elm_to_search, dsSession_changed, avoid_xu_for_refresh, trigger) {
if (trigger !== 'click') {
if (!_.isEmpty(SCREEN_BLOCKER_OBJ)) {
// let dom to finish
setTimeout(() => {
func.UI.screen.refresh_xu_attributes(SESSION_ID, fields_arr, jobNoP, $elm_to_search, dsSession_changed);
}, 100);
return;
}
}
UI_WORKER_OBJ.cache = {};
const _session = SESSION_OBJ[SESSION_ID];
if (glb.DEBUG_MODE) {
console.info('========= xu-attributes refresh info ==============');
console.info('fields_arr:', fields_arr);
}
var selectors = {};
var search_from = 'body';
var new_job = jobNoP;
if ($elm_to_search) {
search_from = '#' + $elm_to_search.attr('id');
}
const get_selectors = function () {
$.each(fields_arr, function (key_field, val_field) {
$(search_from)
.find('*')
.filter(function () {
// check if the changed field include in the calling in parameters
const elm_data = $(this).data();
if (!elm_data.xuData) return true;
if (typeof dsSession_changed !== 'undefined' && elm_data.xuData.paramsP && elm_data.xuData.paramsP.dsSessionP < dsSession_changed) return true;
let attr = [];
const validate_param_in = function (exp, without_var) {
let exp_val_for_parameter_in_validation;
if (typeof exp === 'string') exp_val_for_parameter_in_validation = exp;
if (typeof exp === 'object') exp_val_for_parameter_in_validation = JSON.stringify(exp);
if (!exp_val_for_parameter_in_validation) return;
if (!exp.includes('@')) return;
if (_.isEmpty(elm_data?.xuData?.paramsP?.parameters_raw_obj)) return;
for (const [param_key, param_val] of Object.entries(elm_data?.xuData?.paramsP?.parameters_raw_obj)) {
if (!param_val.includes('@')) continue;
exp_val_for_parameter_in_validation = exp_val_for_parameter_in_validation.replaceAll((without_var ? '' : '@') + param_key, param_val);
}
return exp_val_for_parameter_in_validation?.includes?.((without_var ? '' : '@') + val_field);
};
$.each(elm_data?.xuAttributes, function (key, val) {
if (typeof val !== 'string' && typeof val !== 'object') return true;
if (typeof val === 'string' && !val?.includes('@') && key !== 'xu-bind' && key !== 'xu-for') return true;
if (key.substr(0, 3) !== 'xu-') return true;
if (key === 'xu-bind' || key === 'xu-for') {
if (val?.includes?.(val_field) || validate_param_in(val, true)) {
attr.push(key);
}
return true;
}
// if (key === 'xu-for') {
// // match static value for xu-for
// if (val?.includes?.(val_field) || validate_param_in(val)) {
// attr.push(key);
// }
// return true;
// }
// console.log(key, val);
if (key.substr(0, 6) === 'xu-exp' && key.substr(6, 1) === ':') {
if (val?.includes?.('@' + val_field) || validate_param_in(val)) {
attr.push(key);
}
return true;
}
if (key.substr(0, 8) === 'xu-class') {
try {
const classes_string = val;
const classes_obj = _.isString(classes_string) ? JSON.parse(classes_string) : _.defaults(classes_string, {});
$.each(classes_obj, function (cla, cond) {
if (cond.includes('@' + val_field) || validate_param_in(cond)) {
attr.push('xu-class');
return false;
}
});
if (attr.length) {
return false;
}
} catch (e) {
console.warn('parse error:' + val);
}
}
if (key === 'xu-ui-plugin') {
const plugin_str = JSON.stringify(val);
if (plugin_str.includes('@' + val_field) || validate_param_in(plugin_str)) {
attr.push(key);
return false;
}
}
});
// const selector_id = glb.new_xu_render ? $(this).data()?.xuData?.ui_id : $(this).data()?.xuData?.xu_id;
const selector_id = $(this).attr('xu-ui-id');
if (attr.length) {
selectors[selector_id] = selectors[selector_id];
if (!selectors[selector_id]) {
selectors[selector_id] = { attributes: [], $elm: $(this) };
}
attr.forEach(function (value) {
if (!selectors[selector_id].attributes.includes(value)) selectors[selector_id].attributes.push(value);
});
}
});
});
};
get_selectors();
// console.log('selectors>>>>', selectors);
for await (let [elem_key, elem_val] of Object.entries(selectors)) {
if (elem_key === 'length') break;
if (!elem_val.$elm.data().xuData) continue;
if (elem_val.$elm.data().xuData.pending_to_delete) continue;
const add_execute_queue = async function (type) {
if (!elem_val.$elm?.data?.()?.xuData) return;
try {
const obj = {
ui_type: elem_val.$elm.data().xuData.ui_type,
SESSION_ID,
fields_arr,
elem_key,
elem_val,
};
new_job = await func.UI.worker.add_to_queue(SESSION_ID, 'gui event', type, obj, new_job, elem_val.$elm);
if (glb.DEBUG_MODE) {
console.log(type + '>>>', new_job, obj);
}
} catch (error) {
debugger;
}
};
//////////// process render first ///////////////
var performed_render = undefined;
if (!elem_val?.$elm?.data()?.xuAttributes) continue;
if (elem_val.attributes.includes('xu-exp:xu-render')) {
var res = await func.expression.get(SESSION_ID, elem_val.$elm.data().xuAttributes['xu-exp:xu-render'], elem_val.$elm.data().xuData.paramsP.dsSessionP, 'UI Property EXP', elem_val.$elm.data().xuData.recordid);
var attr_value = await func.common.get_cast_val(SESSION_ID, 'refresh xu-attributes', 'xu-render', 'bool', res.result);
if (!attr_value && elem_val.$elm[0].tagName === 'XURENDER') continue; // bypass job
if (attr_value && elem_val.$elm[0].tagName !== 'XURENDER') {
await add_execute_queue('execute_xu_all_attributes');
continue; // bypass render job
}
if (!elem_val?.$elm?.data()?.xuData?.ui_type) continue;
// RENDER = false handler
const obj = {
ui_type: elem_val.$elm.data().xuData.ui_type,
SESSION_ID,
elem_key,
elem_val,
fields_arr,
attr_value,
};
new_job = jobNoP;
new_job = await func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'execute_xu_render_attributes', obj, new_job, elem_val.$elm, elem_val.$elm.data().xuData.paramsP.dsSessionP);
performed_render = true;
// mark children items ignore list
$.each(elem_val.$elm.find('*'), function (key, val) {
if ($(val).data().xuData) {
$(val).data().xuData.pending_to_delete = true;
}
});
if (glb.DEBUG_MODE) {
console.info('execute_xu_render_attributes', obj);
}
}
if (performed_render || elem_val.$elm[0].tagName === 'XURENDER') continue; // bypass job
if (elem_val.attributes.includes('xu-exp:xu-for') || elem_val.attributes.includes('xu-for')) continue;
if (elem_val.$elm.data().xuData.ui_type === 'xu-widget') {
add_execute_queue('execute_xu_widget');
} else {
add_execute_queue('execute_xu_all_attributes');
}
}
// xu-for
selectors = {};
get_selectors();
// console.log('selectors', selectors);
let refreshed_ids = [];
// handle xu-for
let parent_element_ui_id;
for await (let [elem_key, elem_val] of Object.entries(selectors)) {
if (elem_key === 'length') break;
if (!elem_val.$elm.data().xuData) continue;
if (elem_val.$elm.data().xuData.pending_to_delete) continue;
if (!elem_val.attributes.includes('xu-exp:xu-for') && !elem_val.attributes.includes('xu-for')) continue;
let _parent_element_ui_id;
if (elem_val?.$elm?.data()?.xuPanelData) {
// handle li panel
_parent_element_ui_id = elem_val?.$elm?.data()?.xuPanelData?.parent_element_ui_id;
} else {
// handle regular li
_parent_element_ui_id = elem_val?.$elm?.data()?.xuData?.parent_element_ui_id;
}
if (!parent_element_ui_id || _parent_element_ui_id != parent_element_ui_id) {
parent_element_ui_id = _parent_element_ui_id;
const _$elem = $(`[xu-ui-id=${parent_element_ui_id}]`);
const _elem_key = parent_element_ui_id;
const _elem_val = { attributes: [], $elm: _$elem };
$.each(_$elem.data()?.xuAttributes, function (key, val) {
_elem_val.attributes.push(key);
});
const obj = {
ui_type: _elem_val.$elm.data().xuData.ui_type,
SESSION_ID,
elem_key: _elem_key,
elem_val: _elem_val,
fields_arr,
xu_for_item_id: elem_val?.$elm?.data()?.xuPanelData ? elem_val?.$elm?.data()?.xuPanelData.node.id : elem_val?.$elm?.data().xuData.nodeid,
};
if (avoid_xu_for_refresh) return;
await func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'execute_xu_for', obj, new_job, _elem_val.$elm, _elem_val.$elm.data().xuData.paramsP.dsSessionP);
refreshed_ids.push(parent_element_ui_id);
if (glb.DEBUG_MODE) {
console.info('execute_xu_for', obj);
}
}
}
/////////// xu-for for non displayed elements ////////////
const iterate_field_in_progUi = async function (progUi, field_id, panel_val) {
let found;
const iterate_progUi = async function (node, node_id) {
for (let item of node) {
if (!_.isEmpty(item.attributes)) {
const parent_element_ui_id = node_id;
// const _$elem = $(`[xu-node-id="${parent_element_ui_id}"]`);
for await (const [attr, val] of Object.entries(item.attributes)) {
if (attr === 'xu-exp:xu-for' || attr === 'xu-for') {
if (val?.includes(field_id)) {
// const parent_element_ui_id = node_id;
// debugger;
// let _$elem = $(`[xu-ui-id^=${parent_element_ui_id}]`);
// let _$elem = $(`[xu-node-id=${parent_element_ui_id}]`);
const _$elem = func.UI.utils.find_in_element_data('xuData', $(SESSION_OBJ[SESSION_ID].root_element), 'nodeid', parent_element_ui_id);
// const _elem_key = parent_element_ui_id;
const _elem_key = _$elem.attr('xu-ui-id');
const _elem_val = { attributes: [], $elm: _$elem };
if (!_$elem?.length) continue;
if (refreshed_ids.includes(_$elem.attr('xu-ui-id'))) break;
$.each(_$elem.data()?.xuAttributes, function (key, val) {
_elem_val.attributes.push(key);
});
const obj = {
ui_type: _elem_val.$elm.data().xuData.ui_type,
SESSION_ID,
elem_key: _elem_key,
elem_val: _elem_val,
fields_arr,
xu_for_item_id: item.id,
};
if (avoid_xu_for_refresh) return;
await func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'execute_xu_for', obj, new_job, _elem_val.$elm, _elem_val.$elm.data().xuData.paramsP.dsSessionP);
if (glb.DEBUG_MODE) {
console.info('node execute_xu_for', obj, panel_val);
}
break;
}
}
// if (glb.new_xu_render) {
// if (attr === 'xu-exp:xu-render') {
// //|| attr === 'xu-render'
// for await (const [key, val] of Object.entries(_$elem)) {
// if (key === 'length') break;
// if ($(val).data().xuData.node) {
// for await (const node of $(val).data().xuData.node.children) {
// if (item.id !== node.id) continue;
// if (typeof node.xu_render_made !== 'undefined' && !node.xu_render_made) {
// const node_data = UI_WORKER_OBJ.xu_render_cache[node.xu_render_xu_ui_id + node.xu_render_cache_id];
// parent_element_ui_id;
// const elem_key = node.xu_render_xu_ui_id;
// const elem_val = { attributes: [attr], $elm: node_data.$div, data: node_data.data };
// if (!elem_val.data?.xuData) continue;
// elem_val.data.xuData.parent_element_ui_id = $(val).attr('xu-ui-id');
// var res = await func.expression.get(SESSION_ID, elem_val.data.xuAttributes['xu-exp:xu-render'], elem_val.data.xuData.paramsP.dsSessionP, 'UI Property EXP', elem_val.data.xuData.recordid);
// var attr_value = await func.common.get_cast_val(SESSION_ID, 'refresh xu-attributes', 'xu-render', 'bool', res.result);
// try {
// const obj = {
// ui_type: elem_val.data.xuData.ui_type,
// SESSION_ID,
// elem_key,
// elem_val,
// fields_arr,
// attr_value,
// };
// func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'execute_xu_render_attributes', obj, new_job, elem_val.$elm, elem_val.data.xuData.paramsP.dsSessionP);
// } catch (error) {
// debugger;
// }
// }
// }
// }
// }
// }
// }
}
}
if (found) break;
if (item.children) {
await iterate_progUi(item.children, item.id);
}
}
};
await iterate_progUi(progUi);
return found;
};
const $xu_embed_container = $('.xu_embed_container');
const panels_obj = await func.UI.utils.get_panels_wrapper_from_dom(SESSION_ID, $xu_embed_container, true);
for await (const field_id of fields_arr) {
// run root
if ($xu_embed_container.length) {
const progUi = $xu_embed_container?.data()?.xuData?.screenInfo?.progUi;
if (progUi) {
await iterate_field_in_progUi(progUi, field_id);
}
}
// run panels
for await (const [panel_wrapper_element_ui_id, panel_val] of Object.entries(panels_obj)) {
await iterate_field_in_progUi(panel_val.progUi, field_id, panel_val);
}
}
func.events.delete_job(SESSION_ID, jobNoP);
if (glb.DEBUG_MODE) {
console.info('===================================================');
}
};
func.UI.screen.refresh_screen = async function (SESSION_ID, fields_changed_arr, datasource_changed, fields_changed_datasource) {
var found, refresh_reason, refresh_details;
const validate_change = function (prog_doc, panelXuAttributes, skip_ui_check) {
found = null;
refresh_reason = null;
refresh_details = null;
const progDataSource_str = JSON.stringify(prog_doc.progDataSource);
for (const field_id of fields_changed_arr) {
// get panel attributes
const _attributes = panelXuAttributes || {};
// detect if program changed
found = _attributes['xu-exp:program']?.includes('@' + field_id);
if (found) {
refresh_reason = `program ${_attributes['xu-exp:program']} ${field_id} changed `;
refresh_details = _attributes;
break;
}
// _attributes holds also info of parameters in code_in: @code
// search field changed in panel call send parameters exp
for (const [attr, value] of Object.entries(_attributes)) {
const pattern = /xu-exp:(\w+)/;
const match = attr.match(pattern);
if (!match) {
// continue if attribute is not expression
continue;
}
// code_in
const parameter_in_field_id = match?.[1];
// @code
if (value.includes(field_id)) {
// search parameter in field in the target program's progDataSource
found = progDataSource_str?.includes('@' + parameter_in_field_id);
if (found) {
refresh_reason = `field ${field_id} in progDataSource parameter_in changed`;
refresh_details = prog_doc?.progDataSource;
break;
}
if (!skip_ui_check) {
found = func.UI.find_field_in_progUi_attributes(prog_doc.progUi, parameter_in_field_id, 'xu-for').length;
if (found) {
refresh_reason = `field ${field_id} in progUi xu-for parameter_in changed`;
refresh_details = found;
break;
}
}
}
}
if (found) break;
// search field changed in the target program's progDataSource // @code
found = progDataSource_str?.includes('@' + field_id);
if (found) {
refresh_reason = `field ${field_id} in progDataSource changed`;
refresh_details = prog_doc?.progDataSource;
break;
}
if (!skip_ui_check) {
found = func.UI.find_field_in_progUi_attributes(prog_doc.progUi, field_id, 'xu-for').length;
if (found) {
refresh_reason = `field ${field_id} in progUi xu-for changed`;
refresh_details = found;
break;
}
}
if (found) {
break;
}
}
};
// check the main program
if (fields_changed_datasource) {
const _session = SESSION_OBJ[SESSION_ID];
const _ds = _session.DS_GLB[fields_changed_datasource];
const prog_doc = await func.utils.DOCS_OBJ.get(SESSION_ID, _ds.prog_id);
if (prog_doc.progUi) {
validate_change(prog_doc, null, true);
if (found) {
const $elm = $(`#container_${_ds.prog_id}_0`);
if ($elm?.length) {
const elm_data = $elm.data();
const $wrapper = $elm.parent();
const refreshed_ds = _ds.dsSession;
$elm.empty();
if ($elm.data()) {
const new_$div = await func.UI.screen.render_ui_tree(
SESSION_ID,
$elm, // the wrapper
_.cloneDeep($elm.data().xuData.node), // the xu-panel node
{},
elm_data.xuData.paramsP, // the wrapper params
null,
null,
elm_data.xuData.key, // the wrapper key
refreshed_ds, // the refreshed_ds
elm_data.xuData.parent_node, // the wrapper parent node
null,
elm_data.xuData.$root_container, // the wrapper root container
);
if (glb.DEBUG_MODE) {
console.info('========= refresh main info ==============');
console.info('reason:', refresh_reason);
console.info('element:', $elm);
console.info('==========================================');
}
return;
}
}
}
}
}
const panels_obj = await func.UI.utils.get_panels_wrapper_from_dom(SESSION_ID, $(SESSION_OBJ[SESSION_ID].root_element), false);
for await (const [parent_element_ui_id, panel_val] of Object.entries(panels_obj)) {
// const progDataSource_str = JSON.stringify(panel_val.prog_doc.progDataSource);
if (!panel_val.$panel_div?.data()?.xuData) continue;
if (panel_val.$panel_div.data().xuData.pending_to_delete) continue;
if (fields_changed_arr) {
if (fields_changed_datasource && panel_val._ds.dsSession <= Number(fields_changed_datasource)) {
continue;
}
validate_change(panel_val.prog_doc, panel_val?.panelXuAttributes);
}
if (datasource_changed) {
if (panel_val._ds.dsSession == datasource_changed) {
refresh_reason = `panel datasource ${datasource_changed} changed`;
refresh_details = '';
found = true;
}
}
if (found) {
UI_WORKER_OBJ.cache = {};
const _session = SESSION_OBJ[SESSION_ID];
if (glb.DEBUG_MODE) {
console.info('========= refresh info ==============');
console.info('reason:', refresh_reason);
console.info('details:', refresh_details);
console.info('panel:', panel_val);
console.info('=====================================');
}
const $div_elm = panel_val.$panel_div;
const wrapper_data = $div_elm.data();
if (_.isEmpty(wrapper_data)) continue;
try {
const ts = Date.now();
// remove old panel content
$.each(panel_val.ids, async function (key, val) {
$("[xu-ui-id='" + val + "']")
.attr('xu-ui-id', val + ts)
.removeData();
});
let refreshed_ds;
// check if ds exist and deleted by garbage collector
if (_session.DS_GLB[panel_val._ds.dsSession]) {
refreshed_ds = panel_val._ds.dsSession;
}
for await (const item of wrapper_data.xuData.node_org.children) {
if (item.tagName !== 'xu-panel') continue;
const new_$div = await func.UI.screen.render_ui_tree(
SESSION_ID,
$div_elm, // the wrapper
_.cloneDeep(item), // _.cloneDeep(wrapper_data.xuData.node_org.children[0]), // the xu-panel node
{},
wrapper_data.xuData.paramsP, // the wrapper params
null,
null,
wrapper_data.xuData.key, // the wrapper key
refreshed_ds, // the refreshed_ds
wrapper_data.xuData.parent_node, // the wrapper parent node
null,
wrapper_data.xuData.$root_container, // the wrapper root container
);
}
// remove old panel content
$.each(panel_val.ids, async function (key, val) {
$("[xu-ui-id='" + val + ts + "']").remove();
});
} catch (error) {
debugger;
}
// continue;
}
}
};
const get_params_obj_new = async function (SESSION_ID, prog_id, nodeP, dsSession) {
const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog_id);
if (!_prog) return;
// get in parameters
let params_res = {},
params_raw = {};
if (_prog?.properties?.progParams) {
for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
if (!['in', 'out'].includes(val.data.dir)) continue;
if (nodeP.attributes) {
if (nodeP.attributes[val.data.parameter]) {
params_res[val.data.parameter] = nodeP.attributes[val.data.parameter];
} else if (nodeP.attributes[`xu-exp:${val.data.parameter}`]) {
if (val.data.dir == 'out') {
// only reference
params_res[val.data.parameter] = nodeP.attributes[`xu-exp:${val.data.parameter}`].replaceAll('@', '');
} else {
// in parameter
let ret = await func.expression.get(SESSION_ID, nodeP.attributes[`xu-exp:${val.data.parameter}`], dsSession, 'parameters');
params_res[val.data.parameter] = ret.result;
params_raw[val.data.parameter] = nodeP.attributes[`xu-exp:${val.data.parameter}`];
}
}
continue;
}
console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
}
}
return { params_res, params_raw };
};
func.UI.screen.execute_xu_functions = async function (SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, xu_func, $elm, val, is_init, refreshed_ds) {
if (is_skeleton) return;
// console.log(nodeP.id, xu_func, val);
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
const tag_fx = {
[`xu-panel`]: {
program: async function ($elm, val) {
var ret = {};
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[paramsP.dsSessionP];
const init_program = async function () {
async function render_panel() {
const prog_id = val.value?.prog || val.value;
const params_obj = await get_params_obj_new(SESSION_ID, prog_id, nodeP, paramsP.dsSessionP);
let ret_panel = await func.UI.screen.init(SESSION_ID, prog_id, paramsP.screenId, _ds, $elm, null, _ds.currentRecordId, null, true, params_obj.params_res, 'initXu_panel', undefined, prog_id !== _ds.prog_id ? null : refreshed_ds, params_obj.params_raw);
ret = { $new_div: ret_panel };
if ($container.data().xuData) {
$container.data().xuData.xuPanelProps = $elm.data().xuAttributes;
$container.data().xuData.xuPanelData = ret_panel.data();
}
return ret;
}
if (!val.value) {
val.value = '_empty_panel_program';
}
ret = await render_panel();
return ret;
};
const alter_program = async function () {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[paramsP.dsSessionP];
/////////////////
async function render_panel() {
// // if (!cache_str) {
// // await update_container(screen_ready_function);
// // }
// // if (cache_str && !CACHE_PROG_UI[cache_str]) {
// // await update_container(screen_ready_function);
// // save_cache();
// // }
// // if (callback) callback($div);
// // $container.data().xuData.node.children =
// // $div.data().xuData.node.children;
// // //swiper-wrapper
// // var restore_slides_elements = async function () {
// // if ($tmp_div.children().length) {
// // $tmp_div
// // .find(".swiper-wrapper")
// // .empty()
// // .append($new_div.children());
// // $new_div.append($tmp_div.children());
// // }
// // };
// // // console.log($tmp_div);
// // await restore_slides_elements();
// // // CHANGE_PANEL_BUSY = false;
// // func.events.delete_job(SESSION_ID, jobNo);
// };
const program = val.value?.prog || val.value;
var $wrapper = $('<div>');
var $div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, nodeP.attributes, null, null, null, $wrapper, '');
const params_obj = await get_params_obj_new(SESSION_ID, program, nodeP, paramsP.dsSessionP);
let ret_init = await func.UI.screen.init(SESSION_ID, program, paramsP.screenId, _ds, $div, null, _ds.currentRecordId, jobNoP, true, params_obj.params_res, 'alterXu_panel', undefined, undefined, params_obj.params_raw);
ret = {
$new_div: ret_init,
abort: true,
};
await func.UI.screen.panel_post_render_handler(SESSION_ID, $elm, $new_div, nodeP, $div.clone(true), jobNoP);
return ret;
}
if (!val.value) {
return { abort: true };
}
await render_panel();
return ret;
};
if (is_init) {
let ret = await init_program();
return ret;
}
return alter_program();
},
'xu-render': async function ($elm, val) {
let ret = await common_fx['xu-render']($elm, val, true);
return ret;
},
'xu-ref': async function ($elm, val) {
let ret = await common_fx['xu-ref']($container, val, $container.data().xuData.xuPanelData.xuData.paramsP.dsSessionP);
return ret;
},
},
[`xu-teleport`]: {
to: async function ($elm, val) {
if (!glb.new_xu_render) {
if (val.value) {
// parent_infoP.is_xu_teleport;
if ($elm?.parent()?.data()?.xuData?.length) {
$elm.parent().data('xuTeleportData', []);
for (const [key, node] of Object.entries(nodeP.children)) {
const $teleport_elm = await func.UI.screen.render_ui_tree(SESSION_ID, $(val.value), node, parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, node, null, $root_container);
$elm.parent().data().xuTeleportData.push($teleport_elm.attr('xu-ui-id'));
$teleport_elm.attr('xu-teleport-parent-id', $elm.parent().attr('xu-ui-id'));
}
$elm.remove();
} else {
$elm.data('xuTeleportData', []).attr('hidden', true);
for (const [key, node] of Object.entries(nodeP.children)) {
const $to_container = $(val.value);
if (!$to_container?.length) {
return console.error(`container ${val.value} for xuTeleportData not found`);
}
const $teleport_elm = await func.UI.screen.render_ui_tree(SESSION_ID, $to_container, node, parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, node, null, $root_container);
$elm.data().xuTeleportData.push($teleport_elm.attr('xu-ui-id'));
$teleport_elm.attr('xu-teleport-parent-id', $elm.attr('xu-ui-id'));
}
}
}
return { abort: true };
}
if (val.value) {
// // parent_infoP.is_xu_teleport;
// if ($elm?.parent()?.data()?.xuData?.length) {
// $elm.parent().data('xuTeleportData', []);
// for (const [key, node] of Object.entries(nodeP.children)) {
// const $teleport_elm = await func.UI.screen.render_ui_tree(SESSION_ID, $(val.value), node, parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, node, null, $root_container);
// $elm.parent().data().xuTeleportData.push($teleport_elm.attr('xu-ui-id'));
// $teleport_elm.attr('xu-teleport-parent-id', $elm.parent().attr('xu-ui-id'));
// }
// $elm.remove();
// } else {
// $elm.data('xuTeleportData', []).attr('hidden', true);
// for (const [key, node] of Object.entries(nodeP.children)) {
// const $to_container = $(val.value);
// if (!$to_container?.length) {
// return console.error(`container ${val.value} for xuTeleportData not found`);
// }
// const $teleport_elm = await func.UI.screen.render_ui_tree(SESSION_ID, $to_container, node, parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, node, null, $root_container);
// $elm.data().xuTeleportData.push($teleport_elm.attr('xu-ui-id'));
// $teleport_elm.attr('xu-teleport-parent-id', $elm.attr('xu-ui-id'));
// }
// }
}
return {};
},
'xu-render': async function ($elm, val) {
let ret = await common_fx['xu-render']($elm, val, true);
return ret;
},
'xu-show': async function ($elm, val) {
let ret = await common_fx['xu-show']($elm, val, true);
return ret;
},
},
};
const load_cdn = async function (resource) {
// console.log("loading cdn", resource);
if (!_.isObject(resource) && _.isString(resource)) {
resource = { src: resource, type: 'js' };
}
if (!_.isObject(resource)) {
throw new Error('cdn resource in wrong format');
}
return new Promise(async (resolve) => {
try {
switch (resource.type) {
case 'js':
await func.utils.load_js_on_demand(resource.src);
break;
case 'css':
await func.utils.load_js_on_demand(resource.src);
break;
case 'module':
func.utils.load_js_on_demand(resource.src, 'module');
break;
default:
await func.utils.load_js_on_demand(resource.src);
break;
}
resolve();
} catch (error) {
func.utils.debug_report(SESSION_ID, 'xu-cdn', 'Fail to load: ' + resource, 'W');
resolve();
}
// if (resource.type === "js" || !resource.type) {
// await func.utils.load_js_on_demand(resource.src);
// return resolve();
// }
// if (resource.type === "css") {
// func.utils.load_css_on_demand(resource.src);
// return resolve();
// }
// if (resource.type === "module") {
// func.utils.load_js_on_demand(resource.src, "module");
// return resolve();
// }
// func.utils.debug_report(
// SESSION_ID,
// "xu-cdn",
// "Fail to load: " + resource,
// "W"
// );
// return resolve();
});
};
const common_fx = {
'xu-attrs': async function ($elm, val) {
if (!val.value) return {};
if (!_.isObject(val.value)) throw 'xu-attrs value us not an object';
for (const [attr_key, attr_val] of Object.entries(val.value)) {
nodeP.attributes[attr_key] = attr_val;
}
return {};
},
'xu-ref': async function ($elm, val, dsSession) {
if (!val.value) return {};
func.UI.update_xu_ref(SESSION_ID, dsSession || paramsP.dsSessionP, val.value, $elm);
// Select the node that will be observed for mutations
const targetNode = $elm[0];
if (!targetNode) return;
// Options for the observer (which mutations to observe)
const config = { attributes: true, childList: true, subtree: true };
// Callback function to execute when mutations are observed
const callback = (mutationList, observer) => {
func.UI.screen.refresh_xu_attributes(SESSION_ID, [val.value]);
};
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
// Later, you can stop observing
// observer.disconnect();
return {};
},
'xu-bind': async function ($elm, val) {
if (is_skeleton) return;
let val_is_reference_field = false;
let _prog_id = $elm.data().xuData.paramsP.prog_id;
let _dsP = $elm.data().xuData.paramsP.dsSessionP;
const view_ret = await func.utils.VIEWS_OBJ.get(SESSION_ID, _prog_id);
if (!view_ret) return {};
let is_dynamic_field = false;
let field_prop;
let bind_field_id;
const input_field_type = $elm.attr('type');
const get_bind_field = async function (field_id) {
if (['_FOR_VAL', '_FOR_KEY'].includes(field_id)) {
is_dynamic_field = true;
field_prop = _ds.dynamic_fields[field_id];
} else {
field_prop = func.common.find_item_by_key(view_ret.progFields, 'field_id', field_id);
if (!field_prop) {
/// find the field everywhere in the chain Aug 30 2024
const ret_get_value = await func.datasource.get_value(SESSION_ID, field_id, _dsP);
if (ret_get_value.found) {
_dsP = ret_get_value.dsSessionP;
let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[_dsP];
_prog_id = _ds.prog_id;
const view_ret = await func.utils.VIEWS_OBJ.get(SESSION_ID, _prog_id);
if (!view_ret) return {};
field_prop = func.common.find_item_by_key(view_ret.progFields, 'field_id', field_id);
}
if (!field_prop) {
throw `field ${field_id} not found in the program scope`;
}
}
}
return field_id;
};
try {
bind_field_id = await get_bind_field(val.value.split('.')[0]);
val_is_reference_field = true;
} catch (err) {
console.error(err?.message || err);
return {};
}
const field_changed = async function (e) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[_dsP];
// update array for checkbox that not in xu-for
if (field_prop.props.fieldType === 'array' && input_field_type === 'checkbox' && val_is_reference_field) {
let arr_value_before_cast = _.clone((await func.datasource.get_value(SESSION_ID, bind_field_id, _dsP, _ds.currentRecordId)).ret.value);
let value_from_getter = bind.getter($elm[0]);
let value;
if (arr_value_before_cast.includes(value_from_getter)) {
value = arr_value_before_cast.filter((item) => !_.isEqual(item, value_from_getter));
} else {
arr_value_before_cast.push(value_from_getter);
value = arr_value_before_cast;
}
let datasource_changes = {
[_dsP]: {
[_ds.currentRecordId]: {
[bind_field_id]: value,
},
},
};
return await func.datasource.update(SESSION_ID, datasource_changes);
}
// update array for radio that not in xu-for
if (field_prop.props.fieldType === 'array' && input_field_type === 'radio' && val_is_reference_field) {
let value_from_getter = bind.getter($elm[0]);
let datasource_changes = {
[_dsP]: {
[_ds.currentRecordId]: {
[bind_field_id]: [value_from_getter],
},
},
};
return await func.datasource.update(SESSION_ID, datasource_changes);
}
var value = await func.common.get_cast_val(SESSION_ID, 'xu-bind', 'value', field_prop.props.fieldType, bind.getter($elm[0]));
if (field_prop.props.fieldType === 'object') {
value = await func.common.get_cast_val(SESSION_ID, 'xu-bind', 'value', input_field_type, bind.getter($elm[0]));
}
if (!_ds.currentRecordId) return;
let datasource_changes = {
[_dsP]: {
[_ds.currentRecordId]: {
[bind_field_id]: value,
},
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
const iterate_info = $elm?.data()?.xuData?.iterate_info;
const reference_source_obj = iterate_info?.reference_source_obj;
if (reference_source_obj) {
if (reference_source_obj.ret.type === 'array') {
if (iterate_info.iterator_val === bind_field_id) {
const arr_idx = Number($elm?.data()?.xuData?.iterate_info._key);
const dataset_arr = await func.datasource.get_value(SESSION_ID, reference_source_obj.fieldIdP, _dsP, reference_source_obj.currentRecordId);
let new_arr = _.cloneDeep(dataset_arr.ret.value);
if (field_prop.props.fieldType === 'object' && val_is_reference_field) {
let obj_item = new_arr[arr_idx];
let e_exp = val.value.replace(bind_field_id, 'obj_item');
let new_val = eval(e_exp + (input_field_type === 'string' ? `="${value}"` : `=${value}`));
new_arr[arr_idx] = obj_item;
} else {
new_arr[arr_idx] = value;
}
// datasource_changes[_dsP][_ds.currentRecordId][reference_source_obj.fieldIdP] = new_arr;
let datasource_changes = {
[_dsP]: {
[_ds.currentRecordId]: {
[reference_source_obj.fieldIdP]: new_arr,
},
},
};
await func.datasource.update(SESSION_ID, datasource_changes, null, true);
}
}
}
await func.datasource.update_changes_for_out_parameter(SESSION_ID, _dsP, _ds.parentDataSourceNo);
};
const bind = new UI_FRAMEWORK_PLUGIN.bind();
bind.listener($elm[0], field_changed);
const set_value = function () {
let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
if (!_ds.currentRecordId) return;
let value;
try {
if (val_is_reference_field) {
if (is_dynamic_field) {
value = _ds.dynamic_fields[bind_field_id].value;
} else {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
value = _ds.data_feed.rows?.[row_idx]?.[bind_field_id];
}
if (field_prop.props.fieldType === 'array' && $elm.attr('type') === 'checkbox' && $elm.attr('value')) {
if (value.includes($elm.attr('value'))) {
value = true;
} else {
value = false;
}
} else if (field_prop.props.fieldType === 'array' && $elm.attr('type') === 'radio' && $elm.attr('value')) {
if (value.includes($elm.attr('value'))) {
value = $elm.attr('value');
} else {
value = false;
}
} else if (field_prop.props.fieldType === 'object' && val.value.split('.').length > 1) {
let str = val.value.replace(bind_field_id, '(' + JSON.stringify(value) + ')');
value = eval(str);
}
} else {
value = val.value;
}
if (typeof value === 'undefined') return;
bind.setter($elm[0], value);
} catch (err) {
console.error(err);
}
};
/// init value from ds
$('body').on('xu-bind-refresh.' + _ds.dsSession.toString(), () => {
set_value();
});
set_value();
return {};
},
'xu-render': async function ($elm, val, from_panel) {
const old_render = async function () {
var value = await func.common.get_cast_val(SESSION_ID, 'common fx', 'xu-render', 'bool', val.value);
const init_render = function () {
if (!value) {
var cloned_$div = $elm.clone(true);
let $xurender = $('<xurender>').attr('xu-ui-id', $elm.attr('xu-ui-id')).attr('hidden', true).appendTo($container); //.hide();
let original_data_obj = {
$container: cloned_$div,
nodeP: _.cloneDeep(nodeP),
parent_infoP,
paramsP,
keyP,
parent_nodeP,
$root_container,
};
$xurender.data('xuData', cloned_$div.data().xuData);
$xurender.data().xuData.original_data_obj = original_data_obj;
$xurender.data().xuData.xurender_node = cloned_$div;
$xurender.data().xuAttributes = nodeP.attributes || {};
// $xurender.hide();
$elm.remove();
return { abort: true };
}
return {};
};
const post_render = async function () {
if (value) {
try {
// abort if already rended
if ($elm[0].tagName !== 'XURENDER' && $elm?.length) {
return func.events.delete_job(SESSION_ID, jobNoP);
}
let original_data_obj = $elm.data().xuData.original_data_obj;
if (!original_data_obj) {
func.events.delete_job(SESSION_ID, jobNoP);
return { delete_job: jobNoP };
}
const new_$div = await func.UI.screen.render_ui_tree(
SESSION_ID,
$elm, //original_data_obj.$container,
_.cloneDeep(original_data_obj.nodeP),
original_data_obj.parent_infoP,
original_data_obj.paramsP,
jobNoP,
null,
original_data_obj.keyP,
null,
original_data_obj.parent_nodeP,
null,
original_data_obj.$root_container,
);
new_$div.data().xuData.original_data_obj = original_data_obj;
new_$div.data().xuData.xurender_node = $elm.clone(true);
new_$div.data().xuAttributes = $elm.data().xuAttributes || {};
const replace = async function () {
$elm.replaceWith(new_$div);
if (from_panel) {
const xuPanelWrapper = _.clone(new_$div.data().xuPanelWrapper);
$elm.parent().data().xuPanelWrapper = xuPanelWrapper;
$elm.replaceWith(new_$div.children());
}
if (val.fields_arr) {
return await func.UI.screen.refresh_xu_attributes(SESSION_ID, val.fields_arr, val.jobNoP, new_$div);
}
func.events.delete_job(SESSION_ID, jobNoP);
};
// if ($elm && func.UI.utils.find_in_element_data('xuData', $(SESSION_OBJ[SESSION_ID].root_element), 'xu_id', $elm.data().xuData.xu_id).length) {
if ($elm && $(`[xu-ui-id="${$elm.attr('xu-ui-id')}"]`).length) {
if (new_$div.data().xuData.paramsP) {
return await replace();
}
func.events.delete_job(SESSION_ID, jobNoP);
}
} catch (error) {
func.events.delete_job(SESSION_ID, jobNoP);
}
return;
}
// if (!value) {
if ($elm.prop('tagName') === 'XURENDER') {
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
let tmp_$div = $('<div>');
let $xurender = $('<xurender>').attr('xu-ui-id', $elm.attr('xu-ui-id')).appendTo(tmp_$div); //.hide();
// was true before
if ($elm.data().xuData.xurender_node) {
$xurender.data({
xuAttributes: $elm.data().xuData.xurender_node.data().xuAttributes || {},
xuData: $elm.data().xuData.xurender_node.data().xuData || {},
});
} else {
// default new state
$xurender.data({
xuAttributes: $elm.data().xuAttributes || {},
xuData: $elm.data().xuData || {},
});
const original_data_obj = {
nodeP: _.cloneDeep($elm.data().xuData.node_org),
paramsP: $elm.data().xuData.paramsP,
$container: $elm.clone(true),
parent_infoP: parent_infoP,
};
$xurender.data().xuData.original_data_obj = original_data_obj;
}
//remove xu-teleport trace
$.each($elm.find('xu-teleport'), (key, val) => {
const xuTeleportData = $(val).data().xuTeleportData || [];
for (const teleported_elm_id of xuTeleportData) {
$(`[xu-ui-id="${teleported_elm_id}"]`).remove();
}
});
$elm.replaceWith(tmp_$div.children());
func.events.delete_job(SESSION_ID, jobNoP);
// }
};
if (is_init) {
return init_render();
}
return await post_render();
};
const new_render = async function () {
var value = await func.common.get_cast_val(SESSION_ID, 'common fx', 'xu-render', 'bool', val.value);
const has_xu_render_attribute = true;
const has_xu_exp_render_attribute = $elm.data()?.xuData?.attr_exp_info?.['xu-render'] ? true : false;
const init_render = async function () {
nodeP.xu_render_made = value;
if (!value) {
if (has_xu_exp_render_attribute) {
return { has_xu_exp_render_attribute, has_xu_render_attribute, xu_render_background_processing: true };
}
return { has_xu_render_attribute, abort: true };
}
return { has_xu_exp_render_attribute, has_xu_render_attribute };
};
const post_render = async function () {
// always come from refresh
let nodeP = $container.data().xuData.node.children[keyP];
nodeP.xu_render_made = value;
if (value) {
try {
const xu_render_cache_id = await get_xu_render_cache_str(SESSION_ID, paramsP.dsSessionP, Object.keys($elm.data()?.xuData?.attr_exp_info?.['xu-render']?.fields || {}));
const xu_ui_id = $elm.attr('xu-ui-id');
let new_$div = UI_WORKER_OBJ?.xu_render_cache?.[xu_ui_id + xu_render_cache_id]?.$div.clone(true);
let found_parent_vars = false;
if (new_$div) {
// validate if $div contains fields from parent ds
const parent_data = get_parent_ds_fields(SESSION_ID, paramsP.dsSessionP);
const parent_fields = Object.keys(parent_data);
$.each(new_$div.find('*'), (key, val) => {
const _xuAttributes = $(val)?.data()?.xuAttributes;
if (found_parent_vars || !_xuAttributes) return;
for (const [attr_key, attr_val] of Object.entries(_xuAttributes)) {
if (found_parent_vars) break;
for (const [key, val] of Object.entries(parent_fields)) {
if (attr_val.includes('@' + key)) {
found_parent_vars = true;
break;
}
}
}
});
}
if (!new_$div || found_parent_vars) {
UI_WORKER_OBJ.xu_render_cache[xu_ui_id + xu_render_cache_id] = { paramsP };
nodeP.xu_render_xu_ui_id = xu_ui_id;
nodeP.xu_render_cache_id = xu_render_cache_id;
new_$div = await func.UI.screen.render_ui_tree(SESSION_ID, $container, nodeP, parent_infoP, paramsP, jobNoP, null, keyP, null, parent_nodeP, null, $root_container);
const _$div = new_$div.clone(true);
UI_WORKER_OBJ.xu_render_cache[xu_ui_id + xu_render_cache_id].$div = _$div;
UI_WORKER_OBJ.xu_render_cache[xu_ui_id + xu_render_cache_id].data = _$div.data();
}
// append order handling
if (!$container.children().length) {
new_$div.appendTo($container);
} else {
// iterate the container node
let $last_elm_found = [];
$.each($container.data().xuData.node.children, (item_key, item_val) => {
// const $elm = $(`[xu-node-id="${item_val.id}"]`);
const $elm = func.UI.utils.find_in_element_data('xuData', $(SESSION_OBJ[SESSION_ID].root_element), 'nodeid', item_val.id);
if ($elm.length) {
$last_elm_found = $elm;
}
if (keyP == item_key) {
if ($last_elm_found.length) {
new_$div.after($last_elm_found);
} else {
$container.prepend(new_$div);
}
}
});
}
} catch (error) {
func.events.delete_job(SESSION_ID, jobNoP);
}
return;
}
/////////// !value ///////////
const xu_ui_id = $elm.attr('xu-ui-id');
const cache_str = await get_xu_render_cache_str(SESSION_ID, paramsP.dsSessionP, Object.keys($elm.data()?.xuData?.attr_exp_info?.['xu-render']?.fields || {}));
const _$div = $elm.clone(true);
UI_WORKER_OBJ.xu_render_cache[xu_ui_id + cache_str] = { $div: _$div, data: _$div.data(), paramsP };
$elm.remove();
func.events.delete_job(SESSION_ID, jobNoP);
};
if (is_init) {
return await init_render();
}
return await post_render();
};
if (glb.new_xu_render) {
return new_render();
}
return old_render();
},
'xu-show': async function ($elm, val) {
var value = await func.common.get_cast_val(SESSION_ID, 'common fx', 'xu-show', 'bool', val.value);
if (value) {
$elm.show();
}
if (!value) {
$elm.hide();
}
return {};
},
'xu-content': async function ($elm, val) {
try {
$elm.html(val.value);
} catch (error) {
console.warn(e);
}
return;
},
'xu-text': async function ($elm, val) {
try {
$elm.text(val.value);
} catch (error) {
console.warn(e);
}
return;
},
'xu-html': async function ($elm, val) {
try {
$elm.html(val.value);
} catch (error) {
console.warn(e);
}
return;
},
'xu-for': async function ($elm, data) {
// exit if call from rendered xu-for item to prevent infante loop (parent_infoP?.iterate_info indicate call from rendered item)
if (parent_infoP?.iterate_info) return {};
if (!data.value) return {};
try {
// data.value (xu-for) can store actual values such as an array, a CSV, or a field_id that references a specific field within the dataset, initialized with values for the iteration.
let arr = data.value;
// find reference source field
let reference_source_obj;
const _progFields = await func.datasource.get_progFields(SESSION_ID, paramsP.dsSessionP);
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', data.value);
// detect if data.value (xu-for) is reference field_id by checking if exist in the dataset
if (view_field_obj) {
// xu-for is reference field_id
reference_source_obj = await func.datasource.get_value(SESSION_ID, data.value, paramsP.dsSessionP);
arr = reference_source_obj?.ret?.value;
} else {
// xu-for is actual data
if (typeof data.value === 'string') {
arr = eval(data.value.replaceAll('\\', ''));
}
if (typeof arr === 'number') {
arr = Array.from(Array(arr).keys());
}
}
const custom_iterator_key = $elm.data().xuData.iterator_key;
const custom_iterator_val = $elm.data().xuData.iterator_val;
let iterator_key = custom_iterator_key;
let iterator_val = custom_iterator_val;
let is_key_dynamic_field, is_val_dynamic_field;
// custom FOR_VAL name or namespaced default name
if (!custom_iterator_key) {
is_key_dynamic_field = true;
iterator_key = '_FOR_KEY';
}
if (!custom_iterator_val) {
is_val_dynamic_field = true;
iterator_val = '_FOR_VAL';
}
var i = 0;
for await (let [_key, _val] of Object.entries(arr)) {
if (_.isArray(arr)) {
_key = Number(_key);
}
const set_value = async function (is_dynamic_field, currentRecordId, field_id, value) {
if (is_dynamic_field) {
func.datasource.add_dynamic_field_to_ds(SESSION_ID, paramsP.dsSessionP, field_id, value);
} else {
const _progFields = await func.datasource.get_progFields(SESSION_ID, paramsP.dsSessionP);
let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
if (view_field_obj) {
let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
try {
const row_idx = func.common.find_ROWID_idx(_ds, currentRecordId);
_ds.data_feed.rows[row_idx][field_id] = value;
} catch (err) {
console.error(err);
}
} else {
console.error('field not exist in dataset for xu-for method');
}
}
};
var currentRecordId = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP].currentRecordId.toString();
await set_value(is_key_dynamic_field, currentRecordId, iterator_key, _key);
await set_value(is_val_dynamic_field, currentRecordId, iterator_val, _val);
var iterate_info = {
_val,
_key,
iterator_key,
iterator_val,
is_key_dynamic_field,
is_val_dynamic_field,
reference_source_obj,
};
let _parent_info = _.cloneDeep(parent_infoP) || {};
_parent_info.iterate_info = iterate_info;
const $divP = await func.UI.screen.render_ui_tree(
SESSION_ID,
$container,
nodeP,
_parent_info, //parent_infoP ? _.cloneDeep(_parent_info) : null,
paramsP,
jobNoP,
null,
i,
null,
nodeP,
null,
$root_container,
);
$.each($divP.children(), function (key, val) {
if ($(val)?.data()?.xuData) {
$(val).data().xuData.iterate_info = iterate_info;
}
});
i++;
}
$elm.remove();
return { abort: true };
} catch (e) {
console.error(' Iterator Arr parse error');
return { abort: true };
}
},
'xu-for-key': async function ($elm, val) {
$elm.data().xuData.iterator_key = val.value;
return {};
},
'xu-for-val': async function ($elm, val) {
$elm.data().xuData.iterator_val = val.value;
return {};
},
'xu-class': async function ($elm, val) {
try {
const classes_string = val.value;
// let obj = _.isString(classes_string) ? JSON.parse(classes_string) : _.defaults(classes_string, {});
const classes_obj = _.isString(classes_string) ? JSON.parse(classes_string) : _.defaults(classes_string, {});
for await (const [cla, cond] of Object.entries(classes_obj)) {
let res = await func.expression.get(
SESSION_ID,
cond,
paramsP.dsSessionP,
'UI Attr EXP',
$elm.data().xuData.currentRecordId, // SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP].currentRecordId
null,
null,
null,
null,
null,
$elm.data().xuData.iterate_info,
);
if (res.result) {
$elm.addClass(cla);
} else {
$elm.removeClass(cla);
}
$elm.data().xuData.debug_info.attribute_stat['xu-class'] = $elm.attr('class');
}
return {};
} catch (e) {
console.warn('parse error:' + val.value);
return { abort: true };
}
},
'xu-exp': async function ($elm, val) {
let exp = val.value === null ? true : val.value;
let exp_ret = await func.expression.get(SESSION_ID, exp, paramsP.dsSessionP, 'UI Attr EXP', SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP].currentRecordId, null, null, null, null, null, $elm.data().xuData.iterate_info);
let value = func.UI.screen.fix_val_defaults(val.key, exp_ret.result);
var new_val = {
key: val.key,
value,
};
if (nodeP.tagName.substr(0, 3) === 'xu-') {
if (tag_fx[nodeP.tagName][new_val.key]) {
return await tag_fx[nodeP.tagName][new_val.key]($elm, new_val);
}
console.warn(`attribute ${new_val.key} not found for ${nodeP.tagName}`);
return {};
}
if (!$elm.data().xuData) return;
$elm.data().xuData.debug_info.attribute_stat[new_val.key] = new_val.value;
// IGNORE UNDEFINED or NULL ATTRIBUTES
if (typeof new_val.value === 'undefined' || new_val.value === null) {
return {};
}
// IGNORE ATTRIBUTES WITH EMPTY VALUES
if (glb.solid_attributes.includes(new_val.key) && !new_val.value) {
return {};
}
if (new_val.key.substr(0, 2) === 'xu') {
return await common_fx[new_val.key]($elm, new_val);
}
$elm.attr(new_val.key, ($elm.attr(new_val.key) || '') + new_val.value);
return {};
},
'xu-on': async function ($elm, val) {
CLIENT_ACTIVITY_TS = Date.now();
const trigger = val.key.split('xu-on:')[1].toLowerCase();
$elm.on(trigger, async function (evt) {
const _$elm = $(evt.currentTarget);
if (_.isEmpty(_$elm.data().xuAttributes)) return;
for await (const [key, val] of Object.entries(_$elm.data().xuAttributes['xu-on:' + evt.type])) {
if (!_.isEmpty(val.props.condition)) {
const expCond = await func.expression.get(SESSION_ID, val.props.condition, paramsP.dsSessionP, 'condition', paramsP.recordid); // execute expression
if (!expCond.result) continue;
}
if (val.event_modifiers && evt[val.event_modifiers]) {
evt[val.event_modifiers]();
}
// if (val.handler === 'custom') {
if (val.workflow) {
// do BL
for await (const [key2, val2] of Object.entries(val.workflow)) {
// var cond = val2.data.enabled;
// if (val2.data.enabled && val2.props.condition) {
// expCond = await func.expression.get(SESSION_ID, val2.props.condition, paramsP.dsSessionP, 'condition', paramsP.recordid); // execute expression
// cond = expCond.result;
// }
// if (!cond) continue;
if (!val2.data.enabled) continue; // added Jul 3, 25 - condition validate on execution
func.events.add_to_queue(SESSION_ID, 'element event', val2.id, evt.type, val2.data.action, val2.data.name, null, _$elm.attr('xu-ui-id'), null, evt, null, null, null, paramsP.dsSessionP, null, null, null, evt.type, val2.data.name, null, null, val2, null, null, null, null, null, null);
}
}
}
});
return {};
},
'xu-script': async function ($elm, val) {
var checkExist = setInterval(async function () {
if ($elm.is(':visible')) {
try {
// var res = eval('(' + val.value + ')');
// const fn = `(function(el) {
// ${val.value}
// })(document.querySelector(\`[xu-ui-id="${$elm.attr('xu-ui-id')}"]\`));`;
const fn = `async (el)=>{${val.value} };`;
var res = eval(fn);
await res($elm[0]);
// if (typeof res === 'function') {
// res($elm[0]);
// }
} catch (e) {
eval(val.value);
}
clearInterval(checkExist);
}
}, 100); // check every 100ms
return {};
},
'xu-style-global': async function ($elm, val) {
$('head').append(`<style>${val.value}</style>`);
return {};
},
'xu-style': async function ($elm, val) {
var cssString = val.value;
var parser = new cssjs();
var parsed = parser.parseCSS(cssString);
var xuUiId = `[xu-ui-id="${$elm.attr('xu-ui-id')}"]`;
$.each(parsed, function (key, val) {
var selectors_arr = val.selector.split(',');
$.each(selectors_arr, function (key2, val2) {
selectors_arr[key2] = `${xuUiId} ${val2}, ${xuUiId}${val2}`;
// console.log(new_selector);
});
val.selector = selectors_arr.join(',');
// console.log(parsed);
});
var newCSSString = parser.getCSSForEditor(parsed);
$('head').append(`<style>${newCSSString}</style>`);
return {};
},
'xu-cdn': async function ($elm, val) {
for await (const [key, resource] of Object.entries(val.value)) {
await load_cdn(resource);
}
return {};
},
'xu-ui-plugin': async function ($elm, val) {
var _session = SESSION_OBJ[SESSION_ID];
for await (const [plugin_name, value] of Object.entries(val.value)) {
const _plugin = APP_OBJ[_session.app_id]?.app_plugins_purchased?.[plugin_name];
if (_plugin?.installed && _plugin?.manifest?.['runtime.mjs']?.exist && _plugin?.manifest?.['index.mjs']?.exist && value.enabled) {
if (_plugin?.manifest?.['runtime.mjs'].dist && _plugin?.manifest?.['runtime.mjs']?.css) {
const plugin_runtime_css_url = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, 'dist/runtime.css');
func.utils.load_css_on_demand(plugin_runtime_css_url);
}
const plugin_index_src = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, `${_plugin.manifest['index.mjs'].dist ? 'dist/' : ''}index.mjs`);
const plugin_index_resources = await import(plugin_index_src);
let properties = _.cloneDeep(plugin_index_resources.properties);
for await (let [prop_name, prop_val] of Object.entries(properties)) {
prop_val.value = value?.attributes?.[prop_name];
if (value?.attributes?.[`xu-exp:${prop_name}`]) {
const res = await func.expression.get(SESSION_ID, value?.attributes?.[`xu-exp:${prop_name}`], paramsP.dsSessionP, 'UI Attr EXP');
prop_val.value = res.result;
}
}
// $elm.data().xu_ui_plugin = { properties };
const plugin_runtime_src = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, `${_plugin.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`);
const plugin_runtime_resources = await import(plugin_runtime_src);
if (plugin_runtime_resources.cdn && typeof _.isArray(plugin_runtime_resources.cdn)) {
for await (const resource of plugin_runtime_resources.cdn) {
await load_cdn(resource);
}
}
if (plugin_runtime_resources.fn) {
await plugin_runtime_resources.fn(plugin_name, $elm?.[0], properties);
// await plugin_runtime_resources.fn(plugin_name, $elm?.[0], $elm.data().xu_ui_plugin.properties);
}
}
}
return {};
},
'xu-store': async function ($elm, val) {
try {
const fields_obj = JSON5.parse(val.value);
for (const [field_id, value] of Object.entries(fields_obj)) {
func.datasource.add_dynamic_field_to_ds(SESSION_ID, paramsP.dsSessionP, field_id, value);
}
} catch (err) {
console.error(err);
}
return {};
},
'xu-viewport': async function ($elm, val) {
// functionality in draw_html_element
return {};
},
};
if (nodeP.tagName.substr(0, 3) === 'xu-') {
if (xu_func === 'xu-exp') {
return common_fx[xu_func]($elm, val);
}
if (tag_fx?.[nodeP.tagName]?.[xu_func]) {
let ret = await tag_fx[nodeP.tagName][xu_func]($elm, val);
return ret;
}
// if (xu_func !== "tree_id")
console.warn(`attribute ${xu_func} not found for ${nodeP.tagName}`);
return {};
}
if (_.isEmpty($elm.data())) {
return {};
}
if (!$elm.data().xuData.debug_info.attribute_stat) {
$elm.data().xuData.debug_info.attribute_stat = {};
}
if (xu_func !== 'xu-exp') {
$elm.data().xuData.debug_info.attribute_stat[xu_func] = val.value;
}
try {
if (!common_fx[xu_func]) {
console.warn('invalid xu-tag', xu_func, error);
return {};
}
return await common_fx[xu_func]($elm, val);
} catch (error) {
debugger;
}
};
func.UI.screen.fix_val_defaults = function (key, val) {
var ret = val;
if (
key === 'xu-render' &&
(typeof val === 'undefined' || val === null || val === '') //|| val === ""
) {
// ret = 'Y'; // was ret = "N";
ret = true;
}
if (
key === 'xu-show' &&
(typeof val === 'undefined' || val === null || val === '') //|| val === ""
) {
// ret = 'Y';
ret = true;
}
return ret;
};
func.UI.screen.set_attributes_new = async function (SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $elm, is_init, execute_attributes = [], refreshed_ds) {
var done_exp = [];
const _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
if (!_ds) return { abort: true };
const get_attr_value = async function (key) {
let ret = func.UI.screen.fix_val_defaults(key, nodeP.attributes[key]);
if (nodeP?.attributes?.hasOwnProperty(`xu-exp:${key}`)) {
ret = await get_xuExp(key);
}
return ret;
};
const get_xuExp = async function (attrib) {
if (is_skeleton) return;
if (glb.new_xu_render) {
let _xuData = $elm.data().xuData;
if (!_xuData.attr_exp_info) {
_xuData.attr_exp_info = {};
}
}
const attr = `xu-exp:${attrib}`;
if (!nodeP?.attributes?.hasOwnProperty(attr)) return;
// const attr = `xu-exp-${attrib}`;
var exp = nodeP.attributes[attr];
// if (!value) return func.UI.screen.fix_val_defaults(attrib, exp || nodeP.attributes[attrib]);
var res = await func.expression.get(SESSION_ID, exp, paramsP.dsSessionP, 'UI Attr EXP', _ds.currentRecordId);
if (glb.new_xu_render) {
_xuData.attr_exp_info[attrib] = res;
}
// nodeP.attributes[attr] = value; //{ value: value, res: res };
done_exp.push(attr);
return res.result; //func.UI.screen.fix_val_defaults(attrib, res.result);
};
var _ret = {};
if (nodeP.type !== 'element' || !nodeP.attributes) return _ret;
for (let [key, val] of Object.entries(nodeP.attributes)) {
// REMOVE STATIC ATTRIBUTES IF EXP EXISTS to avoid dup
if (key.substring(0, 6) === 'xu-exp') {
if (_.isEmpty(val)) {
delete nodeP.attributes[key];
continue;
}
const clean_key = key.split(':')[1];
if (typeof nodeP.attributes[clean_key] !== 'undefined') {
delete nodeP.attributes[clean_key];
}
}
// FIX abbreviations
if (glb.attr_abbreviations_arr.includes(key)) {
nodeP.attributes[`xu-on:${key.substring(3)}`] = [
{
handler: 'custom',
props: {},
event: [
{
id: Date.now(),
data: {
action: 'update',
name: { value: val },
enabled: true,
},
props: {},
},
],
},
];
delete nodeP.attributes[key];
}
}
for (let [key, val] of Object.entries(nodeP.attributes)) {
// FIX STATIC DEFAULTS
val = func.UI.screen.fix_val_defaults(key, val);
// REMOVE UNDEFINED or NULL ATTRIBUTES
if (typeof val === 'undefined' || val === null) {
delete nodeP.attributes[key];
}
// REMOVE ATTRIBUTES WITH EMPTY VALUES
if (glb.solid_attributes.includes(key) && !val) {
delete nodeP.attributes[key];
}
}
// XU-ATTRS
if (nodeP?.attributes?.['xu-attrs'] || nodeP?.attributes?.['xu-exp:xu-attrs']) {
const attr = 'xu-attrs';
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
attr,
$elm,
{
key: attr,
value: await get_attr_value(attr),
},
is_init,
);
}
// BEFORE
if (!_.isEmpty(nodeP.attributes)) {
for await (const [key, attr] of Object.entries(glb.run_xu_before)) {
if (_ret.abort || $container?.data()?.xuData?.pending_to_delete) break;
if (glb.html5_events_handler.includes(attr) || execute_attributes.includes(attr)) {
continue;
}
if (!nodeP?.attributes?.hasOwnProperty(attr) && !nodeP?.attributes?.hasOwnProperty(`xu-exp:${attr}`)) {
continue;
}
if (!nodeP.attributes[`xu-exp:${attr}`] && nodeP?.attributes?.hasOwnProperty(attr) && typeof func.UI.screen.fix_val_defaults(attr, nodeP.attributes[attr]) === 'undefined') {
continue;
}
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
attr,
$elm,
{
key: attr,
value: await get_attr_value(attr),
},
is_init,
);
_ret = _.assignIn(_ret, ret);
}
}
// ALL
for await (const [key, val] of Object.entries(nodeP.attributes)) {
if (_ret.abort || $container?.data()?.xuData?.pending_to_delete) break;
if (glb.html5_events_handler.includes(key) || execute_attributes.includes(key)) {
continue;
}
const new_key = key.split(':')[0]; // break expression
if (
nodeP.tagName !== 'xu-panel' &&
nodeP.tagName !== 'xu-teleport' && // nodeP.tagName.substr(0, 3) !== "xu-" &&
(new_key.substr(0, 2) !== 'xu' || new_key.substr(2, 1) !== '-')
) {
// handle common html attributes
try {
$elm.get(0).setAttribute(key, val);
} catch (err) {
console.error(err.message);
}
continue;
}
// handle xu attributes
try {
if ($elm?.data()?.xuAttributes) {
// in some cases xu data delete in purpose when refreshing the screen
$elm.data().xuAttributes[key] = val;
}
} catch (error) {
debugger;
console.error(error);
}
if (new_key === 'xu-exp' || nodeP.attributes['xu-exp:' + new_key] || glb.run_xu_before.includes(new_key) || glb.run_xu_after.includes(new_key)) {
continue;
}
if (new_key === 'xu-on') {
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
'xu-on',
$elm,
{
key: key,
// value: (await get_xuExp(new_key)) || func.UI.screen.fix_val_defaults(key, val),
value: await get_attr_value(key),
},
is_init,
refreshed_ds,
);
_ret = _.assignIn(_ret, ret);
continue;
}
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
new_key,
$elm,
{
key: key,
// value: (await get_xuExp(new_key)) || func.UI.screen.fix_val_defaults(key, val),
value: await get_attr_value(key),
},
is_init,
refreshed_ds,
);
_ret = _.assignIn(_ret, ret);
}
// EXP for
for await (const [key, val] of Object.entries(nodeP.attributes)) {
if (_ret.abort || $container?.data()?.xuData?.pending_to_delete) break;
const attr = key.split('xu-exp:')[1];
if (!attr) {
continue;
}
if (glb.html5_events_handler.includes(attr) || execute_attributes.includes(attr)) continue;
if (done_exp.includes(key)) {
continue;
}
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
'xu-exp',
$elm,
{
key: attr,
value: val,
},
true,
refreshed_ds,
);
_ret = _.assignIn(_ret, ret);
}
// AFTER
for await (const [key, attr] of Object.entries(glb.run_xu_after)) {
if ($container?.data()?.xuData?.pending_to_delete) break;
if (glb.html5_events_handler.includes(attr) || execute_attributes.includes(attr)) continue;
if (!nodeP.attributes || !nodeP.attributes[attr] & !nodeP.attributes[`xu-exp:${attr}`]) continue;
let ret = await func.UI.screen.execute_xu_functions(
SESSION_ID,
is_skeleton,
$root_container,
nodeP,
$container,
paramsP,
parent_infoP,
jobNoP,
keyP,
parent_nodeP,
attr,
$elm,
{
key: attr,
// value: (await get_xuExp(attr)) || func.UI.screen.fix_val_defaults(attr, nodeP.attributes[attr]),
value: await get_attr_value(attr),
},
is_init,
refreshed_ds,
);
_ret = _.assignIn(_ret, ret);
}
// REGISTER EVENTS ATTRIBUTES
for await (const [key, val] of Object.entries(nodeP.attributes)) {
if ($container?.data()?.xuData?.pending_to_delete) break;
if (!glb.html5_events_handler.includes(key)) break;
// $elm.attr(key, await get_xuExp(key)) || val;
$elm.attr(key, await get_xuExp(key)) || val;
}
return _ret;
};
func.UI.screen.panel_post_render_handler = async function (
SESSION_ID,
$container, // the parent program container
$wrapper, // the wrapper element contains the rendered panel elements e.g: xu-single-view
nodeP, // the xu-panel node
$panel_div, // the panel div
jobNoP,
) {
const _container_ds = SESSION_OBJ[SESSION_ID].DS_GLB[$container.data().xuData.paramsP.dsSessionP];
const _ds = SESSION_OBJ[SESSION_ID].DS_GLB[$wrapper.data().xuData.paramsP.dsSessionP];
const find_old_panels_elements = function () {
return func.UI.utils.find_in_element_data('xuPanelData', $container.parent(), 'xu-ui-id', $container.data()?.xuPanelData?.xu_panel_xu_ui_id);
};
var $old_panel_div = find_old_panels_elements();
const set_xuPanelData_to_the_new_rendered_items = () => {
$container.data().xuPanelWrapper = { isWrapper: true, panelXuAttributes: _.clone($wrapper.data().xuAttributes), panelDivData: _.clone($wrapper.data()) };
$container.attr('xu-panel-wrapper-id', $wrapper.attr('xu-ui-id'));
$.each($wrapper.children(), function (key, val) {
if (!$(val).data().xuPanelData) {
$(val).data().xuPanelData = {};
}
$(val).data().xuPanelData.parent_element_ui_id = $old_panel_div?.length ? $container.parent().data().xuData.ui_id : $container.data().xuData.ui_id;
$(val).data().xuPanelData.xu_panel_xu_ui_id = (nodeP.xu_tree_id || nodeP.id) + '-' + _container_ds?.currentRecordId;
$(val).data().xuPanelData.node = nodeP;
$(val).data().xuPanelData.$panel_div = $panel_div.clone(true);
});
};
set_xuPanelData_to_the_new_rendered_items();
if ($old_panel_div?.length) {
$($old_panel_div[0]).after($wrapper.children());
} else {
$.each($wrapper.children(), function (key, child) {
$.each($container.children(), function (key, elm) {
if ($(elm)?.data()?.xuData && $(elm)?.data()?.xuData?.elem_key === $(child)?.data()?.xuData?.elem_key) {
$(elm).remove();
}
});
$container.append($(child));
});
}
if (!$wrapper.data()?.xuData?.dsSession) return;
if ($old_panel_div?.length) {
$container.parent().data().xuData.paramsP.dsSessionP = _ds.parentDataSourceNo; // set the new ds when panel replaced
} else {
$container.data().xuData.paramsP.dsSessionP = _ds.parentDataSourceNo; // set the new ds when panel replaced
}
if ($old_panel_div?.length) {
$old_panel_div.remove();
}
return jobNoP;
};
const generate_xu_ui_id = async function (SESSION_ID, nodeP, $container, paramsP, keyP) {
const _paramsP = _.cloneDeep(paramsP);
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[_paramsP.dsSessionP];
const currentRecordId = $container?.data?.()?.xuData?.recordid || (_ds ? _ds.currentRecordId : '');
const key_path = `${$container?.data()?.xuData?.key_path || '0'}-${keyP || '0'}`;
const elem_key = `${nodeP.xu_tree_id || nodeP.id}-${key_path}-${currentRecordId}`;
let ui_id = `${nodeP.id}-${elem_key}-${_paramsP?.dsSessionP?.toString() || ''}`; //nodeP.xu_tree_id ||
const new_ui_id = await func.common.sha256(ui_id);
return new_ui_id;
};
func.UI.screen.create_container = async function (SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, classP, elem_propP, div_typeP, $appendToP, attr_str, is_placeholder) {
const _paramsP = _.cloneDeep(paramsP);
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[_paramsP.dsSessionP];
var $appendTo = $container;
if ($appendToP) $appendTo = $appendToP;
if (!$appendTo || !$appendTo.length) return null; // screen closed or not exist abort build
var div = 'div';
if (div_typeP) div = div_typeP;
var items = [];
if (nodeP.children)
items = nodeP.children.map(function (val) {
return val.xu_tree_id || val.id;
});
var currentRecordId = $container?.data?.()?.xuData?.recordid || (_ds ? _ds.currentRecordId : '');
// var xu_id = (glb.screen_num++).toString();
// xu_id = xu_id += '_' + currentRecordId;
try {
const key_path = `${$container?.data()?.xuData?.key_path || '0'}-${keyP || '0'}`;
const elem_key = `${nodeP.xu_tree_id || nodeP.id}-${key_path}-${currentRecordId}`;
// let ui_id = `${nodeP.id}-${elem_key}-${_paramsP?.dsSessionP?.toString() || ''}`; //nodeP.xu_tree_id ||
/////////////////////////////////
var $div;
if (div === 'svg') {
const draw_svg = function (element) {
const get_tag_str = function (element, prop, val) {
let class_str = '';
let attr_str = '';
for (const [key, val] of Object.entries(prop)) {
if (key.substr(0, 2) !== 'xu') {
attr_str += ` ${key}="${val}" `;
}
}
if (element === 'svg') {
return `<${element} ${attr_str} > `;
}
let ret = '';
if (val?.children?.length) {
ret = iterate_svg(val);
}
return `<${element} ${class_str} ${attr_str} > ${ret} </${element}>`;
};
let svg_str = get_tag_str(element, prop);
let inner_str = '';
const iterate_svg = function (node) {
let ret = '';
if (node.children) {
for (let val of node.children) {
let prop = val.attributes;
ret += get_tag_str(val.tagName, prop, val);
}
}
return ret;
};
inner_str = iterate_svg(nodeP);
$div = $(svg_str + inner_str + '</svg>').appendTo($appendTo);
};
draw_svg(div_typeP);
} else {
$div = $(`<${div} ${attr_str ? attr_str : ''}>`);
}
// // Returns a 32-bit unsigned integer hash of a string (FNV-1a)
// function hash32(str) {
// let h = 0x811c9dc5; // FNV offset basis
// for (let i = 0; i < str.length; i++) {
// h ^= str.charCodeAt(i);
// // multiply by FNV prime (2^24 + 2^8 + 0x93) with 32-bit overflow
// h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);
// }
// // Convert to unsigned 32-bit
// return h >>> 0;
// }
// function hash32hex(str) {
// return (hash32(str) >>> 0).toString(16).padStart(8, '0');
// }
// const new_ui_id = hash32hex(ui_id);
// const new_ui_id = await func.common.sha256(ui_id);
const new_ui_id = await generate_xu_ui_id(SESSION_ID, nodeP, $container, paramsP, keyP);
$div
.attr('xu-ui-id', new_ui_id)
// .attr('xu-node-id', nodeP.id)
.data({
xuData: {
prog_id: _paramsP.prog_id,
nodeid: nodeP.id,
ui_type: nodeP.tagName,
// xu_id,
recordid: currentRecordId,
paramsP: _paramsP,
key: keyP,
key_path, //:($container?.data()?.xuData?.key || "0") + "-" + (keyP || "0"),
screenId: _paramsP.screenId,
parent_container: $container?.attr('id'),
elem_key,
properties: prop,
node: nodeP,
node_org: _.cloneDeep(nodeP),
is_panelP: _paramsP.is_panelP,
ui_id: new_ui_id,
elem_prop: elem_propP,
debug_info: {
id: nodeP.id,
parent_id: $container?.data()?.xuData?.ui_id,
items: items,
},
parent_node: parent_nodeP,
currentRecordId: currentRecordId,
$root_container: $root_container,
parent_element_ui_id: $container?.data()?.xuData?.ui_id,
},
xuAttributes: {},
});
if (is_placeholder) {
$div.addClass('display_none');
}
if (div_typeP !== 'svg') {
$div.appendTo($appendTo);
}
} catch (e) {
console.error(e);
}
if (parent_infoP?.iterate_info) {
$div.data().xuData.iterate_info = parent_infoP.iterate_info;
}
if (classP) $div.addClass(classP);
return $div;
};
func.UI.screen.execute_screen_ready_events = async function (SESSION_ID, paramsP, sourceP, $div, jobNoP, $div_objP) {
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
if (!_ds) return;
var viewEventExec_arr = [];
const execute_view_events = async function (sourceP) {
for await (const val of viewEventExec_arr) {
cond = val.eventInfo.data.enabled;
if (val.expression) {
expCond = await func.expression.get(SESSION_ID, val.expression, paramsP.dsSessionP, 'condition', paramsP.rowIdP); // execute expression
cond = expCond.result;
}
if (cond) {
await func.events.execute(
SESSION_ID,
null,
val.eventId,
val.triggerId,
val.eventInfo.data.action,
val.eventInfo.data.name,
null,
null,
null,
null,
val.eventInfo.data.action, //val.eventInfo[4]
null,
paramsP.dsSessionP,
val.eventId,
sourceP + ' event',
true,
null,
null,
paramsP.dsSessionP,
null,
null,
val.eventInfo, // val.eventInfo[8],
null,
null,
_ds.prog_id,
_ds.nodeId,
_ds.parentDataSourceNo,
$div,
);
// update changed values to screen added 18/09/13
var fields_to_refresh = [];
try {
var current_record_id = _ds.currentRecordId;
} catch (e) {
console.error(e);
}
if (_ds?.data_feed?.form_fields_changed?.[current_record_id]) {
$.each(_ds.data_feed.form_fields_changed[current_record_id], function (key, val) {
fields_to_refresh.push(key);
});
var containerId = _ds.containerId;
var $container = $('#' + containerId);
if ($container?.data()?.xuData?.is_mobile_modal || $container?.data()?.xuData?.params?.is_mobile_page) {
await func.UI.screen.refresh_container(SESSION_ID, 'init', fields_to_refresh, $container, paramsP.dsSessionP, null);
} else {
$container.trigger(containerId + '.refresh', ['init', fields_to_refresh]);
}
if ($div_objP) {
await func.UI.screen.refresh_container(SESSION_ID, 'init', fields_to_refresh, $div_objP, paramsP.dsSessionP, null);
}
}
}
continue;
}
};
const get_view_events_count = async function (typeP) {
const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
viewEventExec_arr = [];
if (!_prog.progEvents || _.isEmpty(_prog.progEvents)) {
return 0;
}
for await (const event_obj of _prog.progEvents) {
if (event_obj.data.type !== typeP) continue;
if (_.isEmpty(event_obj.workflow)) continue;
if (event_obj.data.condition) {
let res = await func.expression.get(SESSION_ID, event_obj.data.condition, paramsP.dsSessionP, 'condition', paramsP.rowIdP, null, null, null, null, event_obj);
if (!res.result) {
continue;
}
}
for await (const trigger_obj of event_obj.workflow) {
var expression = undefined;
var cond = undefined;
if (!trigger_obj.data.enabled) {
continue;
}
cond = true;
if (trigger_obj.props.condition) expression = trigger_obj.props.condition;
var expCond = {};
if (expression) {
expCond = await func.expression.get(SESSION_ID, expression, paramsP.dsSessionP, 'condition', paramsP.rowIdP, trigger_obj.data.type); // execute expression
cond = expCond.result;
expCond.conditional = true;
}
if (!trigger_obj.data.action) {
func.utils.debug_report(SESSION_ID, 'get_view_events_count', `Error initiating ${typeP} prog: ${_ds.viewSourceDesc} reason: missing action`, 'E');
break;
}
if (!glb.REFERENCE_LESS_FUNCTIONS.includes(trigger_obj.data.action) && !trigger_obj.data.name?.prog) {
func.utils.debug_report(SESSION_ID, 'get_view_events_count', `Error initiating ${typeP} prog: ${_ds.viewSourceDesc} reason: missing reference`, 'E');
break;
}
viewEventExec_arr.push({
eventInfo: trigger_obj,
eventId: event_obj.id,
triggerId: trigger_obj.id,
expression: expression,
});
}
}
return viewEventExec_arr.length;
};
try {
let count = await get_view_events_count('screen_ready');
if (!count) return;
return await execute_view_events(sourceP);
} catch (error) {
debugger;
}
};
func.UI.screen.screen_loading_done = async function (SESSION_ID, paramsP, $div, jobNoP) {
// console.log($div.attr('xu-ui-id'));
// await
let retries = 0;
let interval = setInterval(() => {
if (!$(SESSION_OBJ[SESSION_ID].root_element).find(`[xu-ui-id=${$div.attr('xu-ui-id')}]`).length && !$(SESSION_OBJ[SESSION_ID].root_element).find(`[xu-panel-wrapper-id=${$div.attr('xu-ui-id')}]`).length && !$div.attr('xu-ui-id') && $div.attr('xu-ui-id')) {
retries++;
if (retries > 100) {
console.warn('deadlock detected for screen ready');
} else {
return $div;
}
}
clearInterval(interval);
func.UI.screen.execute_screen_ready_events(SESSION_ID, paramsP, paramsP.screenInfo.properties?.renderType, $div, jobNoP);
var _session = SESSION_OBJ[SESSION_ID];
func.events.delete_job(SESSION_ID, jobNoP);
func.UI.utils.screen_blocker(false, paramsP.prog_id + (paramsP.sourceScreenP ? '_' + paramsP.sourceScreenP : ''));
if (_session.prog_id === paramsP.prog_id) {
_session.system_ready = true;
if (_session.engine_mode === 'live_preview' && STUDIO_PEER_CONN_SEND_METHOD) {
STUDIO_PEER_CONN_SEND_METHOD({
service: 'system_ready',
data: {},
id: STUDIO_PEER.id,
source: 'runtime',
session_id: SESSION_ID,
app_id: _session.app_id,
gtp_token: _session.gtp_token,
app_token: _session.app_token,
});
// }
}
}
}, 100);
return $div;
};
func.UI.screen.render_ui_tree = async function (SESSION_ID, $container, nodeP, parent_infoP, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $root_container) {
if (!is_skeleton) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[paramsP.dsSessionP];
}
var prop;
try {
prop = nodeP.attributes;
} catch (error) {
// debugger;
}
///////////
var is_mobile = glb.MOBILE_ARR.includes(paramsP.screenInfo.properties?.menuType) ? true : false;
const get_element_info = function () {
var ret = {};
let currentRecordId = _ds?.currentRecordId || '';
let $div = func.UI.utils.find_in_element_data('xuData', $container.parent(), 'nodeid', nodeP.id);
$.each($div, function (key, val) {
if ($(val)?.data().xuData?.recordid === currentRecordId && $(val)?.data().xuData?.key === keyP && $(val)?.prop('tagName') !== 'XURENDER') {
ret = {
div: $div,
};
}
});
return ret;
};
const init = async function () {
var ret = true;
if (!nodeP) ret = false;
return ret;
};
const debug = function (is_errorP, error_descP) {
func.utils.debug.log(SESSION_ID, paramsP.prog_id + '_' + nodeP.id_org + '_ui_prop', {
module: 'gui',
action: 'init',
prop: nodeP.id,
details: error_descP,
result: null,
error: is_errorP,
source: _ds?.tree_obj?.menuName || '',
fields: null,
type: null,
prog_id: paramsP.prog_id,
dsSession: null,
});
};
const open_modal = async function ($div) {
const modal_id = 'app_modal-' + paramsP.dsSessionP.toString();
var xu_modal_controller = document.querySelector('xu-modal-controller');
if (!xu_modal_controller) {
func.UI.component.create_app_modal_component(SESSION_ID, modal_id);
xu_modal_controller = document.querySelector('xu-modal-controller');
}
var controller_params = $(xu_modal_controller).data('xuControllerParams');
if (!controller_params) {
controller_params = {};
}
var params = {
menuTitle: paramsP.screenInfo.properties?.menuTitle,
screenId: paramsP.screenId,
$dialogDiv: $div.children(),
$container: $container,
dsSession: paramsP.dsSessionP,
};
controller_params[modal_id] = params;
$(xu_modal_controller).data('xuControllerParams', controller_params);
const modalController = await new UI_FRAMEWORK_PLUGIN.modal();
if (!APP_MODAL_OBJ[modal_id]) {
const modal = await modalController.create(SESSION_ID, modal_id, paramsP.screenInfo, close_modal);
APP_MODAL_OBJ[modal_id] = modal;
} else {
$(modal_id).empty();
}
await modalController.init(SESSION_ID, modal_id);
return $div;
};
const close_modal = async function (modal_id) {
delete APP_MODAL_OBJ[modal_id];
const xu_modal_controller = document.querySelector('xu-modal-controller');
var params = $(xu_modal_controller).data().xuControllerParams[modal_id];
if (params && params.$container) {
await func.UI.screen.validate_exit_events(SESSION_ID, params.$container.data().xuData.paramsP, null);
func.datasource.clean_all(SESSION_ID, params.dsSession);
}
};
const close_all_modals = function () {
$.each(APP_MODAL_OBJ, function (key, val) {
if (val) {
// close_modal(key);
UI_FRAMEWORK_PLUGIN.modal.close(key);
}
});
};
const open_popover = async function ($div) {
const xu_popover_controller = func.UI.component.create_app_popover_component(SESSION_ID);
$(xu_popover_controller).data('xuControllerParams', {
menuTitle: paramsP.screenInfo.properties?.menuTitle,
screenId: paramsP.screenId,
$dialogDiv: $div.children(),
$container: $container,
});
const popover = new UI_FRAMEWORK_PLUGIN.popover(
SESSION_ID,
// ELEMENT_CLICK_EVENT,
// props
);
await popover.open(SESSION_ID);
CURRENT_APP_POPOVER = popover;
return;
popoverController
.create({
component: 'xu-popover-content-' + SESSION_ID,
event: ELEMENT_CLICK_EVENT,
translucent: true,
})
.then((modal) => {
modal.present().then(() => {
CURRENT_APP_POPOVER = modal;
if (callbackP) callbackP($div);
});
});
};
const iterate_child = async function ($divP, nodeP, parent_infoP, $root_container, before_record_function) {
if (!is_mobile && nodeP.busy) return;
nodeP.busy = true;
const done = async function ($divP) {
setTimeout(function () {
nodeP.busy = false;
}, 1000);
return $divP;
};
if (!nodeP || !nodeP.children) {
return await done($divP);
}
if (before_record_function) {
await before_record_function();
}
if (nodeP?.children?.length) {
let node_promises = [];
for (const [key, val] of Object.entries(nodeP.children)) {
node_promises.push(
new Promise(async (resolve, reject) => {
const ret = await func.UI.screen.render_ui_tree(SESSION_ID, $divP, nodeP.children[key], parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, nodeP, null, $root_container);
resolve();
}),
);
}
await Promise.all(node_promises);
}
return await done($divP);
};
// const iterate_child = async function ($divP, nodeP, parent_infoP, $root_container, before_record_function) {
// if (!is_mobile && nodeP.busy) return;
// nodeP.busy = true;
// const done = async function ($divP) {
// setTimeout(function () {
// nodeP.busy = false;
// }, 1000);
// return $divP;
// };
// if (!nodeP || !nodeP.children) {
// return await done($divP);
// }
// if (before_record_function) {
// await before_record_function();
// }
// if (nodeP?.children?.length) {
// for await (const [key, val] of Object.entries(nodeP.children)) {
// const ret = await func.UI.screen.render_ui_tree(SESSION_ID, $divP, nodeP.children[key], parent_infoP, paramsP, jobNoP, is_skeleton, Number(key), null, nodeP, null, $root_container);
// }
// }
// return await done($divP);
// };
const _$ = function ($elm) {
try {
const id = $elm.attr('xu-ui-id');
if (!id || !glb.DEBUG_MODE) return $elm;
const $el = $(`[xu-ui-id="${id}"]`);
if ($el.length > 1) {
console.warn('Multiple elements for xu-ui-id: ' + id, $el);
}
return $($el[0]);
} catch (e) {
console.error(e);
}
};
const hover_in = function ($div, e) {
if (is_skeleton || (e && (EXP_BUSY || UI_WORKER_OBJ.jobs.length))) return;
CLIENT_ACTIVITY_TS = Date.now();
if (_$($container)?.data()?.xuData?.debug_info) _$($container).data().xuData.debug_info.hover_item = $div.attr('xu-ui-id');
if (!_ds) return;
///////// SET Attributes///////////
let attributes = {};
$.each($div[0].attributes, function (index, attr) {
attributes[attr.name] = attr.value;
});
_session.DS_GLB[0].data_system.SYS_OBJ_WIN_ELEMENT_HOVERED_ATTRIBUTES = attributes;
//////////////////////////////////
if (!$div.data()?.xuData) return;
const _iterate_info = $div.data().xuData.iterate_info;
if (_iterate_info) {
if (_iterate_info.is_key_dynamic_field) {
_ds.dynamic_fields[_iterate_info.iterator_key].value = _iterate_info._key;
} else {
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
_ds.data_feed.rows[row_idx][_iterate_info.iterator_key] = _iterate_info._key;
} catch (err) {
console.error(err);
}
}
if (_iterate_info.is_val_dynamic_field) {
_ds.dynamic_fields[_iterate_info.iterator_val].value = _iterate_info._val;
} else {
try {
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
_ds.data_feed.rows[row_idx][_iterate_info.iterator_val] = _iterate_info._val;
} catch (err) {
console.error(err);
}
}
}
if ($div && _$($div) && _ds && paramsP.renderType === 'grid') {
func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'update_datasource', { currentRecordId: _$($div).data().xuData.currentRecordId }, null, null, paramsP.dsSessionP);
}
const set_value = function (field_id, value) {
var currentRecordId = _$($div).data().xuData.currentRecordId;
func.UI.worker.add_to_queue(
SESSION_ID,
'gui event',
'update_datasource',
{
currentRecordId,
field_id,
field_value: value,
},
null,
null,
paramsP.dsSessionP,
);
};
if ($div?.data()?.iterate_info) {
var data = $div.data().xuData.iterate_info;
if (data.iterator_key) {
set_value(data.iterator_key, data._key);
}
if (data.iterator_val) {
set_value(data.iterator_val, data._val);
}
}
};
const hover_out = function () {
if (is_skeleton) return;
CLIENT_ACTIVITY_TS = Date.now();
if (_$($container)?.data()?.xuData?.debug_info) {
_$($container).data().xuData.debug_info.hover_item = null;
}
if (_ds?.data_system) {
SESSION_OBJ[SESSION_ID].DS_GLB[0].data_system.SYS_OBJ_WIN_ELEMENT_HOVERED_ATTRIBUTES = {};
}
};
const render_screen_type = async function ($div) {
const set_call_screen_properties_values = async function (ui_framework) {
params.properties = {};
const get_values = async function (property) {
var property_value = paramsP?.screenInfo?.properties?.[property] || paramsP?.screenInfo?.properties?.frameworkProperties?.[property];
if (paramsP?.call_screen_propertiesP) {
if (paramsP.call_screen_propertiesP?.[property]) {
property_value = paramsP.call_screen_propertiesP[property];
}
if (paramsP.call_screen_propertiesP[`xu-exp:${property}`]) {
property_value = (await func.expression.get(SESSION_ID, paramsP.call_screen_propertiesP[`xu-exp:${property}`], paramsP.dsSessionP, property)).result;
}
}
return property_value;
};
params.properties['name'] = await get_values('menuTitle');
if (await ui_framework?.properties()) {
for await (const [key, val] of Object.entries(await ui_framework.properties())) {
params.properties[key] = await get_values(key);
}
}
};
var $div_content = $div.children();
$.each($div_content, function (key, val) {
if (!$(val)?.data()?.xuData?.parent_container) {
return true;
}
$(val).data().xuData.parent_container = $div.data().xuData.parent_container;
});
let $ret = $div;
var $nav = $(SESSION_OBJ[SESSION_ID].root_element).find('xu-nav');
var params;
switch (paramsP.screen_type) {
case 'modal':
const modal_id = 'app_modal-' + paramsP.dsSessionP.toString();
var xu_modal_controller = document.querySelector('xu-modal-controller');
if (!xu_modal_controller) {
func.UI.component.create_app_modal_component(SESSION_ID, modal_id);
xu_modal_controller = document.querySelector('xu-modal-controller');
}
var controller_params = $(xu_modal_controller).data('xuControllerParams');
if (!controller_params) {
controller_params = {};
}
params = {
screenId: paramsP.screenId,
$dialogDiv: $div.children(),
$container: $container,
dsSession: paramsP.dsSessionP,
modal_id,
screenInfo: paramsP.screenInfo,
close_callback: close_modal,
paramsP,
};
controller_params[modal_id] = params;
$(xu_modal_controller).data('xuControllerParams', controller_params);
const modalController = await new UI_FRAMEWORK_PLUGIN.modal();
await set_call_screen_properties_values(modalController);
if (!APP_MODAL_OBJ[modal_id]) {
const modal = await modalController.create(params);
APP_MODAL_OBJ[modal_id] = modal;
} else {
$(modal_id).empty();
}
await modalController.init(params);
break;
case 'popover':
// open_popover($div);
const xu_popover_controller = func.UI.component.create_app_popover_component(SESSION_ID);
params = {
menuTitle: paramsP.screenInfo.properties?.menuTitle,
screenId: paramsP.screenId,
$dialogDiv: $div.children(),
$container: $container,
};
$(xu_popover_controller).data('xuControllerParams', params);
const popover = new UI_FRAMEWORK_PLUGIN.popover(SESSION_ID);
await set_call_screen_properties_values(popover);
await popover.open(params);
CURRENT_APP_POPOVER = popover;
func.UI.utils.screen_blocker(false, paramsP.prog_id + '_' + paramsP.sourceScreenP);
break;
case 'page':
const nav = $nav[0];
params = {
div: $div_content,
name: paramsP.screenInfo.properties?.menuTitle,
screenId: paramsP.screenId,
$container: $container,
dsSession: paramsP.dsSessionP,
SESSION_ID,
nav,
paramsP,
};
var component_name = 'xu-page-component-' + paramsP.dsSessionP;
if (!$(nav).data().xuData.nav_params) {
$(nav).data().xuData.nav_params = {};
}
//restore validate
if ($(nav)?.data()?.xuData?.params?.[paramsP.dsSessionP]) {
params.$container.data().xuData.validate_screen_ready = $(nav).data().xuData.params[paramsP.dsSessionP].$container.data().xuData.validate_screen_ready;
}
if (!$(nav)?.data()?.xuData) return;
$(nav).data().xuData.nav_params[paramsP.dsSessionP] = params;
if (!$(component_name).length) {
await func.UI.component.create_app_page_component(SESSION_ID, paramsP.dsSessionP);
const page = new UI_FRAMEWORK_PLUGIN.page();
await set_call_screen_properties_values(page);
await page.create(params);
await page.init(params);
nav.push(component_name, { params });
} else {
debugger;
$(component_name).empty();
await UI_FRAMEWORK_PLUGIN.page(SESSION_ID, paramsP.dsSessionP);
}
$div.data().xuData.paramsP = $container.data().xuData.paramsP;
break;
case 'panel':
$container.append($div_content);
$ret = $container;
break;
default: // set data to nav to use in the component
if ($nav && $nav.length) {
// refresh made
} else {
$nav = $('<xu-nav>'); //.attr('xu-ui-id', SESSION_ID);
$container.append($nav);
func.UI.component.init_xu_nav($container, $nav);
}
$nav.data().xuData.$div = $div_content;
await $nav[0].setRoot('xu-root-component-' + SESSION_ID);
$ret = $container;
break;
}
return $ret;
};
if (!(await init())) return;
debug();
const fx = {
widget: async function () {
var _session = SESSION_OBJ[SESSION_ID];
var exist_elm_obj = get_element_info();
var $div = exist_elm_obj.div;
if (!exist_elm_obj.div) {
$div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, 'widget_wrapper', null, null, null, null);
//////////////////////////
let plugin_name = prop['xu-widget'],
method = prop['xu-method'],
dsP = paramsP.dsSessionP,
propsP = prop,
sourceP = 'widgets';
// const set_SYS_GLOBAL_OBJ_WIDGET_INFO = async function (docP) {
// var obj = _.clone(docP);
// obj.date = await func.utils.get_dateTime(
// SESSION_ID,
// "SYS_DATE",
// docP.date
// );
// obj.time = await func.utils.get_dateTime(
// SESSION_ID,
// "SYS_TIME",
// docP.date
// );
// var datasource_changes = {
// [0]: {
// ["data_system"]: {
// ["SYS_GLOBAL_OBJ_WIDGET_INFO"]: obj,
// },
// },
// };
// await func.datasource.update(SESSION_ID, datasource_changes);
// };
const call_plugin_api = async function (plugin_nameP, dataP) {
return await func.utils.call_plugin_api(SESSION_ID, plugin_nameP, dataP);
};
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, _session.DS_GLB[dsP].prog_id + '_' + _session.DS_GLB[dsP].callingMenuId, {
module: 'widgets',
action: 'Init',
source: sourceP,
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'widgets',
prog_id: _session.DS_GLB[dsP].prog_id,
});
};
const get_fields_data = async function (fields, props) {
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, _session.DS_GLB[dsP].prog_id + '_' + _session.DS_GLB[dsP].callingMenuId, {
module: 'widgets',
action: 'Init',
source: sourceP,
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'widgets',
prog_id: _session.DS_GLB[dsP].prog_id,
});
};
const get_property_value = async function (fieldIdP, val) {
if (!val) return;
var value = fieldIdP in props ? props[fieldIdP] : typeof val.defaultValue === 'function' ? val?.defaultValue?.() : val?.defaultValue;
if (val.render === 'eventId') {
value = props?.[fieldIdP]?.event;
}
if (props[`xu-exp:${fieldIdP}`]) {
value = (await func.expression.get(SESSION_ID, props[`xu-exp:${fieldIdP}`], dsP, 'widget property')).result;
}
return func.common.get_cast_val(
SESSION_ID,
'widgets',
fieldIdP,
val.type, //val.type !== "string" || val.type !== "number" ? "string" : val.type,
value,
null,
);
};
var data_obj = {};
var return_code = 1;
// $.each(fields, function (key, val) {
for await (const [key, val] of Object.entries(fields)) {
data_obj[key] = await get_property_value(key, val);
if (!data_obj[key] && val.mandatory) {
return_code = -1;
report_error(`${key} is a mandatory field.`);
break;
}
// console.log(val);
}
for await (const key of ['xu-bind']) {
data_obj[key] = await get_property_value(key, props[key]);
}
return { code: return_code, data: data_obj };
};
const load_css_style = function () {
const get_css_path = function (resource) {
if (_session.worker_type === 'Dev') {
return `../../plugins/${plugin_name}/${resource}`;
}
return `https://${_session.domain}/plugins/${plugin_name}/${APP_OBJ[_session.app_id].app_plugins_purchased[plugin_name].manifest[resource].dist ? 'dist/' : ''}${resource}?gtp_token=${_session.gtp_token}&app_id=${_session.app_id}`;
};
let path = get_css_path('style.css');
func.utils.load_css_on_demand(path);
};
const _plugin = APP_OBJ[_session.app_id]?.app_plugins_purchased?.[plugin_name];
const index = await func.utils.get_plugin_resource(SESSION_ID, plugin_name, `${_plugin.manifest['index.mjs'].dist ? 'dist/' : ''}index.mjs`);
const methods = index.methods;
if (methods && !methods[method]) {
return report_error('method not found');
}
const fields_ret = await get_fields_data(methods[method].fields, propsP);
if (fields_ret.code < 0) {
return report_error(fields_ret.data);
}
const fields = fields_ret.data;
let exclude_attributes = [];
for await (const [key, val] of Object.entries(propsP)) {
if (typeof fields[key] !== 'undefined' || typeof fields[`xu-exp:${key}`] !== 'undefined') {
exclude_attributes.push(key);
}
}
let ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div, true, exclude_attributes);
$div.addClass('widget_wrapper'); // class get override in set_attributes_new
if (!APP_OBJ[_session.app_id].app_plugins_purchased[plugin_name]) {
return report_error(`plugin ${plugin_name} not found`);
}
if (APP_OBJ[_session.app_id].app_plugins_purchased[plugin_name].manifest['style.css'].exist) {
load_css_style();
}
const plugin_setup_ret = await func.utils.get_plugin_setup(SESSION_ID, plugin_name);
if (plugin_setup_ret.code < 0) {
return report_error(plugin_setup_ret);
}
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: paramsP.dsSessionP,
job_id: jobNoP,
});
const params = {
SESSION_ID,
method,
_session,
dsP,
sourceP,
propsP,
plugin_name,
$containerP: $div,
plugin_setup: plugin_setup_ret.data,
report_error,
call_plugin_api,
// set_SYS_GLOBAL_OBJ_WIDGET_INFO,
api_utils,
};
const fx = await func.utils.get_plugin_resource(SESSION_ID, plugin_name, `${_plugin.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`);
if (_plugin?.manifest?.['runtime.mjs'].dist && _plugin?.manifest?.['runtime.mjs']?.css) {
const plugin_runtime_css_url = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, 'dist/runtime.css');
func.utils.load_css_on_demand(plugin_runtime_css_url);
}
if (!fx[method]) {
throw `Method: ${method} does not exist`;
}
try {
await fx[method](fields, params);
} catch (err) {
func.utils.debug_report(SESSION_ID, `${plugin_name} widget`, err.message, 'E');
}
}
return $div;
},
[`xu-single-view`]: async function () {
var exist_elm_obj = get_element_info();
var $div = exist_elm_obj.div;
if (!exist_elm_obj.div) {
var $wrapper = $('<div>');
$div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, null, null, 'div', $wrapper, '');
if (!$div) return;
if (!REFRESHER_IN_PROGRESS && (paramsP.is_mobile_popover || paramsP.is_mobile_page)) {
close_all_modals();
}
$div.hover(
function (e) {
hover_in();
// func.UI.screen.hover_in(SESSION_ID, null, $container, paramsP, is_skeleton);
},
function (e) {
// func.UI.screen.hover_out(SESSION_ID, $container, is_skeleton, paramsP);
hover_out();
},
);
}
const ret = await iterate_child($div, nodeP, null, $div);
if (_.isEmpty($container.data().xuAttributes)) {
await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $container, true);
}
$.each($div.data().xuData, function (key, val) {
$container.data().xuData[key] = _.cloneDeep(val);
});
$.each($div.data().xuAttributes, function (key, val) {
$container.data().xuAttributes[key] = _.cloneDeep(val);
});
return await render_screen_type($div);
},
[`xu-multi-view`]: async function () {
var $div = $container;
if (!$div.data().xuData.node || !$div.data().xuData.node.children) {
$div.data().xuData.node = nodeP;
}
if (!$div.data().xuData.debug_info) {
$div.data().xuData.debug_info = {
id: nodeP.id,
parent_id: $container.data().xuData.ui_id,
};
}
const done = async function (continuous_idx) {
// const do_callback = async function ($div) {
// // if ($root_container.data().xuData.progress_bar_circle) {
// // setTimeout(function () {
// // $.each(
// // $root_container.data().xuData.progress_bar_circle,
// // function (key, val) {
// // val.bar.set(parseFloat(val.value)); // Number from 0.0 to 1.0
// // }
// // );
// // }, 2000);
// // }
// if (paramsP.screenInfo.properties?.rtl) {
// $div_content.attr('dir', 'rtl');
// }
// return $div;
// };
await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $container, true);
return await render_screen_type($div);
};
if (!REFRESHER_IN_PROGRESS && (paramsP.is_mobile_popover || paramsP.is_mobile_page)) {
close_all_modals();
}
const empty_result = async function () {
// var content = prop.empty_result_content || '';
// var res = await func.expression.get(
// SESSION_ID,
// content, // prop["xu-exp:empty_result_content"],
// paramsP.dsSessionP,
// 'empty_result_content_EXP',
// _ds.currentRecordId,
// );
// content = res.result;
// let empty_result_node = {
// type: 'element',
// id: crypto.randomUUID(),
// content,
// // : content || (typeof content === "undefined" && "Empty results"),
// tagName: 'div',
// attributes: {},
// children: [],
// };
// const ret = await func.UI.screen.render_ui_tree(SESSION_ID, $container, empty_result_node, parent_infoP, paramsP, jobNoP, null, 0, null, nodeP, null, $root_container);
await func.events.validate(SESSION_ID, 'record_not_found', paramsP.dsSessionP);
return await done(null);
};
var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[paramsP.dsSessionP];
var continuous_idx = null;
if (!_ds.data_feed || _.isEmpty(_ds.data_feed.rows)) {
return await empty_result();
}
var i = 0;
for await (const [key, val] of Object.entries(_ds.data_feed.rows)) {
var node = JSON.parse(JSON.stringify(nodeP));
_ds.currentRecordId = val._ROWID;
const ret = await iterate_child($div, node, { continuous_idx }, $root_container);
if (_.isEmpty($container.data().xuAttributes)) {
await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $container, true);
}
}
return await done(continuous_idx);
},
[`xu-panel`]: async function () {
const done = async function ($new_div) {
if (!$container.data()?.xuData?.paramsP) {
return $container;
}
var $div_items = $div.data().xuData.node.children;
await func.UI.screen.panel_post_render_handler(SESSION_ID, $container, $new_div, nodeP, $div, jobNoP);
// TO FIX should be timeout
$container.data().xuData.node.children = $div_items;
return $container;
};
var $wrapper = $('<div>');
$div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, null, null, null, $wrapper, '');
let ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div.clone(true), true, undefined, refreshed_ds);
if (ret.abort) {
// render N
return (ret.$new_div = $('<template>').append($div));
}
let $ret_panel_div = ret.$new_div;
if (!$ret_panel_div?.children()?.length) {
////// render default children tree
if (nodeP.children.length) {
$ret_panel_div = await func.UI.screen.render_ui_tree(SESSION_ID, $container, nodeP.children[0], parent_infoP, paramsP, jobNoP, null, 0, null, nodeP, null, $root_container);
}
}
let ret_done = await done($ret_panel_div);
return ret_done;
},
};
const draw_html_element_org = async function (element) {
const done = async function (ret = {}) {
return $div;
};
if (!element || element === 'script') return await done();
let str = '';
var $div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, null, null, element, null, str);
$div.hover(
function (e) {
hover_in($div, e);
},
function (e) {
hover_out();
},
);
if (paramsP.paramsP === 'grid' || parent_infoP?.iterate_info) {
$div.on('click contextmenu', function (e) {
hover_in($div, e);
});
}
// let ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $container, nodeP, $div, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div, true);
let ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div, true);
if (ret.abort || nodeP.tagName === 'svg' || !_.isEmpty(nodeP?.attributes?.['xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-html']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-html'])) {
return await done(ret);
}
// check if iterator made to prevent children render
if (nodeP?.attributes?.['xu-viewport'] == 'true') {
// const xu_viewport = async function () {
// const data = { $div: $div.clone(true), nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $container };
// const container_id = $container.attr('xu-ui-id');
// if (!UI_WORKER_OBJ.pending_for_viewport_render[container_id]) {
// UI_WORKER_OBJ.pending_for_viewport_render[container_id] = { base_$div: $div, data: [], $container };
// await iterate_child($div, nodeP, parent_infoP, $root_container);
// } else {
// $div.remove();
// }
// UI_WORKER_OBJ.pending_for_viewport_render[container_id].data.push(data);
// // if (!$div.children().length) {
// // // render the first element to determine height
// // await iterate_child($div, nodeP, parent_infoP, $root_container);
// // // hover_in($div);
// // // func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'render_viewport', data, null, null, paramsP.dsSessionP);
// // } else {
// // }
// };
const xu_viewport = function () {
const observer_inViewport = new IntersectionObserver(
function (entries) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
$(entry.target).trigger('inViewport');
// Optional: stop observing once triggered
observer_inViewport.unobserve(entry.target);
}
});
},
{
threshold: 0.1, // Trigger when 10% of element is visible
},
);
const observer_outViewport = new IntersectionObserver(
function (entries) {
entries.forEach((entry) => {
if (!entry.isIntersecting) {
// Element is OUT of viewport - trigger custom event
$(entry.target).trigger('outViewport');
// Optional: stop observing once triggered
// observer_outViewport.unobserve(entry.target);
}
});
},
{
threshold: 0, // Trigger when element is completely out of view
},
);
let ui_job_id;
$div.on('inViewport', function () {
if ($div.children().length) {
$div.removeClass('skeleton');
return;
}
// if (UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')]) {
// $div[0].style.removeProperty('height');
// $div.removeClass('skeleton');
// $div.html(UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')]);
// } else {
hover_in($div);
ui_job_id = func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'render_viewport', { $div, nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $container }, null, null, paramsP.dsSessionP);
// }
observer_outViewport.observe($div[0]);
});
$div.on('outViewport', function () {
func.UI.worker.delete_job(SESSION_ID, ui_job_id);
if ($div.children().length) {
// UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')] = $div.children().clone(true);
$div.empty();
const height = $div?.data()?.xuData?.viewport_height || 10;
if (typeof height !== 'undefined') {
$div.css('height', height);
}
}
// $div.addClass('skeleton');
observer_inViewport.observe($div[0]);
});
$div.addClass('skeleton');
observer_inViewport.observe($div[0]);
};
xu_viewport();
} else {
await iterate_child($div, nodeP, parent_infoP, $root_container);
}
// const ret_iterate_child = await iterate_child($div, nodeP, parent_infoP, null, $root_container);
return await done(ret);
};
const draw_html_element = async function (element) {
const done = async function (ret = {}) {
const xu_ui_id = $div.attr('xu-ui-id');
$div.removeClass('display_none');
if (ret.has_xu_exp_render_attribute) {
// $div.css('display', 'unset');
const xu_render_cache_id = await get_xu_render_cache_str(SESSION_ID, paramsP.dsSessionP, Object.keys($div.data()?.xuData?.attr_exp_info?.['xu-render']?.fields || {}));
const _$div = $div.clone(true);
UI_WORKER_OBJ.xu_render_cache[xu_ui_id + xu_render_cache_id] = { $div: _$div, paramsP, data: _$div.data() };
nodeP.xu_render_xu_ui_id = xu_ui_id;
nodeP.xu_render_cache_id = xu_render_cache_id;
if (ret.xu_render_background_processing) {
temp_$div.remove();
// $container.find(`[xu-ui-id="${xu_ui_id}"]`).remove();
return $div;
} else {
// $div.css('display', 'unset');
temp_$div.replaceWith($div);
return $div;
}
} else {
if (ret.has_xu_render_attribute) {
temp_$div.remove();
return $div;
}
// $div.css('display', 'unset');
temp_$div.replaceWith($div);
return $div;
}
};
if (!element || element === 'script') return await done();
let str = '';
var temp_$div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, null, null, element, null, str, true);
let temp_$container = $('<tmp>').data('xuData', $container.data().xuData);
let $div = temp_$div.clone(true);
// $div.css('display', 'none');
$div.hover(
function (e) {
hover_in($div, e);
},
function (e) {
hover_out();
},
);
if (paramsP.paramsP === 'grid' || parent_infoP?.iterate_info) {
$div.on('click contextmenu', function (e) {
hover_in($div, e);
});
}
let ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, temp_$container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div, true);
if (ret.abort || nodeP.tagName === 'svg' || !_.isEmpty(nodeP?.attributes?.['xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-html']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-html'])) {
return await done(ret);
}
// check if iterator made to prevent children render
if (nodeP?.attributes?.['xu-viewport'] == 'true') {
// const xu_viewport = async function () {
// const data = { $div: $div.clone(true), nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $container };
// const container_id = $container.attr('xu-ui-id');
// if (!UI_WORKER_OBJ.pending_for_viewport_render[container_id]) {
// UI_WORKER_OBJ.pending_for_viewport_render[container_id] = { base_$div: $div, data: [], $container };
// await iterate_child($div, nodeP, parent_infoP, $root_container);
// } else {
// $div.remove();
// }
// UI_WORKER_OBJ.pending_for_viewport_render[container_id].data.push(data);
// // if (!$div.children().length) {
// // // render the first element to determine height
// // await iterate_child($div, nodeP, parent_infoP, $root_container);
// // // hover_in($div);
// // // func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'render_viewport', data, null, null, paramsP.dsSessionP);
// // } else {
// // }
// };
const xu_viewport = function () {
const observer_inViewport = new IntersectionObserver(
function (entries) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
$(entry.target).trigger('inViewport');
// Optional: stop observing once triggered
observer_inViewport.unobserve(entry.target);
}
});
},
{
threshold: 0.1, // Trigger when 10% of element is visible
},
);
const observer_outViewport = new IntersectionObserver(
function (entries) {
entries.forEach((entry) => {
if (!entry.isIntersecting) {
// Element is OUT of viewport - trigger custom event
$(entry.target).trigger('outViewport');
// Optional: stop observing once triggered
// observer_outViewport.unobserve(entry.target);
}
});
},
{
threshold: 0, // Trigger when element is completely out of view
},
);
let ui_job_id;
$div.on('inViewport', function () {
if ($div.children().length) {
$div.removeClass('skeleton');
return;
}
// if (UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')]) {
// $div[0].style.removeProperty('height');
// $div.removeClass('skeleton');
// $div.html(UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')]);
// } else {
hover_in($div);
ui_job_id = func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'render_viewport', { $div, nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, temp_$container }, null, null, paramsP.dsSessionP);
// }
observer_outViewport.observe($div[0]);
});
$div.on('outViewport', function () {
func.UI.worker.delete_job(SESSION_ID, ui_job_id);
if ($div.children().length) {
// UI_WORKER_OBJ.cache[$div.attr('xu-ui-id')] = $div.children().clone(true);
$div.empty();
const height = $div?.data()?.xuData?.viewport_height || 10;
if (typeof height !== 'undefined') {
$div.css('height', height);
}
}
// $div.addClass('skeleton');
observer_inViewport.observe($div[0]);
});
$div.addClass('skeleton');
observer_inViewport.observe($div[0]);
};
xu_viewport();
} else {
// if (ret.xu_render_background_processing) {
// // let temp_$div = $div.clone(true);
// iterate_child($div, nodeP, parent_infoP, $root_container);
// } else {
// await iterate_child($div, nodeP, parent_infoP, $root_container);
// }
if (!ret.xu_render_background_processing) {
iterate_child($div, nodeP, parent_infoP, $root_container);
}
}
// const ret_iterate_child = await iterate_child($div, nodeP, parent_infoP, null, $root_container);
return await done(ret);
};
if (nodeP.content && nodeP.attributes) {
nodeP.attributes['xu-content'] = nodeP.content;
}
if (nodeP.tagName === 'xu-widget') {
if (is_skeleton) return;
return await fx['widget']();
}
if (fx[nodeP.tagName]) {
return await fx[nodeP.tagName]();
}
// const xu_viewport = async function () {
// const data = { $div, nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $container };
// const container_id = $container.attr('xu-ui-id');
// if (!UI_WORKER_OBJ.pending_for_viewport_render[container_id]) {
// UI_WORKER_OBJ.pending_for_viewport_render[container_id] = { base_$div: $div, data: [], $container };
// await iterate_child($div, nodeP, parent_infoP, $root_container);
// }
// UI_WORKER_OBJ.pending_for_viewport_render[container_id].data.push(data);
// };
// if (nodeP?.attributes?.['xu-viewport'] == 'true') {
// return await xu_viewport();
// } else {
if (!glb.new_xu_render) {
return await draw_html_element_org(nodeP.tagName);
}
return await draw_html_element(nodeP.tagName);
// }
};
func.UI.screen.refresh_document_changes_for_realtime_update = async function (SESSION_ID, doc_change) {
let _session = SESSION_OBJ[SESSION_ID];
for (const [key, _ds] of Object.entries(_session.DS_GLB)) {
let prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
if (prog_obj?.progDataSource?.dataSourceRealtime && prog_obj?.progDataSource?.dataSourceTableId === doc_change.table_id) {
try {
// disabled in purpose to support create row
if (!_ds.screen_params) continue;
if (_ds.screen_params.is_panelP) {
func.UI.screen.refresh_screen(SESSION_ID, null, key);
} else {
func.action.execute(SESSION_ID, 'act_refresh', _ds, null, null);
}
} catch (err) {
// console.error(err);
}
}
}
if (glb.new_xu_render) {
for (const [ui_cache_key, ui_cache_val] of Object.entries(UI_WORKER_OBJ.xu_render_cache)) {
let prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, ui_cache_val.paramsP.prog_id);
if (prog_obj?.progDataSource?.dataSourceTableId === doc_change.table_id) {
ui_cache_val.$div = null;
}
}
}
};
const get_parent_ds_fields = function (SESSION_ID, dsSessionP) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSessionP];
const idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
const data = _ds.data_feed.rows[idx];
let obj = {};
if (typeof _ds.parentDataSourceNo !== 'undefined') {
obj = get_parent_ds_fields(SESSION_ID, _ds.parentDataSourceNo);
}
return { ...data, ...obj };
};
const get_xu_render_cache_str = async function (SESSION_ID, dsSessionP, exclude_vars = []) {
const fields_obj = get_parent_ds_fields(SESSION_ID, dsSessionP);
let str = '';
for (const [key, val] of Object.entries(fields_obj)) {
if (exclude_vars.includes(key)) continue;
str += typeof val !== 'undefined' ? JSON.stringify(val) : '';
}
return 'C-' + (await func.common.sha256(str));
};
func.UI.component = {};
func.UI.component.create_app_modal_component = function (
SESSION_ID,
modal_content_name
) {
const root_element = $(SESSION_OBJ[SESSION_ID].root_element);
const xu_modal_controller_id = "xu-modal-controller";
var $xu_modal_controller = root_element.find(xu_modal_controller_id);
if (!$xu_modal_controller.length) {
$xu_modal_controller = $("<" + xu_modal_controller_id + ">");
$(root_element).prepend($xu_modal_controller);
}
customElements.define(
modal_content_name,
class extends HTMLElement {
constructor() {
super();
// console.log("modal_content_name", modal_content_name);
// let template = document.getElementById(
// "modal_template_" + modal_content_name
// );
// let templateContent = template.content;
// const shadowRoot = this.attachShadow({ mode: "open" });
// shadowRoot.appendChild(templateContent.cloneNode(true));
}
connectedCallback() {}
}
);
return xu_modal_controller_id;
};
// func.UI.component.create_in_app_modal_component = function (SESSION_ID) {
// customElements.define(
// "in-app-modal-content" + SESSION_ID,
// class ModalContent extends HTMLElement {
// connectedCallback() {
// func.UI.component.init_app_modal_component(
// SESSION_ID,
// "in-app-modal-content" + SESSION_ID
// );
// }
// }
// );
// };
// func.UI.component.create_qr_modal_component = function (SESSION_ID) {
// customElements.define(
// "qr-modal-content" + SESSION_ID,
// class ModalContent extends HTMLElement {
// connectedCallback() {
// func.UI.component.init_app_modal_component(
// SESSION_ID,
// "qr-modal-content" + SESSION_ID
// );
// }
// }
// );
// };
// func.UI.component.init_app_modal_component = async function (
// SESSION_ID,
// modal_content_name
// ) {
// const xu_modal_controller = document.querySelector("xu-modal-controller");
// var $modal = $(modal_content_name);
// var params =
// $(xu_modal_controller).data().xuControllerParams[modal_content_name];
// var icon;
// if (params.icon) {
// icon = await func.common.get_custom_icon(SESSION_ID, params.icon);
// }
// var dismiss = function () {
// APP_MODAL_OBJ[modal_content_name].dismiss().then(() => {
// APP_MODAL_OBJ[modal_content_name] = null;
// if (params.$container) {
// func.UI.screen.validate_exit_events(
// SESSION_ID,
// params.$container.data().xuData.paramsP,
// null,
// function () {
// func.datasource.clean_all(SESSION_ID, params.dsSession);
// }
// );
// }
// });
// };
// if (params.$container) {
// $modal.attr("id", params.$container.attr("id"));
// $.each(params.$container.data(), function (key, val) {
// $modal.data(key, val);
// });
// }
// var $header = $("<ion-header>");
// var $toolbar = $("<ion-toolbar>").appendTo($header);
// var $title = $("<ion-title>").text(params.menuTitle).appendTo($toolbar);
// if (icon) {
// var logo = `
// <img style="width: 45px; margin: 0 15px;" slot="start" src="${icon}" >
// `;
// $toolbar.append(logo);
// }
// if (
// !params.$container ||
// params.$container.data().xuData.paramsP.screenInfo.mCLS !== "false"
// ) {
// var $buttons = $('<ion-buttons slot="end">').appendTo($toolbar);
// $('<ion-button><ion-icon name="close"></ion-icon>')
// .click(dismiss)
// .appendTo($buttons);
// }
// if (
// !params.$container ||
// params.$container.data().xuData.paramsP.screenInfo.mHDR !== "false"
// ) {
// $header.appendTo($modal);
// }
// $modal.append(params.$dialogDiv);
// if (params.$modal_footer) {
// params.$modal_footer.appendTo($modal);
// }
// };
func.UI.component.create_app_page_component = async function (SESSION_ID, id) {
const component_id = "xu-page-component-" + id;
customElements.define(
component_id,
class extends HTMLElement {
constructor() {
super();
var params = $(SESSION_OBJ[SESSION_ID].root_element)
.find("xu-nav")
.data();
$.each(
params.xuData.nav_params[id].$container.data(),
function (key, val) {
$(this).data(key, val);
}
);
}
connectedCallback() {
const page_back_callback = async () => {
await func.UI.screen.validate_exit_events(
SESSION_ID,
params.$container.data().xuData.paramsP,
null
);
nav.back();
func.datasource.clean_all(SESSION_ID, params.dsSession);
};
const $nav = $(SESSION_OBJ[SESSION_ID].root_element).find("xu-nav");
const nav = $nav[0];
const params = $nav.data().xuData.nav_params[id];
params.callback(this, page_back_callback);
}
}
);
return component_id;
};
// func.UI.component.init_app_page_component = async function (SESSION_ID, id) {
// var params = $(SESSION_OBJ[SESSION_ID].root_element).find("xu-nav").data()
// .xuData.nav_params[id];
// var _this = this;
// var $page = $("xu-page-component-" + id).attr(
// "id",
// params.$container.attr("id")
// );
// $.each(params.$container.data(), function (key, val) {
// $page.data(key, val);
// });
// var icon;
// if (params.icon) {
// icon = await func.common.get_custom_icon(SESSION_ID, params.icon);
// }
// var $header = $("<ion-header>");
// var $toolbar = $("<ion-toolbar>").appendTo($header);
// $("<ion-title>").text(params.name).appendTo($toolbar);
// if (icon) {
// var logo = `
// <img style="width: 45px; margin: 0 15px;" slot="end" src="${icon}" >
// `;
// $toolbar.append(logo);
// }
// var $buttons = $('<ion-buttons slot="start">').appendTo($toolbar);
// if (params.$container.data().xuData.paramsP.screenInfo.mBCK !== "false") {
// var $button = $("<ion-back-button>");
// $button.off("click");
// $button
// .on("click", function () {
// func.UI.screen.validate_exit_events(
// SESSION_ID,
// params.$container.data().xuData.paramsP,
// null,
// function () {
// func.datasource.clean_all(SESSION_ID, params.dsSession);
// }
// );
// })
// .appendTo($buttons);
// }
// if (
// !params.$container ||
// params.$container.data().xuData.paramsP.screenInfo.mHDR !== "false"
// ) {
// if (
// params.icon ||
// params.name ||
// params.$container.data().xuData.paramsP.screenInfo.mBCK !== "false"
// ) {
// $header.appendTo($page);
// }
// }
// $page.append(params.div);
// };
func.UI.component.create_app_root_component = function (SESSION_ID) {
customElements.define(
"xu-root-component-" + SESSION_ID,
class ModalContent extends HTMLElement {
connectedCallback() {
$(this).append(
$(SESSION_OBJ[SESSION_ID].root_element).find("xu-nav").data().xuData
.$div
);
const root_component_callback = $(SESSION_OBJ[SESSION_ID].root_element)
.find("xu-nav")
.data().xuData.root_component_callback;
if (root_component_callback) {
root_component_callback();
}
}
}
);
};
func.UI.component.create_app_popover_component = function (SESSION_ID) {
const root_element = $(SESSION_OBJ[SESSION_ID].root_element);
const xu_popover_controller_id = "xu-popover-controller-" + SESSION_ID;
var $xu_popover_controller = root_element.find(xu_popover_controller_id);
if (!$xu_popover_controller.length) {
$xu_popover_controller = $("<" + xu_popover_controller_id + ">");
$(root_element).prepend($xu_popover_controller);
}
customElements.define(
"xu-popover-content-" + SESSION_ID,
class ModalContent extends HTMLElement {
connectedCallback() {
const xu_popover_controller = document.querySelector(
"xu-popover-controller-" + SESSION_ID
);
var params = $(xu_popover_controller).data("xuControllerParams");
var $popover = $("xu-popover-content-" + SESSION_ID).attr(
"id",
params.$container.attr("id")
);
$.each(params.$container.data(), function (key, val) {
$popover.data(key, val);
});
$popover.html(params.$dialogDiv);
}
}
);
return xu_popover_controller_id;
};
func.UI.component.create_camera_select_popover_component = function (
SESSION_ID
) {
customElements.define(
"popover-camera-select-page" + SESSION_ID,
class ModalContent extends HTMLElement {
connectedCallback() {
const xu_popover_controller = document.querySelector(
"ion-popover-controller"
);
var params = $(xu_popover_controller).data("xuControllerParams");
$(this).append(params.$dialogDiv);
}
}
);
};
// func.UI.component.get_image_element = function (SESSION_ID, key, val, ds_id) {
// var $pallet_wrapper = $(`<div class="image_wrapper">`);
// var $modal_content = $(`<ion-content fullscreen scroll-x >`);
// var $modal_footer = $(`<ion-tab-bar slot="bottom">`);
// if (val.doc.dFWD) {
// $pallet_wrapper.css("width", val.doc.dFWD);
// }
// if (val.doc.dFHT) {
// $pallet_wrapper.css("height", val.doc.dFHT);
// }
// var $upload_wrapper = $(`<div class="upload_wrapper">`).appendTo(
// $pallet_wrapper
// );
// var $crop_wrapper = $(`<div>`).appendTo($modal_content);
// var $upload_image = $(
// `<img class="image_img" id="${key}" onerror="this.style.display='none'" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTBweCIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDYwIDYwIiBzdHlsZT0iIiB4bWw6c3BhY2U9InByZXNlcnZlIiBoZWlnaHQ9IjUwcHgiPgo8ZyBzdHlsZT0iJiMxMDsgICAgZmlsbDogcmdiYSgwLDAsMCwwLjEpOyYjMTA7Ij4KCTxwYXRoIGQ9Ik01NS4yMDEsMTUuNWgtOC41MjRsLTQtMTBIMTcuMzIzbC00LDEwSDEydi01SDZ2NUg0Ljc5OUMyLjE1MiwxNS41LDAsMTcuNjUyLDAsMjAuMjk5djI5LjM2OCAgIEMwLDUyLjMzMiwyLjE2OCw1NC41LDQuODMzLDU0LjVoNTAuMzM0YzIuNjY1LDAsNC44MzMtMi4xNjgsNC44MzMtNC44MzNWMjAuMjk5QzYwLDE3LjY1Miw1Ny44NDgsMTUuNSw1NS4yMDEsMTUuNXogTTgsMTIuNWgydjNIOCAgIFYxMi41eiBNNTgsNDkuNjY3YzAsMS41NjMtMS4yNzEsMi44MzMtMi44MzMsMi44MzNINC44MzNDMy4yNzEsNTIuNSwyLDUxLjIyOSwyLDQ5LjY2N1YyMC4yOTlDMiwxOC43NTYsMy4yNTYsMTcuNSw0Ljc5OSwxNy41SDZoNiAgIGgyLjY3N2w0LTEwaDIyLjY0Nmw0LDEwaDkuODc4YzEuNTQzLDAsMi43OTksMS4yNTYsMi43OTksMi43OTlWNDkuNjY3eiIvPgoJPHBhdGggZD0iTTMwLDE0LjVjLTkuOTI1LDAtMTgsOC4wNzUtMTgsMThzOC4wNzUsMTgsMTgsMThzMTgtOC4wNzUsMTgtMThTMzkuOTI1LDE0LjUsMzAsMTQuNXogTTMwLDQ4LjVjLTguODIyLDAtMTYtNy4xNzgtMTYtMTYgICBzNy4xNzgtMTYsMTYtMTZzMTYsNy4xNzgsMTYsMTZTMzguODIyLDQ4LjUsMzAsNDguNXoiLz4KCTxwYXRoIGQ9Ik0zMCwyMC41Yy02LjYxNywwLTEyLDUuMzgzLTEyLDEyczUuMzgzLDEyLDEyLDEyczEyLTUuMzgzLDEyLTEyUzM2LjYxNywyMC41LDMwLDIwLjV6IE0zMCw0Mi41Yy01LjUxNCwwLTEwLTQuNDg2LTEwLTEwICAgczQuNDg2LTEwLDEwLTEwczEwLDQuNDg2LDEwLDEwUzM1LjUxNCw0Mi41LDMwLDQyLjV6Ii8+Cgk8cGF0aCBkPSJNNTIsMTkuNWMtMi4yMDYsMC00LDEuNzk0LTQsNHMxLjc5NCw0LDQsNHM0LTEuNzk0LDQtNFM1NC4yMDYsMTkuNSw1MiwxOS41eiBNNTIsMjUuNWMtMS4xMDMsMC0yLTAuODk3LTItMnMwLjg5Ny0yLDItMiAgIHMyLDAuODk3LDIsMlM1My4xMDMsMjUuNSw1MiwyNS41eiIvPgo8L2c+CgogCgo8L3N2Zz4=" alt="" />`
// ).appendTo($upload_wrapper);
// var currentPopover = null;
// const open_select_camera_popup = async function () {
// const popoverController_div = document.querySelector(
// "ion-popover-controller"
// );
// const $list = $("<ion-list>");
// const $camera = $(
// `<ion-item>Take Photo <ion-icon name="camera-outline" slot="end"></ion-icon> </ion-icon></ion-item>`
// ).appendTo($list);
// const $photo = $(
// `<ion-item>Photo Library <ion-icon name="image-outline" slot="end"></ion-icon></ion-item>`
// ).appendTo($list);
// $camera.click(async function () {
// await popoverController.dismiss();
// navigator.camera.getPicture(
// function cameraSuccess(imageUri) {
// Doka.create()
// .edit(window.Ionic.WebView.convertFileSrc(imageUri))
// .then((output) => {
// // Called when the source image has been edited
// // Receives the output file and optionally, if `outputData`
// // is set to true, the editor state
// // console.log(output);
// var getBase64 = function (file) {
// var reader = new FileReader();
// reader.readAsDataURL(file);
// reader.onload = function () {
// $imgInp
// .data("filepond_base64", reader.result)
// .trigger("change");
// $upload_image.prop("src", reader.result);
// };
// reader.onerror = function (error) {
// console.log("Error: ", error);
// };
// };
// getBase64(output.file);
// });
// // You may choose to copy the picture, save it somewhere, or upload.
// },
// function cameraError(error) {
// console.debug("Unable to obtain picture: " + error, "app");
// },
// {
// quality: 100,
// correctOrientation: true,
// }
// );
// });
// $photo.click(async function () {
// await popoverController.dismiss();
// navigator.camera.getPicture(
// function cameraSuccess(imageUri) {
// Doka.create()
// .edit(window.Ionic.WebView.convertFileSrc(imageUri))
// .then((output) => {
// // Called when the source image has been edited
// // Receives the output file and optionally, if `outputData`
// // is set to true, the editor state
// var getBase64 = function (file) {
// var reader = new FileReader();
// reader.readAsDataURL(file);
// reader.onload = function () {
// $imgInp
// .data("filepond_base64", reader.result)
// .trigger("change");
// $upload_image.prop("src", reader.result);
// };
// reader.onerror = function (error) {
// console.log("Error: ", error);
// };
// };
// getBase64(output.file);
// });
// // You may choose to copy the picture, save it somewhere, or upload.
// },
// function cameraError(error) {
// console.debug("Unable to obtain picture: " + error, "app");
// },
// {
// quality: 100,
// correctOrientation: true,
// sourceType: Camera.MediaType.PICTURE,
// }
// );
// // }
// });
// $(popoverController_div).data({ params: { $dialogDiv: $list } });
// var popover = await popoverController.create({
// component: "popover-camera-select-page",
// // event: ev,
// translucent: true,
// });
// currentPopover = popover;
// return popover.present();
// };
// const croppie_integration = function () {
// function readURL(input) {
// if (input.files && input.files[0]) {
// var reader = new FileReader();
// reader.onload = function (e) {
// img_src = e.target.result;
// Doka.create()
// .edit(img_src)
// .then((output) => {
// // Called when the source image has been edited
// // Receives the output file and optionally, if `outputData`
// // is set to true, the editor state
// var getBase64 = function (file) {
// var reader = new FileReader();
// reader.readAsDataURL(file);
// reader.onload = function () {
// $imgInp.data("filepond_base64", reader.result);
// // .trigger("change");
// $upload_image.prop("src", reader.result);
// $upload_image.trigger("image_change");
// };
// reader.onerror = function (error) {
// console.log("Error: ", error);
// };
// };
// getBase64(output.file);
// });
// //////////////
// };
// reader.onloadend = function () {};
// reader.readAsDataURL(input.files[0]);
// }
// }
// $imgInp.change(function () {
// readURL(this);
// });
// };
// var $imgInp = $(
// `<input accept="file" type="file" class="imgInp" name="${key}" nodeid="${val.id}" recordid="${SESSION_OBJ[SESSION_ID].DS_GLB[ds_id].currentRecordId}"/>`
// )
// .attr("ui_id", key)
// .appendTo($upload_wrapper);
// if (func.utils.get_device()) {
// $imgInp.attr("hidden", true);
// $upload_image.click(function () {
// open_select_camera_popup();
// });
// } else {
// croppie_integration();
// }
// setTimeout(function () {
// $imgInp.css("height", $pallet_wrapper.height());
// }, 1000);
// return $pallet_wrapper;
// };
func.UI.component.init_xu_nav = function ($container, $nav) {
$nav.data("xuData", { nav_stack: [] });
Object.defineProperty($nav[0], "setRoot", {
value: async function (component_id) {
return new Promise(async function (resolve, reject) {
$nav.data().xuData.nav_stack.unshift(component_id);
$container.append("<" + component_id + ">");
await customElements.whenDefined(component_id);
resolve();
});
},
configurable: true,
});
Object.defineProperty($nav[0], "push", {
value: async function (component_id) {
return new Promise(async function (resolve, reject) {
let last_component = _.last($nav.data().xuData.nav_stack);
// $(last_component).remove();
$(last_component).hide(); //.attachShadow({ mode: "closed" });
$nav.data().xuData.nav_stack.push(component_id);
$container.append("<" + component_id + ">");
await customElements.whenDefined(component_id);
resolve();
});
},
configurable: true,
});
Object.defineProperty($nav[0], "popToRoot", {
value: async function () {
return new Promise(async function (resolve, reject) {
let last_component = _.last($nav.data().xuData.nav_stack);
$(last_component).remove();
let root_component = $nav.data().xuData.nav_stack[0];
$nav.data().xuData.nav_stack[root_component];
// $container.append("<" + root_component + ">");
$(root_component).show();
await customElements.whenDefined(root_component);
resolve();
});
},
configurable: true,
});
Object.defineProperty($nav[0], "popTo", {
value: async function (index) {
return new Promise(async function (resolve, reject) {
let last_component = _.last($nav.data().xuData.nav_stack);
let last_component_index = $nav.data().xuData.nav_stack.length - 1;
$(last_component).remove();
try {
var selected_component =
$nav.data().xuData.nav_stack[index || last_component_index - 1];
} catch (error) {
console.error(error);
return reject(error);
}
// $container.append("<" + selected_component + ">");
$(selected_component).show();
$nav.data().xuData.nav_stack.splice(last_component_index, 1);
await customElements.whenDefined(selected_component);
resolve();
});
},
configurable: true,
});
Object.defineProperty($nav[0], "back", {
value: async function (index) {
return new Promise(async function (resolve, reject) {
let last_component = _.last($nav.data().xuData.nav_stack);
let last_component_index = $nav.data().xuData.nav_stack.length - 1;
if (last_component_index === 0) return;
$(last_component).remove();
// $(last_component)[0].attachShadow({ mode: "closed" });
try {
var selected_component =
$nav.data().xuData.nav_stack[last_component_index - 1];
} catch (error) {
console.error(error);
return reject(error);
}
// $container.append("<" + selected_component + ">");
$(selected_component).show(); //[0].attachShadow({ mode: "open" });
$nav.data().xuData.nav_stack.splice(last_component_index, 1);
await customElements.whenDefined(selected_component);
resolve();
});
},
configurable: true,
});
};
func.expression = {};
func.expression.get = async function (SESSION_ID, valP, dsSessionP, sourceP, rowIdP, sourceActionP, secondPassP, calling_fieldIdP, fieldsP, debug_infoP, iterate_info, js_script_callback, jobNo, api_output_type) {
class xu_class {
async get() {
if (typeof EXP_BUSY !== 'undefined') {
EXP_BUSY = true;
}
var ret;
var fields = {};
var error;
var warning;
function evalJson(text) {
return eval('(' + text + ')');
}
if (valP === null) {
ret = '';
} else {
switch (typeof valP) {
case 'string':
ret = valP;
break;
case 'undefined':
ret = '';
break;
case 'boolean':
ret = valP ? 'Y' : 'N';
break;
default:
ret = valP.toString();
break;
}
}
ret = ret.replace(/\&/g, '&');
ret = func.utils.replace_studio_drive_url(SESSION_ID, ret);
const end_results = function () {
const replace_quotes = function (ret) {
for (const [key, val] of Object.entries(fields)) {
if (typeof val === 'string') ret = ret.replace('"' + val + '"', val.replace(/"/gi, ''));
}
return ret;
};
if (['update', 'javascript'].includes(sourceP)) {
if (typeof ret === 'string') ret = replace_quotes(ret);
}
const log_error = function () {
if (SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]) {
func.utils.debug.log(SESSION_ID, SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].nodeId, {
module: 'expression',
action: sourceP,
source: calling_fieldIdP,
prop: ret,
details: ret,
result: ret,
error: error,
warning: warning,
fields: null,
type: 'exp',
prog_id: SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].prog_id,
debug_info: debug_infoP,
});
}
};
if (error) log_error();
// if (error || warning) log_error();
if (typeof EXP_BUSY !== 'undefined') {
EXP_BUSY = false;
}
const results = {
result: ret,
fields,
res,
explain: result,
error,
warning,
req: valP,
var_error_found,
};
// console.log('EXP>>>', results);
return results;
// return {
// result: ret,
// fields: fields,
// res: res,
// explain: result,
// error: error,
// warning: warning,
// req: valP,
// var_error_found: var_error_found,
// };
};
const variable_not_exist = async function () {
try {
if (sourceP !== 'arguments') {
if (ret && ret.substr(0, 6) === '_DATE_') {
ret = ret.substr(6);
} else if (
(ret && ret.length === 10 && ret.substr(4, 1) === '-' && ret.substr(7, 1) === '-') ||
ret === 'self' // bypass eval for date 2017-03-22
) {
ret = ret;
} else {
ret = await func.expression.secure_eval(SESSION_ID, sourceP, ret, jobNo, dsSessionP, js_script_callback);
}
// console.log("AFTER OK", ret)
return end_results();
} else {
// do eval for arithmetic vals
ret = ret.replace(/_NULL/gi, '');
return end_results();
}
} catch (err) {
// console.error(err);
return end_results();
}
};
if (!func.expression.validate_variables(valP)) {
return await variable_not_exist();
}
const validate_email = async function () {
const ret = await func.expression.secure_eval(SESSION_ID, sourceP, valP, jobNo, dsSessionP, js_script_callback, null, true);
return glb.emailRegex.test(ret);
};
if (await validate_email()) {
return await variable_not_exist();
}
// var split = [];
var var_Arr = [];
const split = func.expression.parse(ret) || [];
// console.log(valP, split);
for await (const [arr_key, val] of Object.entries(split)) {
// run each field
const key = Number(arr_key);
var_Arr[key] = {};
var_Arr[key].value = val.value;
//--------------
const replace_value_in_string = async function (retP, fieldIdP) {
if (iterate_info?.iterator_key === fieldIdP || iterate_info?.iterator_val === fieldIdP) {
if (iterate_info.iterator_key === fieldIdP) {
retP.value = iterate_info._key;
}
if (iterate_info.iterator_val === fieldIdP) {
retP.value = iterate_info._val;
}
}
const set_value = function (valP) {
if (typeof valP !== 'undefined') {
var_Arr[key].value = valP;
if (typeof valP === 'string') var_Arr[key].type = 'string';
} else {
if (retP.type === 'object') {
var_Arr[key].value = '';
var_Arr[key].type = 'string';
}
}
};
if (sourceP === 'exp' && retP.type !== 'exp') {
var_Arr[key].type = retP.type;
return;
}
if (typeof retP.value !== 'undefined') {
var_Arr[key].type = retP.type;
var_Arr[key].value = typeof retP.value === 'string' && !retP.value.includes('<svg xmlns=') && retP.value.indexOf('\\') === -1 && !['UI Attr EXP', 'update'].includes(sourceP) ? retP.value.replaceAll('"', '\\"') : retP.value; // new Apr 6 2025 fixing "\"how much?\"" // new Jul 29 25 to fix quil extra "\" " source!=="UI Attr EXP"
if ((val.value.indexOf('[') > -1) | (val.value.indexOf('.') > -1)) {
//get values from array '@var==="sss" && @var_B==="sss" && @obj.property===5 && @objA["value"]===123 | @objB["value"].property===1234'
var data = retP.prop;
if (retP.type === 'object') data = retP.value;
var property1, property2;
//check for split situation: @objB[@var].property 1: @objB[ 2:@var].property
if (val.value.indexOf('[') === -1 && val.value.indexOf(']') > -1 && val.value.substr(0, 1) === '@') {
//check situation 2
var prevData = var_Arr[key - 1].value;
var_Arr[key].value = prevData[data]; // @objB[@var]
if (val.value.indexOf('.') > -1) {
property2 = await func.expression.get_property(val.value).property2; //val.value.substr(val.value.indexOf(".") + 1, val.value.length); // get .
if (prevData[data]) set_value(prevData[data][property2]);
// var_Arr[key].value = prevData[data][property2]; //@objB[@var].property
}
delete var_Arr[key - 1];
} else {
property1 = await func.expression.get_property(val.value).property1;
property2 = await func.expression.get_property(val.value).property2;
if (property1) {
var_Arr[key].value = data[property1]; // @var["value"] or @var.property
if (property2) {
if (data[property1]) set_value(data[property1][property2]);
}
}
if (property2 && !property1) {
if (
data //data[property2]
) {
set_value(data[property2]);
}
}
}
fields[fieldIdP] = var_Arr[key].value; // added 051017 to allow @SYS_GLOBAL_OBJ_WIDGET_INFO.doc_id
var_Arr[key].fieldId = fieldIdP;
} else {
fields[fieldIdP] = var_Arr[key].value; // update flat no warpers
var_Arr[key].fieldId = fieldIdP;
}
}
};
//>>>>>>>>>>>>>>>>>>
//>>>> start here >>
//>>>>>>>>>>>>>>>>>>
if (val.fieldId) {
// @_THIS
if (val.fieldId && val.fieldId.substr(0, 5) === '_THIS' && calling_fieldIdP && (val.fieldId.length === 5 || (val.fieldId.length > 5 && val.fieldId.substr(5, 1) === '.'))) {
if (val.fieldId.length === 5) val.fieldId = calling_fieldIdP;
else val.fieldId = calling_fieldIdP + val.fieldId(5, val.fieldId.length - 1);
}
if (!sourceP === 'exp') {
var_Arr[key].value = '""';
} // put default
fields[val.fieldId] = var_Arr[key].value;
const ret = await func.datasource.get_value(SESSION_ID, val.fieldId, dsSessionP, rowIdP); // find field in dataSources
await replace_value_in_string(ret.ret, ret.fieldIdP);
}
}
try {
// eval the expression
var res = [];
var exp_exist;
var var_error_found;
// merge arr values
_.forEach(var_Arr, function (val, key) {
if (sourceP === 'UI Property EXP') {
let ret = func.utils.get_drive_url(SESSION_ID, val.value, true);
if (ret.changed) {
res[key] = ret.value;
return true;
}
}
if (sourceP === 'UI Attr EXP') {
let ret = func.utils.get_drive_url(SESSION_ID, val.value, var_Arr.length == 1 ? false : true);
if (ret.changed) {
res[key] = ret.value;
return true;
}
}
if (val.type === 'exp') {
exp_exist = true;
}
res[key] = val.value;
if (var_Arr.length > 1) {
// complex input
if (!['DbQuery', 'alert', 'exp', 'api_rendered_output'].includes(sourceP) && ['string', 'date'].includes(val.type)) {
res[key] = '`' + val.value + '`';
}
// new Dec 18 2024 for Ishai // json,html,xml,text,css
if (['api_rendered_output'].includes(sourceP) && ['json'].includes(api_output_type) && ['string', 'date'].includes(val.type)) {
res[key] = `"` + val.value + `"`;
}
}
if (val.fieldId && val.value && typeof val.value === 'string') {
if (['query', 'condition', 'range', 'sort', 'locate'].includes(sourceP)) {
if (val.value.indexOf('↵') > -1) {
res[key] = val.value.split('↵').join('');
}
res[key] = res[key].replace(/(\r\n|\n|\r)/gm, ''); //.replace(/"/g,'\"');//.replace(/'/g,"");
}
if (['init', 'update', 'virtual'].includes(sourceP)) {
if (val.value.indexOf('↵') > -1) res[key] = val.value.split('↵').join('\n');
res[key] = res[key].replace(/(\r\n|\n|\r)/gm, '\\n');
}
if (typeof IS_PROCESS_SERVER !== 'undefined') {
res[key] = res[key].replace(/(\r\n|\n|\r)/gm, '<br>');
}
fields[val.fieldId] = res[key];
}
// extract object
if (typeof val.value === 'object' && var_Arr.length > 1) {
if (!Array.isArray(val.value) && !var_Arr[key + 1].value?.includes('.')) {
// prevent cast on single value expression
res[key] = '(' + JSON.stringify(val.value) + ')';
} else {
res[key] = JSON.stringify(val.value);
}
}
if (!exp_exist && sourceP !== 'exp' && val.value && typeof val.value === 'string' && val.value.substr(0, 1) === '@') {
warning = 'Error encoding ' + val.value;
var_error_found = true;
res[key] = 0;
}
});
const join = function (arrP) {
return arrP.join('');
};
var exp = undefined;
if (exp_exist && sourceP !== 'exp') {
exp = await func.expression.get(SESSION_ID, join(res), dsSessionP, sourceP, rowIdP, sourceActionP, true, calling_fieldIdP, fields, debug_infoP);
if (exp.res) res = exp.res;
// do second pass when exp exist
else res = [exp.result];
fields = _.assignIn(exp.fields, fieldsP);
}
var result = join(res);
if (res.length === 1) {
// bypass join for single value expression
result = res[0];
}
if (secondPassP) {
ret = result;
} else if (sourceP !== 'exp') {
// no eval for second pass
// return single value
if (res.length === 1 && typeof res[0] === 'string' && typeof res[0] !== 'object') {
// avoid eval when query leading zeros problem
ret = join(res);
if (ret && ret.substr(0, 1) === '@') {
error = 'Error encoding @ var';
var_error_found = true;
}
} else {
if (
![
'arguments',
// "alert",
'api_rendered_output',
'DbQuery',
].includes(sourceP)
) {
ret = await func.expression.secure_eval(SESSION_ID, sourceP, result, jobNo, dsSessionP, js_script_callback);
} else {
if (sourceP === 'DbQuery') {
ret = JSON.stringify(evalJson(result));
} else {
// try eval
ret = result;
}
}
}
}
// console.log("AAAA")
return end_results();
} catch (err) {
ret = result; // skip eval on error
error = err.message;
return end_results();
}
}
}
const new_class = new xu_class();
return new_class.get();
};
// func.expression.get_bad1 = async function (SESSION_ID, valP, dsSessionP, sourceP, rowIdP, sourceActionP, secondPassP, calling_fieldIdP, fieldsP = {}, debug_infoP, iterate_info, js_script_callback, jobNo, api_output_type) {
// const evalJson = (text) => eval(`(${text})`);
// const replaceQuotes = (str) => {
// for (const [key, val] of Object.entries(fields)) {
// if (typeof val === 'string') str = str.replace(`"${val}"`, val.replace(/"/g, ''));
// }
// return str;
// };
// let ret, error, warning, var_error_found;
// const fields = { ...fieldsP };
// // Initial value processing
// if (valP === null || typeof valP === 'undefined') ret = '';
// else if (typeof valP === 'boolean') ret = valP ? 'Y' : 'N';
// else ret = valP.toString();
// ret = ret.replace(/\&/g, '&');
// ret = func.utils.replace_studio_drive_url(SESSION_ID, ret);
// // End results helper
// const endResults = () => {
// if (['update', 'javascript'].includes(sourceP) && typeof ret === 'string') {
// ret = replaceQuotes(ret);
// }
// if ((error || warning) && SESSION_OBJ[SESSION_ID]?.DS_GLB[dsSessionP]) {
// func.utils.debug.log(SESSION_ID, SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].nodeId, {
// module: 'expression',
// action: sourceP,
// source: calling_fieldIdP,
// prop: ret,
// details: ret,
// result: ret,
// error,
// warning,
// fields: null,
// type: 'exp',
// prog_id: SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP].prog_id,
// debug_info: debug_infoP,
// });
// }
// return { result: ret, fields, error, warning, req: valP, var_error_found };
// };
// // Handle non-variable cases
// const handleNonVariable = async () => {
// try {
// if (sourceP !== 'arguments') {
// if (ret.startsWith('_DATE_')) ret = ret.slice(6);
// else if (/^\d{4}-\d{2}-\d{2}$/.test(ret) || ret === 'self') return endResults();
// else ret = await func.expression.secure_eval(SESSION_ID, sourceP, ret, jobNo, dsSessionP, js_script_callback);
// } else {
// ret = ret.replace(/_NULL/gi, '');
// }
// return endResults();
// } catch (err) {
// error = err.message;
// return endResults();
// }
// };
// // Early return for simple cases
// if (!func.expression.validate_variables(valP)) return await handleNonVariable();
// if (glb.emailRegex.test(await func.expression.secure_eval(SESSION_ID, sourceP, valP, jobNo, dsSessionP, js_script_callback))) {
// return await handleNonVariable();
// }
// // Parse and process variables
// const split = func.expression.parse(ret) || [];
// const var_Arr = await Promise.all(
// split.map(async (val, key) => {
// const result = { value: val.value, fieldId: val.fieldId };
// if (!val.fieldId) return result;
// // Handle _THIS substitution
// if (val.fieldId.startsWith('_THIS') && calling_fieldIdP) {
// result.fieldId = val.fieldId.length === 5 ? calling_fieldIdP : calling_fieldIdP + val.fieldId.slice(5);
// }
// // Fetch value from datasource
// const { ret: fetchedValue, fieldIdP } = await func.datasource.get_value(SESSION_ID, result.fieldId, dsSessionP, rowIdP);
// result.value = fetchedValue?.value ?? (sourceP === 'exp' ? fetchedValue?.value : '""');
// result.type = fetchedValue?.type;
// // Handle iteration
// if (iterate_info) {
// if (iterate_info.iterator_key === fieldIdP) result.value = iterate_info._key;
// if (iterate_info.iterator_val === fieldIdP) result.value = iterate_info._val;
// }
// // Process nested properties
// if (val.value.includes('[') || val.value.includes('.')) {
// const { property1, property2 } = await func.expression.get_property(val.value);
// const data = fetchedValue?.type === 'object' ? fetchedValue.value : fetchedValue?.prop;
// if (key > 0 && val.value.includes(']') && !val.value.includes('[') && split[key - 1].value) {
// const prevData = split[key - 1].value;
// result.value = prevData[fieldIdP];
// if (val.value.includes('.') && prevData[fieldIdP]) {
// result.value = prevData[fieldIdP][property2] ?? '';
// }
// } else if (data) {
// if (property1) result.value = data[property1] ?? '';
// if (property2) result.value = (property1 ? data[property1]?.[property2] : data[property2]) ?? '';
// }
// }
// fields[fieldIdP] = result.value;
// return result;
// }),
// );
// // Final evaluation
// try {
// const res = var_Arr.map((val, key) => {
// if (sourceP === 'UI Property EXP' || sourceP === 'UI Attr EXP') {
// const { changed, value } = func.utils.get_drive_url(SESSION_ID, val.value, sourceP === 'UI Attr EXP' && var_Arr.length > 1);
// if (changed) return value;
// }
// let value = val.value;
// if (var_Arr.length > 1) {
// if (!['DbQuery', 'alert', 'exp', 'api_rendered_output'].includes(sourceP) && ['string', 'date'].includes(val.type)) {
// value = `\`${value}\``;
// } else if (sourceP === 'api_rendered_output' && api_output_type === 'json' && ['string', 'date'].includes(val.type)) {
// value = `"${value}"`;
// }
// }
// if (val.fieldId && typeof value === 'string') {
// if (['query', 'condition', 'range', 'sort', 'locate'].includes(sourceP)) value = value.replace(/↵|\r\n|\n|\r/g, '');
// if (['init', 'update', 'virtual'].includes(sourceP)) value = value.replace(/↵|\r\n|\n|\r/g, '\\n');
// if (typeof IS_PROCESS_SERVER !== 'undefined') value = value.replace(/↵|\r\n|\n|\r/g, '<br>');
// fields[val.fieldId] = value;
// }
// if (typeof value === 'object' && var_Arr.length > 1) {
// value = Array.isArray(value) || var_Arr[key + 1]?.value?.includes('.') ? JSON.stringify(value) : `(${JSON.stringify(value)})`;
// }
// if (!val.type === 'exp' && sourceP !== 'exp' && typeof value === 'string' && value.startsWith('@')) {
// warning = `Error encoding ${value}`;
// var_error_found = true;
// return '0';
// }
// return value;
// });
// ret = res.length === 1 ? res[0] : res.join('');
// if (var_Arr.some((v) => v.type === 'exp') && sourceP !== 'exp' && !secondPassP) {
// const exp = await func.expression.get(SESSION_ID, ret, dsSessionP, sourceP, rowIdP, sourceActionP, true, calling_fieldIdP, fields, debug_infoP);
// ret = exp.res?.[0] ?? exp.result;
// Object.assign(fields, exp.fields);
// } else if (!secondPassP && !['arguments', 'api_rendered_output', 'DbQuery'].includes(sourceP)) {
// ret = await func.expression.secure_eval(SESSION_ID, sourceP, ret, jobNo, dsSessionP, js_script_callback);
// } else if (sourceP === 'DbQuery') {
// ret = JSON.stringify(evalJson(ret));
// }
// if (typeof ret === 'string' && ret.startsWith('@')) {
// error = 'Error encoding @ var';
// var_error_found = true;
// }
// } catch (err) {
// error = err.message;
// }
// return endResults();
// };
// func.expression.parse_org = function (strP) {
// var extract_str = function (strP, posP) {
// if (!posP) posP = 0;
// var clean_split_str = function (arrP) {
// var arr = [];
// if (arrP && arrP.length > 1 && arrP[0] === '' && arrP[1].indexOf('@') > -1) {
// for (var i = 1; i <= arrP.length; i++) {
// arr.push(arrP[i]);
// }
// return arr;
// } else return arrP;
// };
// var nonLettersPatt = /\W/; // non letters
// var validSymbolsNoArray = /[^.@\[]/; //valid symbols no array /[^.@\[\]\]]/
// var validSymbolsWithArray = /[^.@"'\[\]]/; //valid symbols with array
// var validSymbols = validSymbolsNoArray;
// var splitTmp = strP.replace(/@/g, '^^@').split('^^');
// var split = clean_split_str(splitTmp);
// var obj = [];
// if (split) {
// for (let val of split) {
// // run on @ segments
// if (val) {
// var pos = strP.indexOf(val);
// if (val && val.substr(0, 1) === '@') {
// var tmpStr = '';
// var word_start_pos = undefined;
// var word_end_pos = undefined;
// // run on @ segment string
// for (var i = 0; i <= val.length; i++) {
// var key1 = i;
// var val1 = val.substr(i, 1);
// if (
// val1 === '.' &&
// !word_start_pos // find first dot
// )
// word_start_pos = key1;
// if (
// word_start_pos &&
// key1 > word_start_pos &&
// nonLettersPatt.test(val1) // find any sign character to mark the end of word
// )
// word_end_pos = key1;
// if (word_start_pos && word_start_pos >= 0 && word_end_pos && word_end_pos >= 0) {
// // find the word
// var word = val.substr(word_start_pos + 1, word_end_pos - word_start_pos - 1); // get the word
// // if (glb.ALL_PROPERTIES_ARR.indexOf(word) === -1) {
// // compare with internal properties
// tmpStr = tmpStr.substr(0, word_start_pos) + '^^' + tmpStr.substr(word_start_pos, word_end_pos);
// // }
// if (val.substr(word_end_pos, 1) === '.') word_start_pos = word_end_pos;
// else word_start_pos = null;
// word_end_pos = null;
// }
// if (val1 === '[') validSymbols = validSymbolsWithArray;
// if (nonLettersPatt.test(val1) && validSymbols.test(val1) && tmpStr.indexOf('^^') === -1) {
// tmpStr += '^^' + val1;
// } else tmpStr += val1;
// }
// // });
// if (tmpStr.indexOf('^^') > -1) {
// var obj1 = extract_str(tmpStr, pos);
// obj = obj.concat(obj1);
// } else {
// // push clean @var
// var fieldId = undefined;
// if (val) {
// fieldId = val.substr(1, val.length);
// if (val.indexOf('.') > -1) fieldId = val.substr(1, val.indexOf('.') - 1);
// if (val.indexOf('[') > -1) fieldId = val.substr(1, val.indexOf('[') - 1);
// //
// // if (val.indexOf("]") > -1)
// // fieldId = val.substr(1, val.indexOf("]") - 1);
// }
// obj.push({
// value: val,
// fieldId: fieldId,
// pos: pos + posP,
// });
// }
// } else {
// obj.push({
// value: val,
// pos: pos + posP,
// });
// }
// }
// }
// return obj;
// }
// };
// var res = extract_str(strP);
// return res;
// };
func.expression.parse = function (input) {
if (typeof input !== 'string') return [];
const segments = [];
let pos = 0;
const parts = input.split(/(@\w+)/).filter(Boolean);
for (const part of parts) {
if (part.startsWith('@')) {
const fieldId = part.slice(1);
segments.push({
value: part,
fieldId,
pos,
});
} else {
segments.push({
value: part,
pos,
});
}
pos += part.length;
}
return segments;
};
func.expression.get_property = async function (valP) {
async function secure_eval(val) {
if (typeof IS_PROCESS_SERVER === 'undefined') {
try {
return eval(val);
} catch (err) {
console.error(err);
return;
}
}
try {
let vm = new VM.VM({
sandbox: {
func: func,
SESSION_ID: SESSION_ID,
SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
},
timeout: 1000,
allowAsync: false,
});
return await vm.run(val);
} catch (err) {
throw '';
}
}
var property1, property2;
if (valP.indexOf('[') > -1 && valP.indexOf(']') > -1) {
property1 = valP.substr(valP.indexOf('[') + 1, valP.indexOf(']') - valP.indexOf('[') - 1); // get []
property1 = await secure_eval(property1);
}
if (valP.indexOf('.') > -1) property2 = valP.substr(valP.indexOf('.') + 1, valP.length); // get .
return {
property1: property1,
property2: property2,
};
};
// func.expression.get_property_bad = async function (valP) {
// if (typeof valP !== 'string') return { property1: undefined, property2: undefined };
// const secureEval = async (expr) => {
// if (typeof IS_PROCESS_SERVER === 'undefined') {
// try {
// return eval(expr);
// } catch (err) {
// console.error(err);
// return undefined;
// }
// }
// try {
// const vm = new VM.VM({
// sandbox: {
// func,
// SESSION_ID,
// SESSION_OBJ: { [SESSION_ID]: SESSION_OBJ[SESSION_ID] },
// },
// timeout: 1000,
// allowAsync: false,
// });
// return await vm.run(expr);
// } catch {
// return undefined; // Simplified error handling
// }
// };
// let property1, property2;
// const bracketStart = valP.indexOf('[');
// const bracketEnd = valP.indexOf(']');
// if (bracketStart > -1 && bracketEnd > bracketStart) {
// const expr = valP.slice(bracketStart + 1, bracketEnd);
// property1 = await secureEval(expr);
// }
// const dotIndex = valP.indexOf('.');
// if (dotIndex > -1) {
// property2 = valP.slice(dotIndex + 1);
// }
// return { property1, property2 };
// };
func.expression.validate_constant = function (valP) {
var patt = /["']/;
if (typeof valP === 'string' && patt.test(valP.substr(0, 1)) && patt.test(valP.substr(0, valP.length - 1))) return true;
else return false;
};
func.expression.validate_variables = function (valP) {
if (typeof valP === 'string' && valP.indexOf('@') > -1) return true;
else return false;
};
func.expression.remove_quotes = function (valP) {
if (func.expression.validate_constant(valP)) return valP.substr(1, valP.length - 2);
else return valP;
};
// func.expression.validate_constant = function (valP) {
// typeof valP === 'string' && /^["'].*["']$/.test(valP);
// };
// func.expression.validate_variables = function (valP) {
// typeof valP === 'string' && valP.includes('@');
// };
// func.expression.remove_quotes = function (valP) {
// func.expression.validate_constant(valP) && typeof valP === 'string' ? valP.slice(1, -1) : valP;
// };
// func.expression.secure_eval_org = async function (SESSION_ID, sourceP, val, job_id, dsSessionP, js_script_callback, evt) {
// const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
// func,
// glb,
// SESSION_OBJ,
// SESSION_ID,
// APP_OBJ,
// dsSession: dsSessionP,
// job_id,
// });
// const xu = api_utils;
// if (typeof IS_PROCESS_SERVER === 'undefined' && typeof IS_DOCKER === 'undefined') {
// try {
// return eval(val);
// } catch (err) {
// try {
// return JSON5.parse(val);
// } catch (err) {
// // console.error(err);
// return val;
// }
// }
// }
// // server side execution
// if (sourceP === 'javascript') {
// process.on('uncaughtException', (err) => {
// console.error('Asynchronous error caught.', err);
// func.events.delete_job(SESSION_ID, job_id);
// if (typeof IS_PROCESS_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined') {
// if (SESSION_OBJ[SESSION_ID].crawler) return;
// return __.rpi.write_log(SESSION_OBJ[SESSION_ID].app_id, 'error', 'worker', 'vm error', err, null, val, 'func.expression.get.secure_eval');
// }
// });
// try {
// const dir = path.join(_conf.studio_drive_path, SESSION_OBJ[SESSION_ID].app_id, 'node_modules', '/');
// const script = new VM.VMScript(`try{${val}}catch(e){func.api.error(SESSION_ID, "nodejs error", e); console.error(e); func.events.delete_job(SESSION_ID, job_id);}`, { filename: dir, dirname: dir });
// let vm = new VM.NodeVM({
// require: {
// external: true,
// },
// sandbox: {
// func,
// xu,
// SESSION_ID,
// SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
// callback: js_script_callback,
// job_id,
// axios,
// got,
// FormData,
// },
// timeout: 60000,
// });
// return await vm.run(script, {
// filename: dir,
// dirname: dir,
// });
// } catch (err) {
// console.error('Failed to execute script.', err);
// if (typeof IS_PROCESS_SERVER !== 'undefined') {
// func.events.delete_job(SESSION_ID, jobNo);
// return __.db.add_error_log(SESSION_OBJ[SESSION_ID].app_id, 'api', err);
// }
// }
// } else {
// try {
// try {
// let vm = new VM.VM({
// sandbox: {
// xu,
// func,
// SESSION_ID,
// SESSION_OBJ: { [`${SESSION_ID}`]: SESSION_OBJ[SESSION_ID] },
// callback: js_script_callback,
// job_id,
// },
// timeout: 1000,
// allowAsync: false,
// });
// let ret = val;
// if (typeof val === 'string') {
// ret = await vm.run(val);
// }
// return ret;
// } catch (err) {
// throw '';
// }
// } catch (err) {
// try {
// return JSON5.parse(val);
// } catch (err) {
// // console.error(err);
// return val;
// }
// }
// }
// };
func.expression.secure_eval = async function (SESSION_ID, sourceP, val, job_id, dsSessionP, js_script_callback, evt, ignore_errors) {
if (typeof val !== 'string') return val;
const xu = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: dsSessionP,
job_id,
});
const isServer = typeof IS_PROCESS_SERVER !== 'undefined' || typeof IS_DOCKER !== 'undefined';
// Client-side execution
if (!isServer) {
try {
return eval(val);
} catch (err) {
try {
if (sourceP === 'javascript' && !ignore_errors) console.error(err);
return JSON5.parse(val);
} catch (err) {
if (sourceP === 'javascript' && !ignore_errors) console.error(err);
return val;
}
}
}
// Server-side execution
const sandbox = {
func,
xu,
SESSION_ID,
SESSION_OBJ: { [SESSION_ID]: SESSION_OBJ[SESSION_ID] },
callback: js_script_callback,
job_id,
...(sourceP === 'javascript' ? { axios, got, FormData } : {}),
};
const handleError = (err) => {
console.error('Execution error:', err);
func.events.delete_job(SESSION_ID, job_id);
if (isServer && !SESSION_OBJ[SESSION_ID].crawler) {
if (sourceP === 'javascript') {
__.rpi.write_log(SESSION_OBJ[SESSION_ID].app_id, 'error', 'worker', 'vm error', err, null, val, 'func.expression.get.secure_eval');
} else {
__.db.add_error_log(SESSION_OBJ[SESSION_ID].app_id, 'api', err);
}
}
return val; // Fallback to original value
};
if (sourceP === 'javascript') {
process.on('uncaughtException', handleError);
try {
const dir = path.join(_conf.studio_drive_path, SESSION_OBJ[SESSION_ID].app_id, 'node_modules');
const script = new VM.VMScript(`try { ${val} } catch (e) { func.api.error(SESSION_ID, "nodejs error", e); console.error(e); func.events.delete_job(SESSION_ID, "${job_id}"); }`, { filename: dir, dirname: dir });
const vm = new VM.NodeVM({
require: { external: true },
sandbox,
timeout: 60000,
});
return await vm.run(script, { filename: dir, dirname: dir });
} catch (err) {
return handleError(err);
}
}
try {
const vm = new VM.VM({
sandbox,
timeout: 1000,
allowAsync: false,
});
return await vm.run(val);
} catch {
try {
return JSON5.parse(val);
} catch {
return val;
}
}
};
func.events = {};
func.events.validate = async function (SESSION_ID, triggerP, dsSessionP, eventIdP, sourceP, argumentsP, return_validation_onlyP) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSessionP];
var args = {
triggerP,
dsSessionP,
eventIdP,
sourceP,
argumentsP,
return_validation_onlyP,
};
const search_event_in_parent_ds = async function () {
if (_ds && typeof _ds.parentDataSourceNo !== 'undefined') {
await func.events.validate(SESSION_ID, triggerP, _ds.parentDataSourceNo, eventIdP, sourceP, argumentsP, return_validation_onlyP);
}
};
var ret = false;
var jobs = [];
// var success;
if (_ds?.prog_id) {
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
// check view exist
if (!glb.IS_WORKER) _ds.event_stat_obj = {};
if (_view_obj.progEvents) {
if (_session.api_callback && eventIdP) {
_session.api_callback(eventIdP, SESSION_ID, SESSION_OBJ);
}
// check events has rows
for await (let val of _view_obj.progEvents) {
//run events rows
var eventProp = undefined;
if (val.data.type === triggerP) {
// compare event trigger
if ((triggerP !== 'user_defined') | (triggerP === 'user_defined' && eventIdP === val.data.event_name)) {
// compare user defined name
var expCond;
if (val.data.condition) expCond = await func.expression.get(SESSION_ID, val.data.condition, dsSessionP, 'condition');
if (!val.data.condition || expCond.result) {
func.utils.debug.watch(SESSION_ID, _ds.prog_id + '%' + val.id, 'view_event', val, triggerP + ' ' + eventIdP, expCond);
ret = true;
if (return_validation_onlyP) break;
const set_arguments = async function () {
var args = argumentsP || {};
// for await (let [key, fieldId] of Object.entries(
// val.data.parameters
// )) {
// const field_info = func.common.find_item_by_key(
// _view_obj.progFields,
// "field_id",
// fieldId
// );
// var value = await func.common.get_cast_val(
// SESSION_ID,
// "events",
// fieldId,
// field_info.props.fieldType,
// args[fieldId]
// );
// const ret = await func.datasource.get_value(
// SESSION_ID,
// fieldId,
// dsSessionP,
// _ds.currentRecordId
// );
// const datasource_changes = {
// [ret.dsSessionP]: {
// [ret.currentRecordId]: { [fieldId]: value },
// },
// };
// await func.datasource.update(SESSION_ID, datasource_changes);
// }
for await (let [key, fieldId] of Object.entries(val.data.parameters)) {
const field_info = func.common.find_item_by_key(_view_obj.progFields, 'field_id', fieldId);
if (field_info?.data?.type !== 'virtual') {
console.warn('parameter field must be virtual, update ignored');
continue;
}
if (!args[fieldId]) continue;
let value = await func.common.get_cast_val(SESSION_ID, 'events', fieldId, field_info.props.fieldType, args[fieldId].value);
if (!_.isEmpty(args[fieldId].fx)) {
const fx_ret = await func.expression.get(SESSION_ID, args[fieldId].fx, dsSessionP, 'update');
value = fx_ret.result;
}
// find the target field in the program dataset
const ret = await func.datasource.get_value(SESSION_ID, fieldId, dsSessionP, _ds.currentRecordId);
const datasource_changes = {
[ret.dsSessionP]: {
[ret.currentRecordId]: { [fieldId]: value },
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
}
await add_event();
};
const add_event = async function () {
const _event = func.common.find_item_by_key_root(_view_obj.progEvents, 'id', val.id);
if (_event.workflow) {
// check if event property exist
if (!_event.workflow || _.isEmpty(_event.workflow)) return;
// check events has rows
for (const trigger_obj of _event.workflow) {
//run events rows
if (!trigger_obj.data.action) continue;
if (!trigger_obj.data.enabled) continue;
// condition ok
var callingEventId = val.data.event_name;
if (!callingEventId) callingEventId = val.id; // default event id when event name is missing
// eventProp = trigger_obj;
// success = true;
const ref_id = trigger_obj.data.name;
var container = undefined;
var screen_prop = undefined;
if (!glb.IS_WORKER) {
if (_ds.panel_div_id) {
try {
container = '#' + _ds.panel_div_id;
if ($(container).data().xuData.panel_info) {
screen_prop = $(container).data().xuData.panel_info.paramsP;
} else {
///////////////
container = '#' + _session.DS_GLB[dsSessionP].screenId;
if ($(container) && $(container).data()) {
screen_prop = $(container).data().xuData.paramsP;
}
if (!$(container) || !$(container).length) {
container = '#' + _session.DS_GLB[dsSessionP].containerId;
}
//////////////
}
} catch (e) {
console.error(e);
}
} else {
container = '#' + _ds.screenId;
if ($(container) && $(container).data()) {
screen_prop = $(container).data().xuData.paramsP;
}
if (!$(container) || !$(container).length) {
container = '#' + _ds.containerId;
}
}
} else {
screen_prop = {
callingContainerP: _ds.containerId,
};
}
jobs.push(
await func.events.add_to_queue(
SESSION_ID,
sourceP + ' event',
trigger_obj.id,
null, // was click
trigger_obj.data.action,
ref_id,
container,
null,
_ds.currentRecordId,
null,
trigger_obj.data.name,
null,
null,
dsSessionP,
null,
null,
trigger_obj,
triggerP,
screen_prop,
null, // was target frame id
null,
trigger_obj,
trigger_obj.data.parameter_source_data,
val.id,
null,
args,
null,
null,
),
);
}
}
};
if (val.data.parameters) {
await set_arguments();
} else {
await add_event();
}
} else {
if (val.data.condition && !expCond.result) {
func.utils.debug.watch(SESSION_ID, _ds.prog_id + '%' + val.id, 'view_event', val, triggerP + ' ' + eventIdP, expCond, true);
}
}
}
}
}
}
}
if (return_validation_onlyP) return ret;
if (!ret) await search_event_in_parent_ds();
return jobs;
};
func.events.add_to_queue = async function (
SESSION_ID,
typeP,
eventIdP,
triggerP,
functionP,
refIdP,
containerP,
elementP,
rowP,
evt,
descP,
NA_rootScreenIdP,
NA_callingEventIdP,
dsSessionP,
NA_isInitP,
NA_calling_program,
event_propertiesP,
calling_triggerP,
paramsP,
NA_target_frame_idP,
_NA2,
calling_trigger_prop,
argumentsP,
source_event_idP,
calling_job,
args,
$div,
$container,
) {
var _session = SESSION_OBJ[SESSION_ID];
var obj = {
SESSION_ID,
typeP,
eventIdP,
triggerP,
functionP,
refIdP,
containerP,
elementP,
rowP,
descP,
dsSessionP,
event_propertiesP,
calling_triggerP,
paramsP,
calling_trigger_prop,
argumentsP,
source_event_idP,
calling_job,
args,
$div,
$container,
evt,
job_num: _session.WORKER_OBJ.num,
};
var _ds = _session.DS_GLB[dsSessionP];
if (!_ds) return;
if (typeof dsSessionP !== 'undefined' && dsSessionP !== null) {
obj.prog_id = _ds.prog_id;
obj.parentDataSourceNo = _ds.parentDataSourceNo;
obj.nodeId = _ds.nodeId;
}
///////
if (glb.IS_WORKER && func.utils.is_onscreen_event(functionP)) {
obj.client = true;
if (functionP === 'call_library') {
obj.client = false;
}
if (typeof dsSessionP !== 'undefined' && dsSessionP !== null) {
obj.ds_obj = func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
}
if (obj.client) {
_session.WORKER_OBJ.num++;
// if (!_session.IS_API)
func.utils.post_back_to_client(SESSION_ID, 'job', _session.worker_id, obj);
return;
}
}
////////
if (calling_job) {
var job_index = func.events.find_job_index(SESSION_ID, calling_job);
try {
if (!_session.WORKER_OBJ.jobs[job_index].splice_count) {
_session.WORKER_OBJ.jobs[job_index].splice_count = 0;
}
_session.WORKER_OBJ.jobs[job_index].splice_count++;
_session.WORKER_OBJ.jobs.splice(job_index + _session.WORKER_OBJ.jobs[job_index].splice_count, 0, obj);
// }
} catch (e) {
console.error('bug');
// _session.WORKER_OBJ.jobs.splice(0, 0, obj);
}
} else {
_session.WORKER_OBJ.jobs.push(obj);
}
_session.WORKER_OBJ.num++;
return _session.WORKER_OBJ.num - 1;
};
func.events.find_job_index = function (SESSION_ID, jobNoP) {
var _session = SESSION_OBJ[SESSION_ID];
var ret = null;
if (!_session.WORKER_OBJ) return ret;
_.forEach(_session.WORKER_OBJ.jobs, function (val, key) {
if (val && val.job_num == jobNoP) {
ret = key;
return false;
}
});
return ret;
};
func.events.execute = async function (
SESSION_ID,
jobNoP,
eventIdP,
triggerP,
functionP,
refIdP,
containerP,
elementP,
rowP,
evt,
descP,
rootScreenIdP,
dsSessionP,
NA_callingEventIdP,
callingSourceP,
NA_isInitP,
event_propertiesP,
calling_triggerP,
calling_jobP,
paramsP,
NA_target_frame_idP,
calling_trigger_prop,
NA_calling_program,
argumentsP,
NA_viewIdP,
NA_nodeIdP,
NA_parentDataSourceNoP,
$div,
) {
var _session = SESSION_OBJ[SESSION_ID];
var _ds = _session.DS_GLB[dsSessionP];
if (functionP === 'update') refIdP = null; // in case of left over when program changing from call function to update
var job_index = func.events.find_job_index(SESSION_ID, jobNoP);
if (_session.WORKER_OBJ.jobs?.[job_index]?.stat === 'busy') {
if (jobNoP) _session.WORKER_OBJ.stat = job_index;
return;
}
if (jobNoP && !_session.WORKER_OBJ.jobs[job_index]) {
_session.WORKER_OBJ.stat = null;
return;
}
if (jobNoP) _session.WORKER_OBJ.stat = job_index;
if (jobNoP && calling_trigger_prop?.props?.async) {
func.events.delete_job(SESSION_ID, jobNoP);
_session.WORKER_OBJ.stat = null;
}
if (_session.WORKER_OBJ.jobs[job_index]) {
_session.WORKER_OBJ.jobs[job_index].stat = 'busy';
}
var dsSession = dsSessionP; // new 2020420
var field_elm = elementP;
var calling_field_id = field_elm;
if (field_elm && typeof field_elm === 'object') calling_field_id = field_elm.attr('xu-ui-id');
var log_nodeId;
var log_prog_id;
var log_source;
if (_session.DS_GLB[dsSession]?.prog_id) log_prog_id = _session.DS_GLB[dsSession].prog_id;
log_nodeId = log_prog_id + '_' + eventIdP;
var log_prop = callingSourceP;
if (callingSourceP === 'system event') {
log_prop = 'global event';
}
if (calling_field_id) {
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
let _field_obj = func.common.find_item_by_key(_view_obj.progFields, 'field_id', calling_field_id);
log_nodeId = log_prog_id + '_' + eventIdP + '_' + _field_obj?.id;
log_source = calling_field_id;
}
if (elementP) {
log_prop = triggerP;
log_nodeId = log_nodeId + '_ui_prop'; //+"_"+eventIdP;
}
//check condition
var expCond;
if (event_propertiesP) {
// conditional event
if (event_propertiesP?.props?.condition) {
expCond = await func.expression.get(SESSION_ID, event_propertiesP.props.condition, dsSession, 'condition', null, null, null, calling_field_id ? calling_field_id : calling_triggerP, null, descP); // execute expression
func.utils.debug.log(SESSION_ID, log_nodeId, {
module: 'event',
action: log_prop,
source: log_source,
prop: descP,
details: event_propertiesP.props.condition,
result: expCond.result,
error: expCond.error,
fields: expCond.fields,
type: 'event',
prog_id: log_prog_id,
conditional: true,
});
var cond = expCond.result;
if (!cond || expCond.error) {
// condition failed // === true 03/04/16
func.events.delete_job(SESSION_ID, jobNoP);
func.utils.debug.watch(SESSION_ID, calling_trigger_prop?.id, functionP, '', '', expCond, true);
return;
}
} // Non conditional event
else {
func.utils.debug.log(SESSION_ID, log_nodeId, {
module: 'event',
action: log_prop,
source: log_source,
prop: descP,
details: null,
result: null,
error: null,
fields: null,
type: 'event',
prog_id: log_prog_id,
});
}
}
// var log_error = function (descP, detailsP, warning) {
// func.utils.debug.log(SESSION_ID, log_nodeId, {
// module: "event",
// action: functionP,
// source: log_source,
// prop: descP,
// details: detailsP,
// result: null,
// error: !warning,
// warning: warning,
// fields: null,
// type: "event",
// prog_id: log_prog_id,
// });
// };
const get_params_obj = async function () {
const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, await get_prog_id());
if (!_prog) {
func.events.delete_job(SESSION_ID, jobNoP);
return func.utils.debug_report(SESSION_ID, 'func.events.execute', 'Program not found: ' + refIdP.prog, 'E');
}
// get in parameters
var params_obj = {};
if (_prog?.properties?.progParams) {
for await (const [key, val] of Object.entries(_prog.properties.progParams)) {
// if (val.data.dir === 'in') continue;
if (typeof args.parameters_obj_inP?.[val.data.parameter] !== 'undefined') {
if (args.parameters_obj_inP?.[val.data.parameter].fx) {
let ret = await func.expression.get(SESSION_ID, args.parameters_obj_inP?.[val.data.parameter].fx, dsSession, 'parameters');
params_obj[val.data.parameter] = ret.result;
} else {
params_obj[val.data.parameter] = args.parameters_obj_inP?.[val.data.parameter].value;
}
continue;
}
console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
}
}
return params_obj;
};
const get_prog_id = async function () {
let _prop = args?.calling_trigger_prop?.data?.name?.properties;
let _prog_id = args.prog_id;
if (_prop?.['xu-exp:prog']) {
_prog_id = (await func.expression.get(SESSION_ID, _prop['xu-exp:prog'], dsSession, 'prog_id expression')).result;
}
return _prog_id;
};
// const get_args_property_value = async function (prop_name) {
// let _prop = args?.calling_trigger_prop?.data?.name;
// let _value = _prop[prop_name];
// if (_prop?.[`xu-exp:${prop_name}`]) {
// _value = (
// await func.expression.get(
// SESSION_ID,
// _prop[`xu-exp:${prop_name}`],
// dsSession,
// `${prop_name} expression`
// )
// ).result;
// }
// return _value;
// };
var args = {
prog_id: refIdP?.prog,
screenIdP: refIdP?.prog,
callingFieldIdP: field_elm,
dataSourceNoP: null,
parentDataSourceNoP: dsSession,
triggerIdP: eventIdP,
containerIdP: null,
rowIdP: rowP, //sub_row_idP ? sub_row_idP : rowP,
jobNoP: jobNoP,
callingSourceP: callingSourceP,
calling_jobP: calling_jobP,
screen_dsP: null,
is_panelP: null,
argument_listP: null,
calling_trigger_prop: calling_trigger_prop,
parameters_obj_inP: refIdP?.parameters,
call_screen_propertiesP: refIdP?.properties,
};
const fx = {
Call_window: async function () {
var is_panel;
var $calling_container;
if (_session.WORKER_OBJ.jobs[job_index]) {
if (_session.WORKER_OBJ.jobs[job_index].paramsP) {
$calling_container = $('#' + _session.WORKER_OBJ.jobs[job_index].paramsP.callingContainerP);
} else {
$calling_container = ''; // calling from datasource 0
_session.WORKER_OBJ.jobs[job_index].paramsP = {};
}
}
if (!refIdP.prog) {
func.events.delete_job(SESSION_ID, jobNoP);
return func.utils.debug_report(SESSION_ID, 'func.events.execute', 'Program is empty', 'E');
}
const params_obj = await get_params_obj();
return await func.UI.screen.init(SESSION_ID, await get_prog_id(), $(containerP)?.data()?.xuData.screenId, _session.DS_GLB[dsSession], $calling_container, eventIdP, rowP, jobNoP, is_panel, params_obj, functionP, args.call_screen_propertiesP);
},
call_modal: async function () {
return await fx.Call_window();
},
call_popover: async function () {
return await fx.Call_window();
},
call_page: async function () {
return await fx.Call_window();
},
call_library: async function () {
let plugin_name = refIdP.plugin_name,
method = refIdP.library_method,
$containerP = $div,
dsP = dsSession,
propsP = refIdP.library_props,
sourceP = descP;
var _session = SESSION_OBJ[SESSION_ID];
const set_SYS_GLOBAL_OBJ_WIDGET_INFO = async function (docP) {
var obj = _.clone(docP);
obj.date = await func.utils.get_dateTime(SESSION_ID, 'SYS_DATE', docP.date);
obj.time = await func.utils.get_dateTime(SESSION_ID, 'SYS_TIME', docP.date);
var datasource_changes = {
[0]: {
['data_system']: {
['SYS_GLOBAL_OBJ_WIDGET_INFO']: obj,
},
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
};
const call_plugin_api = async function (plugin_nameP, dataP) {
return await func.utils.call_plugin_api(SESSION_ID, plugin_nameP, dataP);
};
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, _session.DS_GLB[dsP].prog_id + '_' + _session.DS_GLB[dsP].callingMenuId, {
module: 'widgets',
action: 'Init',
source: sourceP,
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'widgets',
prog_id: _session.DS_GLB[dsP].prog_id,
});
};
const get_fields_data = async function (fields, props) {
const report_error = function (descP, warn) {
func.utils.debug.log(SESSION_ID, _session.DS_GLB[dsP].prog_id + '_' + _session.DS_GLB[dsP].callingMenuId, {
module: 'widgets',
action: 'Init',
source: sourceP,
prop: descP,
details: descP,
result: null,
error: warn ? false : true,
fields: null,
type: 'widgets',
prog_id: _session.DS_GLB[dsP].prog_id,
});
};
const get_property_value = async function (fieldIdP, val) {
// var value = props[fieldIdP];
var value = props[fieldIdP] || (typeof val.defaultValue === 'function' ? val?.defaultValue?.() : val?.defaultValue);
if (props[`xu-exp:${fieldIdP}`]) {
value = (await func.expression.get(SESSION_ID, props[`xu-exp:${fieldIdP}`], dsP, 'widget property')).result;
}
return func.common.get_cast_val(
SESSION_ID,
'widgets',
fieldIdP,
val.type, //val.type !== "string" || val.type !== "number" ? "string" : val.type,
value,
null,
);
};
var data_obj = {};
var return_code = 1;
// $.each(fields, function (key, val) {
for await (const [key, val] of Object.entries(fields)) {
try {
data_obj[key] = await get_property_value(key, val);
if (!data_obj[key] && val.mandatory) {
return_code = -1;
report_error(`${key} is a mandatory field.`);
break;
}
// console.log(val);
} catch (error) {
debugger;
}
}
return { code: return_code, data: data_obj };
};
try {
const _plugin = APP_OBJ[_session.app_id]?.app_plugins_purchased?.[plugin_name];
const index = await func.utils.get_plugin_resource(SESSION_ID, plugin_name, `${_plugin.manifest['index.mjs'].dist ? 'dist/' : ''}index.mjs`);
const methods = index.methods;
if (methods && !methods[method]) {
return report_error('method not found');
}
const fields_ret = await get_fields_data(methods[method].fields, propsP);
if (fields_ret.code < 0) {
return report_error(fields_ret.data);
}
const fields = fields_ret.data;
const plugin_setup_ret = await func.utils.get_plugin_setup(SESSION_ID, plugin_name);
if (plugin_setup_ret.code < 0) {
return report_error(plugin_setup_ret);
}
const api_utils = await func.common.get_module(SESSION_ID, 'xuda-api-library.mjs', {
func,
glb,
SESSION_OBJ,
SESSION_ID,
APP_OBJ,
dsSession: dsP,
job_id: jobNoP,
});
const params = {
SESSION_ID,
method,
_session,
dsP,
sourceP,
propsP,
plugin_name,
$containerP,
plugin_setup: plugin_setup_ret.data,
report_error,
call_plugin_api,
set_SYS_GLOBAL_OBJ_WIDGET_INFO,
api_utils,
};
const fx = await func.utils.get_plugin_resource(SESSION_ID, plugin_name, `${_plugin.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`);
if (!fx[method]) {
throw `Method: ${method} does not exist`;
}
await fx[method](fields, params);
} catch (err) {
report_error(err);
}
func.events.delete_job(SESSION_ID, jobNoP);
},
call_native_javascript: async function () {
const module = await func.common.get_module(SESSION_ID, 'xuda-event-javascript-module.mjs');
const result = await module.call_javascript(SESSION_ID, jobNoP, refIdP, dsSession, false, $div);
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
return result;
},
call_evaluate_javascript: async function () {
const module = await func.common.get_module(SESSION_ID, 'xuda-event-javascript-module.mjs');
const result = await module.call_javascript(SESSION_ID, jobNoP, refIdP, dsSession, true, $div);
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
return result;
},
execute_native_javascript: async function () {
const module = await func.common.get_module(SESSION_ID, 'xuda-event-javascript-module.mjs');
const result = await module.run_javascript(
SESSION_ID,
jobNoP,
dsSession,
`(async function(el,evt) {
${refIdP.value}
})(document.querySelector(\`[xu-ui-id="${elementP}"]\`),evt)`,
null,
null,
null,
evt,
$div,
);
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
return result;
},
execute_evaluate_javascript: async function () {
const module = await func.common.get_module(SESSION_ID, 'xuda-event-javascript-module.mjs');
const result = await module.run_javascript(
SESSION_ID,
jobNoP,
dsSession,
`(async function(el,evt) {
${refIdP.value}
})(document.querySelector(\`[xu-ui-id="${elementP}"]\`),evt)`,
true,
null,
null,
evt,
$div,
);
await func.datasource.set_outputField(SESSION_ID, dsSessionP, result, args);
return result;
},
loader_on: async function () {
glb.CURRENT_APP_LOADING = null;
LOADER_ACTIVE = true;
LOADER_TEXT = descP;
// }
func.events.delete_job(SESSION_ID, jobNoP);
// if (callbackP) callbackP();
},
loader_off: async function () {
LOADER_ACTIVE = false;
func.events.delete_job(SESSION_ID, jobNoP);
// if (callbackP) callbackP();
},
emit_event: async function () {
if (refIdP.value) {
// if (descP.value) {
$(document).trigger(refIdP.value, [_session.DS_GLB[dsSession]]);
} else {
func.utils.debug_report(SESSION_ID, 'func.events.execute', 'Event name missing', 'E');
}
func.events.delete_job(SESSION_ID, jobNoP);
// if (callbackP) callbackP();
},
invoke_action: async function () {
func.utils.debug.watch(SESSION_ID, calling_trigger_prop?.id, functionP, null, null, expCond);
await func.action.execute(SESSION_ID, refIdP.value, _ds, null, null, jobNoP, containerP);
},
raise_event: async function () {
var _ds = _session.DS_GLB[dsSession];
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
if (callingSourceP === 'grid' || callingSourceP === 'form') {
let _field_obj = func.common.find_item_by_key(_view_obj.progFields, 'field_id', field_elm);
var event_name = _field_obj?.workflow?.[eventIdP].name.event;
if (_field_obj?.workflow?.[eventIdP].name?.properties['xu-exp:event']) {
event_name = (await func.expression.get(SESSION_ID, props[`xu-exp:event`], dsSession, 'event_name expression')).result;
}
if (field_elm && event_name) {
// get container for fields events
const dsP = await func.datasource.find_event_dataSource(SESSION_ID, event_name, dsSession);
return await func.datasource.run_events_functions(SESSION_ID, dsP, event_name, jobNoP, null, calling_trigger_prop?.data?.name?.parameters || {});
}
// done_execution(event_name);
}
if (callingSourceP.includes('event')) {
let event_name = refIdP.event;
if (refIdP?.properties?.['xu-exp:event']) {
event_name = (await func.expression.get(SESSION_ID, refIdP.properties['xu-exp:event'], dsSession, 'event_name expression')).result;
}
const dsP = await func.datasource.find_event_dataSource(SESSION_ID, event_name, dsSession);
await func.datasource.run_events_functions(SESSION_ID, dsP, event_name, jobNoP, calling_trigger_prop?.props?.async, calling_trigger_prop?.data?.name?.parameters || {});
// done_execution(event_name);
}
func.events.delete_job(SESSION_ID, jobNoP);
// if (callbackP) callbackP();
func.utils.debug.watch(SESSION_ID, calling_trigger_prop?.id, functionP, '', '', expCond);
},
get_data: async function () {
const params_obj = await get_params_obj();
if (!(await get_prog_id())) {
func.utils.debug_report(SESSION_ID, 'func.events.execute', `${elementP} > ${triggerP} > ${functionP} > program ${prog} is missing`, 'E');
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
var _ds = _session.DS_GLB[dsSession];
if (!_ds) {
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
if (_ds) {
func.utils.debug.watch(SESSION_ID, calling_trigger_prop?.id, functionP, null, calling_trigger_prop, expCond);
const ret = await func.datasource.create(SESSION_ID, await get_prog_id(), args.dataSourceNoP, args.parentDataSourceNoP, args.containerIdP, args.rowIdP, args.jobNoP, args.calling_trigger_prop, null, null, args.callingSourceP, args.calling_jobP, args.screen_dsP, args.is_panelP, params_obj);
let _ds_new = _session.DS_GLB[ret.dsSessionP];
let parameters = args?.calling_trigger_prop?.data?.name?.parameters;
if (parameters && !_.isEmpty(parameters)) {
await func.datasource.update_changes_for_out_parameter(SESSION_ID, _ds_new.dsSession, _ds.dsSession);
}
func.events.delete_job(SESSION_ID, jobNoP);
return _ds_new;
}
},
set_data: async function () {
return this.get_data();
},
batch: async function () {
const result = await this.get_data();
// await set_outputField(SESSION_ID, elementP, triggerP, functionP, dsSessionP, result);
return result;
},
update: async function () {
const obj_values_to_update = func.datasource.get_viewFields_for_update_function(SESSION_ID, calling_trigger_prop, null, dsSessionP);
if (!obj_values_to_update || _.isEmpty(obj_values_to_update)) {
func.utils.debug_report(SESSION_ID, 'Update values object is empty', '', 'W');
if (jobNoP) func.events.delete_job(SESSION_ID, jobNoP);
return;
}
var updates = [];
for await (const [key, val] of Object.entries(obj_values_to_update)) {
var $element;
if (elementP) {
$element = $(`[xu-ui-id="${elementP}"]`).clone(true);
}
let ret_field_id = await func.expression.get(SESSION_ID, val.id.trim(), dsSessionP, 'update', null, null, null, null, null, null, $element?.length ? $element?.data()?.xuData?.iterate_info : null);
let ret_value = await func.expression.get(SESSION_ID, val.val.trim(), dsSessionP, 'update', null, null, null, null, null, null, $element?.length ? $element?.data()?.xuData?.iterate_info : null);
let _field_id = ret_field_id.result;
let _value = ret_value.result;
updates.push({ _field_id, _value });
}
let datasource_changes = {};
for await (const change of updates) {
let ret_get_value = await func.datasource.get_value(SESSION_ID, change._field_id, dsSessionP);
if (ret_get_value.found) {
let _ds = _session.DS_GLB[ret_get_value.dsSessionP];
if (!datasource_changes[_ds.dsSession]) {
datasource_changes[_ds.dsSession] = {};
}
if (!datasource_changes[_ds.dsSession][ret_get_value.currentRecordId]) {
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId] = {};
}
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId][change._field_id] = change._value;
}
}
await func.datasource.update(SESSION_ID, datasource_changes, null, null, triggerP);
if (_ds.PARAM_OUT_INFO) {
for await (const [key, val] of Object.entries(_ds.PARAM_OUT_INFO)) {
await func.datasource.update_changes_for_out_parameter(SESSION_ID, _ds.dsSession, val.parentDataSourceNo);
}
}
if (jobNoP) func.events.delete_job(SESSION_ID, jobNoP);
// return changes;
},
call_alert: async function () {
await func.utils.alerts.invoke(SESSION_ID, 'call_alert', refIdP, log_source, dsSession);
func.events.delete_job(SESSION_ID, jobNoP);
},
alert: async function () {
await func.utils.alerts.invoke(SESSION_ID, 'alert', refIdP, log_source, dsSession);
func.events.delete_job(SESSION_ID, jobNoP);
},
delay: async function () {
return new Promise((resolve) => {
setTimeout(function () {
if (jobNoP) func.events.delete_job(SESSION_ID, jobNoP);
resolve();
}, refIdP.value);
});
},
comment: async function () {
if (jobNoP) func.events.delete_job(SESSION_ID, jobNoP);
},
call_project_api: async function () {
const params_obj = await get_params_obj();
const _prog_id = await get_prog_id();
if (!_prog_id) {
func.utils.debug_report(SESSION_ID, 'func.events.execute', `${elementP} > ${triggerP} > ${functionP} > program not defined`, 'E');
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
// if (!output_field) {
// func.utils.debug_report(
// SESSION_ID,
// "func.events.execute",
// `${elementP} >${triggerP} >${functionP} > Output field not defined`,
// "W"
// );
// // func.events.delete_job(SESSION_ID, jobNoP);
// // return;
// }
const api_ret = await func.api.call_project_api(_prog_id, params_obj);
await func.datasource.set_outputField(SESSION_ID, dsSessionP, api_ret, args);
func.events.delete_job(SESSION_ID, jobNoP);
},
call_system_api: async function () {
const api_method = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'api_method');
if (!api_method) {
func.utils.debug_report(SESSION_ID, 'func.events.execute', `${elementP} >${triggerP} >${functionP} > api_method not defined`, 'E');
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
let payload = {};
const _payload = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'payload');
if (_payload) {
const get_payload_property_value = async function (prop_name) {
let _prop = _payload;
let _value = _prop[prop_name];
if (_prop?.[`xu-exp:${prop_name}`]) {
_value = (await func.expression.get(SESSION_ID, _prop[`xu-exp:${prop_name}`], dsSession, `${prop_name} expression`)).result;
}
return _value;
};
for await (let [key, val] of Object.entries(_payload)) {
// if (key.substring(0, 7) !== "xu-exp:") {
const new_key = key.replaceAll('xu-exp:', ''); //key.substring(0, 7) === "xu-exp:" ? key.substring(7): key
payload[new_key] = await get_payload_property_value(new_key);
// }
}
}
// if (!payload) {
// func.utils.debug_report(
// SESSION_ID,
// "func.events.execute",
// `${elementP} >${triggerP} >${functionP} > payload not defined`,
// "E"
// );
// func.events.delete_job(SESSION_ID, jobNoP);
// return;
// }
const output_field = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'outputField');
// if (!output_field) {
// func.utils.debug_report(
// SESSION_ID,
// "func.events.execute",
// `${elementP} >${triggerP} >${functionP} > Output field not defined`,
// "E"
// );
// func.events.delete_job(SESSION_ID, jobNoP);
// return;
// }
const api_ret = await func.api.call_system_api(api_method, payload);
if (output_field) {
let datasource_changes = {};
let ret_get_value = await func.datasource.get_value(SESSION_ID, output_field, dsSessionP);
if (ret_get_value.found) {
let _ds = _session.DS_GLB[ret_get_value.dsSessionP];
if (!datasource_changes[_ds.dsSession]) {
datasource_changes[_ds.dsSession] = {};
}
if (!datasource_changes[_ds.dsSession][ret_get_value.currentRecordId]) {
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId] = {};
}
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId][output_field] = api_ret;
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
func.events.delete_job(SESSION_ID, jobNoP);
},
call_external_api: async function () {
const method = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'method');
if (!method) {
func.utils.debug_report(SESSION_ID, 'func.events.execute', `${elementP} >${triggerP} >${functionP} > method not defined`, 'E');
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
const url = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'url');
if (!url) {
func.utils.debug_report(SESSION_ID, 'func.events.execute', `${elementP} >${triggerP} >${functionP} > url not defined`, 'E');
func.events.delete_job(SESSION_ID, jobNoP);
return;
}
const payload_arr = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'payload');
const report_conversion_error = function (res, typeP, valP) {
var msg = `${elementP} >${triggerP} >${functionP} > error converting from ${valP} to ${typeP}`;
if (error) {
return func.utils.debug_report(SESSION_ID, msg, '', 'W');
}
func.utils.debug_report(SESSION_ID, msg + ' ' + _.capitalize(source) + prog_info, '', 'E');
};
const report_conversion_warn = function (res) {
var msg = `${elementP} >${triggerP} >${functionP} > type mismatch auto conversion from value ${valP} to ${typeP}`;
func.utils.debug_report(SESSION_ID, msg + ' ' + _.capitalize(source) + prog_info, '', 'W');
};
// var ret = valP;
if (error) {
return report_conversion_error();
}
const module = await func.common.get_module(SESSION_ID, 'xuda-get-cast-util-module.mjs');
// return module.cast(
// typeP,
// valP,
// report_conversion_error,
// report_conversion_warn
// );
var payload = _.reduce(
payload_arr,
(ret, val, key) => {
ret[val.key] = module.cast(val.type, val.val, report_conversion_error, report_conversion_warn);
return ret;
},
{},
);
// if (!payload) {
// func.utils.debug_report(
// SESSION_ID,
// "func.events.execute",
// `${elementP} >${triggerP} >${functionP} > payload not defined`,
// "E"
// );
// func.events.delete_job(SESSION_ID, jobNoP);
// return;
// }
const output_field = await func.datasource.get_args_property_value(SESSION_ID, dsSession, args, 'outputField');
// if (!output_field) {
// func.utils.debug_report(
// SESSION_ID,
// "func.events.execute",
// `${elementP} >${triggerP} >${functionP} > Output field not defined`,
// "E"
// );
// func.events.delete_job(SESSION_ID, jobNoP);
// return;
// }
const api_ret = await func.api.call_external_api(method, url, payload);
if (output_field) {
let datasource_changes = {};
let ret_get_value = await func.datasource.get_value(SESSION_ID, output_field, dsSessionP);
if (ret_get_value.found) {
let _ds = _session.DS_GLB[ret_get_value.dsSessionP];
if (!datasource_changes[_ds.dsSession]) {
datasource_changes[_ds.dsSession] = {};
}
if (!datasource_changes[_ds.dsSession][ret_get_value.currentRecordId]) {
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId] = {};
}
datasource_changes[_ds.dsSession][ret_get_value.currentRecordId][output_field] = api_ret;
await func.datasource.update(SESSION_ID, datasource_changes);
}
}
func.events.delete_job(SESSION_ID, jobNoP);
},
};
// if (functionP.includes("alert")) {
// return await fx.alert();
// } else {
// try {
// console.log("functionP", functionP);
return await fx[functionP]();
// } catch (err) {
// console.error(err);
// debugger;
// }
// }
};
func.events.delete_job = function (SESSION_ID, jobNoP) {
var _session = SESSION_OBJ[SESSION_ID];
var job_index = func.events.find_job_index(SESSION_ID, jobNoP);
// console.log(jobNoP, job_index);
if (!_session.WORKER_OBJ.jobs[job_index]) {
_session.WORKER_OBJ.stat = null;
return;
}
var dsSession = _session.WORKER_OBJ.jobs[job_index].dsSessionP;
let ds_obj = _session?.DS_GLB[dsSession];
if (ds_obj) {
delete SCREEN_BLOCKER_OBJ[ds_obj.screenId + (ds_obj.callingScreenId ? '_' + ds_obj.callingScreenId : '')];
}
if (dsSession && ds_obj?.loops_limit && ds_obj?.loops_count < ds_obj?.loops_limit - 1) {
return;
}
_session.WORKER_OBJ.stat = null;
_session.WORKER_OBJ.jobs.splice(job_index, 1);
};
func.events.delete_job_0 = function (SESSION_ID) {
var job_index = 0;
var _session = SESSION_OBJ[SESSION_ID];
if (!_session.WORKER_OBJ.jobs[job_index]) {
_session.WORKER_OBJ.stat = null;
return;
}
var dsSession = _session.WORKER_OBJ.jobs[job_index].dsSession;
let ds_obj = _session?.DS_GLB[dsSession];
if (ds_obj) {
delete SCREEN_BLOCKER_OBJ[ds_obj.screenId + (ds_obj.callingScreenId ? '_' + ds_obj.callingScreenId : '')];
}
if (dsSession && ds_obj && ds_obj.loops_limit && ds_obj.loops_count < ds_obj.loops_limit - 1) {
return;
}
_session.WORKER_OBJ.stat = null;
_session.WORKER_OBJ.jobs.splice(job_index, 1);
};
func.events.check_jobs_idle = async function (SESSION_ID, jobsP) {
return new Promise((resolve, reject) => {
var _session = SESSION_OBJ[SESSION_ID];
if (!jobsP || (jobsP && jobsP.length === 0)) {
resolve();
return;
}
var listener = setInterval(function () {
var found;
for (const [key, val] of Object.entries(jobsP)) {
_.forEach(_session.WORKER_OBJ.jobs, function (val2, key2) {
if (key2 === val) {
found = true;
return false;
}
});
}
if (!found) {
do_callback();
return;
}
}, 100);
var do_callback = function () {
window.clearInterval(listener);
resolve();
};
});
};
var loop_detected_obj = {};
setInterval(function () {
loop_detected_obj = {};
}, 1000);
func.events.set_browser_changes = function (dsP, fieldsChangedP) {
if (fieldsChangedP.includes('SYS_GLOBAL_STR_BROWSER_TITLE')) document.title = dsP.dataset_new['SYS_GLOBAL_STR_BROWSER_TITLE'];
};
func.events.execute_PENDING_OPEN_URL_EVENTS = async function () {
for (let [key, url] of Object.entries(PENDING_OPEN_URL_EVENTS)) {
if (url) {
glb.WINDOW_LOCATION_SEARCH = url;
glb.ROOT_ELEMENT_ATTRIBUTES = func.UI.utils.get_root_element_attributes();
const params_obj = func.common.getObjectFromUrl(url, glb.ROOT_ELEMENT_ATTRIBUTES);
if (!params_obj.prog) {
return console.warn('prog empty');
}
await func.utils.TREE_OBJ.get(SESSION_ID, params_obj.prog);
let screen_ret = await func.utils.get_screen_obj(SESSION_ID, params_obj.prog);
if (screen_ret) {
await func.UI.screen.init(SESSION_ID, params_obj.prog, null, null, $('#embed_' + SESSION_ID), null, null, null, null, null, 'pendingUrlEvent_embed');
} else {
console.error('Program not exist', params_obj.prog_id);
func.UI.utils.progressScreen.show(SESSION_ID, 'Program not exist', null, true);
}
} else {
console.warn('url empty');
}
}
};
func.events.invoke = async function (event_id) {
var _session = SESSION_OBJ[SESSION_ID];
if (!event_id) {
console.warn('event_id Cannot be empty');
return false;
}
var ds;
for await (const [ds_key, val] of Object.entries(_session.DS_GLB)) {
const _view_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, val.prog_id);
if (_.isEmpty(_view_obj.progEvents)) continue;
if (ds) break;
for await (const [key, val] of Object.entries(_view_obj.progEvents)) {
if (val?.data?.type === 'user_defined' && val.data.event_name === event_id) {
ds = ds_key;
break;
}
}
}
if (!ds) {
console.warn('event_id not found');
return false;
}
func.events.validate(SESSION_ID, 'user_defined', ds, event_id);
};
func.action = {};
func.action.execute = async function (
SESSION_ID,
actionP,
paramsP,
isScreenActionP,
event_sourceP,
jobNoP,
// callbackP,
containerP
) {
const module = await func.common.get_module(
SESSION_ID,
"xuda-actions-module.esm.js"
);
await module.action_execute(
SESSION_ID,
actionP,
paramsP,
isScreenActionP,
event_sourceP,
jobNoP,
// callbackP,
containerP
);
};
func.fcm = {};
// func.fcm.load_resources = function (callbackP) {
// func.utils.load_js_on_demand(
// func.common.get_url(
// SESSION_ID,
// "dist",
// "runtime/node_modules/@xuda.io/firebase-app/index.js"
// ),
// function () {
// func.utils.load_js_on_demand(
// func.common.get_url(
// SESSION_ID,
// "dist",
// "runtime/node_modules/@xuda.io/firebase-analytics/index.js"
// ),
// function () {
// func.utils.load_js_on_demand(
// func.common.get_url(
// SESSION_ID,
// "dist",
// "runtime/node_modules/@xuda.io/firebase-auth/index.js"
// ),
// function () {
// func.utils.load_js_on_demand(
// func.common.get_url(
// SESSION_ID,
// "dist",
// "runtime/node_modules/@xuda.io/firebase-firestore/index.js"
// ),
// function () {
// func.utils.load_js_on_demand(
// func.common.get_url(
// SESSION_ID,
// "dist",
// "runtime/node_modules/@xuda.io/firebase-messaging/index.js"
// ),
// function () {
// callbackP();
// }
// );
// }
// );
// }
// );
// }
// );
// }
// );
// };
// func.fcm.init_mobile_xuda = function (SESSION_ID, callbackP) {
// app_id = SESSION_OBJ[SESSION_ID].app_id;
// var sender_id = "XXX";
// var device = func.utils.get_device();
// var PublicVapidKey =
// "BBe17i6AUgRsYP9BUgrECmqapd90ViAM6uFR4aBnw2aRlCQ__QZcxAx5IpFhA6K1s6LZzns2nPCua_ISpAB80Jw";
// var done = function () {
// if ($.cookie("firebase_auth_common_redirect")) {
// $.removeCookie("firebase_auth_common_redirect");
// func.fcm.getRedirectResult(callbackP);
// } else {
// callbackP();
// }
// };
// func.fcm.load_resources(function () {
// if (!device) {
// func.fcm.web_push_notification(
// SESSION_ID,
// APP_OBJ[app_id]._conf.firebaseConfig,
// PublicVapidKey,
// done
// );
// } else {
// firebase.initializeApp(APP_OBJ[app_id]._conf.firebaseConfig);
// func.fcm.device_push_notification(sender_id, done);
// }
// });
// };
// func.fcm.init_mobile_app = function (SESSION_ID, callbackP) {
// // from db
// var app_obj = APP_OBJ[SESSION_OBJ[SESSION_ID].app_id];
// var firebaseConfig = {
// apiKey: app_obj.app_firebase_api_key,
// authDomain: app_obj.app_firebase_auth_domain,
// databaseURL: app_obj.app_firebase_database_uRLy,
// projectId: app_obj.app_firebase_project_id,
// storageBucket: app_obj.app_firebase_storage_bucket,
// messagingSenderId: app_obj.app_firebase_messaging_sender_id,
// appId: app_obj.app_firebase_app_id,
// measurementId: app_obj.app_firebase_measurement_id,
// };
// var sender_id = app_obj.app_firebase_messaging_sender_id;
// var device = func.utils.get_device();
// var PublicVapidKey = app_obj.app_firebase_publicvapidkey;
// var done = function () {
// if ($.cookie("firebase_auth_common_redirect")) {
// $.removeCookie("firebase_auth_common_redirect");
// func.fcm.getRedirectResult(callbackP);
// } else {
// callbackP();
// }
// };
// func.fcm.load_resources(function () {
// if (!device) {
// func.fcm.web_push_notification(
// SESSION_ID,
// firebaseConfig,
// PublicVapidKey,
// done
// );
// } else {
// firebase.initializeApp(firebaseConfig);
// func.fcm.device_push_notification(sender_id, done);
// }
// });
// };
// func.fcm.web_push_notification = function (
// SESSION_ID,
// firebaseConfig,
// PublicVapidKey,
// callbackP
// ) {
// try {
// firebase.initializeApp(firebaseConfig);
// // Retrieve Firebase Messaging object.
// const messaging = firebase.messaging();
// // Add the public key generated from the console here.
// messaging.usePublicVapidKey(PublicVapidKey);
// Notification.requestPermission().then((permission) => {
// if (permission === "granted") {
// console.log("Notification permission granted.");
// SESSION_OBJ[SESSION_ID].PUSH_NOTIFICATION_GRANTED = true;
// } else {
// console.log("Unable to get permission to notify.");
// }
// messaging
// .getToken()
// .then((currentToken) => {
// if (currentToken) {
// sendTokenToServer(currentToken);
// } else {
// // Show permission request.
// console.log(
// "No Instance ID token available. Request permission to generate one."
// );
// // Show permission UI.
// setTokenSentToServer(false);
// }
// })
// .catch((err) => {
// console.log("An error occurred while retrieving token. ", err);
// setTokenSentToServer(false);
// if (callbackP) callbackP();
// });
// });
// // [START refresh_token]
// // Callback fired if Instance ID token is updated.
// messaging.onTokenRefresh(() => {
// messaging
// .getToken()
// .then((refreshedToken) => {
// console.log("Token refreshed.");
// setTokenSentToServer(false);
// sendTokenToServer(refreshedToken);
// resetUI();
// // [END_EXCLUDE]
// })
// .catch((err) => {
// console.log("Unable to retrieve refreshed token ", err);
// });
// });
// messaging.onMessage((payload) => {
// var widget = func.UI.widgets(SESSION_ID);
// var get_from_web = function () {
// doc = {
// push_notification_title: payload.data.title,
// push_notification_body: payload.data.body,
// push_notification_image: payload.data.image,
// push_notification_event_id: payload.data.event_id,
// push_notification_color: payload.data.color,
// user_defined_1: payload.data.user_defined_1,
// user_defined_2: payload.data.user_defined_2,
// user_defined_3: payload.data.user_defined_3,
// user_defined_4: payload.data.user_defined_4,
// user_defined_5: payload.data.user_defined_5,
// timeout: payload.data.timeout,
// };
// };
// var get_from_device = function () {
// doc = {
// push_notification_title: payload.notification.title,
// push_notification_body: payload.notification.body,
// push_notification_image: payload.notification.image,
// push_notification_event_id: payload.data["gcm.notification.event_id"],
// push_notification_color: payload.data["gcm.notification.color"],
// user_defined_1: payload.data["gcm.notification.user_defined_1"],
// user_defined_2: payload.data["gcm.notification.user_defined_2"],
// user_defined_3: payload.data["gcm.notification.user_defined_3"],
// user_defined_4: payload.data["gcm.notification.user_defined_4"],
// user_defined_5: payload.data["gcm.notification.user_defined_5"],
// timeout: payload.data["gcm.notification.timeout"],
// };
// };
// if (payload.notification) {
// get_from_device();
// } else {
// get_from_web();
// }
// widget.set_SYS_GLOBAL_OBJ_WIDGET_INFO(doc, function () {
// widget.invoke_push_notification(doc);
// func.events.validate(SESSION_ID, "notification_received", 0);
// });
// });
// function resetUI() {
// messaging
// .getToken()
// .then((currentToken) => {
// if (currentToken) {
// sendTokenToServer(currentToken);
// } else {
// console.log(
// "No Instance ID token available. Request permission to generate one."
// );
// SESSION_OBJ[SESSION_ID].FIREBASE_TOKEN_ID = null;
// setTokenSentToServer(false);
// }
// })
// .catch((err) => {
// console.log("An error occurred while retrieving token. ", err);
// setTokenSentToServer(false);
// });
// }
// function sendTokenToServer(currentToken) {
// SESSION_OBJ[SESSION_ID].FIREBASE_TOKEN_ID = currentToken;
// if (!isTokenSentToServer()) {
// console.log("Sending token to server...");
// setTokenSentToServer(true);
// } else {
// console.log(
// "Token already sent to server so won't send it again " +
// "unless it changes"
// );
// }
// if (callbackP) callbackP(currentToken);
// }
// function isTokenSentToServer() {
// return false; //window.localStorage.getItem('sentToServer') === '1';
// }
// function setTokenSentToServer(sent) {
// // window.localStorage.setItem('sentToServer', sent ? '1' : '0');
// }
// } catch (e) {
// console.warn(e);
// SESSION_OBJ[SESSION_ID].FIREBASE_TOKEN_ID = "";
// callbackP();
// }
// };
// func.fcm.getRedirectResult = function (callbackP) {
// firebase
// .auth()
// .getRedirectResult()
// .then(function (result) {
// if (result.credential) {
// var token = result.credential.accessToken;
// var user = result.additionalUserInfo.profile;
// if (result.credential.signInMethod === "apple.com") {
// var appleUserFullName = result.user.displayName;
// user.given_name = appleUserFullName.split(" ").slice(0, -1).join(" ");
// user.family_name = result.user.displayName
// .split(" ")
// .slice(-1)
// .join(" ");
// }
// var obj = {
// provider: result.credential.signInMethod,
// token: token,
// first_name: user.given_name,
// last_name: user.family_name,
// email: user.email,
// user_id: user.id,
// picture: user.picture,
// verified_email: user.verified_email,
// locale: user.locale,
// error_code: "",
// error_msg: "",
// };
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.token = token;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.first_name =
// user.given_name;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.last_name =
// user.family_name;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.email =
// user.email;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.user_id =
// user.id;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.picture =
// user.picture;
// SESSION_OBJ[
// SESSION_ID
// ].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.verified_email =
// user.verified_email;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.locale =
// user.locale;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.provider =
// result.additionalUserInfo.providerId.split(".")[0];
// var eventChangesResults = {
// rows_changed: [],
// fieldsChanged: [],
// };
// eventChangesResults.dsSession = 0;
// eventChangesResults.rows_changed.push("");
// eventChangesResults.fieldsChanged.push(
// "SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO"
// );
// eventChangesResults.dataset_obj = {
// "": {
// SYS_GLOBAL_OBJ_WIDGET_INFO: obj,
// },
// };
// var ds = $.cookie("firebase_auth_common_redirect_ds");
// var interval = setInterval(async function () {
// if (!SESSION_OBJ[SESSION_ID].DS_GLB[ds]) return;
// clearInterval(interval);
// await func.datasource.update(SESSION_ID, eventChangesResults);
// }, 100);
// }
// callbackP();
// .catch(function (error) {
// // Handle Errors here.
// var errorCode = error.code;
// var errorMessage = error.message;
// // The email of the user's account used.
// var email = error.email;
// // The firebase.auth.AuthCredential type that was used.
// var credential = error.credential;
// // ...
// console.error(errorCode, errorMessage, credential);
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.error_code =
// errorCode;
// SESSION_OBJ[SESSION_ID].SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO.error_msg =
// errorMessage;
// callbackP();
// });
// };
// func.fcm.device_push_notification = function (sender_id, callbackP) {
// try {
// FirebasePlugin.getToken(
// function (fcmToken) {
// SESSION_OBJ[SESSION_ID].FIREBASE_TOKEN_ID = fcmToken;
// console.log(fcmToken);
// FirebasePlugin.hasPermission((hasPermission) => {
// if (hasPermission) {
// console.log("Notification permission granted.");
// SESSION_OBJ[SESSION_ID].PUSH_NOTIFICATION_GRANTED = true;
// if (callbackP) callbackP(fcmToken);
// } else {
// console.log("Unable to get permission to notify.");
// FirebasePlugin.grantPermission(function (hasPermission) {
// console.log(
// "Permission was " + (hasPermission ? "granted" : "denied")
// );
// if (hasPermission) {
// SESSION_OBJ[SESSION_ID].PUSH_NOTIFICATION_GRANTED = true;
// } else {
// SESSION_OBJ[SESSION_ID].PUSH_NOTIFICATION_GRANTED = false;
// }
// if (callbackP) callbackP(fcmToken);
// });
// }
// });
// },
// function (error) {
// console.error(error);
// }
// );
// FirebasePlugin.onMessageReceived(
// function (message) {
// // console.log('Message type: ' + message.messageType);
// // console.log(message);
// if (message.messageType === "notification") {
// console.log("Notification message received");
// var payload = message;
// var widget = func.UI.widgets(SESSION_ID);
// var doc = {
// push_notification_title:
// func.utils.get_device() === "android"
// ? payload.title
// : payload.aps.alert.title,
// push_notification_body:
// func.utils.get_device() === "android"
// ? payload.body
// : payload.aps.alert.body,
// // push_notification_image: payload.additionalData.fcm_options.image,
// push_notification_event_id: payload["event_id"],
// push_notification_color: payload["color"],
// user_defined_1: payload["user_defined_1"],
// user_defined_2: payload["user_defined_2"],
// user_defined_3: payload["user_defined_3"],
// user_defined_4: payload["user_defined_4"],
// user_defined_5: payload["user_defined_5"],
// timeout: payload["timeout"],
// };
// widget.set_SYS_GLOBAL_OBJ_WIDGET_INFO(doc, function () {
// widget.invoke_push_notification(doc);
// func.events.validate(SESSION_ID, "notification_received", 0);
// });
// if (message.tap) {
// console.log("Tapped in " + message.tap);
// if (doc.push_notification_event_id) {
// func.events.validate(
// SESSION_ID,
// "user_defined",
// 0,
// doc.push_notification_event_id,
// null,
// "program",
// null,
// null,
// null,
// null,
// null,
// 0
// );
// }
// }
// }
// console.dir(message);
// },
// function (error) {
// console.error(error);
// }
// );
// } catch (e) {
// console.warn(e);
// callbackP();
// }
// };
func.UI.main = {};
func.UI.main.clear_SYNC_INTERVAL = function () {
$('body').unbind('mousemove keypress mousedown');
};
func.UI.main.embed_prog_execute = async function (SESSION_ID, prog) {
var _session = SESSION_OBJ[SESSION_ID];
// await func.utils.TREE_OBJ.get(SESSION_ID, prog);
const _prog = await func.utils.VIEWS_OBJ.get(SESSION_ID, prog);
const get_params_obj = function () {
// get in parameters
var params_obj = {};
if (_prog?.properties?.progParams) {
for (const [key, val] of Object.entries(_prog.properties.progParams)) {
// if (val.data.dir !== 'in') continue;
if (typeof _session.url_params?.[val.data.parameter] !== 'undefined') {
params_obj[val.data.parameter] = _session.url_params?.[val.data.parameter];
continue;
}
console.warn(`Warning: Program ${_prog.properties.menuName} expected In parameter: ${val.data.parameter} but received null instead`);
}
}
return params_obj;
};
let screen_ret = await func.utils.get_screen_obj(SESSION_ID, prog);
if (screen_ret) {
let ret_init = await func.UI.screen.init(SESSION_ID, prog, null, null, $('#embed_' + SESSION_ID), null, null, null, null, get_params_obj(), 'call_embed');
document.title = screen_ret.properties.menuTitle;
return;
}
console.error('Program not exist', prog);
func.UI.utils.progressScreen.show(SESSION_ID, 'Program not exist', null, true);
// }
};
func.UI.main.embed_loader = async function (SESSION_ID) {
var _session = SESSION_OBJ[SESSION_ID];
var hash = '';
if (window.location.hash) hash = window.location.hash.substr(1);
_session.SYS_GLOBAL_STR_BROWSER_HASH_ID = hash;
_session.SYS_GLOBAL_STR_BROWSER_TITLE = document.title;
const init_system_ds = async function () {
if (!['main'].includes(_session.opt.app_computing_mode)) {
await func.index.new_webworker(SESSION_ID, { menuName: 'Main' });
// await func.index.call_worker(SESSION_ID, {
// service: "create_webworker_globals",
// data: { ds_data: _session.DS_GLB[0], session_id: SESSION_ID },
// });
}
const ret = await func.datasource.create(SESSION_ID, 'system');
/////////// moved to the datasource callback to allow sync on_load events to run at worker
// if (!["main"].includes(_session.opt.app_computing_mode)) {
// // await func.index.new_webworker(SESSION_ID, { menuName: "Main" });
// await func.index.call_worker(SESSION_ID, {
// service: "create_webworker_globals",
// data: { ds_data: _session.DS_GLB[0], session_id: SESSION_ID },
// });
// }
return ret;
// });
};
const set_SYS_GLOBAL_KEYS_STATE = async function (SESSION_ID, e, state) {
if (!_session?.DS_GLB?.[0]) return;
if (e.keyCode !== 16 && e.keyCode !== 17 && e.keyCode !== 18 && e.keyCode !== 91) {
return;
}
var data = {};
if (e.keyCode === 17) {
data.SYS_GLOBAL_BOL_CONTROL_KEY_STATE = state;
}
if (e.keyCode === 16) {
data.SYS_GLOBAL_BOL_SHIFT_KEY_STATE = state;
}
if (e.keyCode === 18) {
data.SYS_GLOBAL_BOL_ALT_KEY_STATE = state;
}
if (e.keyCode === 91) {
data.SYS_GLOBAL_BOL_COMMAND_KEY_STATE = state;
}
var datasource_changes = {
[0]: {
['data_system']: data,
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
};
const start_workers = async function () {
_session.WORKER_OBJ.fx = new func.utils.job_worker(SESSION_ID);
_session.WORKER_OBJ.fx.init();
};
const create_embed_container = async function () {
$('<div>')
.attr('id', 'embed_' + SESSION_ID)
.addClass('xu_embed_div')
.data({ xuData: {} })
.appendTo($(_session.root_element));
};
const execute_PENDING_OPEN_URL_EVENTS = async function () {
if (typeof func.events.execute_PENDING_OPEN_URL_EVENTS !== 'undefined' && glb.is_cordova) {
func.events.execute_PENDING_OPEN_URL_EVENTS();
}
};
const remove_loader = async function () {
$('.loader').remove();
$(_session.root_element).removeClass('loader_background_color');
};
const perform_callback = async function () {
if (_session.api_callback) {
_session.api_callback('xuda_ready', SESSION_ID, SESSION_OBJ);
}
};
const call_program = async function () {
if (_session.route_id) {
const route_obj = await func.utils.DOCS_OBJ.get(SESSION_ID, _session.route_id);
function flattenMenuItems(menu) {
let flatMenu = {};
function recurse(items) {
for (let item of items) {
flatMenu[item.id] = item;
if (item.children && item.children.length > 0) {
recurse(item.children);
}
}
}
recurse(menu);
return flatMenu;
}
const flatMenu = flattenMenuItems(route_obj.routeMenu.menu);
const menu_obj = flatMenu[_session.menu_id];
if (_session.menu_id) {
if (menu_obj) {
_session.prog_id = menu_obj.prog_id;
if (menu_obj.prog_params) {
_session.url_params = {
..._session.url_params,
...menu_obj.prog_params,
};
}
if (menu_obj.global_params) {
_session.url_params = {
..._session.url_params,
...menu_obj.global_params,
};
}
}
}
}
if (!_session.prog_id) return;
await func.utils.TREE_OBJ.get(SESSION_ID, _session.prog_id);
let screen_ret = await func.utils.get_screen_obj(SESSION_ID, _session.prog_id);
if (screen_ret) {
func.UI.main.embed_prog_execute(SESSION_ID, _session.prog_id);
} else {
console.error('Program not exist', _session.prog_id);
func.UI.utils.progressScreen.show(SESSION_ID, 'Program not exist', null, true);
}
};
const register_run_background_plugins = async function () {
if (typeof glb.SLIM_BUNDLE !== 'undefined' || glb.SLIM_BUNDLE) return;
for await (const [plugin_name, val] of Object.entries(APP_OBJ[_session.app_id].app_plugins_purchased)) {
if (val.installed && val.run_in_background && val.manifest?.['runtime.mjs']?.exist) {
try {
const plugin_runtime_src = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, `${val.manifest['runtime.mjs'].dist ? 'dist/' : ''}runtime.mjs`);
if (val.manifest['runtime.mjs'].dist && val.manifest?.['runtime.mjs']?.css) {
const plugin_runtime_css_url = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, 'dist/runtime.css');
func.utils.load_css_on_demand(plugin_runtime_css_url);
}
const plugin_script = await import(plugin_runtime_src);
eval(plugin_script);
let plugin_setup_script_ret = null;
if (val.manifest?.['index.mjs']?.exist) {
const plugin_setup_src = await func.utils.get_plugin_npm_cdn(SESSION_ID, plugin_name, `${val.manifest['index.mjs'].dist ? 'dist/' : ''}index.mjs`);
let plugin_setup_script = await import(plugin_setup_src);
if (plugin_setup_script) {
plugin_setup_script_ret = await func.utils.get_plugin_setup(SESSION_ID, plugin_name);
if (plugin_setup_script_ret.code < 0) {
throw plugin_setup_script_ret;
}
}
}
glb.lifecycle.plugins[plugin_name] = {
plugin_script,
setup_data: plugin_setup_script_ret?.data,
};
} catch (err) {
console.error(err);
}
}
}
};
async function updateOnlineStatus() {
if (!_session?.DS_GLB?.[0]) return;
var data = {};
if (navigator.onLine) {
data.SYS_GLOBAL_BOL_ONLINE = 1;
} else {
data.SYS_GLOBAL_BOL_ONLINE = 0;
}
var datasource_changes = {
[0]: {
['data_system']: data,
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
}
await register_run_background_plugins();
$(_session.root_element).show();
func.UI.component.create_app_root_component(SESSION_ID);
await glb.lifecycle.execute(SESSION_ID, 'beforeInit');
await start_workers();
await init_system_ds();
await glb.lifecycle.execute(SESSION_ID, 'initialized');
await create_embed_container();
await execute_PENDING_OPEN_URL_EVENTS();
await remove_loader();
await func.UI.worker.init(SESSION_ID);
await glb.lifecycle.execute(SESSION_ID, 'beforeMounted');
await call_program();
await glb.lifecycle.execute(SESSION_ID, 'mounted');
await perform_callback();
func.utils.debug.write(SESSION_ID, 'Xuda.io started.');
await glb.lifecycle.execute(SESSION_ID, 'systemReady');
/////////////////////////////
$(document).keydown(function (e) {
set_SYS_GLOBAL_KEYS_STATE(SESSION_ID, e, 1);
});
$(document).keyup(function (e) {
set_SYS_GLOBAL_KEYS_STATE(SESSION_ID, e, 0);
});
await updateOnlineStatus();
window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOnlineStatus);
console.log('xuda.io system ready.');
$('body')[0].dispatchEvent(glb.system_ready_event);
};
func.UI.main.set_custom_css = function (SESSION_ID, callbackP) {
if (SESSION_OBJ[SESSION_ID].DS_GLB[0].data_system?.['SYS_GLOBAL_STR_SITE_CSS']) $("<style type='text/css'> " + SESSION_OBJ[SESSION_ID].DS_GLB[0].data_system['SYS_GLOBAL_STR_SITE_CSS'] + ' </style>').appendTo('head');
callbackP();
};
func.index = {};
////////////////////////////////////
$(document).ready(function () {
func.index.init_document_listeners();
func.UI.utils.indicator.worker.normal();
func.index.init_service_workers();
});
function xuda(...args) {
let element = null;
let opt = {};
let callback = null;
for (const arg of args) {
if (arg instanceof HTMLElement) {
// Detect the element (e.g., <div>, <span>, etc.)
element = arg;
} else if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {
// Detect options (non-null object that's not an array)
opt = arg;
} else if (typeof arg === 'function') {
// Detect the callback function
callback = arg;
}
}
if (!element) {
if (typeof glb.SLIM_BUNDLE === 'undefined' || !glb.SLIM_BUNDLE) {
return console.error('Xuda Error - element argument is empty');
}
element = 'body';
console.warn('root element set to body');
}
if (!$(element).length) {
return console.error('Xuda Error - element not found');
}
if (typeof opt === 'undefined') {
return console.error('Xuda Error - opt argument is undefined');
}
if (typeof opt !== 'object') {
return console.error('Xuda Error - opt argument is not an object');
}
glb.URL_PARAMS = func.common.getJsonFromUrl(window.location.href);
glb.worker_type = 'Worker';
if (opt.debug_js) {
glb.debug_js = true;
if ((location.host.includes('localhost') || location.host.includes('127.0.0.1')) && typeof glb.SLIM_BUNDLE === 'undefined' && typeof glb.CODE_BUNDLE === 'undefined') {
glb.worker_type = 'Dev';
} else {
glb.worker_type = 'Debug';
}
}
const call_xuda = async function () {
const _instance_id = Date.now().toString() + Math.round(Math.random() * 10000).toString();
const _api_callback = callback;
const create_index_html = function () {
const { root_element, domain } = _session;
$(root_element).css('position', 'relative');
$(root_element).append(`
<style>
.loader {
position: absolute;
background: rgb(0 0 0 / 30%);
z-index: 10;
overflow-y: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.loader .loader_logo {
width: 43px;
height: 43px;
border-radius: 50%;
background-size: cover;
}
.loader .loader_msg {
padding-top: 10px;
text-align: center;
min-height: 20px;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}
.loader .loader_rotate {
padding: 20px;
border: 2px solid #fff;
border-right-color: #898989;
border-radius: 22px;
-webkit-animation: rotate 0.8s infinite linear;
position: absolute;
}
@-webkit-keyframes rotate {
100% {
-webkit-transform: rotate(360deg);
}
}
</style>
<div class="loader">
<div class="loader_logo">
<div class="loader_rotate"></div>
</div>
<div class="loader_msg"> </div>
</div>
<div class="progressLoader"></div>
`);
$(root_element).append(
`<div aria-live="assertive"
class="fixed inset-0 flex items-end px-4 py-6 pointer-events-none sm:p-6 sm:items-start z-[999]">
<div id="tailwind_toast_controller" class="w-full flex flex-col items-center space-y-4 sm:items-end">
</div>
</div>`,
);
$(root_element).append(
`
<div id="progressScreen2" style="display: none">
<div id="progressScreen2_text"></div>
</div>`,
);
const get_url = function (domain, method, path) {
return `https://${domain}/${method}${path ? '/' + path : '/'}`;
};
func.utils.load_css_on_demand(get_url(domain, 'dist', 'runtime/css/mobile.css'));
};
const device_ready = async function () {
return new Promise(function (resolve, reject) {
if (!func.utils.get_device()) {
return resolve();
}
document.addEventListener(
'deviceready',
function () {
glb.is_cordova = true;
resolve();
},
false,
);
});
};
const get_fingerprint_component = async function () {
return new Promise(function (resolve, reject) {
Fingerprint2.get(function (components) {
resolve(components);
});
});
};
const get_session_id = function () {
function defineTabID() {
var iPageTabID = sessionStorage.getItem('tabID');
// if it is the first time that this page is loaded
if (iPageTabID == null) {
var iLocalTabID = localStorage.getItem('tabID');
// if tabID is not yet defined in localStorage it is initialized to 1
// else tabId counter is increment by 1
var iPageTabID = iLocalTabID == null ? 1 : Number(iLocalTabID) + 1;
// new computed value are saved in localStorage and in sessionStorage
localStorage.setItem('tabID', iPageTabID);
sessionStorage.setItem('tabID', iPageTabID);
}
return iPageTabID;
}
if (func.utils.get_device()) {
return _instance_id + window.device.uuid;
}
var fingerprint_id = Fingerprint2.x64hash128(
components
.map(function (pair) {
return pair.value;
})
.join(),
31,
);
return _instance_id + fingerprint_id + defineTabID();
};
const get_fingerprint = function () {
if (func.utils.get_device()) {
return window.device.uuid;
}
return Fingerprint2.x64hash128(
components
.map(function (pair) {
return pair.value;
})
.join(),
31,
);
};
const init_SESSION = function () {
SESSION_OBJ[SESSION_ID] = {
JOB_NO: 1000,
opt,
root_element: $(element)[0],
worker_type: glb.worker_type,
api_callback: _api_callback,
CODE_BUNDLE: glb.CODE_BUNDLE,
SLIM_BUNDLE: glb.SLIM_BUNDLE,
WORKER_OBJ: {
jobs: [],
num: 1000,
stat: null,
},
DS_GLB: {},
SYS_GLOBAL_OBJ_FIREBASE_AUTH_INFO: {
token: '',
first_name: '',
last_name: '',
email: '',
user_id: '',
picture: '',
verified_email: '',
locale: '',
error_code: '',
error_msg: '',
},
SYS_GLOBAL_OBJ_CLIENT_INFO: {
fingerprint: '',
device: '',
user_agent: '',
browser_version: '',
browser_name: '',
engine_version: '',
client_ip: '',
engine_name: '',
os_name: '',
os_version: '',
device_model: '',
device_vendor: '',
device_type: '',
screen_current_resolution_x: '',
screen_current_resolution_y: '',
screen_available_resolution_x: '',
screen_available_resolution_y: '',
language: '',
time_zone: '',
cpu_architecture: '',
uuid: '',
},
PUSH_NOTIFICATION_GRANTED: null,
FIREBASE_TOKEN_ID: null,
USR_OBJ: {},
debug_js: null,
DS_UI_EVENTS_GLB: {},
host: location.host,
req_id: 0,
build_info: {},
CACHE_REQ: {},
url_params: {
...func.common.getParametersFromUrl(),
...opt.url_params,
},
};
WEB_WORKER[SESSION_ID] = {};
return SESSION_OBJ[SESSION_ID];
};
const set_SESSION = async function () {
for await (const key of ['gtp_token', 'app_token', 'prog_id', 'domain', 'engine_mode', 'crawler', 'app_id', 'route_id', 'menu_id', 'local_live_preview', 'project_data']) {
_session[key] = func.UI.utils.get_url_attribute(SESSION_ID, key);
// set defaults
if (!_session[key]) {
var val = _session[key];
switch (key) {
case 'domain':
val = window.location.host;
break;
case 'engine_mode':
val = 'miniapp'; //was 'run'
break;
case 'app_id':
val = 'unknown';
break;
default:
break;
}
_session[key] = val;
}
// set exceptions
switch (key) {
case 'domain':
if (_session[key].includes('localhost') || _session[key].includes('127.0.0.1')) {
const getSubdomain = (url) => {
let domain = url;
if (url.includes('://')) {
domain = url.split('://')[1];
}
let subdomain = '';
if (!_session[key].includes('127.0.0.1')) {
subdomain = domain.split('.')[0];
}
return subdomain;
};
_session[key] = getSubdomain(_session[key]) ? getSubdomain(_session[key]) + '.xuda.io' : 'xuda.io';
}
break;
case 'project_data': {
if (typeof glb.SLIM_BUNDLE !== 'undefined' || glb.SLIM_BUNDLE) {
const { root_element } = _session;
if (!_session[key]) {
_session[key] = {};
}
if (!_session[key].programs) {
_session[key].programs = {};
}
if (!_session[key].globals) {
_session[key].globals = {
_id: 'globals',
progDataSource: {},
properties: { menuType: 'globals' },
studio_meta: {},
progEvents: [],
progFields: [],
};
}
if ($('template').length) {
const module = await func.common.get_module(SESSION_ID, 'xuda-cli-plugin-html-parser-module.esm.js');
$.each($('template'), function (idx, el) {
const _id = $(el).attr('id') || 'template_' + idx.toString();
if (!_session[key].programs[_id]) {
_session[key].programs[_id] = {
_id,
progDataSource: {},
properties: { menuType: 'component', renderType: 'form' },
studio_meta: {},
progEvents: [],
progFields: [],
};
}
if ($(el).html()) {
window.xudaStringify = module.xudaStringify;
const progUi = module.xudaPrase($(el).html());
_session[key].programs[_id].progUi = progUi?.[0]?.children || [];
}
});
if (!_session.prog_id) {
_session.prog_id = $($('template')?.[0])?.attr('id') || 'template_0';
}
$(root_element).empty();
// if (!_session[key].programs._default) {
// _session[key].programs._default = {
// _id: "_default",
// progDataSource: {},
// properties: { menuType: "component", renderType: "form" },
// studio_meta: {},
// progEvents: [],
// progFields: [],
// };
// }
// if ($("template").html()) {
// const module = await func.common.get_module(
// SESSION_ID,
// "xuda-cli-plugin-html-parser-module.esm.js"
// );
// window.xudaStringify = module.xudaStringify;
// const progUi = module.xudaPrase($("template").html());
// const { root_element } = _session;
// $(root_element).empty();
// _session[key].programs._default.progUi =
// progUi?.[0]?.children || [];
// _session.prog_id = "_default";
// }
}
}
break;
}
default:
break;
}
}
// );
_session.crawler = opt.crawler;
};
const set_SYS_GLOBAL_OBJ_CLIENT_INFO = function () {
const { engine_mode } = _session;
var _client_info = _session.SYS_GLOBAL_OBJ_CLIENT_INFO;
_client_info.fingerprint = get_fingerprint();
if (engine_mode === 'live_preview') {
_client_info.screen_current_resolution_x = window.innerWidth;
_client_info.screen_current_resolution_y = window.innerHeight;
_client_info.screen_available_resolution_x = window.innerWidth;
_client_info.screen_available_resolution_y = window.innerHeight;
} else {
_client_info.screen_current_resolution_x = components[6].value[0];
_client_info.screen_current_resolution_y = components[6].value[1];
_client_info.screen_available_resolution_x = components[7].value[0];
_client_info.screen_available_resolution_y = components[7].value[1];
}
const client = new ClientJS();
_client_info.device = func.utils.get_device();
const browser_data = client.getBrowserData();
_client_info.user_agent = browser_data.ua;
_client_info.browser_version = browser_data.browser.name;
_client_info.browser_name = browser_data.browser.version;
_client_info.engine_version = browser_data.engine.name;
_client_info.engine_name = browser_data.engine.version;
_client_info.os_name = browser_data.os.name;
_client_info.os_version = browser_data.os.version;
_client_info.device_model = browser_data.device.name;
_client_info.device_vendor = browser_data.device.name;
_client_info.device_type = browser_data.device.name;
_client_info.language = client.getLanguage();
_client_info.time_zone = client.getTimeZone();
_client_info.cpu_architecture = browser_data.cpu.architecture;
if (['android', 'ios', 'windows', 'macos', 'linux', 'live_preview'].includes(engine_mode) && func.utils.get_device()) {
_client_info.uuid = window.device.uuid;
if (window.device) {
_client_info.device_name = window.device.name;
}
}
};
const init_globals = function () {
const { app_id, worker_type } = _session;
if (worker_type !== 'Worker') {
glb.DEBUG_MODE = true;
}
SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal = -1;
PROJECT_OBJ[app_id] = {};
DOCS_OBJ[app_id] = {};
glb.APP_INFO[app_id] = {};
glb.ROOT_ELEMENT_ATTRIBUTES = func.UI.utils.get_root_element_attributes(SESSION_ID);
DATASOURCE_INTERVALS[SESSION_ID] = {};
// if (glb.DEBUG_MODE) glb.WORKER_TIMEOUT = 10000;
};
// const set_ViewUITreeObj_data = async function () {
// const { prog_id, project_data, root_element } = _session;
// if (!project_data) return;
// if (prog_id) {
// return;
// let tree_properties = project_data.programs[prog_id]?.properties;
// tree_properties.id = prog_id;
// tree_properties.renderType =
// tree_properties.flow === "multi_view" ? "grid" : "form";
// tree_properties.menuType = tree_properties.type;
// }
// // if ($(root_element).html()) {
// // const module = await func.common.get_module(
// // SESSION_ID,
// // "xuda-cli-plugin-html-parser-module.esm.js"
// // );
// // window.xudaStringify = module.xudaStringify;
// // const progUi = module.xudaPrase($(root_element).html());
// // $(root_element).empty();
// // const _id = "startup_program";
// // const d = Date.now();
// // DOCS_OBJ[_session.app_id][_id] = {
// // _id,
// // stat: 3,
// // docType: "studio",
// // docDate: d,
// // ts: d,
// // studio_meta: {
// // created: d,
// // parentId: "programs",
// // },
// // properties: {
// // progParams: [],
// // menuName: _id,
// // menuTitle: _id,
// // menuType: "component",
// // renderType: "form",
// // },
// // progEvents: [],
// // progFields: [],
// // progUi,
// // };
// // _session.prog_id = _id;
// // // console.log(code);
// // // if (prog_id) {
// // // project_data.programs[prog_id].progUi = [
// // // {
// // // children: code,
// // // tagName: root_element.tagName.toLowerCase(),
// // // type: "element",
// // // },
// // // ];
// // // }
// // }
// };
const print_version_info = function () {
const version_name = `Xuda.io ${opt.engine_mode} ${opt?.app_version || ''} Session Id: ${SESSION_ID}`;
const divider = _.repeat('#', version_name.length);
console.info(divider);
console.info(version_name);
console.info(divider);
};
const print_xuda_banner = function () {
var banner = '';
['__ ___ _ ____ _ ', '\\ \\/ / | | | _ \\ / \\ ', ' \\ /| | | | | | |/ _ \\ ', ' / \\| |_| | |_| / ___ \\ ', '/_/\\_\\\\___/|____/_/ \\_\\'].forEach((e) => {
banner += e + '\r\n';
});
console.info(banner);
};
print_xuda_banner();
var SESSION_ID = Date.now();
var components;
if (typeof glb.SLIM_BUNDLE === 'undefined' || !glb.SLIM_BUNDLE) {
await device_ready();
components = await get_fingerprint_component();
SESSION_ID = get_session_id();
print_version_info();
}
var _session = init_SESSION();
await set_SESSION();
create_index_html();
APP_OBJ[_session.app_id] = {};
// _session.app_id = _session.app_id;
init_globals();
// await set_ViewUITreeObj_data();
if (typeof glb.SLIM_BUNDLE !== 'undefined' && glb.SLIM_BUNDLE) {
await func.UI.main.embed_loader(SESSION_ID);
return;
}
set_SYS_GLOBAL_OBJ_CLIENT_INFO(SESSION_ID);
if (!_session.app_id) {
func.UI.utils.progressScreen.show(SESSION_ID, 'Error reading app_id', false, true);
console.error('no app_id found');
return;
}
const module = await func.common.get_module(SESSION_ID, 'xuda-project-loader-module.esm.js');
const db_adapter = await func.common.get_module(SESSION_ID, 'xuda-db-adapter-module.mjs');
func.db = db_adapter._db;
await module.project_loader(SESSION_ID, _session.app_id);
func.db.pouch.init_db_replication(SESSION_ID);
};
glb.system_ready_event = new Event('on_mounted');
call_xuda();
return {
on_mounted: function (fn) {
$('body')[0].addEventListener(
'on_mounted',
(e) => {
fn();
},
false,
);
},
};
}
// func.index.on_mounted = async function (fn) {
// fn();
// };
// export const init = function (...args) {
// return xuda(args);
// };
func.index.call_worker = async function (SESSION_ID, obj, params, promiseP) {
var _session = SESSION_OBJ[SESSION_ID];
if (_session.opt.app_computing_mode === 'main') {
return;
}
return new Promise(async function (resolve, reject) {
var worker_id;
const set_promise_queue = function (worker_id) {
var t = glb.worker_queue_num++;
try {
WEB_WORKER[SESSION_ID][worker_id].promise_queue[t] = {
resolve: promiseP ? promiseP.resolve : resolve,
reject: promiseP ? promiseP.reject : reject,
worker_id,
};
} catch (e) {
console.log(worker_id);
}
return t;
};
const get_worker_id = function (ds) {
// return 1; // dismiss multi thread 2021 08 26
if (!_session.DS_GLB[ds]) {
if (ds == 0) {
console.error('Error - onscreen (window,modal etc..) event cannot be invoked by on_load');
return;
} else {
// console.error("Error - worker not found");
return;
}
}
if (ds == 0) {
return 1;
}
if (_session.DS_GLB[ds].worker_id) {
return _session.DS_GLB[ds].worker_id;
} else {
if (typeof _session.DS_GLB[ds].parentDataSourceNo !== 'undefined') {
return get_worker_id(_session.DS_GLB[ds].parentDataSourceNo);
}
}
};
if (obj.service === 'datasource_create') {
if (!params || (params && !params.done)) {
var prog_obj = await func.utils.TREE_OBJ.get(SESSION_ID, obj.data.prog_id);
if (!prog_obj || !prog_obj.dedicatedWorker) {
// MAIN WORKER
if (!Object.keys(WEB_WORKER[SESSION_ID]).length) {
worker_id = await func.index.new_webworker(
SESSION_ID,
{
menuName: 'Main',
},
obj,
);
// return; //_resolve();
} else {
if (obj.data.IS_DATASOURCE_REFRESH) {
worker_id = get_worker_id(obj.data.parentDataSourceNo);
} else {
worker_id = get_worker_id(obj.data.parentDataSourceNoP);
}
if (!worker_id) {
debugger;
}
}
} else {
// DEDICATE WORKER
if (obj.data.IS_DATASOURCE_REFRESH) {
worker_id = get_worker_id(obj.data.parentDataSourceNo);
} else {
worker_id = await func.index.new_webworker(SESSION, prog_obj, obj);
return _resolve();
}
}
} else {
worker_id = params.worker_id;
}
} else {
if (params && params.worker_id) {
worker_id = params.worker_id;
} else {
worker_id = get_worker_id(obj.data.dssession);
}
if (!worker_id) worker_id = 1; //return;
}
try {
var msg = obj;
msg.worker_id = worker_id;
if (!worker_id) {
console.warn('missing worker_id');
}
msg.promise_queue_id = set_promise_queue(worker_id);
if (!WEB_WORKER[SESSION_ID][worker_id]) {
// worker does not exist on globals on_load
return resolve();
}
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
msg.process_pid = WEBSOCKET_PROCESS_PID;
msg = JSON.stringify(obj, func.utils.clean_stringify_null, '\t');
let msg_obj = JSON.parse(msg);
WEB_WORKER[SESSION_ID][worker_id].worker.emit('message', msg_obj);
} else {
msg = JSON.stringify(obj, func.utils.clean_stringify_null, '\t');
let msg_obj = JSON.parse(msg);
msg_obj.data = JSON.stringify(msg_obj.data);
WEB_WORKER[SESSION_ID][worker_id].worker.postMessage(msg_obj);
}
} catch (e) {
console.error(e);
return reject(e);
}
});
};
func.index.init_SCREEN_BLOCKER = async function (SESSION_ID) {
setInterval(async function () {
if (glb.CURRENT_APP_LOADING || (!LOADER_ACTIVE && _.isEmpty(SCREEN_BLOCKER_OBJ))) {
return;
}
glb.CURRENT_APP_LOADING = 1;
const loader = await UI_FRAMEWORK_PLUGIN.loader(LOADER_TEXT);
glb.CURRENT_APP_LOADING = loader;
var interval = setInterval(function () {
if (_.isEmpty(SCREEN_BLOCKER_OBJ) && !LOADER_ACTIVE) {
if (glb.CURRENT_APP_LOADING) {
glb.CURRENT_APP_LOADING.dismiss();
}
clearInterval(interval);
glb.CURRENT_APP_LOADING = null;
}
}, 100);
}, 1000);
};
func.index.init_document_listeners = function () {
$(document).on('keydown', function (event) {
CLIENT_ACTIVITY_TS = Date.now();
var keys = {
72: {
key: 'h',
name: 'Help',
fx: function () {
let SESSION_ID = Object.keys(SESSION_OBJ)[0];
let _session = SESSION_OBJ[SESSION_ID];
let app_id = _session.app_id;
if (!_session.opt.enable_utility_screen) return;
func.UI.utils.progressScreen.show(
SESSION_ID,
`
<center>Utility Screen</center>
<div class="help_screen">
<button name="hard_reload">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-refresh" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round" style="enable-background:new 0 0 473.677 473.677; xml:space="preserve" >
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"></path>
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"></path>
</svg><h3 style="text-align: center;display: flex;align-items: center;gap: 10px;">Clean cache & Reload <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></h3>
</button>
<button name="reset_worker">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-activity" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round" style="enable-background:new 0 0 473.677 473.677; xml:space="preserve">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M3 12h4l3 8l4 -16l3 8h4"></path>
</svg>
<h3 style="text-align: center;display: flex;align-items: center;gap: 10px;">Reset worker<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></h3>
</button>
<button name="get_support">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-lifebuoy" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round" xml:space="preserve">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0"></path>
<path d="M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"></path>
<path d="M15 15l3.35 3.35"></path>
<path d="M9 15l-3.35 3.35"></path>
<path d="M5.65 5.65l3.35 3.35"></path>
<path d="M18.35 5.65l-3.35 3.35"></path>
</svg>
<h3 style="text-align: center;display: flex;align-items: center;gap: 10px;">Get support ${
SUPPORT_PEER ? '(in session, click to cancel)' : ''
}<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></h3>
</button>
</div>
`,
);
setTimeout(() => {
$(`[name="hard_reload"]`)
.off('click')
.on('click', async function () {
await func.index.delete_pouch(SESSION_ID);
location.reload();
});
$(`[name="reset_worker"]`)
.off('click')
.on('click', function () {
// let session_id = Object.keys(SESSION_OBJ)[0];
_session.WORKER_OBJ.jobs[0].stat = null;
_session.WORKER_OBJ.stat = null;
func.UI.utils.progressScreen.hide(SESSION_ID);
});
$(`[name="get_support"]`)
.off('click')
.on('click', async function () {
const get_support = await func.common.get_module(SESSION_ID, 'xuda-get-support-module.esm.js');
var name, subject;
const prompt_name = () => {
name = window.prompt(`Get support from your ${APP_OBJ[app_id].app_general_prop?.app_name} team, \n\nYour Name (required):`);
if (name === '') prompt_name();
};
const prompt_subject = () => {
subject = window.prompt(`When you click on "Ok," you are granting permission to ${APP_OBJ[app_id]?.app_name} team to access your browser. \n\nSubject (required):`);
if (subject === '') prompt_subject();
};
if (!SUPPORT_PEER) {
// if (
// typeof firebase !== "undefined" &&
// firebase?.auth()?.currentUser?.displayName
// ) {
// name = firebase.auth().currentUser.displayName;
// } else {
// prompt_name();
// }
try {
name = firebase.auth().currentUser.displayName;
} catch (error) {
if (_session?.USR_OBJ?.usr_name) {
name = _session.USR_OBJ.usr_name;
} else {
prompt_name();
}
}
if (name === null) return;
prompt_subject();
if (subject === null) return;
func.common.db(SESSION_ID, 'get_support', {
name,
subject,
});
setTimeout(() => {
$('body').addClass('get_support_request');
$('body').remove('.get_support_request_title').append("<div class='get_support_request_title'>Support pending</div>");
}, 2000);
// get_support.init_peer(SESSION_ID, name, subject);
} else {
get_support.terminate_peer(SESSION_ID);
}
func.UI.utils.progressScreen.hide(SESSION_ID);
});
}, 1000);
},
},
};
if (event.which === 27) {
// esc
let SESSION_ID = Object.keys(SESSION_OBJ)[0];
func.UI.utils.progressScreen.hide(SESSION_ID);
}
if (event.ctrlKey && event.shiftKey) {
if (keys[event.which]) {
keys[event.which].fx();
}
// else {
// // func.utils.alerts.toast("Invalid Key", "error");
// }
}
});
$(document).mousemove(function (e) {
CLIENT_ACTIVITY_TS = Date.now();
posX = e.pageX;
posY = e.pageY;
if (SESSION_OBJ[SESSION_ID]?.DS_GLB?.[0]) {
SESSION_OBJ[SESSION_ID].DS_GLB[0].data_system['SYS_GLOBAL_OBJ_CLIENT_INFO'].cursor_pos_x = posX;
SESSION_OBJ[SESSION_ID].DS_GLB[0].data_system['SYS_GLOBAL_OBJ_CLIENT_INFO'].cursor_pos_y = posY;
}
// }
}); //get pointer position
$.fn.draggable = function () {
CLIENT_ACTIVITY_TS = Date.now();
var $this = this,
ns = 'draggable_' + (Math.random() + '').replace('.', ''),
mm = 'mousemove.' + ns,
mu = 'mouseup.' + ns,
$w = $(window),
isFixed = $this.css('position') === 'fixed',
adjX = 0,
adjY = 0;
$this.mousedown(function (ev) {
var pos = $this.offset();
if (isFixed) {
adjX = $w.scrollLeft();
adjY = $w.scrollTop();
}
var ox = ev.pageX - pos.left,
oy = ev.pageY - pos.top;
$this.data(ns, { x: ox, y: oy });
$w.on(mm, function (ev) {
ev.preventDefault();
ev.stopPropagation();
if (isFixed) {
adjX = $w.scrollLeft();
adjY = $w.scrollTop();
}
var offset = $this.data(ns);
$this.css({
left: ev.pageX - adjX - offset.x,
top: ev.pageY - adjY - offset.y,
});
});
$w.on(mu, function () {
$w.off(mm + ' ' + mu).removeData(ns);
});
});
return this;
};
var heartbeat_attempts = 0;
var heartbeat_internal = setInterval(async function () {
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
if (!SESSION_ID) return;
let _session = SESSION_OBJ[SESSION_ID];
if (!_session) return;
if (_session.crawler) return;
const set_idle = async function (stat) {
var datasource_changes = {
[0]: {
['data_system']: { SYS_GLOBAL_BOL_IDLE: stat },
},
};
await func.datasource.update(SESSION_ID, datasource_changes);
};
if (Date.now() - CLIENT_ACTIVITY_TS > 30000) {
set_idle(1);
} else {
set_idle(0);
}
if (_session.engine_mode === 'live_preview' || !_session.opt.enable_user_assist) {
return;
}
const ret = await func.common
.db(SESSION_ID, 'heartbeat', {
stat: Date.now() - CLIENT_ACTIVITY_TS > 30000 ? 1 : 2,
})
.catch((err) => {
heartbeat_attempts++;
console.warn(err.message);
if (heartbeat_attempts < 10) return;
clearInterval(heartbeat_internal);
});
heartbeat_attempts = 0;
if (ret?.session_stat === 3) {
await func.index.delete_pouch();
// window.location.href = `https://${_session.domain}/error?error_code=408`;
window.top.location.reload(); //href = `https://${_session.domain}?ts=${Date.now()}`;
}
$('body').removeClass('get_support_request');
$('body').find('.get_support_request_title').remove();
$('body').removeClass('get_support_online');
$('body').find('.get_support_online_title').remove();
if (ret?.data?.peer?.peer_status === 1) {
if (ret.data.peer.peer_regional_server) {
get_support.init_peer(SESSION_ID, ret.data.peer.peer_regional_server);
}
$('body').addClass('get_support_request');
$('body').remove('.get_support_request_title').append("<div class='get_support_request_title'>Support pending</div>");
}
if (ret?.data?.peer?.peer_status === 2) {
$('body').addClass('get_support_online');
$('body').remove('.get_support_online_title').append("<div class='get_support_online_title'>Support online</div>");
}
_session.res_token = ret.res_token;
}, 30000);
glb.WINDOW_LOCATION_SEARCH = window.location.search;
};
func.index.init_service_workers = function () {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.addEventListener('message', function (event) {
console.log('serviceWorker message:', event);
});
navigator.serviceWorker.register('xuda-sw.js').then(
function (registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
glb.sw_registration = registration;
},
function (err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
},
);
}
};
func.index.delete_pouch = async function (SESSION_ID = Object.keys(SESSION_OBJ)[0]) {
const db = await func.utils.connect_pouchdb(SESSION_ID);
try {
return await db.destroy();
} catch (err) {
console.log(err);
}
};
func.index.new_webworker = async function (SESSION_ID, prog_obj, obj) {
var worker_id = Object.keys(WEB_WORKER[SESSION_ID]).length + 1;
var _session = SESSION_OBJ[SESSION_ID];
if (!_session.engine_mode === 'docker') {
ver = APP_OBJ[_session.app_id].app_version;
}
var build_id = ['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session.opt.app_build_id;
if (typeof XUDA_BUILD_ID !== 'undefined') {
build_id = XUDA_BUILD_ID;
}
const worker_name =
`${typeof _session.SLIM_BUNDLE === 'undefined' || !_session.SLIM_BUNDLE ? '' : 'Slim '}${prog_obj.menuName} worker` +
// (prog_obj.menuName || "xuda.io worker") +
' ' +
glb.worker_type +
': #' +
worker_id.toString() +
' ' +
(build_id || '') +
' ' +
_session.domain;
const init_worker_session = function (worker_id) {
var _session = _.cloneDeep(SESSION_OBJ[SESSION_ID]);
delete _session.root_element;
const get_parent_ds = function (ds) {
var ds_obj = {};
if (ds && _session.DS_GLB[ds].parentDataSourceNo !== null) {
ds_obj[ds] = func.utils.clean_returned_datasource(SESSION_ID, ds);
_.forEach(get_parent_ds(_session.DS_GLB[ds].parentDataSourceNo), function (val, key) {
ds_obj[key] = val;
});
} else {
ds_obj[ds] = func.utils.clean_returned_datasource(SESSION_ID, ds);
}
return ds_obj;
};
var ds_obj = {};
// send existing datasources to the worker when initiating on demand workers
if (typeof obj?.data?.parentDataSourceNoP !== 'undefined') {
ds_obj = get_parent_ds(obj.data.parentDataSourceNoP);
}
_session.DS_GLB = {};
_session.WORKER_OBJ = {
jobs: [],
num: 1000,
stat: null,
};
var app_id = _session.app_id;
var data = {
SESSION_ID,
app_id,
APP_OBJ: APP_OBJ[app_id],
PROJECT_OBJ: PROJECT_OBJ[app_id],
DOCS_OBJ: DOCS_OBJ[app_id],
APP_INFO: glb.APP_INFO[app_id],
DEBUG_MODE: glb.DEBUG_MODE,
DEBUG_INFO_OBJ: glb.DEBUG_INFO_OBJ,
WINDOW_LOCATION_SEARCH: glb.WINDOW_LOCATION_SEARCH,
ROOT_ELEMENT_ATTRIBUTES: glb.ROOT_ELEMENT_ATTRIBUTES,
DS_GLB: ds_obj,
SESSION_INFO: JSON.parse(JSON.stringify(_session)),
session_id: SESSION_ID,
engine_mode: _session.engine_mode,
STUDIO_WEBSOCKET_CONNECTION_ID: STUDIO_WEBSOCKET_CONNECTION_ID,
};
if (_session.engine_mode === 'live_preview') {
data.DOCS_OBJ = DOCS_OBJ[app_id];
}
delete data.SESSION_INFO.root_element;
data.SESSION_INFO.worker_id = worker_id;
var ds_arr = [];
$.map(_session.DS_GLB, function (val, i) {
ds_arr.push(i);
});
WEB_WORKER[SESSION_ID][worker_id].ds_arr = ds_arr;
delete data.SESSION_INFO.DS_UI_EVENTS_GLB; // contains function produce error
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
WEB_WORKER[SESSION_ID][worker_id].worker.emit('message', {
service: 'init',
data: data, //JSON.stringify(data),
worker_id: worker_id,
});
} else {
WEB_WORKER[SESSION_ID][worker_id].worker.postMessage({
service: 'init',
data: JSON.stringify(data),
worker_id: worker_id,
});
}
};
const create_worker = async function () {
return new Promise((resolve, reject) => {
if (glb.worker_type === 'Dev') {
WEB_WORKER[SESSION_ID][worker_id] = {
worker: new Worker('js/xuda_worker.js', {
name: worker_name,
}),
promise_queue: {},
};
} else {
function getWorkerURL(url) {
const content = `importScripts( "${url}" );`;
return URL.createObjectURL(new Blob([content], { type: 'text/javascript' }));
}
const _session = SESSION_OBJ[SESSION_ID];
let blob = getWorkerURL(func.common.get_url(SESSION_ID, 'dist', func.utils.get_resource_filename(['live_preview', 'miniapp'].includes(_session.engine_mode) ? '' : _session?.opt?.app_build_id, 'runtime/js/xuda_worker.js')));
WEB_WORKER[SESSION_ID][worker_id] = {
worker: new Worker(blob, {
name: worker_name,
}),
promise_queue: {},
};
}
WEB_WORKER[SESSION_ID][worker_id].worker.addEventListener(
'message',
function (e) {
if (e.data.service === 'worker_ready') {
return resolve();
}
worker_functions(e);
},
false,
);
});
};
const create_websocket = async function () {
return new Promise((resolve, reject) => {
WEB_WORKER[SESSION_ID][worker_id] = {
worker: RUNTIME_SERVER_WEBSOCKET,
promise_queue: {},
};
WEB_WORKER[SESSION_ID][worker_id].worker.on('message', async (e) => {
if (['deployment_server', 'http_call'].includes(e.source)) return;
worker_functions({ data: e });
});
resolve();
});
};
const worker_functions = async function (e_raw) {
return new Promise(async (resolve, reject) => {
var e = {};
e.data = e_raw.data;
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
WEBSOCKET_PROCESS_PID = e.data.process_pid;
}
var val = e.data.params;
var fx = {
init_done: async function () {
if (!obj) {
return _resolve();
}
},
alert: function () {
if (val[1] === 'save_on') {
func.UI.utils.save(SESSION_ID, true);
return true;
}
if (val[1] === 'save_off') {
func.UI.utils.save(SESSION_ID, false);
return true;
}
func.utils.alerts.execute(SESSION_ID, val[1], val[2], val[3], val[4]);
return _resolve();
},
progress_on: function () {
func.UI.utils.progressScreen.show(SESSION_ID, val, null);
return _resolve();
},
progress_off: function () {
func.UI.utils.progressScreen.hide();
return _resolve();
},
worker_busy_on: function () {
func.UI.utils.indicator.worker.busy();
return _resolve();
},
worker_busy_off: function () {
func.UI.utils.indicator.worker.normal();
return _resolve();
},
screen_blocker_on: function () {
func.UI.utils.screen_blocker(true, 'Worker');
return _resolve();
},
ajax_error: function () {
// location.reload();
func.utils.request_error(SESSION_ID, 'ajax', 'Session error');
return _resolve();
},
screen_blocker_off: function () {
func.UI.utils.screen_blocker(false, 'Worker');
return _resolve();
},
job: function () {
// fx.datasource_event_changes();
func.events.add_to_queue(
SESSION_ID,
val.typeP,
val.eventIdP,
val.triggerP,
val.functionP,
val.refIdP,
val.containerP,
val.elementP,
val.rowP,
null,
val.descP,
null,
null,
val.dsSessionP,
null,
null,
val.event_propertiesP,
val.calling_triggerP,
val.paramsP,
null,
null,
val.calling_trigger_prop,
val.argumentsP,
val.source_event_idP,
val.calling_job,
val.args,
);
return _resolve();
},
update_client_eventChangesResults_from_worker: async function () {
await func.datasource.update(SESSION_ID, val, true);
if (!val.worker_id) {
return;
}
fx.acknowledged_worker_with_eventChangesResults_done(val.dssession, val.worker_id);
for await (const [worker_id, ds_arr] of Object.entries(WEB_WORKER[SESSION_ID])) {
if (val.worker_id == worker_id) continue;
await func.index.call_worker(
SESSION_ID,
{
service: 'update_datasource_changes_from_client',
data: data,
},
{
worker_id: worker_id,
},
);
}
},
post_datasource: async function () {
if (typeof val.dsSessionP === 'undefined' || val.dsSessionP === null) return;
if (!SESSION_OBJ[SESSION_ID].DS_GLB[val.dsSessionP]) {
SESSION_OBJ[SESSION_ID].DS_GLB[val.dsSessionP] = val.ds_obj;
} else {
const update_existing_ds_object = function (old_obj, new_obj) {
for (const [key, val] of Object.entries(new_obj)) {
if (typeof val !== 'object') {
old_obj[key] = val2;
} else {
if (!old_obj[key]) {
old_obj[key] = val;
} else update_existing_ds_object(old_obj[key], val);
}
}
};
update_existing_ds_object(SESSION_OBJ[SESSION_ID].DS_GLB[val.dsSessionP], val.ds_obj);
}
var verify_set_parent_ds = function () {
var dsSession = val.dsSessionP;
for (const [key, val] of Object.entries(SESSION_OBJ[SESSION_ID].DS_GLB[dsSession].parent_ds_chain)) {
if (SESSION_OBJ[SESSION_ID].DS_GLB[val]) {
SESSION_OBJ[SESSION_ID].DS_GLB[dsSession].parentDataSourceNo = val;
break;
}
}
};
verify_set_parent_ds();
if (val.ds_obj.dataSourceSessionGlobal > SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal) SESSION_OBJ[SESSION_ID].dataSourceSessionGlobal = val.ds_obj.dataSourceSessionGlobal;
},
return_to_data_source: function (type, dsSessionP, ds) {
var data = {
session_id: SESSION_ID,
dssession: dsSessionP,
onscreen_events_active: ds.v.onscreen_events_active,
viewEventExec_arr: JSON.stringify(ds.viewEventExec_arr),
return_to_data_source_type: type,
};
func.index.call_worker(SESSION_ID, {
service: 'return_to_data_source',
data: data,
});
},
acknowledged_worker_with_eventChangesResults_done: async function (dsSessionP, worker_id) {
var data = {
session_id: SESSION_ID,
dssession: dsSessionP,
};
await func.index.call_worker(
SESSION_ID,
{
service: 'acknowledged_worker_with_eventChangesResults_done',
data: data,
},
{
worker_id: worker_id,
},
);
return _resolve();
},
execute_onscreen_view_events: async function () {
await fx.post_datasource();
var ds = SESSION_OBJ[SESSION_ID].DS_GLB[val.dsSessionP]; //val.ds_obj;
await func.datasource.execute_onscreen_view_events(SESSION_ID, val.dsSessionP, 'onscreen events');
if (!ds.v.onscreen_events_active) return;
var type = ds.v.onscreen_events_active.type;
ds.v.onscreen_events_active = null;
fx.return_to_data_source(type, val.dsSessionP, ds);
return _resolve();
},
execute_local_db_query: async function () {
await fx.post_datasource();
const data = await func.db.get_query(SESSION_ID, val.fileIdP, val.queryP, val.dsSessionP, val.viewSourceDescP, val.sourceP, val.reduceP, val.skipP, val.limitP, val.countP, val.idsP);
var msg = {};
msg.worker_id = worker_id;
msg.data = {};
msg.service = 'return_from_db_query';
msg.data.worker_id = worker_id;
msg.data.callback_id = val.callback_id;
msg.data.session_id = SESSION_ID;
msg.data.data = data;
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
msg.process_pid = WEBSOCKET_PROCESS_PID;
WEB_WORKER[SESSION_ID][worker_id].worker.emit('message', msg);
// WEB_WORKER[SESSION_ID][worker_id].worker.send(JSON.stringify(msg));
} else {
WEB_WORKER[SESSION_ID][worker_id].worker.postMessage(msg);
}
_resolve();
},
execute_local_sava_data: async function () {
await fx.post_datasource();
const data = await func.db.save_data(SESSION_ID, val.dsSessionP, val.keyP);
var msg = {};
msg.worker_id = worker_id;
msg.data = {};
msg.service = 'return_from_sava_data';
msg.data.worker_id = worker_id;
msg.data.callback_id = val.callback_id;
msg.data.session_id = SESSION_ID;
msg.data.data = data;
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
msg.process_pid = WEBSOCKET_PROCESS_PID;
WEB_WORKER[SESSION_ID][worker_id].worker.emit('message', msg);
} else {
WEB_WORKER[SESSION_ID][worker_id].worker.postMessage(msg);
}
_resolve();
},
write_debug_log: function (params) {
func.utils.debug.write(SESSION_ID, val.data);
_resolve();
},
write_log: async function (params) {
if (SESSION_OBJ[SESSION_ID].crawler) return;
await func.common.db(SESSION_ID, 'write_log', {
msg: val.data,
source: 'runtime',
log_type: 'error',
});
_resolve();
},
change_loaded_image: function (params) {
const new_image = e.data.params.data;
var $img = $('img');
$.each($img, function (key, val) {
var src = $(val).prop('src');
if (src.indexOf(new_image) > 0) {
$(val).attr('src', src + '?ts=' + new Date().valueOf());
}
});
_resolve();
},
send_watch_to_studio_websocket: function (params) {
STUDIO_WEBSOCKET.emit('message', val);
_resolve();
},
get_doc_from_studio: async function (params) {
const module = await func.common.get_module(SESSION_ID, `xuda-progs-loader-module.mjs`);
const data = await module.get_doc_from_studio(SESSION_ID, SESSION_OBJ[SESSION_ID].app_id, params.params.doc_id);
func.index.call_worker(SESSION_ID, {
service: 'return_doc_from_studio',
data,
});
_resolve();
},
get_doc_from_websocket: async function (params) {
const module = await func.common.get_module(SESSION_ID, `xuda-progs-loader-module.mjs`);
const data = await module.get_doc_from_websocket(SESSION_ID, SESSION_OBJ[SESSION_ID].app_id, params.params.doc_id);
func.index.call_worker(SESSION_ID, {
service: 'return_doc_from_websocket',
data,
});
_resolve();
},
get_dbs_data_from_websocket: async function (params) {
const data = await func.common.get_data_from_websocket(SESSION_ID, params.params.service, params.params.data);
func.index.call_worker(SESSION_ID, {
service: 'return_dbs_data_from_websocket',
data: {
data,
websocket_queue_num: params.params.websocket_queue_num,
},
});
_resolve();
},
perform_rpi_request_from_studio: async function (params) {
const data = await func.common.db(SESSION_ID, params.params.service, params.params.data);
func.index.call_worker(SESSION_ID, {
service: 'return_rpi_request_from_studio',
data: { data: data.data, table_id: params.params.req_id },
});
_resolve();
},
refresh_document_changes_for_realtime_update: async function (params) {
func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID, params.params.doc_change);
_resolve();
},
};
const get_promise_queue = function (t, worker_id) {
if (!WEB_WORKER[SESSION_ID][worker_id]) {
console.warn('worker job not found');
return;
}
return WEB_WORKER[SESSION_ID][worker_id].promise_queue[t];
};
const promise_ret = await get_promise_queue(e.data.promise_queue_id, e.data.worker_id);
const _resolve = function (params) {
if (!promise_ret) return resolve();
promise_ret.resolve(params);
setTimeout(function () {
if (WEB_WORKER[SESSION_ID][e.data.worker_id]) delete WEB_WORKER[SESSION_ID][e.data.worker_id].promise_queue[e.data.promise_queue_id];
}, 1000);
};
if (fx[e.data.fx_to_execute]) {
return await fx[e.data.fx_to_execute](e.data);
}
if (!promise_ret) return console.error('promise not found');
if (!e.data.fx_to_execute) {
// return datasource
return _resolve(e.data.params);
}
if (e.data.fx_to_execute === 'worker_response') {
return _resolve(e.data.params);
}
});
};
if (RUNTIME_SERVER_WEBSOCKET && RUNTIME_SERVER_WEBSOCKET_CONNECTED && (!_session.opt.app_computing_mode || _session.opt.app_computing_mode === 'server')) {
await create_websocket();
} else {
await create_worker();
}
init_worker_session(worker_id);
return worker_id;
};
glb.CODE_BUNDLE=1;