New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@loaders.gl/images

Package Overview
Dependencies
Maintainers
9
Versions
330
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@loaders.gl/images - npm Package Compare versions

Comparing version 4.0.0-alpha.22 to 4.0.0-alpha.23

2

dist/dist.min.js

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

(()=>{var Y=Object.defineProperty;var Le=e=>Y(e,"__esModule",{value:!0});var n=(e,t)=>()=>(e&&(t=e(e=0)),t);var Pe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Oe=(e,t)=>{Le(e);for(var r in t)Y(e,r,{get:t[r],enumerable:!0})};var T,P=n(()=>{T=typeof __VERSION__!="undefined"?__VERSION__:"latest"});function f(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var J=n(()=>{});var p,Me,Ue,ke,ve,u,X,Ne,Z=n(()=>{p={self:typeof self!="undefined"&&self,window:typeof window!="undefined"&&window,global:typeof global!="undefined"&&global,document:typeof document!="undefined"&&document},Me=p.self||p.window||p.global||{},Ue=p.window||p.self||p.global||{},ke=p.global||p.self||p.window||{},ve=p.document||{},u=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser),X=typeof process!="undefined"&&process.version&&/v([0-9]*)/.exec(process.version),Ne=X&&parseFloat(X[1])||0});function O(e){for(let t in q)if(e.startsWith(t)){let r=q[t];e=e.replace(t,r)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${_e}${e}`),e}var _e,q,z=n(()=>{_e="",q={}});var l=n(()=>{J();Z();z()});function B(e){switch(e){case"auto":return U||M||k;case"imagebitmap":return U;case"image":return M;case"data":return k;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function D(){if(U)return"imagebitmap";if(M)return"image";if(k)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}var Fe,M,U,Ve,k,v=n(()=>{l();({_parseImageNode:Fe}=globalThis),M=typeof Image!="undefined",U=typeof ImageBitmap!="undefined",Ve=Boolean(Fe),k=u?!0:Ve});function H(e){return Boolean(K(e))}function N(e){let t=K(e);if(!t)throw new Error("Not an image");return t}function d(e){return b(e)}function b(e){switch(N(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),r=t.getContext("2d");if(!r)throw new Error("getImageData");return t.width=e.width,t.height=e.height,r.drawImage(e,0,0),r.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function K(e){return typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap?"imagebitmap":typeof Image!="undefined"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var I=n(()=>{});function S(e){return e&&(Re.test(e)||We.test(e))}function ee(e,t){if(S(t)){let a=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(a=unescape(encodeURIComponent(a)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(a)}`}return _(e,t)}function _(e,t){if(S(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}var Re,We,F=n(()=>{Re=/^data:image\/svg\+xml/,We=/\.svg((\?|#).*)?$/});async function w(e,t,r){let a=ee(e,r),o=self.URL||self.webkitURL,i=typeof a!="string"&&o.createObjectURL(a);try{return await je(i||a,t)}finally{i&&o.revokeObjectURL(i)}}async function je(e,t){let r=new Image;return r.src=e,t.image&&t.image.decode&&r.decode?(await r.decode(),r):await new Promise((a,o)=>{try{r.onload=()=>a(r),r.onerror=i=>o(new Error(`Could not load image ${e}: ${i}`))}catch(i){o(i)}})}var V=n(()=>{F()});async function R(e,t,r){let a;S(r)?a=await w(e,t,r):a=_(e,r);let o=t&&t.imagebitmap;return await Ge(a,o)}async function Ge(e,t=null){if((Qe(t)||!te)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(r){console.warn(r),te=!1}return await createImageBitmap(e)}function Qe(e){for(let t in e||Ce)return!1;return!0}var Ce,te,re=n(()=>{F();V();Ce={},te=!0});function ae(e){return!Xe(e,"ftyp",4)||(e[8]&96)==0?null:$e(e)}function $e(e){switch(Ye(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Ye(e,t,r){return String.fromCharCode(...e.slice(t,r))}function Je(e){return[...e].map(t=>t.charCodeAt(0))}function Xe(e,t,r=0){let a=Je(t);for(let o=0;o<a.length;++o)if(a[o]!==e[o+r])return!1;return!0}var oe=n(()=>{});function y(e){let t=h(e);return qe(t)||Ke(t)||ze(t)||He(t)||Ze(t)}function Ze(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),r=ae(t);return r?{mimeType:r.mimeType,width:0,height:0}:null}function qe(e){let t=h(e);return t.byteLength>=24&&t.getUint32(0,g)===2303741511?{mimeType:"image/png",width:t.getUint32(16,g),height:t.getUint32(20,g)}:null}function ze(e){let t=h(e);return t.byteLength>=10&&t.getUint32(0,g)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,x),height:t.getUint16(8,x)}:null}function He(e){let t=h(e);return t.byteLength>=14&&t.getUint16(0,g)===16973&&t.getUint32(2,x)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,x),height:t.getUint32(22,x)}:null}function Ke(e){let t=h(e);if(!(t.byteLength>=3&&t.getUint16(0,g)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:a,sofMarkers:o}=et(),i=2;for(;i+9<t.byteLength;){let s=t.getUint16(i,g);if(o.has(s))return{mimeType:"image/jpeg",height:t.getUint16(i+5,g),width:t.getUint16(i+7,g)};if(!a.has(s))return null;i+=2,i+=t.getUint16(i,g)}return null}function et(){let e=new Set([65499,65476,65484,65501,65534]);for(let r=65504;r<65520;++r)e.add(r);let t=new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502]);return{tableMarkers:e,sofMarkers:t}}function h(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}var g,x,E=n(()=>{oe();g=!1,x=!0});async function W(e,t){let{mimeType:r}=y(e)||{},a=globalThis._parseImageNode;return f(a),await a(e,r)}var ie=n(()=>{l();E()});async function A(e,t,r){t=t||{};let o=(t.image||{}).type||"auto",{url:i}=r||{},s=tt(o),m;switch(s){case"imagebitmap":m=await R(e,t,i);break;case"image":m=await w(e,t,i);break;case"data":m=await W(e,t);break;default:f(!1)}return o==="data"&&(m=b(m)),m}function tt(e){switch(e){case"auto":case"data":return D();default:return B(e),e}}var j=n(()=>{l();v();I();V();re();ie()});var rt,at,ot,ne,se=n(()=>{P();j();E();rt=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],at=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],ot={image:{type:"auto",decode:!0}},ne={id:"image",module:"images",name:"Images",version:T,mimeTypes:at,extensions:rt,parse:A,tests:[e=>Boolean(y(new DataView(e)))],options:ot}});async function pe(e,t){return t=t||{},t.image=t.image||{},me?me(e,{type:t.image.mimeType}):it(e,t)}async function it(e,t){let{mimeType:r,jpegQuality:a}=t.image,{width:o,height:i}=d(e),s=document.createElement("canvas");s.width=o,s.height=i,nt(e,s);let m=await new Promise(c=>{if(a&&ge)try{s.toBlob(c,r,a);return}catch{ge=!1}s.toBlob(c,r)});if(!m)throw new Error("image encoding failed");return await m.arrayBuffer()}function nt(e,t,r=0,a=0){if(r===0&&a===0&&typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap){let i=t.getContext("bitmaprenderer");if(i)return i.transferFromImageBitmap(e),t}let o=t.getContext("2d");if(e.data){let i=new Uint8ClampedArray(e.data),s=new ImageData(i,e.width,e.height);return o.putImageData(s,0,0),t}return o.drawImage(e,0,0),t}var me,ge,fe=n(()=>{I();({_encodeImageNode:me}=globalThis);ge=!0});var le,ce=n(()=>{P();fe();le={name:"Images",id:"image",module:"images",version:T,extensions:["jpeg"],options:{image:{mimeType:"image/png",jpegQuality:null}},encode:pe}});async function de(){if(ue)return await ue;let e=new Set;for(let t of st)(u?await gt(t):Ae(t))&&e.add(t);return e}function ye(e){if(C[e]===void 0){let t=u?mt(e):Ae(e);C[e]=t}return C[e]}function Ae(e){let t=["image/png","image/jpeg","image/gif"],{_parseImageNode:r,_imageFormatsNode:a=t}=globalThis;return Boolean(r)&&a.includes(e)}function mt(e){switch(e){case"image/avif":case"image/webp":return ft(e);default:return!0}}async function gt(e){let t=pt[e];return t?await lt(t):!0}function ft(e){try{return document.createElement("canvas").toDataURL(e).indexOf(`data:${e}`)===0}catch{return!1}}async function lt(e){return new Promise(t=>{let r=new Image;r.src=e,r.onload=()=>t(r.height>0),r.onerror=()=>t(!1)})}var st,ue,C,pt,G=n(()=>{l();st=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/tiff","image/svg","image/svg+xml","image/bmp","image/vnd.microsoft.icon"],ue=null;C={};pt={"image/avif":"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=","image/webp":"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"}});function L(e,t,r){let a=e;typeof e=="function"&&(a=e({...t,...r})),f(typeof a=="string");let{baseUrl:o}=t;return o&&(a=o[o.length-1]==="/"?`${o}${a}`:`${o}/${a}`),O(a)}var be=n(()=>{l()});async function Ie(e,t,r={}){return await Q(e,t,r)}async function Q(e,t,r){return Array.isArray(e)?await dt(e,t,r):ct(e)?await ut(e,t,r):await t(e,r)}async function ut(e,t,r){let a=[],o={};for(let i in e){let s=e[i],m=Q(s,t,r).then(c=>{o[i]=c});a.push(m)}return await Promise.all(a),o}async function dt(e,t,r={}){let a=e.map(o=>Q(o,t,r));return await Promise.all(a)}var ct,we=n(()=>{ct=e=>e&&typeof e=="object"});async function xe(e,t,r){return await Ie(e,a=>$(a,t,r))}async function $(e,t,r){let o=await(await fetch(e,r.fetch)).arrayBuffer();return await t(o,r)}var he=n(()=>{we()});async function Te(e,t={}){let r=await yt(e,t);return await xe(r,A,t)}async function yt(e,t,r={}){let a=t&&t.image&&t.image.mipLevels||0;return a!==0?await At(e,a,t,r):L(e,t,r)}async function At(e,t,r,a){let o=[];if(t==="auto"){let i=L(e,r,{...a,lod:0}),s=await $(i,A,r),{width:m,height:c}=d(s);t=bt({width:m,height:c}),o.push(i)}f(t>0);for(let i=o.length;i<t;++i){let s=L(e,r,{...a,lod:i});o.push(s)}return o}function bt({width:e,height:t}){return 1+Math.floor(Math.log2(Math.max(e,t)))}var Be=n(()=>{l();j();I();be();he()});var De={};Oe(De,{ImageLoader:()=>ne,ImageWriter:()=>le,getBinaryImageMetadata:()=>y,getDefaultImageType:()=>D,getImageData:()=>b,getImageSize:()=>d,getImageType:()=>N,getSupportedImageFormats:()=>de,isImage:()=>H,isImageFormatSupported:()=>ye,isImageTypeSupported:()=>B,loadImage:()=>Te});var Se=n(()=>{se();ce();E();v();I();G();G();Be()});var wt=Pe((Ur,Ee)=>{var It=(Se(),De);globalThis.loaders=globalThis.loaders||{};Ee.exports=Object.assign(globalThis.loaders,It)});wt();})();
(()=>{var Q=Object.defineProperty;var Le=e=>Q(e,"__esModule",{value:!0});var n=(e,t)=>()=>(e&&(t=e(e=0)),t);var Pe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Oe=(e,t)=>{Le(e);for(var r in t)Q(e,r,{get:t[r],enumerable:!0})};var h,P=n(()=>{h=typeof __VERSION__!="undefined"?__VERSION__:"latest"});function f(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var $=n(()=>{});var p,ve,Me,Ue,Fe,d,Y,ke,J=n(()=>{p={self:typeof self!="undefined"&&self,window:typeof window!="undefined"&&window,global:typeof global!="undefined"&&global,document:typeof document!="undefined"&&document},ve=p.self||p.window||p.global||{},Me=p.window||p.self||p.global||{},Ue=p.global||p.self||p.window||{},Fe=p.document||{},d=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser),Y=typeof process!="undefined"&&process.version&&/v([0-9]*)/.exec(process.version),ke=Y&&parseFloat(Y[1])||0});function O(e){for(let t in X)if(e.startsWith(t)){let r=X[t];e=e.replace(t,r)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Ne}${e}`),e}var Ne,X,Z=n(()=>{Ne="",X={}});var l=n(()=>{$();J();Z()});function T(e){switch(e){case"auto":return M||v||U;case"imagebitmap":return M;case"image":return v;case"data":return U;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function B(){if(M)return"imagebitmap";if(v)return"image";if(U)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}var _e,v,M,Ve,U,F=n(()=>{l();({_parseImageNode:_e}=globalThis),v=typeof Image!="undefined",M=typeof ImageBitmap!="undefined",Ve=Boolean(_e),U=d?!0:Ve});function q(e){return Boolean(H(e))}function k(e){let t=H(e);if(!t)throw new Error("Not an image");return t}function u(e){return A(e)}function A(e){switch(k(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),r=t.getContext("2d");if(!r)throw new Error("getImageData");return t.width=e.width,t.height=e.height,r.drawImage(e,0,0),r.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function H(e){return typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap?"imagebitmap":typeof Image!="undefined"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var b=n(()=>{});function D(e){return e&&(Re.test(e)||We.test(e))}function z(e,t){if(D(t)){let a=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(a=unescape(encodeURIComponent(a)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(a)}`}return N(e,t)}function N(e,t){if(D(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}var Re,We,_=n(()=>{Re=/^data:image\/svg\+xml/,We=/\.svg((\?|#).*)?$/});async function S(e,t,r){let a=z(e,r),o=self.URL||self.webkitURL,i=typeof a!="string"&&o.createObjectURL(a);try{return await je(i||a,t)}finally{i&&o.revokeObjectURL(i)}}async function je(e,t){let r=new Image;return r.src=e,t.image&&t.image.decode&&r.decode?(await r.decode(),r):await new Promise((a,o)=>{try{r.onload=()=>a(r),r.onerror=i=>o(new Error(`Could not load image ${e}: ${i}`))}catch(i){o(i)}})}var V=n(()=>{_()});async function ee(e,t,r){let a;D(r)?a=await S(e,t,r):a=N(e,r);let o=t&&t.imagebitmap;return await Ge(a,o)}async function Ge(e,t=null){if((Qe(t)||!K)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(r){console.warn(r),K=!1}return await createImageBitmap(e)}function Qe(e){for(let t in e||Ce)return!1;return!0}var Ce,K,te=n(()=>{_();V();Ce={},K=!0});function re(e){return!Xe(e,"ftyp",4)||(e[8]&96)==0?null:$e(e)}function $e(e){switch(Ye(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Ye(e,t,r){return String.fromCharCode(...e.slice(t,r))}function Je(e){return[...e].map(t=>t.charCodeAt(0))}function Xe(e,t,r=0){let a=Je(t);for(let o=0;o<a.length;++o)if(a[o]!==e[o+r])return!1;return!0}var ae=n(()=>{});function y(e){let t=w(e);return qe(t)||Ke(t)||He(t)||ze(t)||Ze(t)}function Ze(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),r=re(t);return r?{mimeType:r.mimeType,width:0,height:0}:null}function qe(e){let t=w(e);return t.byteLength>=24&&t.getUint32(0,g)===2303741511?{mimeType:"image/png",width:t.getUint32(16,g),height:t.getUint32(20,g)}:null}function He(e){let t=w(e);return t.byteLength>=10&&t.getUint32(0,g)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,I),height:t.getUint16(8,I)}:null}function ze(e){let t=w(e);return t.byteLength>=14&&t.getUint16(0,g)===16973&&t.getUint32(2,I)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,I),height:t.getUint32(22,I)}:null}function Ke(e){let t=w(e);if(!(t.byteLength>=3&&t.getUint16(0,g)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:a,sofMarkers:o}=et(),i=2;for(;i+9<t.byteLength;){let s=t.getUint16(i,g);if(o.has(s))return{mimeType:"image/jpeg",height:t.getUint16(i+5,g),width:t.getUint16(i+7,g)};if(!a.has(s))return null;i+=2,i+=t.getUint16(i,g)}return null}function et(){let e=new Set([65499,65476,65484,65501,65534]);for(let r=65504;r<65520;++r)e.add(r);let t=new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502]);return{tableMarkers:e,sofMarkers:t}}function w(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}var g,I,E=n(()=>{ae();g=!1,I=!0});async function oe(e,t){let{mimeType:r}=y(e)||{},a=globalThis._parseImageNode;return f(a),await a(e,r)}var ie=n(()=>{l();E()});async function x(e,t,r){t=t||{};let o=(t.image||{}).type||"auto",{url:i}=r||{},s=tt(o),m;switch(s){case"imagebitmap":m=await ee(e,t,i);break;case"image":m=await S(e,t,i);break;case"data":m=await oe(e,t);break;default:f(!1)}return o==="data"&&(m=A(m)),m}function tt(e){switch(e){case"auto":case"data":return B();default:return T(e),e}}var R=n(()=>{l();F();b();V();te();ie()});var rt,at,ot,ne,se=n(()=>{P();R();E();rt=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],at=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],ot={image:{type:"auto",decode:!0}},ne={id:"image",module:"images",name:"Images",version:h,mimeTypes:at,extensions:rt,parse:x,tests:[e=>Boolean(y(new DataView(e)))],options:ot}});async function pe(e,t){return t=t||{},t.image=t.image||{},me?me(e,{type:t.image.mimeType}):it(e,t)}async function it(e,t){let{mimeType:r,jpegQuality:a}=t.image,{width:o,height:i}=u(e),s=document.createElement("canvas");s.width=o,s.height=i,nt(e,s);let m=await new Promise(c=>{if(a&&ge)try{s.toBlob(c,r,a);return}catch{ge=!1}s.toBlob(c,r)});if(!m)throw new Error("image encoding failed");return await m.arrayBuffer()}function nt(e,t,r=0,a=0){if(r===0&&a===0&&typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap){let i=t.getContext("bitmaprenderer");if(i)return i.transferFromImageBitmap(e),t}let o=t.getContext("2d");if(e.data){let i=new Uint8ClampedArray(e.data),s=new ImageData(i,e.width,e.height);return o.putImageData(s,0,0),t}return o.drawImage(e,0,0),t}var me,ge,fe=n(()=>{b();({_encodeImageNode:me}=globalThis);ge=!0});var le,ce=n(()=>{P();fe();le={name:"Images",id:"image",module:"images",version:h,extensions:["jpeg"],options:{image:{mimeType:"image/png",jpegQuality:null}},encode:pe}});async function ue(){if(de)return await de;let e=new Set;for(let t of st)(d?await gt(t):Ae(t))&&e.add(t);return e}function ye(e){if(W[e]===void 0){let t=d?mt(e):Ae(e);W[e]=t}return W[e]}function Ae(e){let t=["image/png","image/jpeg","image/gif"],{_parseImageNode:r,_imageFormatsNode:a=t}=globalThis;return Boolean(r)&&a.includes(e)}function mt(e){switch(e){case"image/avif":case"image/webp":return ft(e);default:return!0}}async function gt(e){let t=pt[e];return t?await lt(t):!0}function ft(e){try{return document.createElement("canvas").toDataURL(e).indexOf(`data:${e}`)===0}catch{return!1}}async function lt(e){return new Promise(t=>{let r=new Image;r.src=e,r.onload=()=>t(r.height>0),r.onerror=()=>t(!1)})}var st,de,W,pt,j=n(()=>{l();st=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/tiff","image/svg","image/svg+xml","image/bmp","image/vnd.microsoft.icon"],de=null;W={};pt={"image/avif":"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=","image/webp":"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"}});function L(e,t,r){let a=e;typeof e=="function"&&(a=e({...t,...r})),f(typeof a=="string");let{baseUrl:o}=t;return o&&(a=o[o.length-1]==="/"?`${o}${a}`:`${o}/${a}`),O(a)}var be=n(()=>{l()});async function Ie(e,t,r={}){return await C(e,t,r)}async function C(e,t,r){return Array.isArray(e)?await ut(e,t,r):ct(e)?await dt(e,t,r):await t(e,r)}async function dt(e,t,r){let a=[],o={};for(let i in e){let s=e[i],m=C(s,t,r).then(c=>{o[i]=c});a.push(m)}return await Promise.all(a),o}async function ut(e,t,r={}){let a=e.map(o=>C(o,t,r));return await Promise.all(a)}var ct,we=n(()=>{ct=e=>e&&typeof e=="object"});async function xe(e,t,r){return await Ie(e,a=>G(a,t,r))}async function G(e,t,r){let o=await(await fetch(e,r.fetch)).arrayBuffer();return await t(o,r)}var he=n(()=>{we()});async function Te(e,t={}){let r=await yt(e,t);return await xe(r,x,t)}async function yt(e,t,r={}){let a=t&&t.image&&t.image.mipLevels||0;return a!==0?await At(e,a,t,r):L(e,t,r)}async function At(e,t,r,a){let o=[];if(t==="auto"){let i=L(e,r,{...a,lod:0}),s=await G(i,x,r),{width:m,height:c}=u(s);t=bt({width:m,height:c}),o.push(i)}f(t>0);for(let i=o.length;i<t;++i){let s=L(e,r,{...a,lod:i});o.push(s)}return o}function bt({width:e,height:t}){return 1+Math.floor(Math.log2(Math.max(e,t)))}var Be=n(()=>{l();R();b();be();he()});var De={};Oe(De,{ImageLoader:()=>ne,ImageWriter:()=>le,getBinaryImageMetadata:()=>y,getDefaultImageType:()=>B,getImageData:()=>A,getImageSize:()=>u,getImageType:()=>k,getSupportedImageFormats:()=>ue,isImage:()=>q,isImageFormatSupported:()=>ye,isImageTypeSupported:()=>T,loadImage:()=>Te});var Se=n(()=>{se();ce();E();F();b();j();j();Be()});var wt=Pe((Mr,Ee)=>{var It=(Se(),De);globalThis.loaders=globalThis.loaders||{};Ee.exports=Object.assign(globalThis.loaders,It)});wt();})();
//# sourceMappingURL=dist.min.js.map
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -9,3 +8,3 @@ value: true

var _version = require("./lib/utils/version");
var _parseImage = _interopRequireDefault(require("./lib/parsers/parse-image"));
var _parseImage = require("./lib/parsers/parse-image");
var _binaryImageApi = require("./lib/category-api/binary-image-api");

@@ -27,3 +26,3 @@ var EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg', 'avif'];

extensions: EXTENSIONS,
parse: _parseImage.default,
parse: _parseImage.parseImage,
tests: [function (arrayBuffer) {

@@ -30,0 +29,0 @@ return Boolean((0, _binaryImageApi.getBinaryImageMetadata)(new DataView(arrayBuffer)));

@@ -7,3 +7,3 @@ "use strict";

});
exports.default = parseImage;
exports.parseImage = parseImage;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));

@@ -14,5 +14,5 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));

var _parsedImageApi = require("../category-api/parsed-image-api");
var _parseToImage = _interopRequireDefault(require("./parse-to-image"));
var _parseToImageBitmap = _interopRequireDefault(require("./parse-to-image-bitmap"));
var _parseToNodeImage = _interopRequireDefault(require("./parse-to-node-image"));
var _parseToImage = require("./parse-to-image");
var _parseToImageBitmap = require("./parse-to-image-bitmap");
var _parseToNodeImage = require("./parse-to-node-image");
function parseImage(_x, _x2, _x3) {

@@ -37,3 +37,3 @@ return _parseImage.apply(this, arguments);

_context.next = 10;
return (0, _parseToImageBitmap.default)(arrayBuffer, options, url);
return (0, _parseToImageBitmap.parseToImageBitmap)(arrayBuffer, options, url);
case 10:

@@ -44,3 +44,3 @@ image = _context.sent;

_context.next = 14;
return (0, _parseToImage.default)(arrayBuffer, options, url);
return (0, _parseToImage.parseToImage)(arrayBuffer, options, url);
case 14:

@@ -51,3 +51,3 @@ image = _context.sent;

_context.next = 18;
return (0, _parseToNodeImage.default)(arrayBuffer, options);
return (0, _parseToNodeImage.parseToNodeImage)(arrayBuffer, options);
case 18:

@@ -54,0 +54,0 @@ image = _context.sent;

@@ -7,7 +7,7 @@ "use strict";

});
exports.default = parseToImageBitmap;
exports.parseToImageBitmap = parseToImageBitmap;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _svgUtils = require("./svg-utils");
var _parseToImage = _interopRequireDefault(require("./parse-to-image"));
var _parseToImage = require("./parse-to-image");
var EMPTY_OBJECT = {};

@@ -29,3 +29,3 @@ var imagebitmapOptionsSupported = true;

_context.next = 3;
return (0, _parseToImage.default)(arrayBuffer, options, url);
return (0, _parseToImage.parseToImage)(arrayBuffer, options, url);
case 3:

@@ -32,0 +32,0 @@ image = _context.sent;

@@ -7,4 +7,4 @@ "use strict";

});
exports.default = parseToImage;
exports.loadToImage = loadToImage;
exports.parseToImage = parseToImage;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));

@@ -11,0 +11,0 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));

@@ -7,3 +7,3 @@ "use strict";

});
exports.default = parseToNodeImage;
exports.parseToNodeImage = parseToNodeImage;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));

