Socket
Socket
Sign inDemoInstall

perfect-freehand

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

perfect-freehand - npm Package Compare versions

Comparing version 1.0.14 to 1.0.15

4

CHANGELOG.md
# Changelog
## 1.0.15
- Bug fixes related to very short lines.
## 1.0.14

@@ -4,0 +8,0 @@

2

dist/cjs/index.js

@@ -1,1 +0,1 @@

var ue=Object.defineProperty;var be=e=>ue(e,"__esModule",{value:!0});var ge=(e,t)=>{be(e);for(var r in t)ue(e,r,{get:t[r],enumerable:!0})};ge(exports,{default:()=>ke,getStroke:()=>ee,getStrokeOutlinePoints:()=>B,getStrokePoints:()=>A});function Y(e,t,r,x=g=>g){return e*x(.5-t*(.5-r))}function c(e,t){return[e[0]+t[0],e[1]+t[1]]}function p(e,t){return[e[0]-t[0],e[1]-t[1]]}function b(e,t){return[e[0]*t,e[1]*t]}function he(e,t){return[e[0]/t,e[1]/t]}function K(e){return[e[1],-e[0]]}function ie(e,t){return e[0]*t[0]+e[1]*t[1]}function pe(e,t){return e[0]===t[0]&&e[1]===t[1]}function de(e){return Math.hypot(e[0],e[1])}function xe(e){return e[0]*e[0]+e[1]*e[1]}function Z(e,t){return xe(p(e,t))}function j(e){return he(e,de(e))}function me(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function ce(e,t){return b(c(e,t),.5)}function V(e,t,r){let x=Math.sin(r),g=Math.cos(r),v=e[0]-t[0],o=e[1]-t[1],h=v*g-o*x,L=v*x+o*g;return[h+t[0],L+t[1]]}function H(e,t,r){return c(e,b(p(t,e),r))}function $(e,t,r){return c(e,b(t,r))}var{min:_,PI:Se}=Math,ae=.275,q=Se+1e-4;function B(e,t={}){let{size:r=16,smoothing:x=.5,thinning:g=.5,simulatePressure:v=!0,easing:o=n=>n,start:h={},end:L={},last:z=!1}=t,{cap:S=!0,taper:k=0,easing:C=n=>n*(2-n)}=h,{cap:a=!0,taper:l=0,easing:T=n=>--n*n*n+1}=L;if(e.length===0||r<=0)return[];let N=e[e.length-1].runningLength,te=Math.pow(r*x,2),O=[],P=[],U=e.slice(0,10).reduce((n,i)=>{let s=i.pressure;if(v){let u=_(1,i.distance/r),f=_(1,1-u);s=_(1,n+(f-n)*(u*ae))}return(n+s)/2},e[0].pressure),m=Y(r,g,e[e.length-1].pressure,o),X,ne=e[0].vector,D=e[0].point,F=D,E=D,M=F;for(let n=0;n<e.length-1;n++){let{pressure:i}=e[n],{point:s,vector:u,distance:f,runningLength:R}=e[n];if(N-R<3)continue;if(g){if(v){let I=_(1,f/r),W=_(1,1-I);i=_(1,U+(W-U)*(I*ae))}m=Y(r,g,i,o)}else m=r/2;X===void 0&&(X=m);let le=R<k?C(R/k):1,fe=N-R<l?T((N-R)/l):1;m=Math.max(.01,m*Math.min(le,fe));let re=e[n+1].vector,oe=ie(u,re);if(oe<0){let I=b(K(ne),m);for(let W=1/13,G=0;G<=1;G+=W)E=V(p(s,I),s,q*G),O.push(E),M=V(c(s,I),s,q*-G),P.push(M);D=E,F=M;continue}let se=b(K(H(re,u,oe)),m);E=p(s,se),(n===0||Z(D,E)>te)&&(O.push(E),D=E),M=c(s,se),(n===0||Z(F,M)>te)&&(P.push(M),F=M),U=i,ne=u}let y=e[0].point.slice(0,2),d=e.length>1?e[e.length-1].point.slice(0,2):c(e[0].point,[1,1]),J=O.length<=1||P.length<=1,Q=[],w=[];if(J){if(!(k||l)||z){let n=$(y,j(K(p(y,d))),-(X||m)),i=[];for(let s=1/13,u=s;u<=1;u+=s)i.push(V(n,y,q*2*u));return i}}else{if(!(k||l&&J))if(S)for(let s=1/13,u=s;u<=1;u+=s){let f=V(P[0],y,q*u);Q.push(f)}else{let s=p(O[0],P[0]),u=b(s,.5),f=b(s,.51);Q.push(p(y,u),p(y,f),c(y,f),c(y,u))}let n=ce(O[O.length-1],P[P.length-1]),i=K(j(p(d,n)));if(l||k&&J)w.push(d);else if(a){let s=$(d,i,m);for(let u=1/29,f=0;f<=1;f+=u){let R=V(s,d,q*3*f);w.push(R)}}else w.push(c(d,b(i,m)),c(d,b(i,m*.99)),p(d,b(i,m*.99)),p(d,b(i,m)))}return O.concat(w,P.reverse(),Q)}function A(e,t={}){var C;let{streamline:r=.5,size:x=16,last:g=!1}=t;if(e.length===0)return[];let v=.15+(1-r)*.85,o=Array.isArray(e[0])?e:e.map(({x:a,y:l,pressure:T=.5})=>[a,l,T]);o.length===1&&(o=[...o,[...c(o[0],[1,1]),...o[0].slice(2)]]);let h=[{point:[o[0][0],o[0][1]],pressure:o[0][2]>=0?o[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],L=!1,z=0,S=h[0],k=o.length-1;for(let a=1;a<o.length;a++){let l=g&&a===k?o[a]:H(S.point,o[a],v);if(pe(S.point,l))continue;let T=me(l,S.point);if(z+=T,a<k&&!L){if(z<x)continue;L=!0}S={point:l,pressure:o[a][2]>=0?o[a][2]:.5,vector:j(p(S.point,l)),distance:T,runningLength:z},h.push(S)}return h[0].vector=((C=h[1])==null?void 0:C.vector)||[0,0],h}function ee(e,t={}){return B(A(e,t),t)}var ke=ee;
var ue=Object.defineProperty;var fe=e=>ue(e,"__esModule",{value:!0});var be=(e,t)=>{fe(e);for(var u in t)ue(e,u,{get:t[u],enumerable:!0})};be(exports,{default:()=>Se,getStroke:()=>A,getStrokeOutlinePoints:()=>$,getStrokePoints:()=>B});function W(e,t,u,h=b=>b){return e*h(.5-t*(.5-u))}function se(e){return[-e[0],-e[1]]}function l(e,t){return[e[0]+t[0],e[1]+t[1]]}function a(e,t){return[e[0]-t[0],e[1]-t[1]]}function f(e,t){return[e[0]*t,e[1]*t]}function ge(e,t){return[e[0]/t,e[1]/t]}function L(e){return[e[1],-e[0]]}function ie(e,t){return e[0]*t[0]+e[1]*t[1]}function ce(e,t){return e[0]===t[0]&&e[1]===t[1]}function he(e){return Math.hypot(e[0],e[1])}function de(e){return e[0]*e[0]+e[1]*e[1]}function Y(e,t){return de(a(e,t))}function G(e){return ge(e,he(e))}function me(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function T(e,t,u){let h=Math.sin(u),b=Math.cos(u),v=e[0]-t[0],n=e[1]-t[1],g=v*b-n*h,E=v*h+n*b;return[g+t[0],E+t[1]]}function V(e,t,u){return l(e,f(a(t,e),u))}function Z(e,t,u){return l(e,f(t,u))}var{min:_,PI:xe}=Math,pe=.275,j=xe+1e-4;function $(e,t={}){let{size:u=16,smoothing:h=.5,thinning:b=.5,simulatePressure:v=!0,easing:n=r=>r,start:g={},end:E={},last:z=!1}=t,{cap:d=!0,taper:x=0,easing:q=r=>r*(2-r)}=g,{cap:m=!0,taper:c=0,easing:M=r=>--r*r*r+1}=E;if(e.length===0||u<=0)return[];let H=e[e.length-1].runningLength,ee=Math.pow(u*h,2),D=[],R=[],N=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(v){let s=_(1,i.distance/u),J=_(1,1-s);o=_(1,r+(J-r)*(s*pe))}return(r+o)/2},e[0].pressure),p=W(u,b,e[e.length-1].pressure,n),U,te=e[0].vector,I=e[0].point,C=I,y=I,O=C;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:s,distance:J,runningLength:K}=e[r];if(r<e.length-1&&H-K<3)continue;if(b){if(v){let P=_(1,J/u),Q=_(1,1-P);i=_(1,N+(Q-N)*(P*pe))}p=W(u,b,i,n)}else p=u/2;U===void 0&&(U=p);let ae=K<x?q(K/x):1,le=H-K<c?M((H-K)/c):1;if(p=Math.max(.01,p*Math.min(ae,le)),r===e.length-1){let P=f(L(s),p);D.push(a(o,P)),R.push(l(o,P));continue}let re=e[r+1].vector,ne=ie(s,re);if(ne<0){let P=f(L(te),p);for(let Q=1/13,w=0;w<=1;w+=Q)y=T(a(o,P),o,j*w),D.push(y),O=T(l(o,P),o,j*-w),R.push(O);I=y,C=O;continue}let oe=f(L(V(re,s,ne)),p);y=a(o,oe),(r<=1||Y(I,y)>ee)&&(D.push(y),I=y),O=l(o,oe),(r<=1||Y(C,O)>ee)&&(R.push(O),C=O),N=i,te=s}let S=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),X=[],F=[];if(e.length===1){if(!(x||c)||z){let r=Z(S,G(L(a(S,k))),-(U||p)),i=[];for(let o=1/13,s=o;s<=1;s+=o)i.push(T(r,S,j*2*s));return i}}else{if(!(x||c&&e.length===1))if(d)for(let i=1/13,o=i;o<=1;o+=i){let s=T(R[0],S,j*o);X.push(s)}else{let i=a(D[0],R[0]),o=f(i,.5),s=f(i,.51);X.push(a(S,o),a(S,s),l(S,s),l(S,o))}let r=L(se(e[e.length-1].vector));if(c||x&&e.length===1)F.push(k);else if(m){let i=Z(k,r,p);for(let o=1/29,s=o;s<1;s+=o)F.push(T(i,k,j*3*s))}else F.push(l(k,f(r,p)),l(k,f(r,p*.99)),a(k,f(r,p*.99)),a(k,f(r,p)))}return D.concat(F,R.reverse(),X)}function B(e,t={}){var q;let{streamline:u=.5,size:h=16,last:b=!1}=t;if(e.length===0)return[];let v=.15+(1-u)*.85,n=Array.isArray(e[0])?e:e.map(({x:m,y:c,pressure:M=.5})=>[m,c,M]);if(n.length===2){let m=n[1];n=n.slice(0,-1);for(let c=1;c<5;c++)n.push(V(n[0],m,c/4))}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let g=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],E=!1,z=0,d=g[0],x=n.length-1;for(let m=1;m<n.length;m++){let c=b&&m===x?n[m].slice(0,2):V(d.point,n[m],v);if(ce(d.point,c))continue;let M=me(c,d.point);if(z+=M,m<x&&!E){if(z<h)continue;E=!0}d={point:c,pressure:n[m][2]>=0?n[m][2]:.5,vector:G(a(d.point,c)),distance:M,runningLength:z},g.push(d)}return g[0].vector=((q=g[1])==null?void 0:q.vector)||[0,0],g}function A(e,t={}){return $(B(e,t),t)}var Se=A;

