UNPKG

@sberid/js-sdk

Version:

Javascript SDK для партнеров Сбер ID, упрощающая подключение SberbankID на сайте.

1,056 lines (1,041 loc) 32.5 kB
import { BrowserDetail, OSDetail, ParserConfig, PlatformDetail, AppDetail, AbstractParser, } from './interfaces'; import {APP_MAP, commonVersionIdentifier, OS_MAP, PLATFORMS_MAP} from './constants'; import {Parser} from './parser'; import {BrowserName} from 'constants/common'; const getFirstMatch = (regexp: RegExp, ua: string): string => { const match = ua.match(regexp); return (match && match.length > 0 && match[1]) || ''; }; const getSecondMatch = (regexp: RegExp, ua: string): string => { const match = ua.match(regexp); return (match && match.length > 1 && match[2]) || ''; }; export const browserParsersList: ParserConfig<BrowserDetail>[] = [ /* Googlebot */ { test: [/googlebot/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.GOOGLEBOT, }; const version = getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, /* Opera < 13.0 */ { test: [/opera/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.OPERA, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, /* Opera > 13.0 */ { test: [/opr\/|opios/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.OPERA, }; const version = getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, /* Opera Touch */ { test: [/opt/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.OPERA_TOUCH, }; const version = getFirstMatch(/(?:opt)[\s/](\S+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/SamsungBrowser/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SAMSUNG_INTERNET_FOR_ANDROID, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/Whale/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.NAVER_WHALE_BROWSER, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/MZBrowser/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.MZ_BROWSER, }; const version = getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/focus/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.FOCUS, }; const version = getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/swing/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SWING, }; const version = getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/coast/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.OPERA_COAST, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/yabrowser/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.YANDEX_BROWSER, }; const version = getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/ucbrowser/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.UC_BROWSER, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/Maxthon|mxios/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.MAXTHON, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/epiphany/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.EPIPHANY, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/puffin/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.PUFFIN, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/sleipnir/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SLEIPNIR, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/k-meleon/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.K_MELEON, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/micromessenger/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.WECHAT, }; const version = getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/msie|trident/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.INTERNET_EXPLORER, }; const version = getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/\sedg\//i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.MICROSOFT_EDGE, }; const version = getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/edg([ea]|ios)/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.MICROSOFT_EDGE, }; const version = getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/vivaldi/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.VIVALDI, }; const version = getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/seamonkey/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SEAMONKEY, }; const version = getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/sailfish/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SAILFISH, }; const version = getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/silk/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.AMAZON_SILK, }; const version = getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/phantom/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.PHANTOMJS, }; const version = getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/slimerjs/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SLIMERJS, }; const version = getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/blackberry|\bbb\d+/i, /rim\stablet/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.BLACKBERRY, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/(web|hpw)[o0]s/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.WEBOS_BROWSER, }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/bada/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.BADA, }; const version = getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/tizen/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.TIZEN, }; const version = getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/qupzilla/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.QUPZILLA, }; const version = getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/firefox|iceweasel|fxios/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.FIREFOX, }; const version = getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/electron/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.ELECTRON, }; const version = getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/chromium/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.CHROMIUM, }; const version = getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, { test: [/chrome|crios|crmo/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.CHROME, }; const version = getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; }, }, /* Android Browser */ { test: (parser: AbstractParser): boolean => { const notLikeAndroid = !parser.test(/like android/i); const butAndroid = parser.test(/android/i); return notLikeAndroid && butAndroid; }, describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.ANDROID_BROWSER, }; const version = getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, /* PlayStation 4 */ { test: [/playstation 4/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.PLAYSTATION_4, }; const version = getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, /* Safari */ { test: [/safari|applewebkit/i], describe: (ua: string): BrowserDetail => { const browser: BrowserDetail = { name: BrowserName.SAFARI, }; const version = getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; }, }, /* Something else */ { test: [/.*/i], describe: (ua: string): BrowserDetail => { /* Here we try to make sure that there are explicit details about the device * in order to decide what regexp exactly we want to apply * (as there is a specific decision based on that conclusion) */ const regexpWithoutDeviceSpec = /^(.*)\/(.*) /; const regexpWithDeviceSpec = /^(.*)\/(.*)[ \t]\((.*)/; const hasDeviceSpec = ua.search('\\(') !== -1; const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec; return { name: getFirstMatch(regexp, ua), version: getSecondMatch(regexp, ua), }; }, }, ]; export const appParsersList: ParserConfig<AppDetail>[] = [ /* Facebook Messenger */ { test: [/\bFB[\w_]+\/(Messenger|MESSENGER)/], describe: (): AppDetail => ({ name: APP_MAP.messenger, }), }, /* Facebook */ { test: [/\bFB[\w_]+\//], describe: (): AppDetail => ({ name: APP_MAP.facebook, }), }, /* Twitter */ { test: [/\bTwitter/i], describe: (): AppDetail => ({ name: APP_MAP.twitter, }), }, /* Line */ { test: [/\bLine\//i], describe: (): AppDetail => ({ name: APP_MAP.line, }), }, /* Wechat */ { test: [/\bMicroMessenger\//i], describe: (): AppDetail => ({ name: APP_MAP.wechat, }), }, /* Instagram */ { test: [/\bInstagram/i], describe: (): AppDetail => ({ name: APP_MAP.instagram, }), }, /* Electron Application */ { test: [/\bElectron/i], describe: (): AppDetail => ({ name: APP_MAP.electron, }), }, /* Outlook */ { test: [/\bOutlook/i], describe: (): AppDetail => ({ name: APP_MAP.outlook, }), }, /* Pinterest App */ { test: [/\bPinterest/i], describe: (): AppDetail => ({ name: APP_MAP.pinterest, }), }, /* Thunderbird App */ { test: [/\bThunderbird/i], describe: (): AppDetail => ({ name: APP_MAP.thunderbird, }), }, /* Webview Based Browser */ { test: [/\bwebview/i, /; wv/], describe: (): AppDetail => ({ name: APP_MAP.webview, }), }, /* Yandex App Browser */ { test: [/\bYaApp/i, /\bYandexSearch/i], describe: (): AppDetail => ({ name: APP_MAP.yaapp, }), }, ]; export const osParsersList: ParserConfig<OSDetail>[] = [ { test: [/Roku\/DVP/], describe: (ua: string): OSDetail => { const version = getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, ua); return { name: OS_MAP.Roku, version: version, }; }, }, /* Windows Phone */ { test: [/windows phone/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, ua); return { name: OS_MAP.WindowsPhone, version: version, }; }, }, /* Windows */ { test: [/windows/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, ua); return { name: OS_MAP.Windows, version: version, }; }, }, /* Firefox on iPad */ { test: [/Macintosh(.*?) FxiOS(.*?)\//], describe: (ua: string): OSDetail => { const result: BrowserDetail = { name: OS_MAP.iOS, }; const version = getSecondMatch(/(Version\/)(\d[\d.]+)/, ua); if (version) { result.version = version; } return result; }, }, /* macOS */ { test: [/macintosh/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, ua).replace(/[_\s]/g, '.'); return { name: OS_MAP.MacOS, version: version, }; }, }, /* iOS */ { test: [/(ipod|iphone|ipad)/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, ua).replace( /[_\s]/g, '.', ); return { name: OS_MAP.iOS, version: version, }; }, }, /* Android */ { test: (parser: AbstractParser): boolean => { const notLikeAndroid = !parser.test(/like android/i); const butAndroid = parser.test(/android/i); return notLikeAndroid && butAndroid; }, describe: (ua: string): OSDetail => { const version = getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, ua); const os = { name: OS_MAP.Android, version: version, }; return os; }, }, /* WebOS */ { test: [/(web|hpw)[o0]s/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, ua); const os: BrowserDetail = { name: OS_MAP.WebOS, }; if (version) { os.version = version; } return os; }, }, /* BlackBerry */ { test: [/blackberry|\bbb\d+/i, /rim\stablet/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, ua) || getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, ua) || getFirstMatch(/\bbb(\d+)/i, ua); return { name: OS_MAP.BlackBerry, version: version, }; }, }, /* Bada */ { test: [/bada/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/bada\/(\d+(\.\d+)*)/i, ua); return { name: OS_MAP.Bada, version: version, }; }, }, /* Tizen */ { test: [/tizen/i], describe: (ua: string): OSDetail => { const version = getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, ua); return { name: OS_MAP.Tizen, version: version, }; }, }, /* Linux */ { test: [/linux/i], describe: (): OSDetail => ({ name: OS_MAP.Linux, }), }, /* Chrome OS */ { test: [/CrOS/], describe: (): OSDetail => ({ name: OS_MAP.ChromeOS, }), }, /* Playstation 4 */ { test: [/PlayStation 4/], describe: (ua: string): OSDetail => { const version = getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, ua); return { name: OS_MAP.PlayStation4, version: version, }; }, }, ]; export const platformParsersList = [ /* Googlebot */ { test: [/googlebot/i], describe: (): PlatformDetail => ({ type: 'bot', vendor: 'Google', }), }, /* Huawei */ { test: [/huawei/i], describe: (ua: string): PlatformDetail => { const model = getFirstMatch(/(can-l01)/i, ua) && 'Nova'; const platform = { type: PLATFORMS_MAP.mobile, vendor: 'Huawei', model: '', }; if (model) { platform.model = model; } return platform; }, }, /* Nexus Tablet */ { test: [/nexus\s*(?:7|8|9|10).*/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, vendor: 'Nexus', }), }, /* iPad */ { test: [/ipad/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, vendor: 'Apple', model: 'iPad', }), }, /* Firefox on iPad */ { test: [/Macintosh(.*?) FxiOS(.*?)\//], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, vendor: 'Apple', model: 'iPad', }), }, /* Amazon Kindle Fire */ { test: [/kftt build/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, vendor: 'Amazon', model: 'Kindle Fire HD 7', }), }, /* Another Amazon Tablet with Silk */ { test: [/silk/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, vendor: 'Amazon', }), }, /* Tablet */ { test: [/tablet/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, }), }, /* iPod/iPhone */ { test: (parser: AbstractParser): boolean => { const iDevice = parser.test(/ipod|iphone/i); const likeIDevice = parser.test(/like (ipod|iphone)/i); return iDevice && !likeIDevice; }, describe: (ua: string): PlatformDetail => { const model = getFirstMatch(/(ipod|iphone)/i, ua); return { type: PLATFORMS_MAP.mobile, vendor: 'Apple', model: model, }; }, }, /* Nexus Mobile */ { test: [/nexus\s*[0-6].*/i, /galaxy nexus/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, vendor: 'Nexus', }), }, /* Mobile */ { test: [/[^-]mobi/i], describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, }), }, /* BlackBerry */ { test: (parser: AbstractParser): boolean => parser.getBrowserName() === BrowserName.BLACKBERRY, describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, vendor: 'BlackBerry', }), }, /* Bada */ { test: (parser: AbstractParser): boolean => parser.getBrowserName() === BrowserName.BADA, describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, }), }, /* Windows Phone */ { test: (parser: AbstractParser): boolean => parser.getBrowserName() === BrowserName.WINDOWS_PHONE, describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, vendor: 'Microsoft', }), }, /* Android Tablet */ { test: (parser: AbstractParser): boolean => { const osMajorVersion = Number(String(parser.getOSVersion())?.split('.')[0]); return parser.getOSName(true) === 'android' && osMajorVersion >= 3; }, describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tablet, }), }, /* Android Mobile */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'android', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.mobile, }), }, /* desktop */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'macos', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.desktop, vendor: 'Apple', }), }, /* Windows */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'windows', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.desktop, }), }, /* Linux */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'linux', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.desktop, }), }, /* PlayStation 4 */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'playstation 4', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tv, }), }, /* Roku */ { test: (parser: AbstractParser): boolean => parser.getOSName(true) === 'roku', describe: (): PlatformDetail => ({ type: PLATFORMS_MAP.tv, }), }, ]; export const textToLowerCase = (text?: string): string => { return String(text).toLowerCase() || ''; };