@kvaser/canking-api
Version:
CanKing API to communicate with the CanKing service using Node.js.
562 lines (561 loc) • 17.5 kB
JavaScript
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
};