@pratham.raval/browser-core 6.22.4 → 6.22.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,122 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// // Exported only for tests
|
|
3
|
-
// export const enum Browser {
|
|
4
|
-
// CHROMIUM,
|
|
5
|
-
// SAFARI,
|
|
6
|
-
// OTHER,
|
|
7
|
-
// }
|
|
8
|
-
//
|
|
9
|
-
// export function isChromium() {
|
|
10
|
-
// return detectBrowserCached() === Browser.CHROMIUM
|
|
11
|
-
// }
|
|
12
|
-
//
|
|
13
|
-
// export function isSafari() {
|
|
14
|
-
// return detectBrowserCached() === Browser.SAFARI
|
|
15
|
-
// }
|
|
16
|
-
//
|
|
17
|
-
// let browserCache: Browser | undefined
|
|
18
|
-
// function detectBrowserCached() {
|
|
19
|
-
// return browserCache ?? (browserCache = detectBrowser())
|
|
20
|
-
// }
|
|
21
|
-
//
|
|
22
|
-
// // Exported only for tests
|
|
23
|
-
// export function detectBrowser(browserWindow: Window = window) {
|
|
24
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
25
|
-
// if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
26
|
-
// return Browser.CHROMIUM
|
|
27
|
-
// }
|
|
28
|
-
//
|
|
29
|
-
// if (
|
|
30
|
-
// // navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
31
|
-
// // "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
32
|
-
// // useragent test as a semi-working fallback.
|
|
33
|
-
// browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
34
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
35
|
-
// ) {
|
|
36
|
-
// return Browser.SAFARI
|
|
37
|
-
// }
|
|
38
|
-
//
|
|
39
|
-
// return Browser.OTHER
|
|
40
|
-
// }
|
|
41
|
-
//
|
|
42
|
-
// /**
|
|
43
|
-
// * Get detailed browser name for X-Browser-Name header
|
|
44
|
-
// * Returns one of: Chrome, Firefox, Edge, Opera, Safari, other
|
|
45
|
-
// */
|
|
46
|
-
// let detailedBrowserNameCache: string | undefined
|
|
47
|
-
// export function getDetailedBrowserName(browserWindow: Window = window): string {
|
|
48
|
-
// return detailedBrowserNameCache ?? (detailedBrowserNameCache = detectDetailedBrowserName(browserWindow))
|
|
49
|
-
// }
|
|
50
|
-
//
|
|
51
|
-
// // Exported only for tests
|
|
52
|
-
// export function detectDetailedBrowserName(browserWindow: Window = window): string {
|
|
53
|
-
// // Try Client Hints API first for more accurate detection
|
|
54
|
-
// const clientHintsBrowser = parseClientHints(browserWindow)
|
|
55
|
-
// if (clientHintsBrowser) {
|
|
56
|
-
// return clientHintsBrowser
|
|
57
|
-
// }
|
|
58
|
-
//
|
|
59
|
-
// // Fallback to user agent parsing
|
|
60
|
-
// return parseUserAgent(browserWindow)
|
|
61
|
-
// }
|
|
62
|
-
//
|
|
63
|
-
// function parseClientHints(browserWindow: Window = window): string {
|
|
64
|
-
//
|
|
65
|
-
// // fallback to userAgent
|
|
66
|
-
// const ua = browserWindow.navigator.userAgent
|
|
67
|
-
//
|
|
68
|
-
// if (/edg/i.test(ua)) {
|
|
69
|
-
// return 'Edge';
|
|
70
|
-
// }
|
|
71
|
-
// if (/opr|opera/i.test(ua)) {return 'Opera'}
|
|
72
|
-
// if (/chrome/i.test(ua)) {return 'Chrome'}
|
|
73
|
-
// if (/safari/i.test(ua)) {return 'Safari'}
|
|
74
|
-
// if (/firefox/i.test(ua)) {return 'Firefox'}
|
|
75
|
-
//
|
|
76
|
-
// return 'other'
|
|
77
|
-
// }
|
|
78
|
-
//
|
|
79
|
-
// function parseUserAgent(browserWindow: Window = window): string {
|
|
80
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
81
|
-
//
|
|
82
|
-
// // Firefox detection
|
|
83
|
-
// if (/Firefox\//i.test(userAgent)) {
|
|
84
|
-
// return 'Firefox'
|
|
85
|
-
// }
|
|
86
|
-
//
|
|
87
|
-
// // Safari detection (must come before Chrome check)
|
|
88
|
-
// if (
|
|
89
|
-
// (browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
90
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent)))
|
|
91
|
-
// ) {
|
|
92
|
-
// return 'Safari'
|
|
93
|
-
// }
|
|
94
|
-
//
|
|
95
|
-
// // Chrome-based browsers detection
|
|
96
|
-
// if (/Chrome\//i.test(userAgent) || (browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
97
|
-
// // Edge detection
|
|
98
|
-
// if (/Edg\//i.test(userAgent)) {
|
|
99
|
-
// return 'Edge'
|
|
100
|
-
// }
|
|
101
|
-
//
|
|
102
|
-
// // Opera detection
|
|
103
|
-
// if (/OPR\//i.test(userAgent) || /Opera\//i.test(userAgent)) {
|
|
104
|
-
// return 'Opera'
|
|
105
|
-
// }
|
|
106
|
-
//
|
|
107
|
-
// // Brave detection (fallback - Brave shows as Chrome in user agent)
|
|
108
|
-
// // Note: This is less reliable than Client Hints, but better than nothing
|
|
109
|
-
// if (/Brave\//i.test(userAgent)) {
|
|
110
|
-
// return 'other'
|
|
111
|
-
// }
|
|
112
|
-
//
|
|
113
|
-
// // Default Chrome detection
|
|
114
|
-
// return 'Chrome'
|
|
115
|
-
// }
|
|
116
|
-
//
|
|
117
|
-
// // All other browsers
|
|
118
|
-
// return 'other'
|
|
119
|
-
// }
|
|
120
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
121
3
|
exports.isChromium = isChromium;
|
|
122
4
|
exports.isSafari = isSafari;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":";;AAUA,gCAEC;AAED,4BAEC;AAQD,sCAiBC;AAQD,wDAKC;AAED,8DAQC;AAhED,uIAAuI;AACvI,+CAAwC;AASxC,SAAgB,UAAU;IACxB,OAAO,mBAAmB,EAAE,6BAAqB,CAAA;AACnD,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,mBAAmB,EAAE,2BAAmB,CAAA;AACjD,CAAC;AAED,IAAI,YAAiC,CAAA;AACrC,SAAS,mBAAmB;IAC1B,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,0BAA0B;AAC1B,SAAgB,aAAa,CAAC,gBAAwB,MAAM;;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IACnD,IAAK,aAAqB,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,gCAAuB;IACzB,CAAC;IAED;IACE,sFAAsF;IACtF,0FAA0F;IAC1F,6CAA6C;IAC7C,CAAA,MAAA,aAAa,CAAC,SAAS,CAAC,MAAM,0CAAE,OAAO,CAAC,OAAO,CAAC,MAAK,CAAC;QACtD,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACjE,CAAC;QACD,8BAAqB;IACvB,CAAC;IAED,6BAAoB;AACtB,CAAC;AAED;;;GAGG;AACH,IAAI,wBAA4C,CAAA;AAEhD,SAAgB,sBAAsB,CAAC,gBAAwB,MAAM;IACnE,OAAO,CACL,wBAAwB,aAAxB,wBAAwB,cAAxB,wBAAwB,GACxB,CAAC,wBAAwB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC,CACtE,CAAA;AACH,CAAC;AAED,SAAgB,yBAAyB,CAAC,gBAAwB,MAAM;IACtE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IAC5C,MAAM,MAAM,GAAG,IAAI,uBAAQ,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAEjC,4CAA4C;IAC5C,kEAAkE;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAA;AACjD,CAAC"}
|
|
@@ -1,121 +1,3 @@
|
|
|
1
|
-
// // Exported only for tests
|
|
2
|
-
// export const enum Browser {
|
|
3
|
-
// CHROMIUM,
|
|
4
|
-
// SAFARI,
|
|
5
|
-
// OTHER,
|
|
6
|
-
// }
|
|
7
|
-
//
|
|
8
|
-
// export function isChromium() {
|
|
9
|
-
// return detectBrowserCached() === Browser.CHROMIUM
|
|
10
|
-
// }
|
|
11
|
-
//
|
|
12
|
-
// export function isSafari() {
|
|
13
|
-
// return detectBrowserCached() === Browser.SAFARI
|
|
14
|
-
// }
|
|
15
|
-
//
|
|
16
|
-
// let browserCache: Browser | undefined
|
|
17
|
-
// function detectBrowserCached() {
|
|
18
|
-
// return browserCache ?? (browserCache = detectBrowser())
|
|
19
|
-
// }
|
|
20
|
-
//
|
|
21
|
-
// // Exported only for tests
|
|
22
|
-
// export function detectBrowser(browserWindow: Window = window) {
|
|
23
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
24
|
-
// if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
25
|
-
// return Browser.CHROMIUM
|
|
26
|
-
// }
|
|
27
|
-
//
|
|
28
|
-
// if (
|
|
29
|
-
// // navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
30
|
-
// // "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
31
|
-
// // useragent test as a semi-working fallback.
|
|
32
|
-
// browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
33
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
34
|
-
// ) {
|
|
35
|
-
// return Browser.SAFARI
|
|
36
|
-
// }
|
|
37
|
-
//
|
|
38
|
-
// return Browser.OTHER
|
|
39
|
-
// }
|
|
40
|
-
//
|
|
41
|
-
// /**
|
|
42
|
-
// * Get detailed browser name for X-Browser-Name header
|
|
43
|
-
// * Returns one of: Chrome, Firefox, Edge, Opera, Safari, other
|
|
44
|
-
// */
|
|
45
|
-
// let detailedBrowserNameCache: string | undefined
|
|
46
|
-
// export function getDetailedBrowserName(browserWindow: Window = window): string {
|
|
47
|
-
// return detailedBrowserNameCache ?? (detailedBrowserNameCache = detectDetailedBrowserName(browserWindow))
|
|
48
|
-
// }
|
|
49
|
-
//
|
|
50
|
-
// // Exported only for tests
|
|
51
|
-
// export function detectDetailedBrowserName(browserWindow: Window = window): string {
|
|
52
|
-
// // Try Client Hints API first for more accurate detection
|
|
53
|
-
// const clientHintsBrowser = parseClientHints(browserWindow)
|
|
54
|
-
// if (clientHintsBrowser) {
|
|
55
|
-
// return clientHintsBrowser
|
|
56
|
-
// }
|
|
57
|
-
//
|
|
58
|
-
// // Fallback to user agent parsing
|
|
59
|
-
// return parseUserAgent(browserWindow)
|
|
60
|
-
// }
|
|
61
|
-
//
|
|
62
|
-
// function parseClientHints(browserWindow: Window = window): string {
|
|
63
|
-
//
|
|
64
|
-
// // fallback to userAgent
|
|
65
|
-
// const ua = browserWindow.navigator.userAgent
|
|
66
|
-
//
|
|
67
|
-
// if (/edg/i.test(ua)) {
|
|
68
|
-
// return 'Edge';
|
|
69
|
-
// }
|
|
70
|
-
// if (/opr|opera/i.test(ua)) {return 'Opera'}
|
|
71
|
-
// if (/chrome/i.test(ua)) {return 'Chrome'}
|
|
72
|
-
// if (/safari/i.test(ua)) {return 'Safari'}
|
|
73
|
-
// if (/firefox/i.test(ua)) {return 'Firefox'}
|
|
74
|
-
//
|
|
75
|
-
// return 'other'
|
|
76
|
-
// }
|
|
77
|
-
//
|
|
78
|
-
// function parseUserAgent(browserWindow: Window = window): string {
|
|
79
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
80
|
-
//
|
|
81
|
-
// // Firefox detection
|
|
82
|
-
// if (/Firefox\//i.test(userAgent)) {
|
|
83
|
-
// return 'Firefox'
|
|
84
|
-
// }
|
|
85
|
-
//
|
|
86
|
-
// // Safari detection (must come before Chrome check)
|
|
87
|
-
// if (
|
|
88
|
-
// (browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
89
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent)))
|
|
90
|
-
// ) {
|
|
91
|
-
// return 'Safari'
|
|
92
|
-
// }
|
|
93
|
-
//
|
|
94
|
-
// // Chrome-based browsers detection
|
|
95
|
-
// if (/Chrome\//i.test(userAgent) || (browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
96
|
-
// // Edge detection
|
|
97
|
-
// if (/Edg\//i.test(userAgent)) {
|
|
98
|
-
// return 'Edge'
|
|
99
|
-
// }
|
|
100
|
-
//
|
|
101
|
-
// // Opera detection
|
|
102
|
-
// if (/OPR\//i.test(userAgent) || /Opera\//i.test(userAgent)) {
|
|
103
|
-
// return 'Opera'
|
|
104
|
-
// }
|
|
105
|
-
//
|
|
106
|
-
// // Brave detection (fallback - Brave shows as Chrome in user agent)
|
|
107
|
-
// // Note: This is less reliable than Client Hints, but better than nothing
|
|
108
|
-
// if (/Brave\//i.test(userAgent)) {
|
|
109
|
-
// return 'other'
|
|
110
|
-
// }
|
|
111
|
-
//
|
|
112
|
-
// // Default Chrome detection
|
|
113
|
-
// return 'Chrome'
|
|
114
|
-
// }
|
|
115
|
-
//
|
|
116
|
-
// // All other browsers
|
|
117
|
-
// return 'other'
|
|
118
|
-
// }
|
|
119
1
|
// eslint-disable-next-line import/no-extraneous-dependencies, local-rules/disallow-side-effects, local-rules/enforce-prod-deps-imports
|
|
120
2
|
import { UAParser } from 'ua-parser-js';
|
|
121
3
|
export function isChromium() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"AAAA,uIAAuI;AACvI,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AASxC,MAAM,UAAU,UAAU;IACxB,OAAO,mBAAmB,EAAE,6BAAqB,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,mBAAmB,EAAE,2BAAmB,CAAA;AACjD,CAAC;AAED,IAAI,YAAiC,CAAA;AACrC,SAAS,mBAAmB;IAC1B,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,aAAa,CAAC,gBAAwB,MAAM;;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IACnD,IAAK,aAAqB,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,gCAAuB;IACzB,CAAC;IAED;IACE,sFAAsF;IACtF,0FAA0F;IAC1F,6CAA6C;IAC7C,CAAA,MAAA,aAAa,CAAC,SAAS,CAAC,MAAM,0CAAE,OAAO,CAAC,OAAO,CAAC,MAAK,CAAC;QACtD,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACjE,CAAC;QACD,8BAAqB;IACvB,CAAC;IAED,6BAAoB;AACtB,CAAC;AAED;;;GAGG;AACH,IAAI,wBAA4C,CAAA;AAEhD,MAAM,UAAU,sBAAsB,CAAC,gBAAwB,MAAM;IACnE,OAAO,CACL,wBAAwB,aAAxB,wBAAwB,cAAxB,wBAAwB,GACxB,CAAC,wBAAwB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC,CACtE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,MAAM;IACtE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IAC5C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAEjC,4CAA4C;IAC5C,kEAAkE;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAA;AACjD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,123 +1,3 @@
|
|
|
1
|
-
// // Exported only for tests
|
|
2
|
-
// export const enum Browser {
|
|
3
|
-
// CHROMIUM,
|
|
4
|
-
// SAFARI,
|
|
5
|
-
// OTHER,
|
|
6
|
-
// }
|
|
7
|
-
//
|
|
8
|
-
// export function isChromium() {
|
|
9
|
-
// return detectBrowserCached() === Browser.CHROMIUM
|
|
10
|
-
// }
|
|
11
|
-
//
|
|
12
|
-
// export function isSafari() {
|
|
13
|
-
// return detectBrowserCached() === Browser.SAFARI
|
|
14
|
-
// }
|
|
15
|
-
//
|
|
16
|
-
// let browserCache: Browser | undefined
|
|
17
|
-
// function detectBrowserCached() {
|
|
18
|
-
// return browserCache ?? (browserCache = detectBrowser())
|
|
19
|
-
// }
|
|
20
|
-
//
|
|
21
|
-
// // Exported only for tests
|
|
22
|
-
// export function detectBrowser(browserWindow: Window = window) {
|
|
23
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
24
|
-
// if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
25
|
-
// return Browser.CHROMIUM
|
|
26
|
-
// }
|
|
27
|
-
//
|
|
28
|
-
// if (
|
|
29
|
-
// // navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
30
|
-
// // "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
31
|
-
// // useragent test as a semi-working fallback.
|
|
32
|
-
// browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
33
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
34
|
-
// ) {
|
|
35
|
-
// return Browser.SAFARI
|
|
36
|
-
// }
|
|
37
|
-
//
|
|
38
|
-
// return Browser.OTHER
|
|
39
|
-
// }
|
|
40
|
-
//
|
|
41
|
-
// /**
|
|
42
|
-
// * Get detailed browser name for X-Browser-Name header
|
|
43
|
-
// * Returns one of: Chrome, Firefox, Edge, Opera, Safari, other
|
|
44
|
-
// */
|
|
45
|
-
// let detailedBrowserNameCache: string | undefined
|
|
46
|
-
// export function getDetailedBrowserName(browserWindow: Window = window): string {
|
|
47
|
-
// return detailedBrowserNameCache ?? (detailedBrowserNameCache = detectDetailedBrowserName(browserWindow))
|
|
48
|
-
// }
|
|
49
|
-
//
|
|
50
|
-
// // Exported only for tests
|
|
51
|
-
// export function detectDetailedBrowserName(browserWindow: Window = window): string {
|
|
52
|
-
// // Try Client Hints API first for more accurate detection
|
|
53
|
-
// const clientHintsBrowser = parseClientHints(browserWindow)
|
|
54
|
-
// if (clientHintsBrowser) {
|
|
55
|
-
// return clientHintsBrowser
|
|
56
|
-
// }
|
|
57
|
-
//
|
|
58
|
-
// // Fallback to user agent parsing
|
|
59
|
-
// return parseUserAgent(browserWindow)
|
|
60
|
-
// }
|
|
61
|
-
//
|
|
62
|
-
// function parseClientHints(browserWindow: Window = window): string {
|
|
63
|
-
//
|
|
64
|
-
// // fallback to userAgent
|
|
65
|
-
// const ua = browserWindow.navigator.userAgent
|
|
66
|
-
//
|
|
67
|
-
// if (/edg/i.test(ua)) {
|
|
68
|
-
// return 'Edge';
|
|
69
|
-
// }
|
|
70
|
-
// if (/opr|opera/i.test(ua)) {return 'Opera'}
|
|
71
|
-
// if (/chrome/i.test(ua)) {return 'Chrome'}
|
|
72
|
-
// if (/safari/i.test(ua)) {return 'Safari'}
|
|
73
|
-
// if (/firefox/i.test(ua)) {return 'Firefox'}
|
|
74
|
-
//
|
|
75
|
-
// return 'other'
|
|
76
|
-
// }
|
|
77
|
-
//
|
|
78
|
-
// function parseUserAgent(browserWindow: Window = window): string {
|
|
79
|
-
// const userAgent = browserWindow.navigator.userAgent
|
|
80
|
-
//
|
|
81
|
-
// // Firefox detection
|
|
82
|
-
// if (/Firefox\//i.test(userAgent)) {
|
|
83
|
-
// return 'Firefox'
|
|
84
|
-
// }
|
|
85
|
-
//
|
|
86
|
-
// // Safari detection (must come before Chrome check)
|
|
87
|
-
// if (
|
|
88
|
-
// (browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
89
|
-
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent)))
|
|
90
|
-
// ) {
|
|
91
|
-
// return 'Safari'
|
|
92
|
-
// }
|
|
93
|
-
//
|
|
94
|
-
// // Chrome-based browsers detection
|
|
95
|
-
// if (/Chrome\//i.test(userAgent) || (browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
96
|
-
// // Edge detection
|
|
97
|
-
// if (/Edg\//i.test(userAgent)) {
|
|
98
|
-
// return 'Edge'
|
|
99
|
-
// }
|
|
100
|
-
//
|
|
101
|
-
// // Opera detection
|
|
102
|
-
// if (/OPR\//i.test(userAgent) || /Opera\//i.test(userAgent)) {
|
|
103
|
-
// return 'Opera'
|
|
104
|
-
// }
|
|
105
|
-
//
|
|
106
|
-
// // Brave detection (fallback - Brave shows as Chrome in user agent)
|
|
107
|
-
// // Note: This is less reliable than Client Hints, but better than nothing
|
|
108
|
-
// if (/Brave\//i.test(userAgent)) {
|
|
109
|
-
// return 'other'
|
|
110
|
-
// }
|
|
111
|
-
//
|
|
112
|
-
// // Default Chrome detection
|
|
113
|
-
// return 'Chrome'
|
|
114
|
-
// }
|
|
115
|
-
//
|
|
116
|
-
// // All other browsers
|
|
117
|
-
// return 'other'
|
|
118
|
-
// }
|
|
119
|
-
|
|
120
|
-
|
|
121
1
|
// eslint-disable-next-line import/no-extraneous-dependencies, local-rules/disallow-side-effects, local-rules/enforce-prod-deps-imports
|
|
122
2
|
import { UAParser } from 'ua-parser-js';
|
|
123
3
|
|