Socket
Socket
Sign inDemoInstall

@blumjs/router

Package Overview
Dependencies
Maintainers
1
Versions
64
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@blumjs/router - npm Package Compare versions

Comparing version 3.0.1 to 3.0.2

150

dist/index.js
import T, { useEffect as $ } from "react";
function Lt(e, t) {
function xt(e, t) {
for (let n in e)

@@ -16,3 +16,3 @@ t(e[n], n);

k(e, (f) => f && M(u, f));
let l = { id: It(), seq: u, next: ue(o), meta: y, scope: m, family: { type: p.type || "crosslink", links: d, owners: i } };
let l = { id: Ht(), seq: u, next: ue(o), meta: y, scope: m, family: { type: p.type || "crosslink", links: d, owners: i } };
return k(d, (f) => M(Se(f), l)), k(i, (f) => M(_e(f), l)), k(c, (f) => M(f.next, l)), S && G && Be(Z(G), [l]), l;

@@ -32,3 +32,3 @@ }

e:
for (; S = Kt(); ) {
for (; S = Ut(); ) {
let { idx: u, stack: l, type: f } = S;

@@ -80,3 +80,3 @@ p = l.node, D = c = l.page, b = P(l), c ? d = c.reg : b && (d = b.reg);

case "store":
Yt(c, b, p, E.target).current = _;
Jt(c, b, p, E.target).current = _;
}

@@ -89,3 +89,3 @@ break;

fe = x(p, "op") === "watch", de = h.pure;
let _ = h.safe ? (0, h.fn)(Z(l), g.scope, l) : Qt(g, h.fn, l);
let _ = h.safe ? (0, h.fn)(Z(l), g.scope, l) : Xt(g, h.fn, l);
h.filter ? y = !_ : l.value = _, fe = i.isWatch, de = i.isPure;

@@ -111,6 +111,6 @@ }

}
function xt(e, t) {
function kt(e, t) {
let n, r, a = e;
if (t) {
let s = Mt(t);
let s = Dt(t);
e.length === 0 ? (n = s.path, r = s.fullName) : (n = s.path.concat([e]), r = s.fullName.length === 0 ? e : s.fullName + "/" + e);

@@ -140,3 +140,3 @@ } else

let m = A("* → " + r.shortName, { parent: B(r) });
return X("eventPrepend", C(m)), Ge(m, r, [q()], "prepend", o), Xt(r, m), m;
return X("eventPrepend", C(m)), Ge(m, r, [q()], "prepend", o), Zt(r, m), m;
} });

@@ -146,8 +146,8 @@ return n != null && n.domain && n.domain.hooks.event(s), s;

