UNPKG

storybook-addon-useragent

Version:
2 lines 5.59 kB
import {useState,useMemo,useEffect}from'@storybook/preview-api';var O="userAgent";var i={WINDOWS:"Windows",MACINTOSH:"Macintosh",LINUX:"Linux",ANDROID:"Android",IOS:"iOS"},s={X64:"x64",X86:"x86",ARM64:"arm64",ARM:"arm"},f={Chrome:"Chrome",Chromium:"Chromium",Edge:"Edge",Brave:"Brave",Opera:"Opera",Firefox:"Firefox",Safari:"Safari","Internet Explorer":"Internet Explorer"},o={MOBILE:/Mobile|Android|iPhone|iPad|iPod/i,PLATFORM:/Windows|Macintosh|Linux|Android|iPhone|iPad|iPod/i,ARCH_INFO:/\((.*?)\)/,DEVICE_MODEL:{APPLE:/iPhone|iPad|iPod|MacBook|MacBook Pro|MacBook Air|iMac|Mac Pro/i,MOBILE:/Android|Windows Phone|BlackBerry|Nexus|Pixel|Galaxy/i,PHONE_BRANDS:/Xiaomi|Huawei|Sony|LG|OnePlus|OPPO|vivo|Realme|Motorola/i,PC_BRANDS:/Lenovo|Asus|Acer|Dell|HP|Surface/i},BROWSER:/(Chrome|Chromium|Edge|Brave|Opera)\/(\d+\.\d+)|(Firefox)\/(\d+\.\d+)|(Version)\/(\d+\.\d+).*Safari|(MSIE|Trident)\/(\d+\.\d+)/i,PLATFORM_VERSION:{WINDOWS:/Windows NT (\d+\.\d+)/i,MACOS:/Mac OS X (\d+[._]\d+(?:[._]\d+)?)/i,IOS:/iPhone OS (\d+[._]\d+(?:[._]\d+)?)/i,ANDROID:/Android (\d+(?:\.\d+(?:\.\d+)?)?)/i},BITNESS:{WIN64:/Win64|x64|WOW64/i,X86_64:/x86_64/i,ARM64:/aarch64/i,I686:/i686|i386/i,ARM32:/armv\d+[^6]/i}};function l(e){let r=e.match(o.PLATFORM);if(!r)return;let t=r[0];if(/Windows/i.test(t))return i.WINDOWS;if(/Macintosh/i.test(t))return i.MACINTOSH;if(/Linux/i.test(t))return i.LINUX;if(/Android/i.test(t))return i.ANDROID;if(/iPhone|iPad|iPod/i.test(t))return i.IOS}function A(e,r){if(r||(r=l(e)),!r)return;let t;switch(r){case i.WINDOWS:return t=e.match(o.PLATFORM_VERSION.WINDOWS),t?.[1];case i.MACINTOSH:return t=e.match(o.PLATFORM_VERSION.MACOS),t?.[1]?t[1].replace(/_/g,"."):void 0;case i.IOS:return t=e.match(o.PLATFORM_VERSION.IOS),t?.[1]?t[1].replace(/_/g,"."):void 0;case i.ANDROID:return t=e.match(o.PLATFORM_VERSION.ANDROID),t?.[1];default:return}}function h(e){if(o.BITNESS.WIN64.test(e)||o.BITNESS.X86_64.test(e)||o.BITNESS.ARM64.test(e))return "64";if(o.BITNESS.I686.test(e)||o.BITNESS.ARM32.test(e))return "32";let r=l(e);if(r===i.MACINTOSH||r===i.IOS)return "64";if(r===i.ANDROID){let t=A(e,r);if(t)return parseInt(t.split(".")[0],10)>=5?"64":"32"}}function R(e){let r=o.ARCH_INFO.exec(e);if(!r?.[1])return;let t=r[1];if(t.includes(s.X64))return s.X64;if(t.includes(s.X86))return s.X86;if(t.includes(s.ARM64))return s.ARM64;if(t.includes(s.ARM))return s.ARM}function S(e){for(let r of Object.values(o.DEVICE_MODEL)){let t=r.exec(e);if(t?.[0])return t[0]}}function I(e){return l(e)!==i.WINDOWS?false:/WOW64/i.test(e)}function W(e){return e in f}function L(e){let r=[],t=e.match(o.BROWSER);if(!t)return r;if(t[1]&&t[2]){let n=t[1],a=t[2];W(n)?r.push({brand:f[n],version:a}):r.push({brand:"Chromium",version:a});}return t[3]&&t[4]&&r.push({brand:f.Firefox,version:t[4]}),t[5]&&t[6]&&r.push({brand:f.Safari,version:t[6]}),t[7]&&t[8]&&r.push({brand:f["Internet Explorer"],version:t[8]}),r}async function m(e){let r=L(e),t=o.MOBILE.test(e),n=l(e),a=R(e),w=S(e),d=A(e,n),c=h(e),B=I(e),u={userAgent:e,mobile:t,platform:n,architecture:a,model:w,platformVersion:d||"0",bitness:c||"64",wow64:B};return r&&r.length>0?(u.brands=r,u.fullVersionList=r):(u.brands=[],u.fullVersionList=[]),u}var p=typeof window<"u"?window.navigator.userAgent:"",y=typeof window<"u"?window.navigator.userAgent:"",P;typeof window<"u"&&(P=window.navigator,(async()=>{try{let e=await m(y);window.navigator.userAgentData&&E(e);}catch(e){console.warn("Failed to initialize consistent userAgentData:",e);}})());function E(e){if(!(typeof window>"u"||!window.navigator.userAgentData))try{let r={...window.navigator.userAgentData,...e,getHighEntropyValues:async()=>e},t=new Proxy(window.navigator,{get(n,a){return a==="userAgentData"?r:Reflect.get(n,a)}});if(window.Navigator&&typeof window.Navigator=="function")try{Object.defineProperty(window,"navigator",{value:t,configurable:!0,writable:!0});}catch(n){console.warn("Unable to replace navigator object with proxy:",n);}}catch(r){console.warn("Failed to set userAgentData safely:",r);}}async function g(e){if(!(typeof window>"u"))try{let r=new Proxy(window.navigator,{get(t,n){return n==="userAgent"?e:Reflect.get(t,n)}});if(window.Navigator&&typeof window.Navigator=="function")try{Object.defineProperty(window,"navigator",{value:r,configurable:!0,writable:!0});}catch(t){console.warn("Unable to replace navigator object with proxy:",t);try{Object.defineProperty(window.navigator,"userAgent",{get:()=>e,configurable:!0});}catch(n){console.warn("All UA spoofing methods failed:",n);}}if(window.navigator.userAgentData){let t=await m(e);E(t);}}catch(r){console.warn("Failed to update userAgent safely:",r);}}async function M(e){if(typeof window>"u")return async()=>{};try{return e?(p=e,await g(e),async()=>{try{P?Object.defineProperty(window,"navigator",{value:P,configurable:!0,writable:!0}):await g(p);}catch(r){console.warn("Failed to restore original navigator:",r),await g(p);}}):(p=y,await g(y),async()=>{})}catch(r){return console.warn("Error in userAgent setting process:",r),async()=>{}}}function x(e){return e?.useragent||""}var v=M,D=x;function b(e,r){let[t,n]=useState(false),a=useMemo(()=>D(r.args),[r.args?.useragent]),w=useMemo(()=>r.id,[r.id]);return useEffect(()=>{let d=()=>{};return (async()=>{try{n(!1),d=await v(a),n(!0);}catch(c){console.error("Failed to set user agent:",c),n(true);}})(),()=>{d instanceof Promise?d.catch(c=>console.error("Error during cleanup:",c)):d(),n(false);}},[a,w]),a&&!t?null:e()}var _={decorators:[b],initialGlobals:{[O]:false}},de=_;export{de as default};//# sourceMappingURL=preview.js.map //# sourceMappingURL=preview.js.map