UNPKG

@pivanov/utils

Version:

A focused collection of TypeScript utilities for modern web development

8 lines (7 loc) 9.8 kB
/*! * @pivanov/utils v1.0.0 * (c) 2024-present Pavel Ivanov * Released under the MIT License. * https://github.com/pivanov/utils */ var{defineProperty:V,getOwnPropertyNames:c,getOwnPropertyDescriptor:r}=Object,n=Object.prototype.hasOwnProperty;var u=new WeakMap,o=(J)=>{var Q=u.get(J),X;if(Q)return Q;if(Q=V({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function")c(J).map((Y)=>!n.call(Q,Y)&&V(Q,Y,{get:()=>J[Y],enumerable:!(X=r(J,Y))||X.enumerable}));return u.set(J,Q),Q};var i=(J,Q)=>{for(var X in Q)V(J,X,{get:Q[X],enumerable:!0,configurable:!0,set:(Y)=>Q[X]=()=>Y})};var TJ={};i(TJ,{useEventBus:()=>EJ,stringifyBigIntValues:()=>k,storageSetItemWithTTL:()=>s,storageSetItem:()=>p,storageRemoveItem:()=>y,storageGetItemWithTTL:()=>a,storageGetItem:()=>h,storageGetAllKeys:()=>YJ,storageExists:()=>XJ,storageClearBySuffix:()=>QJ,storageClearByPrefixOrSuffix:()=>w,storageClearByPrefix:()=>JJ,storageClear:()=>e,storageCalculateSize:()=>ZJ,setStyleProperties:()=>GJ,isInViewport:()=>MJ,isEqual:()=>IJ,isBrowser:()=>$J,deepClone:()=>_J,checkVisibility:()=>FJ,calculateRenderedTextWidth:()=>RJ,busSubscribe:()=>K,busOnce:()=>HJ,busDispatch:()=>AJ,__resetTextMeasurementCache:()=>BJ});module.exports=o(TJ);var k=(J,Q)=>{return typeof Q==="bigint"?Q.toString():Q},P=(J)=>{if(J.startsWith("http://")||J.startsWith("https://"))return J;return`https://cache.internal/${J}`},p=async(J,Q,X)=>{let Y=await caches.open(J),$=JSON.stringify(X,k),U=new Response($,{headers:{"Content-Type":"application/json"}}),G=P(Q);await Y.put(new Request(G),U)},h=async(J,Q)=>{let X=await caches.open(J),Y=P(Q),$=await X.match(new Request(Y));if(!$)return null;let U=await $.text();return JSON.parse(U)},t=(J)=>{return typeof J==="object"&&J!==null&&J.__ttl===!0&&typeof J.exp==="number"},s=async(J,Q,X,Y)=>{let $={__ttl:!0,v:X,exp:Date.now()+Y};await p(J,Q,$)},a=async(J,Q)=>{let X=await h(J,Q);if(!t(X))return null;if(Date.now()>=X.exp)return await y(J,Q),null;return X.v},y=async(J,Q)=>{let X=await caches.open(J),Y=P(Q);return X.delete(new Request(Y))},e=async(J)=>{let Q=await caches.open(J),X=await Q.keys();for(let Y of X)await Q.delete(Y)},w=async(J,Q,X=!0)=>{let Y=await caches.open(J),$=await Y.keys();for(let U of $){let G=U.url.split("/"),W=G[G.length-1]||"";if(X&&W.startsWith(Q)||!X&&W.endsWith(Q))await Y.delete(U)}},JJ=async(J,Q)=>{await w(J,Q,!0)},QJ=async(J,Q)=>{await w(J,Q,!1)},XJ=async(J,Q)=>{let X=await caches.open(J),Y=P(Q);return await X.match(new Request(Y))!==void 0},YJ=async(J)=>{return(await(await caches.open(J)).keys()).map((Y)=>{let $=Y.url.split("/");return $[$.length-1]||""})},ZJ=async(J,Q)=>{let X=await caches.open(J);if(Q){let U=P(Q),G=await X.match(new Request(U));if(G)return(await G.clone().arrayBuffer()).byteLength;return 0}let Y=await X.keys(),$=0;for(let U of Y){let G=await X.match(U);if(G){let W=await G.clone().arrayBuffer();$+=W.byteLength}}return $};var _J=(J)=>{return M(J,new WeakMap)},M=(J,Q)=>{if(J===null||typeof J!=="object")return J;let X=Q.get(J);if(X)return X;if(Array.isArray(J)){let Z=J.length;if(Z<32){let _=Array(Z);Q.set(J,_);for(let B=0;B<Z;B++)if(B in J)_[B]=M(J[B],Q);return _}let F=Array(Z);if(Q.set(J,F),Object.keys(J).length===Z){let _=0,B=Z%8,O=Z-B;while(_<O)F[_]=M(J[_],Q),F[_+1]=M(J[_+1],Q),F[_+2]=M(J[_+2],Q),F[_+3]=M(J[_+3],Q),F[_+4]=M(J[_+4],Q),F[_+5]=M(J[_+5],Q),F[_+6]=M(J[_+6],Q),F[_+7]=M(J[_+7],Q),_+=8;while(_<Z)F[_]=M(J[_],Q),_++}else for(let _=0;_<Z;_++)if(_ in J)F[_]=M(J[_],Q);return F}if(J instanceof Date||J instanceof RegExp)return new J.constructor(J);if(typeof Buffer<"u")try{if(Buffer.isBuffer(J))return Buffer.from(J)}catch(Z){if(Z instanceof Error)throw Z}if(ArrayBuffer.isView(J)){let Z=J.constructor;if("buffer"in J){let _=J,B=_.buffer.slice(_.byteOffset,_.byteOffset+_.byteLength);return new Z(B)}return new Z(new ArrayBuffer(J.byteLength))}if(J instanceof ArrayBuffer)return J.slice(0);if(J&&typeof J==="object"&&"buffer"in J&&"byteLength"in J){let Z=J;if(typeof Buffer>"u"){let _=new Uint8Array(Z.buffer,Z.byteOffset||0,Z.byteLength),B=new Uint8Array(_.length);return B.set(_),B}return{buffer:Z.buffer instanceof ArrayBuffer?Z.buffer.slice(0):new ArrayBuffer(Z.byteLength),byteLength:Z.byteLength,byteOffset:Z.byteOffset||0,length:Z.length||Z.byteLength,BYTES_PER_ELEMENT:Z.BYTES_PER_ELEMENT||1}}if(J instanceof Set){let Z=new Set;Q.set(J,Z);let F=Array.from(J),_=F.length;for(let B=0;B<_;B++)Z.add(M(F[B],Q));return Z}if(J instanceof Map){let Z=new Map;Q.set(J,Z);let F=Array.from(J),_=F.length;for(let B=0;B<_;B++){let[O,I]=F[B];Z.set(O,M(I,Q))}return Z}if(Object.getPrototypeOf(J)===Object.prototype){let Z={};Q.set(J,Z);let F=Object.getOwnPropertySymbols(J),_=F.length;if(_>0)for(let R=0;R<_;R++){let A=F[R],H=Object.getOwnPropertyDescriptor(J,A);if(H?.enumerable)Object.defineProperty(Z,A,H)}let B=Object.getOwnPropertyDescriptors(J),O=Object.keys(J),I=O.length,N=!1;for(let R=0;R<I;R++){let A=B[O[R]];if(A.get||A.set){N=!0;break}}if(N)for(let R=0;R<I;R++){let A=O[R],H=B[A];if(H.enumerable)if(H.get||H.set)Object.defineProperty(Z,A,H);else{let T=M(H.value,Q);Object.defineProperty(Z,A,{...H,value:T})}}else{let R=0,A=I%8,H=I-A;while(R<H){let T=O[R],x=O[R+1],f=O[R+2],v=O[R+3],g=O[R+4],C=O[R+5],m=O[R+6],d=O[R+7],E=J;Z[T]=M(E[T],Q),Z[x]=M(E[x],Q),Z[f]=M(E[f],Q),Z[v]=M(E[v],Q),Z[g]=M(E[g],Q),Z[C]=M(E[C],Q),Z[m]=M(E[m],Q),Z[d]=M(E[d],Q),R+=8}while(R<I){let T=O[R++];Z[T]=M(J[T],Q)}}return Z}let Y=Object.getPrototypeOf(J),$=Object.create(Y);Q.set(J,$);let U=Object.getOwnPropertyDescriptors(J),G=Object.keys(U),W=G.length;for(let Z=0;Z<W;Z++){let F=G[Z],_=U[F];if(!_.enumerable)continue;if(_.get||_.set)Object.defineProperty($,F,_);else{let B=M(_.value,Q);Object.defineProperty($,F,{..._,value:B})}}let q=Object.getOwnPropertySymbols(J),L=q.length;for(let Z=0;Z<L;Z++){let F=q[Z],_=Object.getOwnPropertyDescriptor(J,F);if(!_?.enumerable)continue;Object.defineProperty($,F,_)}return $};var $J=()=>{return typeof window<"u"&&typeof document<"u"},GJ=(J,Q)=>{if(!J)return;for(let[X,Y]of Object.entries(Q))J.style.setProperty(X,Y)},FJ=(J,Q={})=>{let{checkViewport:X=!0,checkDisplay:Y=!0,checkVisibility:$=!0,checkOpacity:U=!0}=Q;if(!J.isConnected)return!1;if(Y||$||U){let G=window.getComputedStyle(J);if(Y&&G.display==="none")return!1;if($&&G.visibility!==""&&G.visibility!=="visible")return!1;if(U&&G.opacity!==""){let W=Number.parseFloat(G.opacity);if(!Number.isNaN(W)&&W===0)return!1}}if(X){let G=J.getBoundingClientRect();if(G.width!==0||G.height!==0){let W=window.innerHeight||document.documentElement.clientHeight,q=window.innerWidth||document.documentElement.clientWidth,L=G.bottom<=0||G.top>=W,Z=G.right<=0||G.left>=q;if(L||Z)return!1}}return!0};var D,z,UJ=()=>{if(z!==void 0)return z;if(typeof document>"u")return z=null,null;return D=document.createElement("canvas"),z=D.getContext("2d"),z},BJ=()=>{D=void 0,z=void 0},MJ=(J,Q={})=>{let{vertical:X=!0,horizontal:Y=!0}=Q,$=J.getBoundingClientRect();if($.width===0&&$.height===0)return!0;let U=window.innerHeight||document.documentElement.clientHeight,G=window.innerWidth||document.documentElement.clientWidth;if(X&&($.bottom<=0||$.top>=U))return!1;if(Y&&($.right<=0||$.left>=G))return!1;return!0},RJ=(J,Q,X=!1,Y='Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"')=>{let $=UJ();if(!$)return 0;let U=X?J.toUpperCase():J;return $.font=`${Q}px ${Y}`,$.measureText(U).width};var OJ=(J,Q="\uD83D\uDE80")=>{let X=0,Y=J+Q;for(let $=0;$<Y.length;$++){let U=Y.charCodeAt($);X=(X<<5)-X+U,X|=0}return(X>>>0).toString(16)},j=(J)=>{return`${OJ(J)}::${J}`},WJ=(J,Q)=>{return(X)=>{if(!(X instanceof CustomEvent))return;try{J(X.detail)}catch(Y){if(Q)Q(Y);else console.error("Event listener error:",Y)}}},AJ=(J,Q)=>{if(!J)return;let X=j(J);window.dispatchEvent(new CustomEvent(X,{detail:Q,bubbles:!0,cancelable:!1}))},K=(J,Q,X={})=>{if(!J||typeof Q!=="function")return()=>{};let Y=WJ(Q,X.onError),$=j(J);return window.addEventListener($,Y),()=>window.removeEventListener($,Y)},HJ=(J,Q,X={})=>{if(!J||typeof Q!=="function")return()=>{};let Y=K(J,($)=>{Y(),Q($)},X);return Y};var l=require("react");var EJ=(J,Q,X=[])=>{l.useEffect(()=>{if(!J||typeof Q!=="function")return;return K(J,Q)},[J,Q,...X])};var IJ=(J,Q)=>{return S(J,Q,new WeakMap)},S=(J,Q,X)=>{if(Object.is(J,Q))return!0;if(J instanceof Date&&Q instanceof Date)return J.getTime()===Q.getTime();if(J instanceof RegExp&&Q instanceof RegExp)return J.source===Q.source&&J.flags===Q.flags;if(J instanceof Error&&Q instanceof Error)return J.name===Q.name&&J.message===Q.message;if(J instanceof ArrayBuffer&&Q instanceof ArrayBuffer){if(J.byteLength!==Q.byteLength)return!1;return b(new Uint8Array(J),new Uint8Array(Q))}if(ArrayBuffer.isView(J)&&ArrayBuffer.isView(Q)){if(J.constructor!==Q.constructor)return!1;if(J.byteLength!==Q.byteLength)return!1;let Y=new Uint8Array(J.buffer,J.byteOffset,J.byteLength),$=new Uint8Array(Q.buffer,Q.byteOffset,Q.byteLength);return b(Y,$)}if(typeof J==="object"&&J!==null&&typeof Q==="object"&&Q!==null){let Y=X.get(J);if(Y?.has(Q))return!0;if(Y)Y.add(Q);else X.set(J,new WeakSet([Q]))}if(Array.isArray(J)&&Array.isArray(Q)){if(J.length!==Q.length)return!1;for(let Y=0;Y<J.length;Y++)if(!S(J[Y],Q[Y],X))return!1;return!0}if(J instanceof Set&&Q instanceof Set){if(J.size!==Q.size)return!1;let Y=Array.from(Q);for(let $ of J){let U=Y.findIndex((G)=>S($,G,X));if(U===-1)return!1;Y.splice(U,1)}return!0}if(J instanceof Map&&Q instanceof Map){if(J.size!==Q.size)return!1;for(let[Y,$]of J)if(!Q.has(Y)||!S($,Q.get(Y),X))return!1;return!0}if(J!==null&&typeof J==="object"&&Q!==null&&typeof Q==="object"){let Y=J,$=Q,U=Object.keys(Y);if(U.length!==Object.keys($).length)return!1;for(let G of U)if(!S(Y[G],$[G],X))return!1;return!0}return!1},b=(J,Q)=>{for(let X=0;X<J.length;X++)if(J[X]!==Q[X])return!1;return!0};