UNPKG

@kvaser/canking-api

Version:

CanKing API to communicate with the CanKing service using Node.js.

562 lines (561 loc) 17.5 kB
import { c as M } from "react/compiler-runtime"; import { createContext as k, useContext as K, useSyncExternalStore as V, useState as O, useEffect as R } from "react"; import { defaultUserSettings as q, electronApiFake as H, DataBuffer as U, deserializeFrame as y, calculateSubscriptionKeyFromFrame as Q } from "./models.mjs"; import W from "long"; import { v4 as S } from "uuid"; import { getLogger as A, getFrameDefinitions as G } from "./ipc.mjs"; import { c as P } from "./status_params.mjs"; const X = (t, r, ...e) => { let n = r; for (let s = 0; s < e.length; s += 1) { const o = `{${s}}`; if (n.indexOf(o) !== -1) { const i = e[s]; n = typeof i == "string" ? n.replace(o, i) : n.replace(o, i.toLocaleString(t)); } } return n; }; class J { language; strings; constructor(r, e) { this.language = r, this.strings = e; } getString(r, ...e) { if (this.strings && r in this.strings) { const n = this.strings[r]; return e.length > 0 ? X(this.language, n, ...e) : n; } return r; } } const Y = window?.matchMedia ? window.matchMedia("(prefers-color-scheme: dark)").matches : !1, Z = Object.assign({}, q, { theme: Y ? "dark" : "light" }), ee = k(Z), Ve = k([[], () => { }]), T = () => K(ee), qe = () => T().useHexNumericBase ? 16 : 10, He = () => T().maxDataBytes, Qe = () => T().language, We = () => { const t = M(3), r = T(); let e; return t[0] !== r.language || t[1] !== r.strings ? (e = new J(r.language, r.strings), t[0] = r.language, t[1] = r.strings, t[2] = e) : e = t[2], e; }, Ge = () => T().recentProjectFiles, I = A("DataProviders"), v = window.electron ?? H, x = /* @__PURE__ */ new Map(); function te(t) { return x.has(t) || x.set(t, /* @__PURE__ */ new Map()), x.get(t); } function w(t, r, e, n) { const s = te(t); if (s.has(r)) I.warn("The callback has already been added as listener to this event!"); else { const o = (i, c) => n(c), a = v.ipcRenderer.on(e, o); s.set(r, { remover: a, listener: o }); } } function re(t, r) { const e = x.get(t), n = e?.get(r); n ? (n.remover(), e.delete(r)) : I.warn("The callback has not been added as listener to this event!"); } async function p(t, r, e, n) { switch (r) { case "devices-changed": return w(r, t, "dm-devices-changed", e), v.ipcRenderer.invoke("dm-get-devices", !1); case "user-settings-changed": return w(r, t, "user-settings-changed", e), v.ipcRenderer.invoke("main-get-user-settings"); case "new-log-messages": return w(r, t, "new-log-messages", e), Promise.resolve(); case "online-status-changed": return w(r, t, "mm-is-online-changed", e), v.ipcRenderer.invoke("mm-get-online-status"); case "periodic-trans-started": return w(r, t, "mm-periodic-trans-started", e), Promise.resolve(""); case "periodic-trans-stopped": return w(r, t, "mm-periodic-trans-stopped", e), Promise.resolve(""); case "new-measurement-data": return w(r, t, "mm-new-measurement-data", e), (n?.numberOfHistoryFrames ?? 0) > 0 ? v.ipcRenderer.invoke("mm-get-measurement-data-before-timestamp", Number.MAX_SAFE_INTEGER, n.numberOfHistoryFrames) : Promise.resolve([]); case "new-measurement-status": return w(r, t, "mm-new-measurement-status", e), v.ipcRenderer.invoke("mm-get-node-statuses"); case "meas-setup-changed": return w(r, t, "project-meas-setup-changed", e), v.ipcRenderer.invoke("prj-get-meas-setup"); case "workspace-panes-changed": return w(r, t, "project-workspace-panes-changed", e), v.ipcRenderer.invoke("prj-get-workspace-panes"); } return Promise.reject(new Error("Invalid event type")); } const h = async (t, r) => { re(r, t); }, d = A("DataStores"), ne = 100; function E(t, r) { let e = t(), n; const s = /* @__PURE__ */ new Set(), o = (a) => { e = typeof a == "function" ? a(e) : a, s.forEach((i) => i()); }; return { getSnapshot: () => e, subscribe: (a) => (s.add(a), s.size === 1 && (n = r(o)), () => { s.delete(a), s.size === 0 && (n?.(), n = void 0, e = t()); }) }; } function L(t) { return V(t.subscribe, t.getSnapshot, t.getSnapshot); } const se = () => ({ devices: null, isLoaded: !1, error: null }), oe = E(se, (t) => { const r = new AbortController(), e = S(), n = (s) => { try { if (r.signal.aborted) return; t({ devices: s, isLoaded: !0, error: null }); } catch (o) { d.error("DevicesStore", o), t({ devices: null, isLoaded: !0, error: o instanceof Error ? o : new Error("Unknown error") }); } }; return p(e, "devices-changed", n).then(n).catch((s) => { r.signal.aborted || (d.error("Failed to add devices listener:", s), t({ devices: null, isLoaded: !0, error: s instanceof Error ? s : new Error("Unknown error") })); }), () => { r.abort(), h(e, "devices-changed"); }; }), ae = () => ({ measurementSetup: null, isLoaded: !1, error: null }), ie = E(ae, (t) => { const r = new AbortController(), e = S(), n = (s) => { try { if (r.signal.aborted) return; t({ measurementSetup: s, isLoaded: !0, error: null }); } catch (o) { d.error("MeasurementSetupStore", o), t({ measurementSetup: null, isLoaded: !0, error: o instanceof Error ? o : new Error("Unknown error") }); } }; return p(e, "meas-setup-changed", n).then(n).catch((s) => { r.signal.aborted || (d.error("Failed to add measurement setup listener:", s), t({ measurementSetup: null, isLoaded: !0, error: s instanceof Error ? s : new Error("Unknown error") })); }), () => { r.abort(), h(e, "meas-setup-changed"); }; }), ue = () => ({ nodeStatuses: null, isLoaded: !1, error: null }), ce = E(ue, (t) => { const r = new AbortController(), e = S(), n = (s) => { try { if (r.signal.aborted) return; t({ nodeStatuses: s, isLoaded: !0, error: null }); } catch (o) { d.error("MeasurementStatusStore", o), t({ nodeStatuses: null, isLoaded: !0, error: o instanceof Error ? o : new Error("Unknown error") }); } }; return p(e, "new-measurement-status", n).then(n).catch((s) => { r.signal.aborted || (d.error("Failed to add measurement status listener:", s), t({ nodeStatuses: null, isLoaded: !0, error: s instanceof Error ? s : new Error("Unknown error") })); }), () => { r.abort(), h(e, "new-measurement-status"); }; }), le = () => ({ onlineStatus: null, isLoaded: !1, error: null }), de = E(le, (t) => { const r = new AbortController(), e = S(), n = (s) => { try { if (r.signal.aborted) return; t({ onlineStatus: s, isLoaded: !0, error: null }); } catch (o) { d.error("OnlineStatusStore", o), t({ onlineStatus: null, isLoaded: !0, error: o instanceof Error ? o : new Error("Unknown error") }); } }; return p(e, "online-status-changed", n).then(n).catch((s) => { r.signal.aborted || (d.error("Failed to add online status listener:", s), t({ onlineStatus: null, isLoaded: !0, error: s instanceof Error ? s : new Error("Unknown error") })); }), () => { r.abort(), h(e, "online-status-changed"); }; }), me = E(() => [], (t) => { const r = new AbortController(), e = S(), n = S(), s = (a) => { try { if (r.signal.aborted) return; t((i) => [...i, a]); } catch (i) { d.error("RunningPeriodicTransmissionsStore - started", i); } }, o = (a) => { try { if (r.signal.aborted) return; t((i) => { const c = i.findIndex((g) => g === a); if (c === -1) return i; const m = [...i]; return m.splice(c, 1), m; }); } catch (i) { d.error("RunningPeriodicTransmissionsStore - stopped", i); } }; return p(e, "periodic-trans-started", s), p(n, "periodic-trans-stopped", o), () => { r.abort(), h(e, "periodic-trans-started"), h(n, "periodic-trans-stopped"); }; }), ge = E(() => [], (t) => { const r = new AbortController(), e = S(), n = new U(1e3); return p(e, "new-log-messages", (o) => { try { if (r.signal.aborted) return; o === null ? n.clear() : n.push(...o), t(Array.from(n)); } catch (a) { d.error("LogMessagesStore", a); } }).catch((o) => { r.signal.aborted || d.error("Failed to add log messages listener:", o); }), () => { r.abort(), h(e, "new-log-messages"); }; }), fe = () => ({ subscribedData: /* @__PURE__ */ new Map() }), Se = E(fe, (t) => { const r = new AbortController(), e = S(), n = (s) => { try { if (r.signal.aborted) return; const o = /* @__PURE__ */ new Map(); s.forEach((a) => { const i = y(a), c = Q(i); o.has(c) || o.set(c, []), o.get(c)?.push(i); }), t({ subscribedData: o }); } catch (o) { d.error("MeasurementSubscriptionStore", o); } }; return p(e, "new-measurement-data", n).then(n).catch((s) => { r.signal.aborted || d.error("Failed to add measurement data listener:", s); }), () => { r.abort(), h(e, "new-measurement-data"); }; }), pe = () => ({ scrollData: [], fixedPositionData: [] }), he = E(pe, (t) => { const r = new AbortController(), e = S(), n = S(), s = new U(500), o = /* @__PURE__ */ new Map(); let a; const i = () => { a = void 0, t({ scrollData: Array.from(s), fixedPositionData: Array.from(o.values()) }); }, c = (u = !1) => { if (a !== void 0) { if (!u) return; clearTimeout(a), a = void 0; } if (u) { i(); return; } a = setTimeout(i, ne); }, m = (u) => { try { if (r.signal.aborted) return; u.length === 0 ? (s.clear(), o.clear()) : (s.push(...u.slice(Math.max(0, u.length - 500))), u.forEach((l) => { o.set(l.fixedPosIdentifier ?? "", l); })), c(u.length === 0); } catch (l) { d.error("MeasurementTraceStore", l); } }, g = (u) => { try { if (r.signal.aborted || !u.isOnline) return; s.clear(), o.clear(), c(!0); } catch (l) { d.error("MeasurementTraceStore online-status-changed", l); } }; return p(e, "new-measurement-data", m, { numberOfHistoryFrames: 500 }).then(m).catch((u) => { r.signal.aborted || d.error("Failed to add measurement trace listener:", u); }), p(n, "online-status-changed", g), () => { r.abort(), a !== void 0 && clearTimeout(a), h(e, "new-measurement-data"), h(n, "online-status-changed"); }; }), Xe = () => L(oe), be = () => L(ie), we = () => L(ce), Me = () => L(de), ve = () => L(me), Je = () => L(ge), Ye = () => L(Se), Ee = () => L(he), Le = A("hooks"), N = /* @__PURE__ */ new WeakMap(); function $(t) { const r = N.get(t); if (r) return r; const e = y(t); return N.set(t, e), e; } function _(t, r) { return r === void 0 || r <= 0 ? !0 : new W(t.timeUsParts.low, t.timeUsParts.high, t.timeUsParts.unsigned).greaterThanOrEqual(r); } function Fe(t) { return { includeScrollModeFrames: t?.includeScrollModeFrames ?? !0, includeFixedPositionModeFrames: t?.includeFixedPositionModeFrames ?? !0 }; } function C(t, r) { const e = M(13), n = Ee(); let s; e[0] !== r ? (s = Fe(r), e[0] = r, e[1] = s) : s = e[1]; const { includeScrollModeFrames: o, includeFixedPositionModeFrames: a } = s; let i; e[2] !== o || e[3] !== n.scrollData || e[4] !== t ? (i = o ? n.scrollData.filter((l) => _(l, t)).map(Te) : [], e[2] = o, e[3] = n.scrollData, e[4] = t, e[5] = i) : i = e[5]; const c = i; let m; e[6] !== a || e[7] !== n.fixedPositionData || e[8] !== t ? (m = a ? n.fixedPositionData.filter((l) => _(l, t)).map(Pe) : [], e[6] = a, e[7] = n.fixedPositionData, e[8] = t, e[9] = m) : m = e[9]; const g = m; let u; return e[10] !== g || e[11] !== c ? (u = { scrollModeFrames: c, fixedPositionModeFrames: g }, e[10] = g, e[11] = c, e[12] = u) : u = e[12], u; } function Pe(t) { return $(t); } function Te(t) { return $(t); } const Ze = 2e3, De = { language: "en", sources: [], dataProcessors: [], targets: [] }; function et(t, r) { return t.filter((e) => !e.supportedProtocols || e.supportedProtocols.length === 0 ? !0 : e.supportedProtocols.some((n) => r.includes(n))); } function xe(t) { const r = /* @__PURE__ */ new Set(); return t?.forEach((e) => { e.channelSettings?.protocols && e.channelSettings.protocols.forEach((n) => r.add(n)); }), r.size === 0 && r.add("CAN"), Array.from(r).sort(); } function ye(t, r) { const e = [...t, ...r]; return Array.from(new Map(e.map((s) => [s.timeUs.toString(), s])).values()); } function tt(t, r) { for (const [e, n] of r) if (t.has(e)) { const s = t.get(e); t.set(e, ye(s, n)); } else t.set(e, [...n]); return t; } function Ae(t) { if (!t) return P.STATUS_LEVEL_NONE; const r = Number(t.busOnStatus), e = Number(t.errorStatus), n = Number(t.overrunStatus); return Math.max(isNaN(r) ? P.STATUS_LEVEL_NONE : r, isNaN(e) ? P.STATUS_LEVEL_NONE : e, isNaN(n) ? P.STATUS_LEVEL_NONE : n); } function Ce(t) { const r = t.filter((e) => e.busStatus).map((e) => Ae(e.busStatus)); return r.length === 0 ? P.STATUS_LEVEL_NONE : Math.max(...r); } const Ne = () => be(), z = () => Ne().measurementSetup ?? De, rt = () => { const t = M(2), r = z(); let e; return t[0] !== r.sources ? (e = xe(r.sources), t[0] = r.sources, t[1] = e) : e = t[1], e; }, nt = (t) => { const r = M(5); let e; r[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = [], r[0] = e) : e = r[0]; const [n, s] = O(e), o = z(); let a, i; return r[1] !== t || r[2] !== o.sources ? (a = () => { const c = new AbortController(); return G(t).then((m) => { if (c.signal.aborted) return; const g = []; for (let u = 0; u < m.length; u = u + 1, u) { let l; const f = m[u]; if (f.messageQualifiedName !== void 0) { const D = f.messageQualifiedName.indexOf("."); if (D !== -1) { const F = f.messageQualifiedName.substring(0, D); l = g.find((b) => b.name === F), l || (l = { name: F, sources: f.sourceIdentifiers.map((b) => ({ identifier: b, name: o.sources.find((B) => B.baseNode?.identifier === b)?.baseNode?.name ?? b })), messages: [] }, g.push(l)); } } l && l.messages.push(f); } return s(g), g; }), () => { c.abort(); }; }, i = [t, o.sources], r[1] = t, r[2] = o.sources, r[3] = a, r[4] = i) : (a = r[3], i = r[4]), R(a, i), n; }, _e = () => we(), j = () => { const t = M(2), r = _e(); let e; return t[0] !== r.nodeStatuses ? (e = r.nodeStatuses ?? [], t[0] = r.nodeStatuses, t[1] = e) : e = t[1], e; }, st = (t) => { const r = M(3), e = j(); let n; return r[0] !== t || r[1] !== e ? (n = e.find((s) => s.nodeId === t) ?? null, r[0] = t, r[1] = e, r[2] = n) : n = r[2], n; }, ot = () => { const t = M(2), r = j(); let e; return t[0] !== r ? (e = Ce(r), t[0] = r, t[1] = e) : e = t[1], e; }, ke = () => Me(), at = () => ke()?.onlineStatus?.isOnline === !0, it = () => ve(), ut = (t, r) => { const e = M(5); let n; e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = [], e[0] = n) : n = e[0]; const [s, o] = O(n); let a, i; return e[1] !== t || e[2] !== r ? (a = () => { const c = new AbortController(), m = (u) => { if (c.signal.aborted) return; const l = u.map(Oe); o((f) => { const D = f.map(Re), F = l.filter((b) => !D.includes(b.hashCode)); if (r) { const b = F.filter(r); return f.length === 0 && b.length === 0 ? f : b; } return f.length === 0 && F.length === 0 ? f : F; }); }, g = S(); return p(g, "new-measurement-data", m, { numberOfHistoryFrames: t }).then(m).catch((u) => { c.signal.aborted || Le.error("Failed to add new-measurement-data listener:", u); }), () => { h(g, "new-measurement-data"), c.abort(); }; }, i = [t, r], e[1] = t, e[2] = r, e[3] = a, e[4] = i) : (a = e[3], i = e[4]), R(a, i), s; }, ct = (t) => { const r = M(1); let e; return r[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = { includeScrollModeFrames: !0, includeFixedPositionModeFrames: !1 }, r[0] = e) : e = r[0], C(t, e).scrollModeFrames; }, lt = (t) => { const r = M(1); let e; return r[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = { includeScrollModeFrames: !1, includeFixedPositionModeFrames: !0 }, r[0] = e) : e = r[0], C(t, e).fixedPositionModeFrames; }, dt = (t, r) => C(t, r); function Oe(t) { return y(t); } function Re(t) { return t.hashCode; } export { _e as A, ut as B, st as C, ke as D, ot as E, Ge as F, it as G, ct as H, J as L, Ze as M, ee as U, Ve as W, Qe as a, nt as b, qe as c, z as d, j as e, T as f, Z as g, p as h, Xe as i, Je as j, rt as k, et as l, Me as m, Ye as n, ye as o, tt as p, Ce as q, h as r, Ae as s, xe as t, We as u, dt as v, lt as w, at as x, He as y, Ne as z };