[enums] Clean up enum imports & create build script

This commit is contained in:
Faisal Salman 2025-08-29 17:53:09 +07:00
parent 7dcbb8def3
commit 2078b1ec92
10 changed files with 485 additions and 430 deletions

View File

@ -2,15 +2,18 @@
/* jshint esversion: 6 */ /* jshint esversion: 6 */
const fs = require('fs'); const fs = require('fs');
const generateMJS = (module) => { const defaultReplacements = {
let { src, dest, title, replacements } = module; mjs: [
let text = fs.readFileSync(src, 'utf-8');
replacements.push(
[/const (.+?)\s*=\s*require\(\'\.(.+)\'\)/ig, 'import $1 from \'\.$2.mjs\''], [/const (.+?)\s*=\s*require\(\'\.(.+)\'\)/ig, 'import $1 from \'\.$2.mjs\''],
[/const (.+?)\s*=\s*require\(\'(.+)\'\)/ig, 'import $1 from \'$2\''], [/const (.+?)\s*=\s*require\(\'(.+)\'\)/ig, 'import $1 from \'$2\''],
[/module\.exports =/ig, 'export'] [/module\.exports =/ig, 'export']
); ]
}
const generateFile = (module) => {
let { src, dest, title, replacements } = module;
let text = fs.readFileSync(src, 'utf-8');
replacements.forEach(rep => { replacements.forEach(rep => {
text = text.replace(rep[0], rep[1]); text = text.replace(rep[0], rep[1]);
}); });
@ -18,42 +21,54 @@ const generateMJS = (module) => {
console.log(`Generate ${dest}`); console.log(`Generate ${dest}`);
fs.writeFileSync(dest, fs.writeFileSync(dest,
`// Generated ESM version of ${title} `// ${title}
// DO NOT EDIT THIS FILE! // DO NOT EDIT THIS FILE!
// Source: /${src} // Source: /${src}
${text}`, 'utf-8'); ${text}`, 'utf-8');
}; };
const modules = [ const files = [
{ {
src : 'src/main/ua-parser.js', src : 'src/main/ua-parser.js',
dest : 'src/main/ua-parser.mjs', dest : 'src/main/ua-parser.mjs',
title : 'ua-parser-js', title : 'Generated ESM version of ua-parser-js',
replacements : [ replacements : [
[/\(func[\s\S]+strict\';/ig, ''], [/\(func[\s\S]+strict\';/ig, ''],
[/esversion\: 3/ig, 'esversion: 6'], [/esversion\: 3/ig, 'esversion: 6'],
[/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};'] [/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};'],
...defaultReplacements.mjs
] ]
},{ },
{
src : 'src/enums/ua-parser-enums.js', src : 'src/enums/ua-parser-enums.js',
dest :'src/enums/ua-parser-enums.mjs', dest :'src/enums/ua-parser-enums.mjs',
title : 'ua-parser-js/enums', title : 'Generated ESM version of ua-parser-js/enums',
replacements : [] replacements : [...defaultReplacements.mjs]
},
{
src : 'src/enums/ua-parser-enums.js',
dest :'src/enums/ua-parser-enums.d.ts',
title : 'Generated type declarations of ua-parser-js/enums',
replacements : [
[/(const .+) = object\.freeze\(/ig, 'export $1: Readonly<'],
[/(const .+) =( .+;)/ig, 'export $1: typeof$2'],
[/}\);/ig, '}>;'],
[/module\.exports =.+/igs, '']
]
}, },
{ {
src : 'src/extensions/ua-parser-extensions.js', src : 'src/extensions/ua-parser-extensions.js',
dest : 'src/extensions/ua-parser-extensions.mjs', dest : 'src/extensions/ua-parser-extensions.mjs',
title : 'ua-parser-js/extensions', title : 'Generated ESM version of ua-parser-js/extensions',
replacements : [] replacements : [...defaultReplacements.mjs]
}, },
{ {
src : 'src/helpers/ua-parser-helpers.js', src : 'src/helpers/ua-parser-helpers.js',
dest : 'src/helpers/ua-parser-helpers.mjs', dest : 'src/helpers/ua-parser-helpers.mjs',
title : 'ua-parser-js/helpers', title : 'Generated ESM version of ua-parser-js/helpers',
replacements : [] replacements : [...defaultReplacements.mjs]
} }
]; ];
modules.forEach(module => generateMJS(module)); files.forEach(module => generateFile(module));

View File

@ -1,160 +1,171 @@
// Type definitions for Enums submodule of UAParser.js v2.0.4 // Generated type declarations of ua-parser-js/enums
// Project: https://github.com/faisalman/ua-parser-js // DO NOT EDIT THIS FILE!
// Definitions by: Faisal Salman <https://github.com/faisalman> // Source: /src/enums/ua-parser-enums.js
///////////////////////////////////////////////
/* Enums for UAParser.js v2.0.4
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
//////////////////////////////////////////////
/*jshint esversion: 6 */
export const BrowserName: Readonly<{ export const BrowserName: Readonly<{
'115': "115", '115': '115',
'2345': "2345", '2345': '2345',
'360': "360", '360': '360',
ALIPAY: "Alipay", ALIPAY: 'Alipay',
AMAYA: "Amaya", AMAYA: 'Amaya',
ANDROID: "Android Browser", ANDROID: 'Android Browser',
ARORA: "Arora", ARORA: 'Arora',
AVANT: "Avant", AVANT: 'Avant',
AVAST: "Avast Secure Browser", AVAST: 'Avast Secure Browser',
AVG: "AVG Secure Browser", AVG: 'AVG Secure Browser',
BAIDU: "Baidu Browser", BAIDU: 'Baidu Browser',
BASILISK: "Basilisk", BASILISK: 'Basilisk',
BLAZER: "Blazer", BLAZER: 'Blazer',
BOLT: "Bolt", BOLT: 'Bolt',
BOWSER: "Bowser", BOWSER: 'Bowser',
BRAVE: "Brave", BRAVE: 'Brave',
CAMINO: "Camino", CAMINO: 'Camino',
CHIMERA: "Chimera", CHIMERA: 'Chimera',
CHROME: "Chrome", CHROME: 'Chrome',
CHROME_HEADLESS: "Chrome Headless", CHROME_HEADLESS: 'Chrome Headless',
CHROME_MOBILE: "Mobile Chrome", CHROME_MOBILE: 'Mobile Chrome',
CHROME_WEBVIEW: "Chrome WebView", CHROME_WEBVIEW: 'Chrome WebView',
CHROMIUM: "Chromium", CHROMIUM: 'Chromium',
COBALT: "Cobalt", COBALT: 'Cobalt',
COC_COC: "Coc Coc", COC_COC: 'Coc Coc',
CONKEROR: "Conkeror", CONKEROR: 'Conkeror',
DAUM: "Daum", DAUM: 'Daum',
DILLO: "Dillo", DILLO: 'Dillo',
DOLPHIN: "Dolphin", DOLPHIN: 'Dolphin',
DOOBLE: 'Dooble', DOOBLE: 'Dooble',
DORIS: "Doris", DORIS: 'Doris',
DRAGON: "Dragon", DRAGON: 'Dragon',
DUCKDUCKGO: "DuckDuckGo", DUCKDUCKGO: 'DuckDuckGo',
ECOSIA: "Ecosia", ECOSIA: 'Ecosia',
EDGE: "Edge", EDGE: 'Edge',
EDGE_WEBVIEW: "Edge WebView", EDGE_WEBVIEW: 'Edge WebView',
EDGE_WEBVIEW2: "Edge WebView2", EDGE_WEBVIEW2: 'Edge WebView2',
EPIPHANY: "Epiphany", EPIPHANY: 'Epiphany',
FACEBOOK: "Facebook", FACEBOOK: 'Facebook',
FALKON: "Falkon", FALKON: 'Falkon',
FIREBIRD: "Firebird", FIREBIRD: 'Firebird',
FIREFOX: "Firefox", FIREFOX: 'Firefox',
FIREFOX_FOCUS: "Firefox Focus", FIREFOX_FOCUS: 'Firefox Focus',
FIREFOX_MOBILE: "Mobile Firefox", FIREFOX_MOBILE: 'Mobile Firefox',
FIREFOX_REALITY: "Firefox Reality", FIREFOX_REALITY: 'Firefox Reality',
FENNEC: "Fennec", FENNEC: 'Fennec',
FLOCK: "Flock", FLOCK: 'Flock',
FLOW: "Flow", FLOW: 'Flow',
GO: "GoBrowser", GO: 'GoBrowser',
GOOGLE_SEARCH: "GSA", GOOGLE_SEARCH: 'GSA',
HELIO: "Helio", HELIO: 'Helio',
HEYTAP: "HeyTap", HEYTAP: 'HeyTap',
HONOR: "Honor", HONOR: 'Honor',
HUAWEI: "Huawei Browser", HUAWEI: 'Huawei Browser',
ICAB: "iCab", ICAB: 'iCab',
ICE: "ICE Browser", ICE: 'ICE Browser',
ICEAPE: "IceApe", ICEAPE: 'IceApe',
ICECAT: "IceCat", ICECAT: 'IceCat',
ICEDRAGON: "IceDragon", ICEDRAGON: 'IceDragon',
ICEWEASEL: "IceWeasel", ICEWEASEL: 'IceWeasel',
IE: "IE", IE: 'IE',
INSTAGRAM: "Instagram", INSTAGRAM: 'Instagram',
IRIDIUM: "Iridium", IRIDIUM: 'Iridium',
IRON: "Iron", IRON: 'Iron',
JASMINE: "Jasmine", JASMINE: 'Jasmine',
KONQUEROR: "Konqueror", KONQUEROR: 'Konqueror',
KAKAO: "KakaoTalk", KAKAO: 'KakaoTalk',
KHTML: "KHTML", KHTML: 'KHTML',
K_MELEON: "K-Meleon", K_MELEON: 'K-Meleon',
KLAR: "Klar", KLAR: 'Klar',
KLARNA: "Klarna", KLARNA: 'Klarna',
KINDLE: "Kindle", KINDLE: 'Kindle',
LENOVO: "Smart Lenovo Browser", LENOVO: 'Smart Lenovo Browser',
LADYBIRD: "Ladybird", LADYBIRD: 'Ladybird',
LG: "LG Browser", LG: 'LG Browser',
LIBREWOLF: "LibreWolf", LIBREWOLF: 'LibreWolf',
LIEBAO: "LBBROWSER", LIEBAO: 'LBBROWSER',
LINE: "Line", LINE: 'Line',
LINKEDIN: "LinkedIn", LINKEDIN: 'LinkedIn',
LINKS: "Links", LINKS: 'Links',
LUNASCAPE: "Lunascape", LUNASCAPE: 'Lunascape',
LYNX: "Lynx", LYNX: 'Lynx',
MAEMO: "Maemo Browser", MAEMO: 'Maemo Browser',
MAXTHON: "Maxthon", MAXTHON: 'Maxthon',
MIDORI: "Midori", MIDORI: 'Midori',
MINIMO: "Minimo", MINIMO: 'Minimo',
MIUI: "MIUI Browser", MIUI: 'MIUI Browser',
MOZILLA: "Mozilla", MOZILLA: 'Mozilla',
MOSAIC: "Mosaic", MOSAIC: 'Mosaic',
NAVER: "Naver", NAVER: 'Naver',
NETFRONT: "NetFront", NETFRONT: 'NetFront',
NETSCAPE: "Netscape", NETSCAPE: 'Netscape',
NETSURF: "Netsurf", NETSURF: 'Netsurf',
NOKIA: "Nokia Browser", NOKIA: 'Nokia Browser',
OBIGO: "Obigo", OBIGO: 'Obigo',
OCULUS: "Oculus Browser", OCULUS: 'Oculus Browser',
OMNIWEB: "OmniWeb", OMNIWEB: 'OmniWeb',
OPERA: "Opera", OPERA: 'Opera',
OPERA_COAST: "Opera Coast", OPERA_COAST: 'Opera Coast',
OPERA_GX: "Opera GX", OPERA_GX: 'Opera GX',
OPERA_MINI: "Opera Mini", OPERA_MINI: 'Opera Mini',
OPERA_MOBI: "Opera Mobi", OPERA_MOBI: 'Opera Mobi',
OPERA_TABLET: "Opera Tablet", OPERA_TABLET: 'Opera Tablet',
OPERA_TOUCH: "Opera Touch", OPERA_TOUCH: 'Opera Touch',
OTTER: "Otter", OTTER: 'Otter',
OVI: "OviBrowser", OVI: 'OviBrowser',
PALEMOON: "PaleMoon", PALEMOON: 'PaleMoon',
PHANTOMJS: "PhantomJS", PHANTOMJS: 'PhantomJS',
PHOENIX: "Phoenix", PHOENIX: 'Phoenix',
PICOBROWSER: "Pico Browser", PICOBROWSER: 'Pico Browser',
POLARIS: "Polaris", POLARIS: 'Polaris',
PUFFIN: "Puffin", PUFFIN: 'Puffin',
QQ: "QQBrowser", QQ: 'QQBrowser',
QQ_LITE: "QQBrowserLite", QQ_LITE: 'QQBrowserLite',
QUARK: "Quark", QUARK: 'Quark',
QUPZILLA: "QupZilla", QUPZILLA: 'QupZilla',
QUTEBROWSER: "qutebrowser", QUTEBROWSER: 'qutebrowser',
REKONQ: "rekonq", REKONQ: 'rekonq',
ROCKMELT: "Rockmelt", ROCKMELT: 'Rockmelt',
SAFARI: "Safari", SAFARI: 'Safari',
SAFARI_MOBILE: "Mobile Safari", SAFARI_MOBILE: 'Mobile Safari',
SAILFISH: "Sailfish Browser", SAILFISH: 'Sailfish Browser',
SAMSUNG: "Samsung Internet", SAMSUNG: 'Samsung Internet',
SEAMONKEY: "SeaMonkey", SEAMONKEY: 'SeaMonkey',
SILK: "Silk", SILK: 'Silk',
SKYFIRE: "Skyfire", SKYFIRE: 'Skyfire',
SLEIPNIR: "Sleipnir", SLEIPNIR: 'Sleipnir',
SLIMBOAT: "SlimBoat", SLIMBOAT: 'SlimBoat',
SLIMBROWSER: "SlimBrowser", SLIMBROWSER: 'SlimBrowser',
SLIMJET: "Slimjet", SLIMJET: 'Slimjet',
SNAPCHAT: "Snapchat", SNAPCHAT: 'Snapchat',
SOGOU_EXPLORER: "Sogou Explorer", SOGOU_EXPLORER: 'Sogou Explorer',
SOGOU_MOBILE: "Sogou Mobile", SOGOU_MOBILE: 'Sogou Mobile',
SURF: "Surf", SURF: 'Surf',
SWIFTFOX: "Swiftfox", SWIFTFOX: 'Swiftfox',
TESLA: "Tesla", TESLA: 'Tesla',
TIKTOK: "TikTok", TIKTOK: 'TikTok',
TIZEN: "Tizen Browser", TIZEN: 'Tizen Browser',
TWITTER: "Twitter", TWITTER: 'Twitter',
UC: "UCBrowser", UC: 'UCBrowser',
UP: "UP.Browser", UP: 'UP.Browser',
VIVALDI: "Vivaldi", VIVALDI: 'Vivaldi',
VIVO: "Vivo Browser", VIVO: 'Vivo Browser',
W3M: "w3m", W3M: 'w3m',
WATERFOX: "Waterfox", WATERFOX: 'Waterfox',
WEBKIT: "WebKit", WEBKIT: 'WebKit',
WECHAT: "WeChat", WECHAT: 'WeChat',
WEIBO: "Weibo", WEIBO: 'Weibo',
WHALE: "Whale", WHALE: 'Whale',
WOLVIC: "Wolvic", WOLVIC: 'Wolvic',
YANDEX: "Yandex", YANDEX: 'Yandex',
ZALO: "Zalo", ZALO: 'Zalo'
// TODO : test!
}>; }>;
/** /**
* @deprecated Use `BrowserName` instead * @deprecated Use `BrowserName` instead
@ -162,34 +173,34 @@ export const BrowserName: Readonly<{
export const Browser: typeof BrowserName; export const Browser: typeof BrowserName;
export const BrowserType: Readonly<{ export const BrowserType: Readonly<{
CRAWLER: "crawler", CRAWLER: 'crawler',
CLI: "cli", CLI: 'cli',
EMAIL: "email", EMAIL: 'email',
FETCHER: "fetcher", FETCHER: 'fetcher',
INAPP: "inapp", INAPP: 'inapp',
MEDIAPLAYER: "mediaplayer", MEDIAPLAYER: 'mediaplayer',
LIBRARY: "library", LIBRARY: 'library'
}>; }>;
export const CPUArch: Readonly<{ export const CPUArch: Readonly<{
'68K': "68k", '68K': '68k',
ALPHA: "alpha", ALPHA: 'alpha',
ARM: "arm", ARM : 'arm',
ARM_64: "arm64", ARM_64: 'arm64',
ARM_HF: "armhf", ARM_HF: 'armhf',
AVR: "avr", AVR: 'avr',
AVR_32: "avr32", AVR_32: 'avr32',
IA64: "ia64", IA64: 'ia64',
IRIX: "irix", IRIX: 'irix',
IRIX_64: "irix64", IRIX_64: 'irix64',
MIPS: "mips", MIPS: 'mips',
MIPS_64: "mips64", MIPS_64: 'mips64',
PA_RISC: "pa-risc", PA_RISC: 'pa-risc',
PPC: "ppc", PPC: 'ppc',
SPARC: "sparc", SPARC: 'sparc',
SPARC_64: "sparc64", SPARC_64: 'sparc64',
X86: "ia32", X86: 'ia32',
X86_64: "amd64", X86_64: 'amd64'
}>; }>;
/** /**
* @deprecated Use `CPUArch` instead * @deprecated Use `CPUArch` instead
@ -197,14 +208,14 @@ export const CPUArch: Readonly<{
export const CPU: typeof CPUArch; export const CPU: typeof CPUArch;
export const DeviceType: Readonly<{ export const DeviceType: Readonly<{
CONSOLE: "console", CONSOLE: 'console',
DESKTOP: "desktop", DESKTOP: 'desktop',
EMBEDDED: "embedded", EMBEDDED: 'embedded',
MOBILE: "mobile", MOBILE: 'mobile',
SMARTTV: "smarttv", SMARTTV: 'smarttv',
TABLET: "tablet", TABLET: 'tablet',
WEARABLE: "wearable", WEARABLE: 'wearable',
XR: "xr" XR: 'xr'
}>; }>;
/** /**
* @deprecated Use `DeviceType` instead * @deprecated Use `DeviceType` instead
@ -212,78 +223,80 @@ export const DeviceType: Readonly<{
export const Device: typeof DeviceType; export const Device: typeof DeviceType;
export const DeviceVendor: Readonly<{ export const DeviceVendor: Readonly<{
ACER: "Acer", ACER: 'Acer',
ADVAN: "Advan", ADVAN: 'Advan',
ALCATEL: "Alcatel", ALCATEL: 'Alcatel',
APPLE: "Apple", APPLE: 'Apple',
AMAZON: "Amazon", AMAZON: 'Amazon',
ARCHOS: "Archos", ARCHOS: 'Archos',
ASUS: "ASUS", ASUS: 'ASUS',
ATT: "AT&T", ATT: 'AT&T',
BENQ: "BenQ", BENQ: 'BenQ',
BLACKBERRY: "BlackBerry", BLACKBERRY: 'BlackBerry',
BLU: "BLU", BLU: 'BLU',
CAT: "Cat", CAT: 'Cat',
DELL: "Dell", DELL: 'Dell',
ENERGIZER: "Energizer", ENERGIZER: 'Energizer',
ESSENTIAL: "Essential", ESSENTIAL: 'Essential',
FACEBOOK: "Facebook", FACEBOOK: 'Facebook',
FAIRPHONE: "Fairphone", FAIRPHONE: 'Fairphone',
GEEKSPHONE: "GeeksPhone", GEEKSPHONE: 'GeeksPhone',
GENERIC: "Generic", GENERIC: 'Generic',
GOOGLE: "Google", GOOGLE: 'Google',
HMD: "HMD", HMD: 'HMD',
HP: "HP", HP: 'HP',
HTC: "HTC", HTC: 'HTC',
HUAWEI: "Huawei", HUAWEI: 'Huawei',
IMO: "IMO", IMO: 'IMO',
INFINIX: "Infinix", INFINIX: 'Infinix',
ITEL: "itel", ITEL: 'itel',
JOLLA: "Jolla", JOLLA: 'Jolla',
KOBO: "Kobo", KOBO: 'Kobo',
LAVA: "Lava", LAVA: 'Lava',
LENOVO: "Lenovo", LENOVO: 'Lenovo',
LG: "LG", LG: 'LG',
MEIZU: "Meizu", MEIZU: 'Meizu',
MICROMAX: "Micromax", MICROMAX: 'Micromax',
MICROSOFT: "Microsoft", MICROSOFT: 'Microsoft',
MOTOROLA: "Motorola", MOTOROLA: 'Motorola',
NEXIAN: "Nexian", NEXIAN: 'Nexian',
NINTENDO: "Nintendo", NINTENDO: 'Nintendo',
NOKIA: "Nokia", NOKIA: 'Nokia',
NOTHING: "Nothing", NOTHING: 'Nothing',
NVIDIA: "Nvidia", NVIDIA: 'Nvidia',
ONEPLUS: "OnePlus", ONEPLUS: 'OnePlus',
OPPO: "OPPO", OPPO: 'OPPO',
OUYA: "Ouya", OUYA: 'Ouya',
PALM: "Palm", PALM: 'Palm',
PANASONIC: "Panasonic", PANASONIC: 'Panasonic',
PEBBLE: "Pebble", PEBBLE: 'Pebble',
PHILIPS: "Philips", PHILIPS: 'Philips',
PICO: "Pico", PICO: 'Pico',
POLYTRON: "Polytron", POLYTRON: 'Polytron',
REALME: "Realme", REALME: 'Realme',
RETROID: "Retroid", RETROID: 'Retroid',
RIM: "RIM", RIM: 'RIM',
ROKU: "Roku", ROKU: 'Roku',
SAMSUNG: "Samsung", SAMSUNG: 'Samsung',
SHARP: "Sharp", SHARP: 'Sharp',
SIEMENS: "Siemens", SIEMENS: 'Siemens',
SMARTFREN: "Smartfren", SMARTFREN: 'Smartfren',
SONY: "Sony", SONY: 'Sony',
SPRINT: "Sprint", SPRINT: 'Sprint',
TCL: "TCL", TCL: 'TCL',
TECHNISAT: "TechniSAT", TECHNISAT: 'TechniSAT',
TECNO: "Tecno", TECNO: 'Tecno',
TESLA: "Tesla", TESLA: 'Tesla',
ULEFONE: "Ulefone", ULEFONE: 'Ulefone',
VIVO: "Vivo", VIVO: 'Vivo',
VIZIO: "Vizio", VIZIO: 'Vizio',
VODAFONE: "Vodafone", VODAFONE: 'Vodafone',
XBOX: "Xbox", XBOX: 'Xbox',
XIAOMI: "Xiaomi", XIAOMI: 'Xiaomi',
ZEBRA: "Zebra", ZEBRA: 'Zebra',
ZTE: "ZTE", ZTE: 'ZTE',
// TODO : test!
}>; }>;
/** /**
* @deprecated Use `DeviceVendor` instead * @deprecated Use `DeviceVendor` instead
@ -291,26 +304,26 @@ export const DeviceVendor: Readonly<{
export const Vendor: typeof DeviceVendor; export const Vendor: typeof DeviceVendor;
export const EngineName: Readonly<{ export const EngineName: Readonly<{
AMAYA: "Amaya", AMAYA: 'Amaya',
ARKWEB: "ArkWeb", ARKWEB: 'ArkWeb',
BLINK: "Blink", BLINK: 'Blink',
EDGEHTML: "EdgeHTML", EDGEHTML: 'EdgeHTML',
FLOW: "Flow", FLOW: 'Flow',
GECKO: "Gecko", GECKO: 'Gecko',
GOANNA: "Goanna", GOANNA: 'Goanna',
ICAB: "iCab", ICAB: 'iCab',
KHTML: "KHTML", KHTML: 'KHTML',
LIBWEB: "LibWeb", LIBWEB: 'LibWeb',
LINKS: "Links", LINKS: 'Links',
LYNX: "Lynx", LYNX: 'Lynx',
NETFRONT: "NetFront", NETFRONT: 'NetFront',
NETSURF: "NetSurf", NETSURF: 'NetSurf',
PRESTO: "Presto", PRESTO: 'Presto',
SERVO: "Servo", SERVO: 'Servo',
TASMAN: "Tasman", TASMAN: 'Tasman',
TRIDENT: "Trident", TRIDENT: 'Trident',
W3M: "w3m", W3M: 'w3m',
WEBKIT: "WebKit", WEBKIT: 'WebKit'
}>; }>;
/** /**
* @deprecated Use `EngineName` instead * @deprecated Use `EngineName` instead
@ -318,98 +331,100 @@ export const EngineName: Readonly<{
export const Engine: typeof EngineName; export const Engine: typeof EngineName;
export const OSName: Readonly<{ export const OSName: Readonly<{
AIX: "AIX", AIX: 'AIX',
AMIGA_OS: "Amiga OS", AMIGA_OS: 'Amiga OS',
ANDROID: "Android", ANDROID: 'Android',
ANDROID_X86: "Android-x86", ANDROID_X86: 'Android-x86',
ARCAOS: "ArcaOS", ARCAOS: 'ArcaOS',
ARCH: "Arch", ARCH: 'Arch',
BADA: "Bada", BADA: 'Bada',
BEOS: "BeOS", BEOS: 'BeOS',
BLACKBERRY: "BlackBerry", BLACKBERRY: 'BlackBerry',
CENTOS: "CentOS", CENTOS: 'CentOS',
CHROME_OS: "Chrome OS", CHROME_OS: 'Chrome OS',
CHROMECAST: "Chromecast", CHROMECAST: 'Chromecast',
CHROMECAST_ANDROID: "Chromecast Android", CHROMECAST_ANDROID: 'Chromecast Android',
CHROMECAST_FUCHSIA: "Chromecast Fuchsia", CHROMECAST_FUCHSIA: 'Chromecast Fuchsia',
CHROMECAST_LINUX: "Chromecast Linux", CHROMECAST_LINUX: 'Chromecast Linux',
CHROMECAST_SMARTSPEAKER: "Chromecast SmartSpeaker", CHROMECAST_SMARTSPEAKER: 'Chromecast SmartSpeaker',
CONTIKI: "Contiki", CONTIKI: 'Contiki',
DEBIAN: "Debian", DEBIAN: 'Debian',
DEEPIN: "Deepin", DEEPIN: 'Deepin',
DRAGONFLY: "DragonFly", DRAGONFLY: 'DragonFly',
ELEMENTARY_OS: "elementary OS", ELEMENTARY_OS: 'elementary OS',
FEDORA: "Fedora", FEDORA: 'Fedora',
FIREFOX_OS: "Firefox OS", FIREFOX_OS: 'Firefox OS',
FREEBSD: "FreeBSD", FREEBSD: 'FreeBSD',
FUCHSIA: "Fuchsia", FUCHSIA: 'Fuchsia',
GENTOO: "Gentoo", GENTOO: 'Gentoo',
GHOSTBSD: "GhostBSD", GHOSTBSD: 'GhostBSD',
GNU: "GNU", GNU: 'GNU',
HAIKU: "Haiku", HAIKU: 'Haiku',
HARMONYOS: "HarmonyOS", HARMONYOS: 'HarmonyOS',
HP_UX: "HP-UX", HP_UX: 'HP-UX',
HURD: "Hurd", HURD: 'Hurd',
IOS: "iOS", IOS: 'iOS',
JOLI: "Joli", JOLI: 'Joli',
KAIOS: "KaiOS", KAIOS: 'KaiOS',
KNOPPIX: "Knoppix", KNOPPIX: 'Knoppix',
KUBUNTU: "Kubuntu", KUBUNTU: 'Kubuntu',
LINPUS: "Linpus", LINPUS: 'Linpus',
LINSPIRE: "Linspire", LINSPIRE: 'Linspire',
LINUX: "Linux", LINUX: 'Linux',
MACOS: "macOS", MACOS: 'macOS',
MAEMO: "Maemo", MAEMO: 'Maemo',
MAGEIA: "Mageia", MAGEIA: 'Mageia',
MANDRIVA: "Mandriva", MANDRIVA: 'Mandriva',
MANJARO: "Manjaro", MANJARO: 'Manjaro',
MEEGO: "MeeGo", MEEGO: 'MeeGo',
MINIX: "Minix", MINIX: 'Minix',
MINT: "Mint", MINT: 'Mint',
MORPH_OS: "Morph OS", MORPH_OS: 'Morph OS',
NETBSD: "NetBSD", NETBSD: 'NetBSD',
NETRANGE: "NetRange", NETRANGE: 'NetRange',
NETTV: "NetTV", NETTV: 'NetTV',
NINTENDO: "Nintendo", NINTENDO: 'Nintendo',
OPENHARMONY: "OpenHarmony", OPENHARMONY: 'OpenHarmony',
OPENBSD: "OpenBSD", OPENBSD: 'OpenBSD',
OPENVMS: "OpenVMS", OPENVMS: 'OpenVMS',
OS2: "OS/2", OS2: 'OS/2',
PALM: "Palm", PALM: 'Palm',
PC_BSD: "PC-BSD", PC_BSD: 'PC-BSD',
PCLINUXOS: "PCLinuxOS", PCLINUXOS: 'PCLinuxOS',
PICO: "Pico", PICO: 'Pico',
PLAN9: "Plan9", PLAN9: 'Plan9',
PLAYSTATION: "PlayStation", PLAYSTATION: 'PlayStation',
QNX: "QNX", QNX: 'QNX',
RASPBIAN: "Raspbian", RASPBIAN: 'Raspbian',
REDHAT: "RedHat", REDHAT: 'RedHat',
RIM_TABLET_OS: "RIM Tablet OS", RIM_TABLET_OS: 'RIM Tablet OS',
RISC_OS: "RISC OS", RISC_OS: 'RISC OS',
SABAYON: "Sabayon", SABAYON: 'Sabayon',
SAILFISH: "Sailfish", SAILFISH: 'Sailfish',
SERENITYOS: "SerenityOS", SERENITYOS: 'SerenityOS',
SERIES40: "Series40", SERIES40: 'Series40',
SLACKWARE: "Slackware", SLACKWARE: 'Slackware',
SOLARIS: "Solaris", SOLARIS: 'Solaris',
SUSE: "SUSE", SUSE: 'SUSE',
SYMBIAN: "Symbian", SYMBIAN: 'Symbian',
TIZEN: "Tizen", TIZEN: 'Tizen',
UBUNTU: "Ubuntu", UBUNTU: 'Ubuntu',
UBUNTU_TOUCH: "Ubuntu Touch", UBUNTU_TOUCH: 'Ubuntu Touch',
UNIX: "Unix", UNIX: 'Unix',
VECTORLINUX: "VectorLinux", VECTORLINUX: 'VectorLinux',
WATCHOS: "watchOS", WATCHOS: 'watchOS',
WEBOS: "WebOS", WEBOS: 'WebOS',
WINDOWS: "Windows", WINDOWS: 'Windows',
WINDOWS_CE: "Windows CE", WINDOWS_CE: 'Windows CE',
WINDOWS_IOT: "Windows IoT", WINDOWS_IOT: 'Windows IoT',
WINDOWS_MOBILE: "Windows Mobile", WINDOWS_MOBILE: 'Windows Mobile',
WINDOWS_PHONE: "Windows Phone", WINDOWS_PHONE: 'Windows Phone',
WINDOWS_RT: "Windows RT", WINDOWS_RT: 'Windows RT',
XBOX: "Xbox", XBOX: 'Xbox',
XUBUNTU: "Xubuntu", XUBUNTU: 'Xubuntu',
ZENWALK: "Zenwalk", ZENWALK: 'Zenwalk'
// TODO : test!
}>; }>;
/** /**
* @deprecated Use `OSName` instead * @deprecated Use `OSName` instead
@ -421,7 +436,7 @@ export const OS: typeof OSName;
*/////////////////////////////// *///////////////////////////////
export const Extension: Readonly<{ export const Extension: Readonly<{
Browser: { BrowserName: {
CLIs: { CLIs: {
CURL: 'curl', CURL: 'curl',
ELINKS: 'ELinks', ELINKS: 'ELinks',
@ -441,6 +456,9 @@ export const Extension: Readonly<{
AMAZON_BOT: 'Amazonbot', AMAZON_BOT: 'Amazonbot',
AMAZON_CONTXBOT: 'contxbot', AMAZON_CONTXBOT: 'contxbot',
ANTHROPIC_AI: 'anthropic-ai', ANTHROPIC_AI: 'anthropic-ai',
ANTHROPIC_CLAUDE_BOT: 'ClaudeBot',
ANTHROPIC_CLAUDE_SEARCHBOT: 'Claude-SearchBot',
ANTHROPIC_CLAUDE_WEB: 'Claude-Web',
ARCHIVEORG_BOT: 'archive.org_bot', ARCHIVEORG_BOT: 'archive.org_bot',
BAIDU_ADS: 'Baidu-ADS', BAIDU_ADS: 'Baidu-ADS',
BAIDU_SPIDER: 'Baiduspider', BAIDU_SPIDER: 'Baiduspider',
@ -457,8 +475,6 @@ export const Extension: Readonly<{
BYTEDANCE_SPIDER: 'Bytespider', BYTEDANCE_SPIDER: 'Bytespider',
CC_BOT: 'CCBot', CC_BOT: 'CCBot',
CHATGLM_SPIDER: 'ChatGLM-Spider', CHATGLM_SPIDER: 'ChatGLM-Spider',
CLAUDE_WEB: 'Claude-Web',
CLAUDE_BOT: 'ClaudeBot',
COCCOC_BOT_WEB: 'coccocbot-web', COCCOC_BOT_WEB: 'coccocbot-web',
COCCOC_BOT_IMAGE: 'coccocbot-image', COCCOC_BOT_IMAGE: 'coccocbot-image',
COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler', COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler',
@ -573,11 +589,13 @@ export const Extension: Readonly<{
}, },
Fetchers: { Fetchers: {
AHREFS_SITEAUDIT: 'AhrefsSiteAudit', AHREFS_SITEAUDIT: 'AhrefsSiteAudit',
ANTHROPIC_CLAUDE_USER: 'Claude-User',
ASANA: 'Asana', ASANA: 'Asana',
BETTER_UPTIME_BOT: 'Better Uptime Bot', BETTER_UPTIME_BOT: 'Better Uptime Bot',
BITLY_BOT: 'bitlybot', BITLY_BOT: 'bitlybot',
BLUESKY: 'Bluesky', BLUESKY: 'Bluesky',
BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot', BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot',
COHERE_AI: 'Cohere-AI',
DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot', DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot',
GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse', GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse',
GOOGLE_FEEDFETCHER: 'FeedFetcher-Google', GOOGLE_FEEDFETCHER: 'FeedFetcher-Google',
@ -666,4 +684,5 @@ export const Extension: Readonly<{
VOLVO: 'Volvo' VOLVO: 'Volvo'
} }
} }
}>; }>;

View File

@ -452,6 +452,9 @@ const Extension = Object.freeze({
AMAZON_BOT: 'Amazonbot', AMAZON_BOT: 'Amazonbot',
AMAZON_CONTXBOT: 'contxbot', AMAZON_CONTXBOT: 'contxbot',
ANTHROPIC_AI: 'anthropic-ai', ANTHROPIC_AI: 'anthropic-ai',
ANTHROPIC_CLAUDE_BOT: 'ClaudeBot',
ANTHROPIC_CLAUDE_SEARCHBOT: 'Claude-SearchBot',
ANTHROPIC_CLAUDE_WEB: 'Claude-Web',
ARCHIVEORG_BOT: 'archive.org_bot', ARCHIVEORG_BOT: 'archive.org_bot',
BAIDU_ADS: 'Baidu-ADS', BAIDU_ADS: 'Baidu-ADS',
BAIDU_SPIDER: 'Baiduspider', BAIDU_SPIDER: 'Baiduspider',
@ -468,8 +471,6 @@ const Extension = Object.freeze({
BYTEDANCE_SPIDER: 'Bytespider', BYTEDANCE_SPIDER: 'Bytespider',
CC_BOT: 'CCBot', CC_BOT: 'CCBot',
CHATGLM_SPIDER: 'ChatGLM-Spider', CHATGLM_SPIDER: 'ChatGLM-Spider',
CLAUDE_WEB: 'Claude-Web',
CLAUDE_BOT: 'ClaudeBot',
COCCOC_BOT_WEB: 'coccocbot-web', COCCOC_BOT_WEB: 'coccocbot-web',
COCCOC_BOT_IMAGE: 'coccocbot-image', COCCOC_BOT_IMAGE: 'coccocbot-image',
COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler', COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler',
@ -584,11 +585,13 @@ const Extension = Object.freeze({
}, },
Fetchers: { Fetchers: {
AHREFS_SITEAUDIT: 'AhrefsSiteAudit', AHREFS_SITEAUDIT: 'AhrefsSiteAudit',
ANTHROPIC_CLAUDE_USER: 'Claude-User',
ASANA: 'Asana', ASANA: 'Asana',
BETTER_UPTIME_BOT: 'Better Uptime Bot', BETTER_UPTIME_BOT: 'Better Uptime Bot',
BITLY_BOT: 'bitlybot', BITLY_BOT: 'bitlybot',
BLUESKY: 'Bluesky', BLUESKY: 'Bluesky',
BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot', BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot',
COHERE_AI: 'Cohere-AI',
DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot', DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot',
GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse', GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse',
GOOGLE_FEEDFETCHER: 'FeedFetcher-Google', GOOGLE_FEEDFETCHER: 'FeedFetcher-Google',

View File

@ -250,7 +250,7 @@ const Emails = Object.freeze({
const Fetchers = Object.freeze({ const Fetchers = Object.freeze({
browser : [ browser : [
[ [
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot // Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
// Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot // Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
@ -260,7 +260,7 @@ const Fetchers = Object.freeze({
// Perplexity-User - https://docs.perplexity.ai/guides/bots // Perplexity-User - https://docs.perplexity.ai/guides/bots
// MistralAI-User - https://docs.mistral.ai/robots/ // MistralAI-User - https://docs.mistral.ai/robots/
// Yandex Bots - https://yandex.com/bots // Yandex Bots - https://yandex.com/bots
/(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|hubspot page fetcher|mastodon|(?:bitly|bufferlinkpreview|discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero|zoom)bot|google-site-verification|iframely|kakaotalk-scrap|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i, /(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|hubspot page fetcher|mastodon|(?:bitly|bufferlinkpreview|discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero|zoom)bot|google-site-verification|iframely|kakaotalk-scrap|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
// Bluesky // Bluesky
/(bluesky) cardyb\/([\w\.]+)/i, /(bluesky) cardyb\/([\w\.]+)/i,
@ -277,8 +277,8 @@ const Fetchers = Object.freeze({
[NAME, VERSION, [TYPE, FETCHER]], [NAME, VERSION, [TYPE, FETCHER]],
[ [
// Google Bots / Chrome-Lighthouse / Cohere / Gemini-Deep-Research / Snapchat / TikTokSpider / Vercelbot / Yandex Bots // Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / Snapchat / TikTokSpider / Vercelbot / Yandex Bots
/((?:better uptime |telegram|vercel)bot|chrome-lighthouse|cohere-ai|feedfetcher-google|gemini-deep-research|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|tiktokspider|vercel(flags|tracing|-(favicon|screenshot)-bot)|yandex(?:sitelinks|userproxy))/i /((?:better uptime |telegram|vercel)bot|chrome-lighthouse|feedfetcher-google|gemini-deep-research|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|tiktokspider|vercel(flags|tracing|-(favicon|screenshot)-bot)|yandex(?:sitelinks|userproxy))/i
], ],
[NAME, [TYPE, FETCHER]], [NAME, [TYPE, FETCHER]],
], ],

View File

@ -4,24 +4,12 @@
import type { IResult } from "../main/ua-parser"; import type { IResult } from "../main/ua-parser";
declare function getDeviceVendor(model: string): string | undefined; export function getDeviceVendor(model: string): string | undefined;
declare function isAppleSilicon(resultOrUA: IResult | string): boolean; export function isAppleSilicon(resultOrUA: IResult | string): boolean;
declare function isAIBot(resultOrUA: IResult | string): boolean; export function isAIBot(resultOrUA: IResult | string): boolean;
declare function isBot(resultOrUA: IResult | string): boolean; export function isBot(resultOrUA: IResult | string): boolean;
declare function isChromeFamily(resultOrUA: IResult | string): boolean; export function isChromeFamily(resultOrUA: IResult | string): boolean;
declare function isElectron(): boolean; export function isElectron(): boolean;
declare function isFromEU(): boolean; export function isFromEU(): boolean;
declare function isFrozenUA(ua: string): boolean; export function isFrozenUA(ua: string): boolean;
declare function isStandalonePWA(): boolean; export function isStandalonePWA(): boolean;
export {
getDeviceVendor,
isAppleSilicon,
isAIBot,
isBot,
isChromeFamily,
isElectron,
isFromEU,
isFrozenUA,
isStandalonePWA
}

View File

@ -8,7 +8,7 @@
/*jshint esversion: 6 */ /*jshint esversion: 6 */
const { UAParser } = require('../main/ua-parser'); const { UAParser } = require('../main/ua-parser');
const { CPU, OS, Engine } = require('../enums/ua-parser-enums'); const { CPUArch, OSName, EngineName } = require('../enums/ua-parser-enums');
const { Bots } = require('../extensions/ua-parser-extensions'); const { Bots } = require('../extensions/ua-parser-extensions');
const { isFromEU } = require('detect-europe-js'); const { isFromEU } = require('detect-europe-js');
const { isFrozenUA } = require('ua-is-frozen'); const { isFrozenUA } = require('ua-is-frozen');
@ -20,8 +20,8 @@ const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${m
const isAppleSilicon = (resultOrUA) => { const isAppleSilicon = (resultOrUA) => {
const res = toResult(resultOrUA); const res = toResult(resultOrUA);
if (res.os.is(OS.MACOS)) { if (res.os.is(OSName.MACOS)) {
if (res.cpu.is(CPU.ARM)) { if (res.cpu.is(CPUArch.ARM)) {
return true; return true;
} }
if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') { if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
@ -164,7 +164,7 @@ const isBot = (resultOrUA) => [
'library' 'library'
].includes(toResult(resultOrUA, Bots).browser.type); ].includes(toResult(resultOrUA, Bots).browser.type);
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK); const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
/ electron\//i.test(navigator?.userAgent)); // browser / electron\//i.test(navigator?.userAgent)); // browser

View File

@ -3,7 +3,7 @@
// Definitions by: Faisal Salman <https://github.com/faisalman> // Definitions by: Faisal Salman <https://github.com/faisalman>
import type { Headers } from "undici"; import type { Headers } from "undici";
import { BrowserType, CPU as CPUArch, Device as DeviceType, Engine as EngineName } from "../enums/ua-parser-enums"; import { BrowserType, CPUArch, DeviceType, EngineName } from "../enums/ua-parser-enums";
declare namespace UAParser { declare namespace UAParser {

View File

@ -329,6 +329,16 @@
"type" : "crawler" "type" : "crawler"
} }
}, },
{
"desc" : "Claude-SearchBot",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-SearchBot/1.0; +Claude-SearchBot@anthropic.com)",
"expect" :
{
"name" : "Claude-SearchBot",
"version" : "1.0",
"type" : "crawler"
}
},
{ {
"desc" : "ClaudeWeb", "desc" : "ClaudeWeb",
"ua" : "Claude-Web/1.0 (web crawler; +https://www.anthropic.com/; bots@anthropic.com)", "ua" : "Claude-Web/1.0 (web crawler; +https://www.anthropic.com/; bots@anthropic.com)",

View File

@ -99,6 +99,26 @@
"type" : "fetcher" "type" : "fetcher"
} }
}, },
{
"desc" : "Claude-User",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-User/1.0; +Claude-User@anthropic.com)",
"expect" :
{
"name" : "Claude-User",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "Cohere-AI",
"ua" : "Mozilla/5.0 (compatible; Cohere-AI/1.0; +https://cohere.com/)",
"expect" :
{
"name" : "Cohere-AI",
"version" : "1.0",
"type" : "fetcher"
}
},
{ {
"desc" : "DuckAssistBot", "desc" : "DuckAssistBot",
"ua" : "DuckAssistBot/1.2; (+http://duckduckgo.com/duckassistbot.html)", "ua" : "DuckAssistBot/1.2; (+http://duckduckgo.com/duckassistbot.html)",

View File

@ -1,5 +1,5 @@
import { UAParser } from '../../src/main/ua-parser.mjs'; import { UAParser } from '../../src/main/ua-parser.mjs';
import { CPU, Device, Engine } from '../../src/enums/ua-parser-enums.mjs'; import { CPUArch, DeviceType, EngineName } from '../../src/enums/ua-parser-enums.mjs';
import * as assert from 'assert'; import * as assert from 'assert';
describe('Returns', () => { describe('Returns', () => {
@ -19,8 +19,8 @@ describe('Returns', () => {
describe('Enums', () => { describe('Enums', () => {
it('Can use enum', () => { it('Can use enum', () => {
const { cpu, device, engine } = UAParser('Mozilla/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2a1pre) Gecko/20090928 Firefox/3.5 Maemo Browser 1.4.1.22 RX-51 N900'); const { cpu, device, engine } = UAParser('Mozilla/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2a1pre) Gecko/20090928 Firefox/3.5 Maemo Browser 1.4.1.22 RX-51 N900');
assert.strictEqual(cpu.is(CPU.ARM), true); assert.strictEqual(cpu.is(CPUArch.ARM), true);
assert.strictEqual(device.is(Device.MOBILE), true); assert.strictEqual(device.is(DeviceType.MOBILE), true);
assert.strictEqual(engine.is(Engine.GECKO), true); assert.strictEqual(engine.is(EngineName.GECKO), true);
}); });
}); });