@tinkoff/user-agent 0.7.198 → 0.7.202
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.
- package/lib/client-hints.es.js +2 -1
- package/lib/client-hints.js +6 -5
- package/lib/constants.d.ts +1 -0
- package/lib/constants.es.js +22 -1
- package/lib/constants.js +26 -0
- package/lib/types.d.ts +7 -0
- package/lib/userAgent.d.ts +2 -2
- package/lib/userAgent.es.js +7 -22
- package/lib/userAgent.js +10 -25
- package/lib/utils/get-browser-engine.d.ts +2 -0
- package/lib/{utils.es.js → utils/get-browser-engine.es.js} +1 -14
- package/lib/{utils.js → utils/get-browser-engine.js} +0 -14
- package/lib/utils/get-mobile-os.d.ts +2 -0
- package/lib/utils/get-mobile-os.es.js +15 -0
- package/lib/utils/get-mobile-os.js +19 -0
- package/lib/utils/merge-extensions.d.ts +3 -0
- package/lib/utils/merge-extensions.es.js +21 -0
- package/lib/utils/merge-extensions.js +25 -0
- package/package.json +2 -2
- package/lib/utils.d.ts +0 -3
package/lib/client-hints.es.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getBrowserEngine } from './utils/get-browser-engine.es.js';
|
|
2
|
+
import { getMobileOs } from './utils/get-mobile-os.es.js';
|
|
2
3
|
|
|
3
4
|
const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
|
|
4
5
|
const KNOWN_ENGINES = new Set(['Chromium']);
|
package/lib/client-hints.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var getBrowserEngine = require('./utils/get-browser-engine.js');
|
|
6
|
+
var getMobileOs = require('./utils/get-mobile-os.js');
|
|
6
7
|
|
|
7
8
|
const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
|
|
8
9
|
const KNOWN_ENGINES = new Set(['Chromium']);
|
|
@@ -57,7 +58,7 @@ const parseBrowserFromString = (brandsList) => {
|
|
|
57
58
|
browser.name = engine.name;
|
|
58
59
|
browser.version = engine.version;
|
|
59
60
|
}
|
|
60
|
-
browser.browserEngine =
|
|
61
|
+
browser.browserEngine = getBrowserEngine.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
|
|
61
62
|
return { browser, engine };
|
|
62
63
|
};
|
|
63
64
|
const parseBrowserFromUserAgentData = (brands) => {
|
|
@@ -86,7 +87,7 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
86
87
|
browser.name = engine.name;
|
|
87
88
|
browser.version = engine.version;
|
|
88
89
|
}
|
|
89
|
-
browser.browserEngine =
|
|
90
|
+
browser.browserEngine = getBrowserEngine.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
|
|
90
91
|
return { browser, engine };
|
|
91
92
|
};
|
|
92
93
|
const getBackwardCompatibleOsName = (payload) => {
|
|
@@ -113,7 +114,7 @@ const getBackwardCompatibleOsName = (payload) => {
|
|
|
113
114
|
const parseClientHintsHeaders = (headers) => {
|
|
114
115
|
const { browser, engine } = parseBrowserFromString(headers['sec-ch-ua-full-version-list'] || headers['sec-ch-ua']);
|
|
115
116
|
const osName = parseQuotedString(headers['sec-ch-ua-platform']);
|
|
116
|
-
const mobileOS =
|
|
117
|
+
const mobileOS = getMobileOs.getMobileOs(osName);
|
|
117
118
|
const architecture = parseQuotedString(headers['sec-ch-ua-arch']);
|
|
118
119
|
return {
|
|
119
120
|
browser,
|
|
@@ -166,7 +167,7 @@ const parseClientHintsUserAgentData = (payload) => {
|
|
|
166
167
|
? (BACKWARD_COMPATIBILITY_ARCH[payload.architecture] ?? payload.architecture)
|
|
167
168
|
: payload.architecture,
|
|
168
169
|
},
|
|
169
|
-
mobileOS:
|
|
170
|
+
mobileOS: getMobileOs.getMobileOs(payload.platform),
|
|
170
171
|
device: {
|
|
171
172
|
model: payload.model,
|
|
172
173
|
type: payload.mobile ? 'mobile' : 'desktop',
|
package/lib/constants.d.ts
CHANGED
package/lib/constants.es.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import UAParser from 'ua-parser-js';
|
|
2
|
+
|
|
1
3
|
const BROWSERS_LIST_MAP = {
|
|
2
4
|
chrome: {
|
|
3
5
|
type: 'desktop',
|
|
@@ -58,5 +60,24 @@ const CHROMIUM_BASED_BROWSERS = [
|
|
|
58
60
|
'blink',
|
|
59
61
|
'vivaldi' /* , 'chrome webview', 'opera', 'samsung' */,
|
|
60
62
|
];
|
|
63
|
+
const uaParserExtensions = [
|
|
64
|
+
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
65
|
+
// это позволит для них получить отдельное имя браузера и обработать специальным образом
|
|
66
|
+
// https://github.com/faisalman/ua-parser-js/issues/227
|
|
67
|
+
// google page preloading agent
|
|
68
|
+
[/developers\.google\.com\/\+\/web\/snippet/i],
|
|
69
|
+
[UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
70
|
+
// google, bing, msn
|
|
71
|
+
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
72
|
+
[UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
73
|
+
// google adsbot под видом обычного браузера
|
|
74
|
+
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
75
|
+
[UAParser.BROWSER.NAME, [UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
76
|
+
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
77
|
+
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
78
|
+
// Firefox for iOS
|
|
79
|
+
[/fxios\/([\w\\.-]+)/i],
|
|
80
|
+
[[UAParser.BROWSER.NAME, 'Firefox Focus'], UAParser.BROWSER.VERSION],
|
|
81
|
+
];
|
|
61
82
|
|
|
62
|
-
export { BROWSERS_LIST_MAP, CHROMIUM_BASED_BROWSERS };
|
|
83
|
+
export { BROWSERS_LIST_MAP, CHROMIUM_BASED_BROWSERS, uaParserExtensions };
|
package/lib/constants.js
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var UAParser = require('ua-parser-js');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var UAParser__default = /*#__PURE__*/_interopDefaultLegacy(UAParser);
|
|
10
|
+
|
|
5
11
|
const BROWSERS_LIST_MAP = {
|
|
6
12
|
chrome: {
|
|
7
13
|
type: 'desktop',
|
|
@@ -62,6 +68,26 @@ const CHROMIUM_BASED_BROWSERS = [
|
|
|
62
68
|
'blink',
|
|
63
69
|
'vivaldi' /* , 'chrome webview', 'opera', 'samsung' */,
|
|
64
70
|
];
|
|
71
|
+
const uaParserExtensions = [
|
|
72
|
+
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
73
|
+
// это позволит для них получить отдельное имя браузера и обработать специальным образом
|
|
74
|
+
// https://github.com/faisalman/ua-parser-js/issues/227
|
|
75
|
+
// google page preloading agent
|
|
76
|
+
[/developers\.google\.com\/\+\/web\/snippet/i],
|
|
77
|
+
[UAParser__default["default"].BROWSER.NAME, UAParser__default["default"].BROWSER.VERSION, ['type', 'bot']],
|
|
78
|
+
// google, bing, msn
|
|
79
|
+
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
80
|
+
[UAParser__default["default"].BROWSER.NAME, UAParser__default["default"].BROWSER.VERSION, ['type', 'bot']],
|
|
81
|
+
// google adsbot под видом обычного браузера
|
|
82
|
+
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
83
|
+
[UAParser__default["default"].BROWSER.NAME, [UAParser__default["default"].BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
84
|
+
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
85
|
+
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
86
|
+
// Firefox for iOS
|
|
87
|
+
[/fxios\/([\w\\.-]+)/i],
|
|
88
|
+
[[UAParser__default["default"].BROWSER.NAME, 'Firefox Focus'], UAParser__default["default"].BROWSER.VERSION],
|
|
89
|
+
];
|
|
65
90
|
|
|
66
91
|
exports.BROWSERS_LIST_MAP = BROWSERS_LIST_MAP;
|
|
67
92
|
exports.CHROMIUM_BASED_BROWSERS = CHROMIUM_BASED_BROWSERS;
|
|
93
|
+
exports.uaParserExtensions = uaParserExtensions;
|
package/lib/types.d.ts
CHANGED
|
@@ -46,4 +46,11 @@ export interface UserAgent {
|
|
|
46
46
|
mobileOS?: string;
|
|
47
47
|
sameSiteNoneCompatible: boolean;
|
|
48
48
|
}
|
|
49
|
+
export type UAParserExtensionSource = (RegExp[] | (string[] | string)[])[];
|
|
50
|
+
export type UAParserExtensionsTypes = {
|
|
51
|
+
browser?: UAParserExtensionSource;
|
|
52
|
+
device?: UAParserExtensionSource;
|
|
53
|
+
os?: UAParserExtensionSource;
|
|
54
|
+
engine?: UAParserExtensionSource;
|
|
55
|
+
};
|
|
49
56
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/userAgent.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { UserAgent } from './types';
|
|
2
|
-
export declare const parseUserAgentHeader: (userAgent: string) => UserAgent;
|
|
1
|
+
import type { UAParserExtensionsTypes, UserAgent } from './types';
|
|
2
|
+
export declare const parseUserAgentHeader: (userAgent: string, extensions?: UAParserExtensionsTypes[] | null) => UserAgent;
|
|
3
3
|
//# sourceMappingURL=userAgent.d.ts.map
|
package/lib/userAgent.es.js
CHANGED
|
@@ -3,30 +3,15 @@ import compose from '@tinkoff/utils/function/compose';
|
|
|
3
3
|
import toLower from '@tinkoff/utils/string/toLower';
|
|
4
4
|
import { UAParser } from 'ua-parser-js';
|
|
5
5
|
import { isSameSiteNoneCompatible } from './isSameSiteNoneCompatible.es.js';
|
|
6
|
-
import {
|
|
6
|
+
import { mergeExtensions } from './utils/merge-extensions.es.js';
|
|
7
|
+
import { getBrowserEngine } from './utils/get-browser-engine.es.js';
|
|
8
|
+
import { getMobileOs } from './utils/get-mobile-os.es.js';
|
|
7
9
|
|
|
8
10
|
const toLowerName = compose(toLower, propOr('name', ''));
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// google page preloading agent
|
|
14
|
-
[/developers\.google\.com\/\+\/web\/snippet/i],
|
|
15
|
-
[UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
16
|
-
// google, bing, msn
|
|
17
|
-
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
18
|
-
[UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
19
|
-
// google adsbot под видом обычного браузера
|
|
20
|
-
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
21
|
-
[UAParser.BROWSER.NAME, [UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
22
|
-
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
23
|
-
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
24
|
-
// Firefox for iOS
|
|
25
|
-
[/fxios\/([\w\\.-]+)/i],
|
|
26
|
-
[[UAParser.BROWSER.NAME, 'Firefox Focus'], UAParser.BROWSER.VERSION],
|
|
27
|
-
];
|
|
28
|
-
const parseUserAgentHeader = (userAgent) => {
|
|
29
|
-
const { ua, ...result } = new UAParser(userAgent, { browser: uaParserExtensions }).getResult();
|
|
11
|
+
const parseUserAgentHeader = (userAgent, extensions) => {
|
|
12
|
+
const { ua, ...result } = new UAParser(userAgent, {
|
|
13
|
+
...mergeExtensions(extensions || []),
|
|
14
|
+
}).getResult();
|
|
30
15
|
const { browser, os, engine } = result;
|
|
31
16
|
const browserName = toLowerName(browser);
|
|
32
17
|
const engineName = toLowerName(engine);
|
package/lib/userAgent.js
CHANGED
|
@@ -5,9 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var propOr = require('@tinkoff/utils/object/propOr');
|
|
6
6
|
var compose = require('@tinkoff/utils/function/compose');
|
|
7
7
|
var toLower = require('@tinkoff/utils/string/toLower');
|
|
8
|
-
var
|
|
8
|
+
var UAParser = require('ua-parser-js');
|
|
9
9
|
var isSameSiteNoneCompatible = require('./isSameSiteNoneCompatible.js');
|
|
10
|
-
var
|
|
10
|
+
var mergeExtensions = require('./utils/merge-extensions.js');
|
|
11
|
+
var getBrowserEngine = require('./utils/get-browser-engine.js');
|
|
12
|
+
var getMobileOs = require('./utils/get-mobile-os.js');
|
|
11
13
|
|
|
12
14
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
15
|
|
|
@@ -16,27 +18,10 @@ var compose__default = /*#__PURE__*/_interopDefaultLegacy(compose);
|
|
|
16
18
|
var toLower__default = /*#__PURE__*/_interopDefaultLegacy(toLower);
|
|
17
19
|
|
|
18
20
|
const toLowerName = compose__default["default"](toLower__default["default"], propOr__default["default"]('name', ''));
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// google page preloading agent
|
|
24
|
-
[/developers\.google\.com\/\+\/web\/snippet/i],
|
|
25
|
-
[uaParserJs.UAParser.BROWSER.NAME, uaParserJs.UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
26
|
-
// google, bing, msn
|
|
27
|
-
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
28
|
-
[uaParserJs.UAParser.BROWSER.NAME, uaParserJs.UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
29
|
-
// google adsbot под видом обычного браузера
|
|
30
|
-
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
31
|
-
[uaParserJs.UAParser.BROWSER.NAME, [uaParserJs.UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
32
|
-
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
33
|
-
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
34
|
-
// Firefox for iOS
|
|
35
|
-
[/fxios\/([\w\\.-]+)/i],
|
|
36
|
-
[[uaParserJs.UAParser.BROWSER.NAME, 'Firefox Focus'], uaParserJs.UAParser.BROWSER.VERSION],
|
|
37
|
-
];
|
|
38
|
-
const parseUserAgentHeader = (userAgent) => {
|
|
39
|
-
const { ua, ...result } = new uaParserJs.UAParser(userAgent, { browser: uaParserExtensions }).getResult();
|
|
21
|
+
const parseUserAgentHeader = (userAgent, extensions) => {
|
|
22
|
+
const { ua, ...result } = new UAParser.UAParser(userAgent, {
|
|
23
|
+
...mergeExtensions.mergeExtensions(extensions || []),
|
|
24
|
+
}).getResult();
|
|
40
25
|
const { browser, os, engine } = result;
|
|
41
26
|
const browserName = toLowerName(browser);
|
|
42
27
|
const engineName = toLowerName(engine);
|
|
@@ -45,11 +30,11 @@ const parseUserAgentHeader = (userAgent) => {
|
|
|
45
30
|
}
|
|
46
31
|
return {
|
|
47
32
|
...result,
|
|
48
|
-
mobileOS:
|
|
33
|
+
mobileOS: getMobileOs.getMobileOs(os.name),
|
|
49
34
|
sameSiteNoneCompatible: isSameSiteNoneCompatible.isSameSiteNoneCompatible(result),
|
|
50
35
|
browser: {
|
|
51
36
|
...browser,
|
|
52
|
-
browserEngine:
|
|
37
|
+
browserEngine: getBrowserEngine.getBrowserEngine(browserName, engineName),
|
|
53
38
|
name: browserName,
|
|
54
39
|
},
|
|
55
40
|
};
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
const getMobileOs = (osName) => {
|
|
2
|
-
switch (osName) {
|
|
3
|
-
case 'Windows Phone':
|
|
4
|
-
return 'winphone';
|
|
5
|
-
case 'Android':
|
|
6
|
-
return 'android';
|
|
7
|
-
case 'iOS':
|
|
8
|
-
return 'ios';
|
|
9
|
-
case 'BlackBerry':
|
|
10
|
-
case 'RIM Tablet OS':
|
|
11
|
-
return 'blackberry';
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
1
|
const getBrowserEngine = (browserName, engineName) => {
|
|
15
2
|
switch (true) {
|
|
16
3
|
case browserName === 'firefox':
|
|
@@ -29,4 +16,4 @@ const getBrowserEngine = (browserName, engineName) => {
|
|
|
29
16
|
return 'other';
|
|
30
17
|
};
|
|
31
18
|
|
|
32
|
-
export { getBrowserEngine
|
|
19
|
+
export { getBrowserEngine };
|
|
@@ -2,19 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const getMobileOs = (osName) => {
|
|
6
|
-
switch (osName) {
|
|
7
|
-
case 'Windows Phone':
|
|
8
|
-
return 'winphone';
|
|
9
|
-
case 'Android':
|
|
10
|
-
return 'android';
|
|
11
|
-
case 'iOS':
|
|
12
|
-
return 'ios';
|
|
13
|
-
case 'BlackBerry':
|
|
14
|
-
case 'RIM Tablet OS':
|
|
15
|
-
return 'blackberry';
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
5
|
const getBrowserEngine = (browserName, engineName) => {
|
|
19
6
|
switch (true) {
|
|
20
7
|
case browserName === 'firefox':
|
|
@@ -34,4 +21,3 @@ const getBrowserEngine = (browserName, engineName) => {
|
|
|
34
21
|
};
|
|
35
22
|
|
|
36
23
|
exports.getBrowserEngine = getBrowserEngine;
|
|
37
|
-
exports.getMobileOs = getMobileOs;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const getMobileOs = (osName) => {
|
|
2
|
+
switch (osName) {
|
|
3
|
+
case 'Windows Phone':
|
|
4
|
+
return 'winphone';
|
|
5
|
+
case 'Android':
|
|
6
|
+
return 'android';
|
|
7
|
+
case 'iOS':
|
|
8
|
+
return 'ios';
|
|
9
|
+
case 'BlackBerry':
|
|
10
|
+
case 'RIM Tablet OS':
|
|
11
|
+
return 'blackberry';
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { getMobileOs };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const getMobileOs = (osName) => {
|
|
6
|
+
switch (osName) {
|
|
7
|
+
case 'Windows Phone':
|
|
8
|
+
return 'winphone';
|
|
9
|
+
case 'Android':
|
|
10
|
+
return 'android';
|
|
11
|
+
case 'iOS':
|
|
12
|
+
return 'ios';
|
|
13
|
+
case 'BlackBerry':
|
|
14
|
+
case 'RIM Tablet OS':
|
|
15
|
+
return 'blackberry';
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
exports.getMobileOs = getMobileOs;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { uaParserExtensions } from '../constants.es.js';
|
|
2
|
+
|
|
3
|
+
const mergeExtensions = (extensions) => {
|
|
4
|
+
if (!extensions?.length) {
|
|
5
|
+
return {
|
|
6
|
+
browser: [...uaParserExtensions],
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const merged = extensions.reduce((acc, curr) => ({
|
|
10
|
+
browser: [...(acc.browser || []), ...(curr.browser || [])],
|
|
11
|
+
os: [...(acc.os || []), ...(curr.os || [])],
|
|
12
|
+
device: [...(acc.device || []), ...(curr.device || [])],
|
|
13
|
+
engine: [...(acc.engine || []), ...(curr.engine || [])],
|
|
14
|
+
}), {});
|
|
15
|
+
return {
|
|
16
|
+
...merged,
|
|
17
|
+
browser: [...(merged.browser || []), ...uaParserExtensions],
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { mergeExtensions };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var constants = require('../constants.js');
|
|
6
|
+
|
|
7
|
+
const mergeExtensions = (extensions) => {
|
|
8
|
+
if (!extensions?.length) {
|
|
9
|
+
return {
|
|
10
|
+
browser: [...constants.uaParserExtensions],
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const merged = extensions.reduce((acc, curr) => ({
|
|
14
|
+
browser: [...(acc.browser || []), ...(curr.browser || [])],
|
|
15
|
+
os: [...(acc.os || []), ...(curr.os || [])],
|
|
16
|
+
device: [...(acc.device || []), ...(curr.device || [])],
|
|
17
|
+
engine: [...(acc.engine || []), ...(curr.engine || [])],
|
|
18
|
+
}), {});
|
|
19
|
+
return {
|
|
20
|
+
...merged,
|
|
21
|
+
browser: [...(merged.browser || []), ...constants.uaParserExtensions],
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.mergeExtensions = mergeExtensions;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinkoff/user-agent",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.202",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"user-agent-data-types": "^0.3.1"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@tramvai/cli": "5.53.
|
|
32
|
+
"@tramvai/cli": "5.53.78",
|
|
33
33
|
"@types/ua-parser-js": "^0.7.33"
|
|
34
34
|
},
|
|
35
35
|
"license": "Apache-2.0"
|
package/lib/utils.d.ts
DELETED