@@ -10,0 +10,0 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));

@@ -14,3 +14,3 @@ "use strict";

var _loaderUtils = require("@loaders.gl/loader-utils");
var _parseImage = _interopRequireDefault(require("../parsers/parse-image"));
var _parseImage = require("../parsers/parse-image");
var _parsedImageApi = require("../category-api/parsed-image-api");

@@ -38,3 +38,3 @@ var _generateUrl = require("./generate-url");

_context.next = 6;
return (0, _deepLoad.deepLoad)(imageUrls, _parseImage.default, options);
return (0, _deepLoad.deepLoad)(imageUrls, _parseImage.parseImage, options);
case 6:

@@ -103,3 +103,3 @@ return _context.abrupt("return", _context.sent);

_context3.next = 5;
return (0, _deepLoad.shallowLoad)(url, _parseImage.default, options);
return (0, _deepLoad.shallowLoad)(url, _parseImage.parseImage, options);
case 5:

@@ -106,0 +106,0 @@ image = _context3.sent;

@@ -7,4 +7,4 @@ "use strict";

exports.VERSION = void 0;
var VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
var VERSION = typeof "4.0.0-alpha.23" !== 'undefined' ? "4.0.0-alpha.23" : 'latest';
exports.VERSION = VERSION;
//# sourceMappingURL=version.js.map
import { VERSION } from './lib/utils/version';
import parseImage from './lib/parsers/parse-image';
import { parseImage } from './lib/parsers/parse-image';
import { getBinaryImageMetadata } from './lib/category-api/binary-image-api';