function Fe(e, t, n, r) {
return Bt(n, t, "first argument"), I(V(r), "second argument should be a function"), oe(!x(e, "derived"), `${t} in derived store`, `${t} in store created via createStore`), k(Array.isArray(n) ? n : [n], (a) => {
e.off(a), me(e).set(a, dt(mt(a, e, "on", zt, r)));
return zt(n, t, "first argument"), I(V(r), "second argument should be a function"), oe(!x(e, "derived"), `${t} in derived store`, `${t} in store created via createStore`), k(Array.isArray(n) ? n : [n], (a) => {
e.off(a), me(e).set(a, dt(mt(a, e, "on", jt, r)));
}), e;
}
function he(e, t) {
let n = U(t), r = Gt(e), a = A({ named: "updates", derived: 1 });
let n = U(t), r = Ft(e), a = A({ named: "updates", derived: 1 });
X("storeBase", r);

@@ -172,3 +172,3 @@ let s = r.id, o = { subscribers: /* @__PURE__ */ new Map(), updates: a, defaultState: e, stateRef: r, getState() {

let g = he(O, { name: `${o.shortName} → *`, derived: 1, and: f }), v = mt(o, g, re, Ye, u);
return Ft(ve(g), { type: re, fn: u, from: r }), ve(g).noInit = 1, X("storeMap", r, v), g;
return Kt(ve(g), { type: re, fn: u, from: r }), ve(g).noInit = 1, X("storeMap", r, v), g;
}, watch(u, l) {

@@ -181,7 +181,7 @@ if (!l || !Ne(u)) {

} }, m = vt("store", o, n), y = o.defaultConfig.updateFilter;
o.graphite = H({ scope: { state: r, fn: y }, node: [F((u, l, f) => (f.scope && !f.scope.reg[r.id] && (f.b = 1), u)), qt(r), F((u, l, { a: f, b: O }) => !j(u) && (u !== f || O), 1), y && q(Ye, 1), ye({ from: ne, target: r })], child: a, meta: m, regional: 1 });
o.graphite = H({ scope: { state: r, fn: y }, node: [F((u, l, f) => (f.scope && !f.scope.reg[r.id] && (f.b = 1), u)), Wt(r), F((u, l, { a: f, b: O }) => !j(u) && (u !== f || O), 1), y && q(Ye, 1), ye({ from: ne, target: r })], child: a, meta: m, regional: 1 });
let p = x(o, "serialize"), S = x(o, "derived"), c = p === "ignore", d = !p || c ? 0 : p, i = x(o, "sid");
return i && (c || ee(o, "storeChange", 1), r.sid = i, d && (r.meta = { ...r == null ? void 0 : r.meta, serialize: d })), i || c || S || ee(o, "warnSerialize", 1), I(S || !j(e), "current state can't be undefined, use null instead"), Be(o, [a]), n != null && n.domain && n.domain.hooks.store(o), S || (o.reinit = A(), o.reset(o.reinit)), o;
}
function kt() {
function Vt() {
let e = {};

@@ -210,3 +210,3 @@ return e.req = new Promise((t, n) => {

}, 0, 1), F(({ params: i, req: u, handler: l, args: f = [i] }, O, R) => {
let g = er(R), v = Ze(i, u, 1, s, R, g), w = Ze(i, u, 0, s, R, g), [h, _] = Zt(l, w, f);
let g = tr(R), v = Ze(i, u, 1, s, R, g), w = Ze(i, u, 0, s, R, g), [h, _] = er(l, w, f);
h && (z(_) && V(_.then) ? _.then(v, w) : v(_));

@@ -218,9 +218,9 @@ }, 0, 1)], meta: { op: "fx", fx: "runner" } });

} } } : i;
return l.meta || (l.meta = { fxID: Ht() }), te({ target: u, params: f, defer: 1, scope: P(l), meta: l.meta }), f.params;
return l.meta || (l.meta = { fxID: Nt() }), te({ target: u, params: f, defer: 1, scope: P(l), meta: l.meta }), f.params;
}, 0, 1)), r.create = (i) => {
let u = kt(), l = { params: i, req: u };
let u = Vt(), l = { params: i, req: u };
if (b && !fe) {
let f = b;
u.req.finally(() => {
Ut(f);
Yt(f);
}).catch(() => {

@@ -236,6 +236,6 @@ });

}
let Vt = typeof Symbol < "u" && Symbol.observable || "@@observable", re = "map", ne = "stack", C = (e) => e.graphite || e, Se = (e) => e.family.owners, _e = (e) => e.family.links, ve = (e) => e.stateRef, Z = (e) => e.value, me = (e) => e.subscribers, B = (e) => e.parent, P = (e) => e.scope, x = (e, t) => C(e).meta[t], ee = (e, t, n) => C(e).meta[t] = n, Mt = (e) => e.compositeName, Ne = (e) => (V(e) || z(e)) && "kind" in e;
let Mt = typeof Symbol < "u" && Symbol.observable || "@@observable", re = "map", ne = "stack", C = (e) => e.graphite || e, Se = (e) => e.family.owners, _e = (e) => e.family.links, ve = (e) => e.stateRef, Z = (e) => e.value, me = (e) => e.subscribers, B = (e) => e.parent, P = (e) => e.scope, x = (e, t) => C(e).meta[t], ee = (e, t, n) => C(e).meta[t] = n, Dt = (e) => e.compositeName, Ne = (e) => (V(e) || z(e)) && "kind" in e;
const le = (e) => (t) => Ne(t) && t.kind === e;
let $e = le("store"), Dt = le("event"), Ke = le("effect"), it = le("domain"), Tt = le("scope");
var Ct = { __proto__: null, unit: Ne, store: $e, event: Dt, effect: Ke, domain: it, scope: Tt, attached: (e) => Ke(e) && x(e, "attached") == 1 };
let $e = le("store"), Tt = le("event"), Ke = le("effect"), it = le("domain"), Ct = le("scope");
var Pt = { __proto__: null, unit: Ne, store: $e, event: Tt, effect: Ke, domain: it, scope: Ct, attached: (e) => Ke(e) && x(e, "attached") == 1 };
let ce = (e, t) => {

@@ -249,3 +249,3 @@ let n = e.indexOf(t);

};
let Pt = ge(), lt = ge(), It = ge(), Ht = ge(), G = null, ut = () => G, Nt = (e) => (e && G && G.sidRoot && (e = `${G.sidRoot}|${e}`), e), Be = (e, t) => {
let It = ge(), lt = ge(), Ht = ge(), Nt = ge(), G = null, ut = () => G, $t = (e) => (e && G && G.sidRoot && (e = `${G.sidRoot}|${e}`), e), Be = (e, t) => {
let n = C(e);

@@ -256,12 +256,12 @@ k(t, (r) => {

});
}, ue = (e = []) => (Array.isArray(e) ? e : [e]).flat().map(C), z = (e) => typeof e == "object" && e !== null, V = (e) => typeof e == "function", j = (e) => e === void 0, $t = (e) => I(z(e) || V(e), "expect first argument be an object");
}, ue = (e = []) => (Array.isArray(e) ? e : [e]).flat().map(C), z = (e) => typeof e == "object" && e !== null, V = (e) => typeof e == "function", j = (e) => e === void 0, Bt = (e) => I(z(e) || V(e), "expect first argument be an object");
const Ue = (e, t, n, r) => I(!(!z(e) && !V(e) || !("family" in e) && !("graphite" in e)), `${t}: expect ${n} to be a unit (store, event or effect)${r}`);
let Bt = (e, t, n) => {
let zt = (e, t, n) => {
Array.isArray(e) ? k(e, (r, a) => Ue(r, t, `${a} item of ${n}`, "")) : Ue(e, t, n, " or array of units");
}, Ye = (e, { fn: t }, { a: n }) => t(e, n), zt = (e, { fn: t }, { a: n }) => t(n, e), ze = (e, { fn: t }) => t(e);
}, Ye = (e, { fn: t }, { a: n }) => t(e, n), jt = (e, { fn: t }, { a: n }) => t(n, e), ze = (e, { fn: t }) => t(e);
const st = (e, t, n, r) => {
let a = { id: lt(), type: e, data: t };
return n && (a.order = { priority: n }, r && (a.order.barrierID = ++jt)), a;
return n && (a.order = { priority: n }, r && (a.order.barrierID = ++qt)), a;
};
let jt = 0, ye = ({ from: e = "store", store: t, target: n, to: r = n ? "store" : ne, batch: a, priority: s }) => st("mov", { from: e, store: t, to: r, target: n }, s, a), ae = ({ fn: e, batch: t, priority: n, safe: r = 0, filter: a = 0, pure: s = 0 }) => st("compute", { fn: e, safe: r, filter: a, pure: s }, n, t), je = ({ fn: e }) => ae({ fn: e, priority: "effect" }), F = (e, t, n) => ae({ fn: e, safe: 1, filter: t, priority: n && "effect" }), qt = (e, t, n) => ye({ store: e, to: t ? ne : "a", priority: n && "sampler", batch: 1 }), q = (e = ze, t) => ae({ fn: e, pure: 1, filter: t }), Wt = { mov: ye, compute: ae, filter: ({ fn: e, pure: t }) => ae({ fn: e, filter: 1, pure: t }), run: je }, Gt = (e) => ({ id: lt(), current: e }), ct = ({ current: e }) => e, Ft = (e, t) => {
let qt = 0, ye = ({ from: e = "store", store: t, target: n, to: r = n ? "store" : ne, batch: a, priority: s }) => st("mov", { from: e, store: t, to: r, target: n }, s, a), ae = ({ fn: e, batch: t, priority: n, safe: r = 0, filter: a = 0, pure: s = 0 }) => st("compute", { fn: e, safe: r, filter: a, pure: s }, n, t), je = ({ fn: e }) => ae({ fn: e, priority: "effect" }), F = (e, t, n) => ae({ fn: e, safe: 1, filter: t, priority: n && "effect" }), Wt = (e, t, n) => ye({ store: e, to: t ? ne : "a", priority: n && "sampler", batch: 1 }), q = (e = ze, t) => ae({ fn: e, pure: 1, filter: t }), Gt = { mov: ye, compute: ae, filter: ({ fn: e, pure: t }) => ae({ fn: e, filter: 1, pure: t }), run: je }, Ft = (e) => ({ id: lt(), current: e }), ct = ({ current: e }) => e, Kt = (e, t) => {
e.before || (e.before = []), M(e.before, t);

@@ -280,3 +280,3 @@ }, W = null;

M(We, { first: null, last: null, size: 0 }), Je += 1;
const Kt = () => {
const Ut = () => {
for (let e = 0; e < 6; e++) {

@@ -316,3 +316,3 @@ let t = We[e];

}, Ae = /* @__PURE__ */ new Set();
let b, se = 1, fe = 0, de = 0, D = null, Ut = (e) => {
let b, se = 1, fe = 0, de = 0, D = null, Yt = (e) => {
b = e;

@@ -331,7 +331,7 @@ }, Qe = (e) => {

};
let Yt = (e, t, n, r, a) => {
let Jt = (e, t, n, r, a) => {
let s = ft(e, r.id);
return s ? s.reg[r.id] : t ? (K(t, r, a), t.reg[r.id]) : r;
};
const Jt = (e) => e;
const Qt = (e) => e;
let K = (e, t, n, r, a) => {

@@ -344,3 +344,3 @@ var s;

if (m && m in e.sidValuesMap && !(m in e.sidIdMap))
p.current = (e.fromSerialize && y !== "ignore" && (y == null ? void 0 : y.read) || Jt)(e.sidValuesMap[m]);
p.current = (e.fromSerialize && y !== "ignore" && (y == null ? void 0 : y.read) || Qt)(e.sidValuesMap[m]);
else if (t.before && !a) {

@@ -366,3 +366,3 @@ let S = 0, c = n || !t.noInit || r;

};
const Qt = (e, t, n) => {
const Xt = (e, t, n) => {
try {

@@ -374,3 +374,3 @@ return t(Z(n), e.scope, n);

};
let U = (e, t = {}) => (z(e) && (U(e.or, t), Lt(e, (n, r) => {
let U = (e, t = {}) => (z(e) && (U(e.or, t), xt(e, (n, r) => {
j(n) || r === "or" || r === "and" || (t[r] = n);

@@ -402,7 +402,7 @@ }), U(e.and, t)), t);

return t.unsubscribe = t, t;
}, Ge = (e, t, n, r, a) => H({ node: n, parent: e, child: t, scope: { fn: a }, meta: { op: r }, family: { owners: [e, t], links: t }, regional: 1 }), pt = (e, t) => (I(V(t), ".watch argument should be a function"), dt(H({ scope: { fn: t }, node: [je({ fn: ze })], parent: e, meta: { op: "watch" }, family: { owners: e }, regional: 1 }))), Xt = (e, t, n = "event") => {
}, Ge = (e, t, n, r, a) => H({ node: n, parent: e, child: t, scope: { fn: a }, meta: { op: r }, family: { owners: [e, t], links: t }, regional: 1 }), pt = (e, t) => (I(V(t), ".watch argument should be a function"), dt(H({ scope: { fn: t }, node: [je({ fn: ze })], parent: e, meta: { op: "watch" }, family: { owners: e }, regional: 1 }))), Zt = (e, t, n = "event") => {
B(e) && B(e).hooks[n](t);
}, vt = (e, t, n) => {
let r = U(n), a = e === "domain", s = Pt(), { sid: o = null, named: m = null, domain: y = null, parent: p = y } = r, S = m || r.name || (a ? "" : s), c = xt(S, p), d = { op: t.kind = e, name: t.shortName = S, sid: t.sid = Nt(o), named: m, unitId: t.id = s, serialize: r.serialize, derived: r.derived, config: r };
return t.parent = p, t.compositeName = c, t.defaultConfig = r, t.thru = (i) => (oe(0, "thru", "js pipe"), i(t)), t.getType = () => c.fullName, !a && (t.subscribe = (i) => ($t(i), t.watch(V(i) ? i : (u) => i.next && i.next(u))), t[Vt] = () => t), d;
let r = U(n), a = e === "domain", s = It(), { sid: o = null, named: m = null, domain: y = null, parent: p = y } = r, S = m || r.name || (a ? "" : s), c = kt(S, p), d = { op: t.kind = e, name: t.shortName = S, sid: t.sid = $t(o), named: m, unitId: t.id = s, serialize: r.serialize, derived: r.derived, config: r };
return t.parent = p, t.compositeName = c, t.defaultConfig = r, t.thru = (i) => (oe(0, "thru", "js pipe"), i(t)), t.getType = () => c.fullName, !a && (t.subscribe = (i) => (Bt(i), t.watch(V(i) ? i : (u) => i.next && i.next(u))), t[Mt] = () => t), d;
};

@@ -420,3 +420,3 @@ const Le = (e, t, n, r) => {

};
let Zt = (e, t, n) => {
let er = (e, t, n) => {
try {

@@ -427,13 +427,13 @@ return [1, e(...n)];

}
}, er = (e) => {
}, tr = (e) => {
let t = P(e), n = { ref: t };
return t && M(t.activeEffects, n), n;
}, Ze = (e, t, n, r, a, s) => (o) => {
s.ref && ce(s.ref.activeEffects, s), te({ target: [r, tr], params: [n ? { status: "done", params: e, result: o } : { status: "fail", params: e, error: o }, { value: o, fn: n ? t.rs : t.rj }], defer: 1, page: a.page, scope: s.ref, meta: a.meta });
s.ref && ce(s.ref.activeEffects, s), te({ target: [r, rr], params: [n ? { status: "done", params: e, result: o } : { status: "fail", params: e, error: o }, { value: o, fn: n ? t.rs : t.rj }], defer: 1, page: a.page, scope: s.ref, meta: a.meta });
};
const tr = H({ node: [je({ fn: ({ fn: e, value: t }) => e(t) })], meta: { op: "fx", fx: "sidechain" } }), Lr = at(() => {
const rr = H({ node: [je({ fn: ({ fn: e, value: t }) => e(t) })], meta: { op: "fx", fx: "sidechain" } }), Lr = at(() => {
window.isBackFromBrowser = !1, window.history.back();
}), ht = at((e) => {
window.history.pushState(e, "");
}), rr = A(), nr = A(), or = A(), ar = A(), St = A(), ir = A(), Ie = A(), lr = he({
}), nr = A(), or = A(), ar = A(), ir = A(), St = A(), _t = A(), Ie = A(), lr = he({
activeView: null,

@@ -445,15 +445,15 @@ activePanel: null,

isBackHandled: !0
}).on(rr, (e, t) => ({
}).on(nr, (e, t) => ({
...e,
activeView: t
})).on(nr, (e, t) => ({
})).on(or, (e, t) => ({
...e,
activePanel: t
})).on(or, (e, t) => ({
})).on(ar, (e, t) => ({
...e,
activeModal: t
})).on(ar, (e, t) => ({
})).on(ir, (e, t) => ({
...e,
activePopout: t
})).on(ir, (e) => ({
})).on(_t, (e) => ({
...e,

@@ -710,4 +710,4 @@ isRouteInit: !0

}
var At = h, Re = _;
if (r(At, J))
var Lt = h, Re = _;
if (r(Lt, J))
return Re;

@@ -734,3 +734,3 @@ var be = i(J);

function hr(e, t, n, r) {
let a = [Wt.run({ fn: (s) => t(s) })];
let a = [Gt.run({ fn: (s) => t(s) })];
if (r && a.unshift(r), n) {

@@ -751,3 +751,3 @@ let s = H({ node: a }), o = e.graphite.id, m = n.additionalLinks, y = m[o] || [];

function Sr(e, t) {
Ct.store(e) || gt("expect useStore argument to be a store");
Pt.store(e) || yt("expect useStore argument to be a store");
let n = T.useCallback((a) => hr(e, a, t), [e, t]), r = T.useCallback(() => yr(e, t), [e, t]);

@@ -758,8 +758,8 @@ return gr(n, r, r);

let t = T.useContext(wr);
return e && !t && gt("No scope found, consider adding <Provider> to app root"), t;
return e && !t && yt("No scope found, consider adding <Provider> to app root"), t;
}
function _t(e, t) {
function gt(e, t) {
return Sr(e, _r(t == null ? void 0 : t.forceScope));
}
let gt = (e) => {
let yt = (e) => {
throw Error(e);

@@ -775,5 +775,5 @@ };

}, [e, n, t]);
}, yt = A(), wt = A(), Or = A(), Et = A(), Ot = A();
}, wt = A(), Et = A(), Or = A(), Ot = A(), Rt = A();
A();
const pe = A(), Rt = A(), bt = A(), He = A(), Rr = he({
const pe = A(), bt = A(), At = A(), He = A(), Rr = he({
isRoutesHandled: !0,

@@ -785,12 +785,12 @@ notHandledRoutes: [],

virtualPopout: null
}).on(yt, (e, t) => ({
}).on(wt, (e, t) => ({
...e,
virtualView: t
})).on(wt, (e, t) => ({
})).on(Et, (e, t) => ({
...e,
virtualPanel: t
})).on(Et, (e, t) => ({
})).on(Ot, (e, t) => ({
...e,
virtualModal: t
})).on(Ot, (e, t) => ({
})).on(Rt, (e, t) => ({
...e,

@@ -801,6 +801,6 @@ virtualPopout: t

notHandledRoutes: [...e.notHandledRoutes, t]
})).on(Rt, (e, t) => ({
})).on(bt, (e, t) => ({
...e,
notHandledRoutes: [t, ...e.notHandledRoutes]
})).on(bt, (e) => ({
})).on(At, (e) => ({
...e,

@@ -818,5 +818,5 @@ notHandledRoutes: []

$(() => {
o || (yt(e.view), wt(e.panel), e.modal && Et(e.modal), e.popout && Ot(e.popout));
o || (wt(e.view), Et(e.panel), e.modal && Ot(e.modal), e.popout && Rt(e.popout));
}, [o, e.view, e.panel, e.modal, e.popout]);
const { virtualView: y, virtualPanel: p, virtualModal: S, virtualPopout: c, notHandledRoutes: d, isRoutesHandled: i } = _t(Rr);
const { virtualView: y, virtualPanel: p, virtualModal: S, virtualPopout: c, notHandledRoutes: d, isRoutesHandled: i } = gt(Rr);
$(() => {

@@ -831,3 +831,3 @@ pe({ view: y, panel: p });

St(u);
}), bt(), He(!0));
}), At(), He(!0), o || _t());
}, [m, o, d, i]), $(() => {

@@ -858,11 +858,11 @@ o && ht({

return;
Rt({ view: l, panel: f, modal: O, popout: R }), Ie(!0);
bt({ view: l, panel: f, modal: O, popout: R }), Ie(!0);
})(), window.isBackFromBrowser = !0);
});
}, br = () => _t(lr), kr = (e) => e, Vr = (e, t) => (n, r) => ["view", "panel", "modal", "popout"].some((s) => n[s] === e && n[s] !== r[s]) && window.isBackFromBrowser ? (t && t(n, r), ht(n), !1) : !0;
}, br = () => gt(lr), kr = (e) => e, Vr = (e, t) => (n, r) => ["view", "panel", "modal", "popout"].some((s) => n[s] === e && n[s] !== r[s]) && window.isBackFromBrowser ? (t && t(n, r), ht(n), !1) : !0;
export {
or as _setActiveModal,
nr as _setActivePanel,
ar as _setActivePopout,
rr as _setActiveView,
ar as _setActiveModal,
or as _setActivePanel,
ir as _setActivePopout,
nr as _setActiveView,
St as _setRoutes,

@@ -873,6 +873,6 @@ Lr as back,

ht as historyPush,
Et as setActiveModal,
wt as setActivePanel,
Ot as setActivePopout,
yt as setActiveView,
Ot as setActiveModal,
Et as setActivePanel,
Rt as setActivePopout,
wt as setActiveView,
Or as setActiveViewPanel,

@@ -879,0 +879,0 @@ xr as useInitRouter,

{
"name": "@blumjs/router",
"version": "3.0.1",
"version": "3.0.2",
"description": "",

@@ -5,0 +5,0 @@ "exports": {

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc