UNPKG

25.3 kBSource Map (JSON)View Raw
1{"version":3,"file":"agent.cjs.js","sources":["../src/utils.ts","../src/presets.ts","../src/userAgentData.ts","../src/userAgent.ts","../src/agent.ts","../src/index.umd.ts"],"sourcesContent":["import { PresetInfo, PresetResult, NavigatorUABrandVersion } from \"./types\";\n\nexport function some<T>(arr: T[], callback: (value: T, index: number) => any): boolean {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return true;\n }\n }\n\n return false;\n}\nexport function find<T>(arr: T[], callback: (value: T, index: number) => any): T | null {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return arr[i];\n }\n }\n return null;\n}\nexport function getUserAgent(agent?: string): string {\n let userAgent = agent;\n if (typeof userAgent === \"undefined\") {\n if (typeof navigator === \"undefined\" || !navigator) {\n return \"\";\n }\n\n userAgent = navigator.userAgent || \"\";\n }\n return userAgent!.toLowerCase();\n}\nexport function execRegExp(pattern: string, text: string): RegExpExecArray | null {\n try {\n return new RegExp(pattern, \"g\").exec(text);\n } catch (e) {\n return null;\n }\n}\nexport function hasUserAgentData(): boolean {\n if (typeof navigator === \"undefined\" || !navigator || !navigator.userAgentData) {\n return false;\n }\n const userAgentData = navigator.userAgentData;\n const brands = (userAgentData.brands || userAgentData.uaList);\n\n return !!(brands && brands.length);\n}\nexport function findVersion(versionTest: string, userAgent: string): string {\n const result = execRegExp(`(${versionTest})((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))`, userAgent);\n\n return result ? result[3] : \"\";\n}\nexport function convertVersion(text: string): string {\n return text.replace(/_/g, \".\");\n}\nexport function findPreset(presets: PresetInfo[], userAgent: string): PresetResult {\n let userPreset: PresetInfo | null = null;\n let version = \"-1\";\n\n some(presets, preset => {\n const result = execRegExp(`(${preset.test})((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?`, userAgent);\n\n if (!result || preset.brand) {\n return false;\n }\n userPreset = preset;\n version = result[3] || \"-1\";\n\n if (preset.versionAlias) {\n version = preset.versionAlias;\n } else if (preset.versionTest) {\n version = findVersion(preset.versionTest.toLowerCase(), userAgent) || version;\n }\n version = convertVersion(version);\n return true;\n });\n\n return {\n preset: userPreset,\n version,\n };\n}\nexport function findPresetBrand(presets: PresetInfo[], brands: NavigatorUABrandVersion[]): NavigatorUABrandVersion {\n const brandInfo = {\n brand: \"\",\n version: \"-1\",\n };\n some(presets, preset => {\n const result = findBrand(brands, preset);\n\n if (!result) {\n return false;\n }\n\n brandInfo.brand = preset.id;\n brandInfo.version = preset.versionAlias || result.version;\n\n return brandInfo.version !== \"-1\";\n });\n\n return brandInfo;\n}\nexport function findBrand(brands: NavigatorUABrandVersion[], preset: PresetInfo): NavigatorUABrandVersion | null {\n return find(brands, ({ brand }) => {\n return execRegExp(`${preset.test}`, brand.toLowerCase());\n });\n}\n","import { PresetInfo } from \"./types\";\n\nexport const BROWSER_PRESETS: PresetInfo[] = [\n {\n test: \"phantomjs\",\n id: \"phantomjs\",\n },\n {\n test: \"whale\",\n id: \"whale\",\n }, {\n test: \"edgios|edge|edg\",\n id: \"edge\",\n },\n {\n test: \"msie|trident|windows phone\",\n id: \"ie\",\n versionTest: \"iemobile|msie|rv\",\n },\n {\n test: \"miuibrowser\",\n id: \"miui browser\",\n },\n {\n test: \"samsungbrowser\",\n id: \"samsung internet\",\n },\n {\n test: \"samsung\",\n id: \"samsung internet\",\n versionTest: \"version\",\n },\n {\n test: \"chrome|crios\",\n id: \"chrome\",\n },\n {\n test: \"firefox|fxios\",\n id: \"firefox\",\n },\n {\n test: \"android\",\n id: \"android browser\",\n versionTest: \"version\",\n },\n {\n test: \"safari|iphone|ipad|ipod\",\n id: \"safari\",\n versionTest: \"version\",\n },\n];\n\n// chromium's engine(blink) is based on applewebkit 537.36.\nexport const CHROMIUM_PRESETS: PresetInfo[] = [\n {\n test: \"(?=.*applewebkit/(53[0-7]|5[0-2]|[0-4]))(?=.*\\\\schrome)\",\n id: \"chrome\",\n versionTest: \"chrome\",\n },\n {\n test: \"chromium\",\n id: \"chrome\",\n },\n {\n test: \"whale\",\n id: \"chrome\",\n versionAlias: \"-1\",\n brand: true,\n },\n];\nexport const WEBKIT_PRESETS: PresetInfo[] = [\n {\n test: \"applewebkit\",\n id: \"webkit\",\n versionTest: \"applewebkit|safari\",\n },\n];\nexport const PLATFORM_PRESETS: PresetInfo[] = [\n {\n test: \"win\",\n id: \"window\",\n },\n {\n test: \"linux\",\n id: \"linux\",\n },\n {\n test: \"ipad|ipod|iphone\",\n id: \"ios\",\n },\n {\n test: \"android\",\n id: \"android\",\n },\n];\nexport const WEBVIEW_PRESETS: PresetInfo[] = [\n {\n test: \"(?=(iphone|ipad))(?!(.*version))\",\n id: \"webview\",\n },\n {\n test: \"(?=(android|iphone|ipad))(?=.*(naver|daum|; wv))\",\n id: \"webview\",\n },\n {\n // test webview\n test: \"webview\",\n id: \"webview\",\n },\n];\nexport const OS_PRESETS: PresetInfo[] = [\n {\n test: \"windows phone\",\n id: \"windows phone\",\n },\n {\n test: \"windows 2000\",\n id: \"window\",\n versionAlias: \"5.0\",\n },\n {\n test: \"windows nt\",\n id: \"window\",\n },\n {\n test: \"iphone|ipad|ipod\",\n id: \"ios\",\n versionTest: \"iphone os|cpu os\",\n },\n {\n test: \"mac os x\",\n id: \"mac\",\n },\n {\n test: \"android\",\n id: \"android\",\n },\n {\n test: \"tizen\",\n id: \"tizen\",\n },\n {\n test: \"webos|web0s\",\n id: \"webos\",\n },\n // {\n // test: \"linux|ubuntu|debian\",\n // id: \"linux\",\n // versionAlias: \"-1\",\n // },\n];\n","import { UADataValues, AgentInfo, AgentBrowserInfo, AgentOSInfo } from \"./types\";\nimport { some, find, findBrand, convertVersion, findPresetBrand } from \"./utils\";\nimport { BROWSER_PRESETS, OS_PRESETS, CHROMIUM_PRESETS, WEBKIT_PRESETS, WEBVIEW_PRESETS } from \"./presets\";\n\nexport function parseUserAgentData(osData?: UADataValues): AgentInfo {\n const userAgentData = navigator.userAgentData;\n const brands = [...(userAgentData.uaList || userAgentData.brands)!];\n const isMobile = userAgentData.mobile || false;\n const firstBrand = brands[0];\n const browser: AgentBrowserInfo = {\n name: firstBrand.brand,\n version: firstBrand.version,\n majorVersion: -1,\n webkit: false,\n webkitVersion: \"-1\",\n chromium: false,\n chromiumVersion: \"-1\",\n webview: !!findPresetBrand(WEBVIEW_PRESETS, brands).brand,\n };\n const os: AgentOSInfo = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n };\n browser.webkit = !browser.chromium && some(WEBKIT_PRESETS, preset => findBrand(brands, preset));\n\n const chromiumBrand = findPresetBrand(CHROMIUM_PRESETS, brands);\n\n browser.chromium = !!chromiumBrand.brand;\n browser.chromiumVersion = chromiumBrand.version;\n if (!browser.chromium) {\n const webkitBrand = findPresetBrand(WEBKIT_PRESETS, brands);\n\n browser.webkit = !!webkitBrand.brand;\n browser.webkitVersion = webkitBrand.version;\n }\n if (osData) {\n const platform = osData.platform.toLowerCase();\n\n const result = find(OS_PRESETS, preset => {\n return new RegExp(`${preset.test}`, \"g\").exec(platform);\n });\n os.name = result ? result.id : platform;\n os.version = osData.platformVersion;\n }\n const browserBrand = findPresetBrand(BROWSER_PRESETS, brands);\n\n if (browserBrand.brand) {\n browser.name = browserBrand.brand;\n browser.version = osData ? osData.uaFullVersion : browserBrand.version;\n }\n if (navigator.platform === \"Linux armv8l\") {\n os.name = \"android\";\n } else if (browser.webkit) {\n os.name = isMobile ? \"ios\" : \"mac\";\n }\n if (os.name === \"ios\" && browser.webview) {\n browser.version = \"-1\";\n }\n\n os.version = convertVersion(os.version);\n browser.version = convertVersion(browser.version);\n os.majorVersion = parseInt(os.version, 10);\n browser.majorVersion = parseInt(browser.version, 10);\n\n return {\n browser,\n os,\n isMobile,\n isHints: true,\n };\n}\n","import { AgentInfo } from \"./types\";\nimport { getUserAgent, findPreset } from \"./utils\";\nimport { WEBVIEW_PRESETS, CHROMIUM_PRESETS, BROWSER_PRESETS, OS_PRESETS, WEBKIT_PRESETS } from \"./presets\";\n\nexport function parseUserAgent(userAgent?: string): AgentInfo {\n const nextAgent = getUserAgent(userAgent);\n const isMobile = !!/mobi/g.exec(nextAgent);\n const browser = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n webview: !!findPreset(WEBVIEW_PRESETS, nextAgent).preset,\n chromium: false,\n chromiumVersion: \"-1\",\n webkit: false,\n webkitVersion: \"-1\",\n };\n const os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n };\n const {\n preset: browserPreset,\n version: browserVersion,\n } = findPreset(BROWSER_PRESETS, nextAgent);\n\n const {\n preset: osPreset,\n version: osVersion,\n } = findPreset(OS_PRESETS, nextAgent);\n\n const chromiumPreset = findPreset(CHROMIUM_PRESETS, nextAgent);\n\n browser.chromium = !!chromiumPreset.preset;\n browser.chromiumVersion = chromiumPreset.version;\n if (!browser.chromium) {\n const webkitPreset = findPreset(WEBKIT_PRESETS, nextAgent);\n\n browser.webkit = !!webkitPreset.preset;\n browser.webkitVersion = webkitPreset.version;\n }\n\n if (osPreset) {\n os.name = osPreset.id;\n os.version = osVersion;\n os.majorVersion = parseInt(osVersion, 10);\n }\n if (browserPreset) {\n browser.name = browserPreset.id;\n browser.version = browserVersion;\n\n if (browser.webview && os.name === \"ios\" && browser.name !== \"safari\") {\n browser.webview = false;\n }\n }\n browser.majorVersion = parseInt(browser.version, 10);\n\n return {\n browser,\n os,\n isMobile,\n isHints: false,\n };\n}\n","import { AgentInfo } from \"./types\";\nimport { hasUserAgentData } from \"./utils\";\nimport { parseUserAgentData } from \"./userAgentData\";\nimport { parseUserAgent } from \"./userAgent\";\n/**\n * @namespace eg.agent\n */\n\n/**\n* Extracts accuate browser and operating system information from the user agent string or client hints.\n* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.\n* @function eg.agent#getAccurateAgent\n* @param - Callback function to get the accuate agent <ko>정확한 에이전트를 가져오기 위한 callback 함수</ko>\n* @return - get the accuate agent promise. If Promise are not supported, null is returned. <ko> 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. </ko>\n* @example\nimport { getAccurateAgent } from \"@egjs/agent\";\n// eg.agent.getAccurateAgent()\ngetAccurateAgent().then(agent => {\n const { os, browser, isMobile } = agent;\n});\ngetAccurateAgent(agent => {\n const { os, browser, isMobile } = agent;\n});\n*/\nexport function getAccurateAgent(callback?: (result: AgentInfo) => void): Promise<AgentInfo> | null {\n if (hasUserAgentData()) {\n return navigator.userAgentData.getHighEntropyValues([\n \"architecture\",\n \"model\",\n \"platform\",\n \"platformVersion\",\n \"uaFullVersion\",\n ]).then(info => {\n const agentInfo = parseUserAgentData(info);\n\n callback && callback(agentInfo);\n return agentInfo;\n });\n }\n callback && callback(agent());\n if (typeof Promise === \"undefined\" || !Promise) {\n return null;\n }\n return Promise.resolve(agent());\n}\n\n\n/**\n * Extracts browser and operating system information from the user agent string.\n * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.\n * @function eg.agent#agent\n * @param - user agent string to parse <ko>파싱할 유저에이전트 문자열</ko>\n * @return - agent Info <ko> 에이전트 정보 </ko>\n * @example\nimport agent from \"@egjs/agent\";\n// eg.agent();\nconst { os, browser, isMobile } = agent();\n */\nfunction agent(userAgent?: string): AgentInfo {\n if (typeof userAgent === \"undefined\" && hasUserAgentData()) {\n return parseUserAgentData();\n } else {\n return parseUserAgent(userAgent);\n }\n}\n\nexport default agent;\n","import agent, * as modules from \"./agent\";\n\nfor (const name in modules) {\n (agent as any)[name] = (modules as any)[name];\n}\n\nexport default agent;\n"],"names":["some","arr","callback","length","i","find","getUserAgent","agent","userAgent","navigator","toLowerCase","execRegExp","pattern","text","RegExp","exec","e","hasUserAgentData","userAgentData","brands","uaList","findVersion","versionTest","result","convertVersion","replace","findPreset","presets","userPreset","version","preset","test","brand","versionAlias","findPresetBrand","brandInfo","findBrand","id","_a","BROWSER_PRESETS","CHROMIUM_PRESETS","WEBKIT_PRESETS","WEBVIEW_PRESETS","OS_PRESETS","parseUserAgentData","osData","isMobile","mobile","firstBrand","browser","name","majorVersion","webkit","webkitVersion","chromium","chromiumVersion","webview","os","chromiumBrand","webkitBrand","platform_1","platform","platformVersion","browserBrand","uaFullVersion","parseInt","isHints","parseUserAgent","nextAgent","browserPreset","browserVersion","_b","osPreset","osVersion","chromiumPreset","webkitPreset","getAccurateAgent","getHighEntropyValues","then","info","agentInfo","Promise","resolve","modules"],"mappings":"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"}
\No newline at end of file