@@ -4,0 +4,0 @@ const EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg', 'avif'];

import { assert } from '@loaders.gl/loader-utils';
import { isImageTypeSupported, getDefaultImageType } from '../category-api/image-type';
import { getImageData } from '../category-api/parsed-image-api';
import parseToImage from './parse-to-image';
import parseToImageBitmap from './parse-to-image-bitmap';
import parseToNodeImage from './parse-to-node-image';
export default async function parseImage(arrayBuffer, options, context) {
import { parseToImage } from './parse-to-image';
import { parseToImageBitmap } from './parse-to-image-bitmap';
import { parseToNodeImage } from './parse-to-node-image';
export async function parseImage(arrayBuffer, options, context) {
options = options || {};

@@ -9,0 +9,0 @@ const imageOptions = options.image || {};

import { isSVG, getBlob } from './svg-utils';
import parseToImage from './parse-to-image';
import { parseToImage } from './parse-to-image';
const EMPTY_OBJECT = {};
let imagebitmapOptionsSupported = true;
export default async function parseToImageBitmap(arrayBuffer, options, url) {
export async function parseToImageBitmap(arrayBuffer, options, url) {
let blob;

@@ -7,0 +7,0 @@ if (isSVG(url)) {

import { getBlobOrSVGDataUrl } from './svg-utils';
export default async function parseToImage(arrayBuffer, options, url) {
export async function parseToImage(arrayBuffer, options, url) {
const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);

@@ -4,0 +4,0 @@ const URL = self.URL || self.webkitURL;

import { assert } from '@loaders.gl/loader-utils';
import { getBinaryImageMetadata } from '../category-api/binary-image-api';
export default async function parseToNodeImage(arrayBuffer, options) {
export async function parseToNodeImage(arrayBuffer, options) {
const {

@@ -5,0 +5,0 @@ mimeType

import { assert } from '@loaders.gl/loader-utils';
import parseImage from '../parsers/parse-image';
import { parseImage } from '../parsers/parse-image';
import { getImageSize } from '../category-api/parsed-image-api';

@@ -4,0 +4,0 @@ import { generateUrl } from './generate-url';

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

export const VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
export const VERSION = typeof "4.0.0-alpha.23" !== 'undefined' ? "4.0.0-alpha.23" : 'latest';
//# sourceMappingURL=version.js.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -9,3 +6,3 @@ exports.ImageLoader = void 0;

const version_1 = require("./lib/utils/version");
const parse_image_1 = __importDefault(require("./lib/parsers/parse-image"));
const parse_image_1 = require("./lib/parsers/parse-image");
const binary_image_api_1 = require("./lib/category-api/binary-image-api");

@@ -41,3 +38,3 @@ const EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg', 'avif'];

extensions: EXTENSIONS,
parse: parse_image_1.default,
parse: parse_image_1.parseImage,
// TODO: byteOffset, byteLength;

@@ -44,0 +41,0 @@ tests: [(arrayBuffer) => Boolean((0, binary_image_api_1.getBinaryImageMetadata)(new DataView(arrayBuffer)))],

import type { LoaderContext } from '@loaders.gl/loader-utils';
import type { ImageType } from '../../types';
import type { ImageLoaderOptions } from '../../image-loader';
export default function parseImage(arrayBuffer: ArrayBuffer, options?: ImageLoaderOptions, context?: LoaderContext): Promise<ImageType>;
export declare function parseImage(arrayBuffer: ArrayBuffer, options?: ImageLoaderOptions, context?: LoaderContext): Promise<ImageType>;
//# sourceMappingURL=parse-image.d.ts.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseImage = void 0;
const loader_utils_1 = require("@loaders.gl/loader-utils");
const image_type_1 = require("../category-api/image-type");
const parsed_image_api_1 = require("../category-api/parsed-image-api");
const parse_to_image_1 = __importDefault(require("./parse-to-image"));
const parse_to_image_bitmap_1 = __importDefault(require("./parse-to-image-bitmap"));
const parse_to_node_image_1 = __importDefault(require("./parse-to-node-image"));
const parse_to_image_1 = require("./parse-to-image");
const parse_to_image_bitmap_1 = require("./parse-to-image-bitmap");
const parse_to_node_image_1 = require("./parse-to-node-image");
// Parse to platform defined image type (data on node, ImageBitmap or HTMLImage on browser)

@@ -25,10 +23,10 @@ // eslint-disable-next-line complexity

case 'imagebitmap':
image = await (0, parse_to_image_bitmap_1.default)(arrayBuffer, options, url);
image = await (0, parse_to_image_bitmap_1.parseToImageBitmap)(arrayBuffer, options, url);
break;
case 'image':
image = await (0, parse_to_image_1.default)(arrayBuffer, options, url);
image = await (0, parse_to_image_1.parseToImage)(arrayBuffer, options, url);
break;
case 'data':
// Node.js loads imagedata directly
image = await (0, parse_to_node_image_1.default)(arrayBuffer, options);
image = await (0, parse_to_node_image_1.parseToNodeImage)(arrayBuffer, options);
break;

@@ -44,3 +42,3 @@ default:

}
exports.default = parseImage;
exports.parseImage = parseImage;
// Get a loadable image type from image type

@@ -47,0 +45,0 @@ function getLoadableImageType(type) {

@@ -9,3 +9,3 @@ import type { ImageLoaderOptions } from '../../image-loader';

*/
export default function parseToImageBitmap(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions, url?: string): Promise<ImageBitmap>;
export declare function parseToImageBitmap(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions, url?: string): Promise<ImageBitmap>;
//# sourceMappingURL=parse-to-image-bitmap.d.ts.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseToImageBitmap = void 0;
const svg_utils_1 = require("./svg-utils");
const parse_to_image_1 = __importDefault(require("./parse-to-image"));
const parse_to_image_1 = require("./parse-to-image");
const EMPTY_OBJECT = {};

@@ -22,3 +20,3 @@ let imagebitmapOptionsSupported = true;

// Note: this only works on main thread
const image = await (0, parse_to_image_1.default)(arrayBuffer, options, url);
const image = await (0, parse_to_image_1.parseToImage)(arrayBuffer, options, url);
blob = image;

@@ -33,3 +31,3 @@ }

}
exports.default = parseToImageBitmap;
exports.parseToImageBitmap = parseToImageBitmap;
/**

@@ -36,0 +34,0 @@ * Safely creates an imageBitmap with options

import type { ImageLoaderOptions } from '../../image-loader';
export default function parseToImage(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions, url?: string): Promise<HTMLImageElement>;
export declare function parseToImage(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions, url?: string): Promise<HTMLImageElement>;
export declare function loadToImage(url: any, options: any): Promise<HTMLImageElement>;
//# sourceMappingURL=parse-to-image.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadToImage = void 0;
exports.loadToImage = exports.parseToImage = void 0;
const svg_utils_1 = require("./svg-utils");

@@ -22,3 +22,3 @@ // Parses html image from array buffer

}
exports.default = parseToImage;
exports.parseToImage = parseToImage;
async function loadToImage(url, options) {

@@ -25,0 +25,0 @@ const image = new Image();

import type { ImageLoaderOptions } from '../../image-loader';
import type { ImageDataType } from '../../types';
export default function parseToNodeImage(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions): Promise<ImageDataType>;
export declare function parseToNodeImage(arrayBuffer: ArrayBuffer, options: ImageLoaderOptions): Promise<ImageDataType>;
//# sourceMappingURL=parse-to-node-image.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseToNodeImage = void 0;
const loader_utils_1 = require("@loaders.gl/loader-utils");

@@ -14,2 +15,2 @@ const binary_image_api_1 = require("../category-api/binary-image-api");

}
exports.default = parseToNodeImage;
exports.parseToNodeImage = parseToNodeImage;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMipLevels = exports.getImageUrls = exports.loadImage = void 0;
const loader_utils_1 = require("@loaders.gl/loader-utils");
const parse_image_1 = __importDefault(require("../parsers/parse-image"));
const parse_image_1 = require("../parsers/parse-image");
const parsed_image_api_1 = require("../category-api/parsed-image-api");

@@ -14,3 +11,3 @@ const generate_url_1 = require("./generate-url");

const imageUrls = await getImageUrls(getUrl, options);
return await (0, deep_load_1.deepLoad)(imageUrls, parse_image_1.default, options);
return await (0, deep_load_1.deepLoad)(imageUrls, parse_image_1.parseImage, options);
}

@@ -30,3 +27,3 @@ exports.loadImage = loadImage;

const url = (0, generate_url_1.generateUrl)(getUrl, options, { ...urlOptions, lod: 0 });
const image = await (0, deep_load_1.shallowLoad)(url, parse_image_1.default, options);
const image = await (0, deep_load_1.shallowLoad)(url, parse_image_1.parseImage, options);
const { width, height } = (0, parsed_image_api_1.getImageSize)(image);

@@ -33,0 +30,0 @@ mipLevels = getMipLevels({ width, height });

{
"name": "@loaders.gl/images",
"version": "4.0.0-alpha.22",
"version": "4.0.0-alpha.23",
"description": "Framework-independent loaders and writers for images (PNG, JPG, ...)",

@@ -35,5 +35,5 @@ "license": "MIT",

"dependencies": {
"@loaders.gl/loader-utils": "4.0.0-alpha.22"
"@loaders.gl/loader-utils": "4.0.0-alpha.23"
},
"gitHead": "0da838c506d1275383f2fd3d244d9c72b25397d2",
"gitHead": "e212f2a0c0e342f7cb65ce84fa2ff39f64b7d94b",
"devDependencies": {

@@ -40,0 +40,0 @@ "@types/get-pixels": "^3.3.2"

@@ -5,3 +5,3 @@ import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';

import {VERSION} from './lib/utils/version';
import parseImage from './lib/parsers/parse-image';
import {parseImage} from './lib/parsers/parse-image';
import {getBinaryImageMetadata} from './lib/category-api/binary-image-api';

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

@@ -7,9 +7,9 @@ import type {LoaderContext} from '@loaders.gl/loader-utils';

import {getImageData} from '../category-api/parsed-image-api';
import parseToImage from './parse-to-image';
import parseToImageBitmap from './parse-to-image-bitmap';
import parseToNodeImage from './parse-to-node-image';
import {parseToImage} from './parse-to-image';
import {parseToImageBitmap} from './parse-to-image-bitmap';
import {parseToNodeImage} from './parse-to-node-image';
// Parse to platform defined image type (data on node, ImageBitmap or HTMLImage on browser)
// eslint-disable-next-line complexity
export default async function parseImage(
export async function parseImage(
arrayBuffer: ArrayBuffer,

@@ -16,0 +16,0 @@ options?: ImageLoaderOptions,

import type {ImageLoaderOptions} from '../../image-loader';
import {isSVG, getBlob} from './svg-utils';
import parseToImage from './parse-to-image';
import {parseToImage} from './parse-to-image';

@@ -16,3 +16,3 @@ const EMPTY_OBJECT = {};

*/
export default async function parseToImageBitmap(
export async function parseToImageBitmap(
arrayBuffer: ArrayBuffer,

@@ -19,0 +19,0 @@ options: ImageLoaderOptions,

@@ -5,3 +5,3 @@ import type {ImageLoaderOptions} from '../../image-loader';

// Parses html image from array buffer
export default async function parseToImage(
export async function parseToImage(
arrayBuffer: ArrayBuffer,

@@ -8,0 +8,0 @@ options: ImageLoaderOptions,

@@ -20,3 +20,3 @@ import type {ImageLoaderOptions} from '../../image-loader';

// Use polyfills if installed to parsed image using get-pixels
export default async function parseToNodeImage(
export async function parseToNodeImage(
arrayBuffer: ArrayBuffer,

@@ -23,0 +23,0 @@ options: ImageLoaderOptions

import {assert} from '@loaders.gl/loader-utils';
import parseImage from '../parsers/parse-image';
import {parseImage} from '../parsers/parse-image';
import {getImageSize} from '../category-api/parsed-image-api';

@@ -4,0 +4,0 @@ import {generateUrl} from './generate-url';

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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