import { BrowserEnum, DeviceEnum, OSEnum } from '#lib/enums' import type { DeviceHeader } from '#lib/types' import { useClipboard } from '@vueuse/core' import { useDevice } from '#imports' export const toMessage = (errorMessage: string) => { try { const messageObj = JSON.parse(errorMessage) return Object.keys(messageObj) .map((key) => messageObj[key]) .join('\n') // eslint-disable-next-line @typescript-eslint/no-unused-vars } catch (ex) { return errorMessage } } export const removeQueryParam = (url: string, param: string): string => { const urlObj = new URL(url) const params = new URLSearchParams(urlObj.search) params.delete(param) urlObj.search = params.toString() return urlObj.toString() } export const getQueryParamObjectFromURL = (url: string) => { const urlObj = new URL(url) const params = new URLSearchParams(urlObj.search) return Object.fromEntries(params) } export const getQueryParamObjectFromPath = (path: string) => { const params: Record = {} const queryString = path.split('?')[1] if (queryString) { const pairs = queryString.split('&') for (const pair of pairs) { const [key, value] = pair.split('=') params[decodeURIComponent(key)] = decodeURIComponent(value) } } return params } const OS_MAP = { [1 << 5]: OSEnum.IOS, [1 << 4]: OSEnum.ANDROID, [1 << 3]: OSEnum.WINDOWS, [1 << 2]: OSEnum.MACOS, [1 << 1]: OSEnum.APPLE, } const DEVICE_MAP = { [1 << 3]: DeviceEnum.MOBILE, [1 << 2]: DeviceEnum.MOBILE, [1 << 1]: DeviceEnum.DESKTOP, } const BROWSER_MAP = { [1 << 5]: BrowserEnum.SAFARI, [1 << 4]: BrowserEnum.FIREFOX, [1 << 3]: BrowserEnum.EDGE, [1 << 2]: BrowserEnum.CHROME, [1 << 1]: BrowserEnum.SAMSUNG, } export const getDeviceHeaders = (): DeviceHeader => { const deviceHeaders = { os: 'os', device: 'device', browser: 'browser' } try { const { isIos, isAndroid, isWindows, isMacOS, isApple, isMobile, isTablet, isDesktop, isSafari, isFirefox, isEdge, isChrome, isSamsung, } = useDevice() const osIndex = Math.max( Number(isIos) << 5, Number(isAndroid) << 4, Number(isWindows) << 3, Number(isMacOS) << 2, Number(isApple) << 1, ) const deviceIndex = Math.max( Number(isMobile) << 3, Number(isTablet) << 2, Number(isDesktop) << 1, ) const browserIndex = Math.max( Number(isSafari) << 5, Number(isFirefox) << 4, Number(isEdge) << 3, Number(isChrome) << 2, Number(isSamsung) << 1, ) deviceHeaders.os = OS_MAP[osIndex] deviceHeaders.device = DEVICE_MAP[deviceIndex] deviceHeaders.browser = BROWSER_MAP[browserIndex] } catch { // } return deviceHeaders } export const isValidURL = (text: string): boolean => { try { new URL(text) return true } catch { return false } } export const sleep = async (time: number): Promise => { return await new Promise((resolve) => setTimeout(resolve, time)) } const { copy } = useClipboard() export const onCopy = async (value: string): Promise => { await copy(value) }