@@ -1,1 +0,1 @@

function Y(e,t,u,x=g=>g){return e*x(.5-t*(.5-u))}function c(e,t){return[e[0]+t[0],e[1]+t[1]]}function p(e,t){return[e[0]-t[0],e[1]-t[1]]}function b(e,t){return[e[0]*t,e[1]*t]}function fe(e,t){return[e[0]/t,e[1]/t]}function K(e){return[e[1],-e[0]]}function re(e,t){return e[0]*t[0]+e[1]*t[1]}function oe(e,t){return e[0]===t[0]&&e[1]===t[1]}function be(e){return Math.hypot(e[0],e[1])}function ge(e){return e[0]*e[0]+e[1]*e[1]}function Z(e,t){return ge(p(e,t))}function j(e){return fe(e,be(e))}function se(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function ue(e,t){return b(c(e,t),.5)}function V(e,t,u){let x=Math.sin(u),g=Math.cos(u),v=e[0]-t[0],r=e[1]-t[1],h=v*g-r*x,L=v*x+r*g;return[h+t[0],L+t[1]]}function H(e,t,u){return c(e,b(p(t,e),u))}function $(e,t,u){return c(e,b(t,u))}var{min:_,PI:he}=Math,ie=.275,q=he+1e-4;function pe(e,t={}){let{size:u=16,smoothing:x=.5,thinning:g=.5,simulatePressure:v=!0,easing:r=n=>n,start:h={},end:L={},last:z=!1}=t,{cap:S=!0,taper:k=0,easing:C=n=>n*(2-n)}=h,{cap:a=!0,taper:l=0,easing:T=n=>--n*n*n+1}=L;if(e.length===0||u<=0)return[];let N=e[e.length-1].runningLength,B=Math.pow(u*x,2),O=[],P=[],U=e.slice(0,10).reduce((n,i)=>{let o=i.pressure;if(v){let s=_(1,i.distance/u),f=_(1,1-s);o=_(1,n+(f-n)*(s*ie))}return(n+o)/2},e[0].pressure),m=Y(u,g,e[e.length-1].pressure,r),X,A=e[0].vector,D=e[0].point,F=D,E=D,M=F;for(let n=0;n<e.length-1;n++){let{pressure:i}=e[n],{point:o,vector:s,distance:f,runningLength:R}=e[n];if(N-R<3)continue;if(g){if(v){let I=_(1,f/u),W=_(1,1-I);i=_(1,U+(W-U)*(I*ie))}m=Y(u,g,i,r)}else m=u/2;X===void 0&&(X=m);let ae=R<k?C(R/k):1,le=N-R<l?T((N-R)/l):1;m=Math.max(.01,m*Math.min(ae,le));let ee=e[n+1].vector,te=re(s,ee);if(te<0){let I=b(K(A),m);for(let W=1/13,G=0;G<=1;G+=W)E=V(p(o,I),o,q*G),O.push(E),M=V(c(o,I),o,q*-G),P.push(M);D=E,F=M;continue}let ne=b(K(H(ee,s,te)),m);E=p(o,ne),(n===0||Z(D,E)>B)&&(O.push(E),D=E),M=c(o,ne),(n===0||Z(F,M)>B)&&(P.push(M),F=M),U=i,A=s}let y=e[0].point.slice(0,2),d=e.length>1?e[e.length-1].point.slice(0,2):c(e[0].point,[1,1]),J=O.length<=1||P.length<=1,Q=[],w=[];if(J){if(!(k||l)||z){let n=$(y,j(K(p(y,d))),-(X||m)),i=[];for(let o=1/13,s=o;s<=1;s+=o)i.push(V(n,y,q*2*s));return i}}else{if(!(k||l&&J))if(S)for(let o=1/13,s=o;s<=1;s+=o){let f=V(P[0],y,q*s);Q.push(f)}else{let o=p(O[0],P[0]),s=b(o,.5),f=b(o,.51);Q.push(p(y,s),p(y,f),c(y,f),c(y,s))}let n=ue(O[O.length-1],P[P.length-1]),i=K(j(p(d,n)));if(l||k&&J)w.push(d);else if(a){let o=$(d,i,m);for(let s=1/29,f=0;f<=1;f+=s){let R=V(o,d,q*3*f);w.push(R)}}else w.push(c(d,b(i,m)),c(d,b(i,m*.99)),p(d,b(i,m*.99)),p(d,b(i,m)))}return O.concat(w,P.reverse(),Q)}function me(e,t={}){var C;let{streamline:u=.5,size:x=16,last:g=!1}=t;if(e.length===0)return[];let v=.15+(1-u)*.85,r=Array.isArray(e[0])?e:e.map(({x:a,y:l,pressure:T=.5})=>[a,l,T]);r.length===1&&(r=[...r,[...c(r[0],[1,1]),...r[0].slice(2)]]);let h=[{point:[r[0][0],r[0][1]],pressure:r[0][2]>=0?r[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],L=!1,z=0,S=h[0],k=r.length-1;for(let a=1;a<r.length;a++){let l=g&&a===k?r[a]:H(S.point,r[a],v);if(oe(S.point,l))continue;let T=se(l,S.point);if(z+=T,a<k&&!L){if(z<x)continue;L=!0}S={point:l,pressure:r[a][2]>=0?r[a][2]:.5,vector:j(p(S.point,l)),distance:T,runningLength:z},h.push(S)}return h[0].vector=((C=h[1])==null?void 0:C.vector)||[0,0],h}function ce(e,t={}){return pe(me(e,t),t)}var Te=ce;export{Te as default,ce as getStroke,pe as getStrokeOutlinePoints,me as getStrokePoints};
function W(e,t,s,h=b=>b){return e*h(.5-t*(.5-s))}function re(e){return[-e[0],-e[1]]}function l(e,t){return[e[0]+t[0],e[1]+t[1]]}function a(e,t){return[e[0]-t[0],e[1]-t[1]]}function f(e,t){return[e[0]*t,e[1]*t]}function le(e,t){return[e[0]/t,e[1]/t]}function L(e){return[e[1],-e[0]]}function ne(e,t){return e[0]*t[0]+e[1]*t[1]}function oe(e,t){return e[0]===t[0]&&e[1]===t[1]}function fe(e){return Math.hypot(e[0],e[1])}function be(e){return e[0]*e[0]+e[1]*e[1]}function Y(e,t){return be(a(e,t))}function G(e){return le(e,fe(e))}function ue(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function T(e,t,s){let h=Math.sin(s),b=Math.cos(s),v=e[0]-t[0],n=e[1]-t[1],g=v*b-n*h,E=v*h+n*b;return[g+t[0],E+t[1]]}function V(e,t,s){return l(e,f(a(t,e),s))}function Z(e,t,s){return l(e,f(t,s))}var{min:_,PI:ge}=Math,se=.275,j=ge+1e-4;function ie(e,t={}){let{size:s=16,smoothing:h=.5,thinning:b=.5,simulatePressure:v=!0,easing:n=r=>r,start:g={},end:E={},last:z=!1}=t,{cap:d=!0,taper:x=0,easing:q=r=>r*(2-r)}=g,{cap:m=!0,taper:c=0,easing:M=r=>--r*r*r+1}=E;if(e.length===0||s<=0)return[];let H=e[e.length-1].runningLength,$=Math.pow(s*h,2),D=[],R=[],N=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(v){let u=_(1,i.distance/s),J=_(1,1-u);o=_(1,r+(J-r)*(u*se))}return(r+o)/2},e[0].pressure),p=W(s,b,e[e.length-1].pressure,n),U,B=e[0].vector,I=e[0].point,C=I,y=I,O=C;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:u,distance:J,runningLength:K}=e[r];if(r<e.length-1&&H-K<3)continue;if(b){if(v){let P=_(1,J/s),Q=_(1,1-P);i=_(1,N+(Q-N)*(P*se))}p=W(s,b,i,n)}else p=s/2;U===void 0&&(U=p);let pe=K<x?q(K/x):1,ae=H-K<c?M((H-K)/c):1;if(p=Math.max(.01,p*Math.min(pe,ae)),r===e.length-1){let P=f(L(u),p);D.push(a(o,P)),R.push(l(o,P));continue}let A=e[r+1].vector,ee=ne(u,A);if(ee<0){let P=f(L(B),p);for(let Q=1/13,w=0;w<=1;w+=Q)y=T(a(o,P),o,j*w),D.push(y),O=T(l(o,P),o,j*-w),R.push(O);I=y,C=O;continue}let te=f(L(V(A,u,ee)),p);y=a(o,te),(r<=1||Y(I,y)>$)&&(D.push(y),I=y),O=l(o,te),(r<=1||Y(C,O)>$)&&(R.push(O),C=O),N=i,B=u}let S=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),X=[],F=[];if(e.length===1){if(!(x||c)||z){let r=Z(S,G(L(a(S,k))),-(U||p)),i=[];for(let o=1/13,u=o;u<=1;u+=o)i.push(T(r,S,j*2*u));return i}}else{if(!(x||c&&e.length===1))if(d)for(let i=1/13,o=i;o<=1;o+=i){let u=T(R[0],S,j*o);X.push(u)}else{let i=a(D[0],R[0]),o=f(i,.5),u=f(i,.51);X.push(a(S,o),a(S,u),l(S,u),l(S,o))}let r=L(re(e[e.length-1].vector));if(c||x&&e.length===1)F.push(k);else if(m){let i=Z(k,r,p);for(let o=1/29,u=o;u<1;u+=o)F.push(T(i,k,j*3*u))}else F.push(l(k,f(r,p)),l(k,f(r,p*.99)),a(k,f(r,p*.99)),a(k,f(r,p)))}return D.concat(F,R.reverse(),X)}function ce(e,t={}){var q;let{streamline:s=.5,size:h=16,last:b=!1}=t;if(e.length===0)return[];let v=.15+(1-s)*.85,n=Array.isArray(e[0])?e:e.map(({x:m,y:c,pressure:M=.5})=>[m,c,M]);if(n.length===2){let m=n[1];n=n.slice(0,-1);for(let c=1;c<5;c++)n.push(V(n[0],m,c/4))}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let g=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],E=!1,z=0,d=g[0],x=n.length-1;for(let m=1;m<n.length;m++){let c=b&&m===x?n[m].slice(0,2):V(d.point,n[m],v);if(oe(d.point,c))continue;let M=ue(c,d.point);if(z+=M,m<x&&!E){if(z<h)continue;E=!0}d={point:c,pressure:n[m][2]>=0?n[m][2]:.5,vector:G(a(d.point,c)),distance:M,runningLength:z},g.push(d)}return g[0].vector=((q=g[1])==null?void 0:q.vector)||[0,0],g}function me(e,t={}){return ie(ce(e,t),t)}var Te=me;export{Te as default,me as getStroke,ie as getStrokeOutlinePoints,ce as getStrokePoints};
{
"version": "1.0.14",
"version": "1.0.15",
"name": "perfect-freehand",

@@ -59,3 +59,3 @@ "private": false,

},
"gitHead": "9a3b3da54b85c34bc6a9803fbc2e7fb1ea1c1fe2"
"gitHead": "b82dc3e526ca11153756d4b4eb72748e3cce0a94"
}

@@ -37,3 +37,3 @@ # ![Screenshot](assets/perfect-freehand-logo.svg 'Perfect Freehand')

![Screenshot](assets/process.gif "A GIF showing a stroke's input points, outline points, and a curved path connecting these points")
![Screenshot](assets/process.gif 'A GIF showing a stroke with input points, outline points, and a curved path connecting these points')

@@ -354,4 +354,4 @@ To do this work, `getStroke` first creates a set of spline points (red) based on the input points (grey) and then creates outline points (blue). You can render the result any way you like, using whichever technology you prefer.

### Author
## Author
- [@steveruizok](https://twitter.com/steveruizok)

Sorry, the diff of this file is not supported yet

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