Compare commits

..

No commits in common. "ce242a362fcf5b6a4fd01ddec39174e055c1bec2" and "7dcbb8def3c17769bb8433be87bfc19ef1fb81ad" have entirely different histories.

10 changed files with 432 additions and 899 deletions

View File

@ -2,18 +2,15 @@
/* jshint esversion: 6 */ /* jshint esversion: 6 */
const fs = require('fs'); const fs = require('fs');
const defaultReplacements = { const generateMJS = (module) => {
mjs: [
[/const (.+?)\s*=\s*require\(\'\.(.+)\'\)/ig, 'import $1 from \'\.$2.mjs\''],
[/const (.+?)\s*=\s*require\(\'(.+)\'\)/ig, 'import $1 from \'$2\''],
[/module\.exports =/ig, 'export']
]
}
const generateFile = (module) => {
let { src, dest, title, replacements } = module; let { src, dest, title, replacements } = module;
let text = fs.readFileSync(src, 'utf-8'); 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\''],
[/module\.exports =/ig, 'export']
);
replacements.forEach(rep => { replacements.forEach(rep => {
text = text.replace(rep[0], rep[1]); text = text.replace(rep[0], rep[1]);
}); });
@ -21,54 +18,42 @@ const generateFile = (module) => {
console.log(`Generate ${dest}`); console.log(`Generate ${dest}`);
fs.writeFileSync(dest, fs.writeFileSync(dest,
`// ${title} `// Generated ESM version of ${title}
// DO NOT EDIT THIS FILE! // DO NOT EDIT THIS FILE!
// Source: /${src} // Source: /${src}
${text}`, 'utf-8'); ${text}`, 'utf-8');
}; };
const files = [ const modules = [
{ {
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 : 'Generated ESM version of ua-parser-js', title : '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 : 'Generated ESM version of ua-parser-js/enums', title : 'ua-parser-js/enums',
replacements : [...defaultReplacements.mjs] replacements : []
},
{
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 : 'Generated ESM version of ua-parser-js/extensions', title : 'ua-parser-js/extensions',
replacements : [...defaultReplacements.mjs] replacements : []
}, },
{ {
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 : 'Generated ESM version of ua-parser-js/helpers', title : 'ua-parser-js/helpers',
replacements : [...defaultReplacements.mjs] replacements : []
} }
]; ];
files.forEach(module => generateFile(module)); modules.forEach(module => generateMJS(module));

View File

@ -1,171 +1,160 @@
// Generated type declarations of ua-parser-js/enums // Type definitions for Enums submodule of UAParser.js v2.0.4
// DO NOT EDIT THIS FILE! // Project: https://github.com/faisalman/ua-parser-js
// Source: /src/enums/ua-parser-enums.js // Definitions by: Faisal Salman <https://github.com/faisalman>
///////////////////////////////////////////////
/* 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
@ -173,34 +162,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
@ -208,14 +197,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
@ -223,80 +212,78 @@ 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
@ -304,26 +291,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
@ -331,100 +318,98 @@ 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
@ -436,7 +421,7 @@ export const OS: typeof OSName;
*/////////////////////////////// *///////////////////////////////
export const Extension: Readonly<{ export const Extension: Readonly<{
BrowserName: { Browser: {
CLIs: { CLIs: {
CURL: 'curl', CURL: 'curl',
ELINKS: 'ELinks', ELINKS: 'ELinks',
@ -456,9 +441,6 @@ 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',
@ -475,6 +457,8 @@ 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',
@ -589,13 +573,11 @@ 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',
@ -685,4 +667,3 @@ export const Extension: Readonly<{
} }
} }
}>; }>;

View File

@ -452,9 +452,6 @@ 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',
@ -471,6 +468,8 @@ 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',
@ -553,35 +552,7 @@ const Extension = Object.freeze({
VERCEL_V0BOT: 'v0bot', VERCEL_V0BOT: 'v0bot',
YAHOO_JAPAN: 'Y!J-BRW', YAHOO_JAPAN: 'Y!J-BRW',
YAHOO_SLURP: 'Yahoo! Slurp', YAHOO_SLURP: 'Yahoo! Slurp',
YANDEX_ACCESSIBILITY_BOT: 'YandexAccessibilityBot',
YANDEX_ADDITIONAL_BOT: 'YandexAdditionalBot',
YANDEX_ADNET: 'YandexAdNet',
YANDEX_BLOGS: 'YandexBlogs',
YANDEX_BOT: 'YandexBot', YANDEX_BOT: 'YandexBot',
YANDEX_BOT_MIRRORDETECTOR: 'YandexBot MirrorDetector',
YANDEX_COMBOT: 'YandexComBot',
YANDEX_FAVICONS: 'YandexFavicons',
YANDEX_IMAGE_RESIZER: 'YandexImageResizer',
YANDEX_IMAGES: 'YandexImages',
YANDEX_MARKET: 'YandexMarket',
YANDEX_MEDIA: 'YandexMedia',
YANDEX_METRIKA: 'YandexMetrika',
YANDEX_MOBILE_BOT: 'YandexMobileBot',
YANDEX_MOBILE_SCREENSHOT_BOT: 'YandexMobileScreenShotBot',
YANDEX_NEWS: 'YandexNews',
YANDEX_ONTODB: 'YandexOntoDB',
YANDEX_ONTODB_API: 'YandexOntoDBAPI',
YANDEX_PARTNER: 'YandexPartner',
YANDEX_RCA: 'YandexRCA',
YANDEX_RENDERRESOURCES_BOT: 'YandexRenderResourcesBot',
YANDEX_SCREENSHOT_BOT: 'YandexScreenshotBot',
YANDEX_SPRAV_BOT: 'YandexSpravBot',
YANDEX_TRACKER: 'YandexTracker',
YANDEX_VERTICALS: 'YandexVerticals',
YANDEX_VERTIS: 'YandexVertis',
YANDEX_VIDEO: 'YandexVideo',
YANDEX_VIDEO_PARSER: 'YandexVideoParser',
YANDEX_WEBMASTER: 'YandexWebmaster',
YEP_BOT: 'YepBot', YEP_BOT: 'YepBot',
YETI: 'Yeti', YETI: 'Yeti',
YISOU_SPIDER: 'YisouSpider', YISOU_SPIDER: 'YisouSpider',
@ -613,13 +584,11 @@ 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',
@ -652,15 +621,6 @@ const Extension = Object.freeze({
VERCEL_BOT: 'Vercelbot', VERCEL_BOT: 'Vercelbot',
VERCEL_FLAGS: 'vercelflags', VERCEL_FLAGS: 'vercelflags',
VERCEL_TRACING: 'verceltracing', VERCEL_TRACING: 'verceltracing',
YANDEX_CALENDAR: 'YandexCalendar',
YANDEX_DIRECT: 'YandexDirect',
YANDEX_DIRECTDYN: 'YandexDirectDyn',
YANDEX_DIRECTFETCHER: 'YaDirectFetcher',
YANDEX_FORDOMAIN: 'YandexForDomain',
YANDEX_PAGECHECKER: 'YandexPagechecker',
YANDEX_SEARCHSHOP: 'YandexSearchShop',
YANDEX_SITELINKS: 'YandexSitelinks',
YANDEX_USERPROXY: 'YandexUserproxy',
WHATSAPP: 'WhatsApp', WHATSAPP: 'WhatsApp',
ZOOMINFO_BOT: 'Zoombot' ZOOMINFO_BOT: 'Zoombot'
}, },

View File

@ -109,7 +109,7 @@ const Crawlers = Object.freeze({
/(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i, /(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
// Yandex Bots - https://yandex.com/bots // Yandex Bots - https://yandex.com/bots
/(yandex(?:(?:mobile)?(?:accessibility|additional|com|renderresources|screenshot|sprav)?bot(?!.+mirror)|image(?:s|resizer)|adnet|blogs|favicons|market|media|metrika|news|ontodb(?:api)?|partner|rca|tracker|turbo|verti(?:cal)?s|webmaster|video(?:parser)?))\/([\w\.]+)/i, /(yandex(?:(?:mobile)?(?:accessibility|additional|renderresources|screenshot|sprav)?bot|image(?:s|resizer)|video(?:parser)?|blogs|adnet|favicons|fordomain|market|media|metrika|news|ontodb(?:api)?|pagechecker|partner|rca|tracker|turbo|vertis|webmaster|antivirus))\/([\w\.]+)/i,
// Yeti (Naver) // Yeti (Naver)
/(yeti)\/([\w\.]+)/i, /(yeti)\/([\w\.]+)/i,
@ -119,13 +119,8 @@ const Crawlers = Object.freeze({
// Freespoke - https://docs.freespoke.com/search/bot/ // Freespoke - https://docs.freespoke.com/search/bot/
/((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cotoyogi|firecrawlagent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|twinagent|webzio-extended)\/?([\w\.]*)/i /((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cotoyogi|firecrawlagent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|twinagent|webzio-extended)\/?([\w\.]*)/i
], ],
[NAME, VERSION, [TYPE, CRAWLER]],
[ [NAME, VERSION, [TYPE, CRAWLER]],
// YandexBot MirrorDetector
/(yandexbot\/([\w\.]+); mirrordetector)/i
],
[[NAME, /\/.+;/ig, ''], VERSION, [TYPE, CRAWLER]],
[ [
// Google Bots // Google Bots
@ -255,7 +250,7 @@ const Emails = Object.freeze({
const Fetchers = Object.freeze({ const Fetchers = Object.freeze({
browser : [ browser : [
[ [
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot // Asana / Bitlybot / Better Uptime / BingPreview / Blueno / 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
@ -265,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|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)?|fordomain|pagechecker|searchshop)|yadirectfetcher)\/([\w\.]+)/i, /(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,
// Bluesky // Bluesky
/(bluesky) cardyb\/([\w\.]+)/i, /(bluesky) cardyb\/([\w\.]+)/i,
@ -282,8 +277,8 @@ const Fetchers = Object.freeze({
[NAME, VERSION, [TYPE, FETCHER]], [NAME, VERSION, [TYPE, FETCHER]],
[ [
// Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / Snapchat / TikTokSpider / Vercelbot / Yandex Bots // Google Bots / Chrome-Lighthouse / Cohere / Gemini-Deep-Research / Snapchat / TikTokSpider / Vercelbot / Yandex Bots
/((?: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 /((?: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
], ],
[NAME, [TYPE, FETCHER]], [NAME, [TYPE, FETCHER]],
], ],

View File

@ -4,12 +4,24 @@
import type { IResult } from "../main/ua-parser"; import type { IResult } from "../main/ua-parser";
export function getDeviceVendor(model: string): string | undefined; declare function getDeviceVendor(model: string): string | undefined;
export function isAppleSilicon(resultOrUA: IResult | string): boolean; declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
export function isAIBot(resultOrUA: IResult | string): boolean; declare function isAIBot(resultOrUA: IResult | string): boolean;
export function isBot(resultOrUA: IResult | string): boolean; declare function isBot(resultOrUA: IResult | string): boolean;
export function isChromeFamily(resultOrUA: IResult | string): boolean; declare function isChromeFamily(resultOrUA: IResult | string): boolean;
export function isElectron(): boolean; declare function isElectron(): boolean;
export function isFromEU(): boolean; declare function isFromEU(): boolean;
export function isFrozenUA(ua: string): boolean; declare function isFrozenUA(ua: string): boolean;
export function isStandalonePWA(): boolean; declare 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 { CPUArch, OSName, EngineName } = require('../enums/ua-parser-enums'); const { CPU, OS, Engine } = 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(OSName.MACOS)) { if (res.os.is(OS.MACOS)) {
if (res.cpu.is(CPUArch.ARM)) { if (res.cpu.is(CPU.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(EngineName.BLINK); const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.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, CPUArch, DeviceType, EngineName } from "../enums/ua-parser-enums"; import { BrowserType, CPU as CPUArch, Device as DeviceType, Engine as EngineName } from "../enums/ua-parser-enums";
declare namespace UAParser { declare namespace UAParser {

View File

@ -329,16 +329,6 @@
"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)",
@ -1170,46 +1160,6 @@
"type" : "crawler" "type" : "crawler"
} }
}, },
{
"desc" : "YandexAccessibilityBot",
"ua" : "Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexAccessibilityBot",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexAdditionalBot",
"ua" : "Mozilla/5.0 (compatible; YandexAdditionalBot/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexAdditionalBot",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexAdNet",
"ua" : "Mozilla/5.0 (compatible; YandexAdNet/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexAdNet",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexBlogs",
"ua" : "Mozilla/5.0 (compatible; YandexBlogs/0.99; robot; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexBlogs",
"version" : "0.99",
"type" : "crawler"
}
},
{ {
"desc" : "YandexBot", "desc" : "YandexBot",
"ua" : "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)", "ua" : "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",
@ -1220,246 +1170,6 @@
"type" : "crawler" "type" : "crawler"
} }
}, },
{
"desc" : "YandexBot MirrorDetector",
"ua" : "Mozilla/5.0 (compatible; YandexBot/3.0; MirrorDetector; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexBot MirrorDetector",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexComBot",
"ua" : "Mozilla/5.0 (compatible; YandexComBot/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexComBot",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexFavicons",
"ua" : "Mozilla/5.0 (compatible; YandexFavicons/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexFavicons",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexImageResizer",
"ua" : "Mozilla/5.0 (compatible; YandexImageResizer/2.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexImageResizer",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "YandexImages",
"ua" : "Mozilla/5.0 (compatible; YandexImages/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexImages",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexMarket",
"ua" : "Mozilla/5.0 (compatible; YandexMarket/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexMarket",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexMetrika",
"ua" : "Mozilla/5.0 (compatible; YandexMetrika/2.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexMetrika",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "YandexMedia",
"ua" : "Mozilla/5.0 (compatible; YandexMedia/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexMedia",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexMobileBot",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4 (compatible; YandexMobileBot/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexMobileBot",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexMobileScreenShotBot",
"ua" : "Mozilla/5.0 (compatible; YandexMobileScreenShotBot/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexMobileScreenShotBot",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexNews",
"ua" : "Mozilla/5.0 (compatible; YandexNews/4.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexNews",
"version" : "4.0",
"type" : "crawler"
}
},
{
"desc" : "YandexOntoDB",
"ua" : "Mozilla/5.0 (compatible; YandexOntoDB/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexOntoDB",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexOntoDBAPI",
"ua" : "Mozilla/5.0 (compatible; YandexOntoDBAPI/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexOntoDBAPI",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexPartner",
"ua" : "Mozilla/5.0 (compatible; YandexPartner/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexPartner",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexRCA",
"ua" : "Mozilla/5.0 (compatible; YandexRCA/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexRCA",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexRenderResourcesBot",
"ua" : "Mozilla/5.0 (compatible; YandexRenderResourcesBot/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexRenderResourcesBot",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexScreenshotBot",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Safari/537.36 (compatible; YandexScreenshotBot/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexScreenshotBot",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexSpravBot",
"ua" : "Mozilla/5.0 (compatible; YandexSpravBot/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexSpravBot",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexTracker",
"ua" : "Mozilla/5.0 (compatible; YandexTracker/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexTracker",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexVertis",
"ua" : "Mozilla/5.0 (compatible; YandexVertis/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexVertis",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexVerticals",
"ua" : "Mozilla/5.0 (compatible; YandexVerticals/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexVerticals",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexVideo",
"ua" : "Mozilla/5.0 (compatible; YandexVideo/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexVideo",
"version" : "3.0",
"type" : "crawler"
}
},
{
"desc" : "YandexVideoParser",
"ua" : "Mozilla/5.0 (compatible; YandexVideoParser/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexVideoParser",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "YandexWebmaster",
"ua" : "Mozilla/5.0 (compatible; YandexWebmaster/2.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexWebmaster",
"version" : "2.0",
"type" : "crawler"
}
},
{ {
"desc" : "YepBot", "desc" : "YepBot",
"ua" : "Mozilla/5.0 (compatible; YepBot/1.0; +http://yep.com/yepbot/)", "ua" : "Mozilla/5.0 (compatible; YepBot/1.0; +http://yep.com/yepbot/)",

View File

@ -99,26 +99,6 @@
"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)",
@ -419,96 +399,6 @@
"type" : "fetcher" "type" : "fetcher"
} }
}, },
{
"desc" : "YaDirectFetcher",
"ua" : "Mozilla/5.0 (compatible; YaDirectFetcher/1.0; Dyatel; +http://yandex.com/bots)",
"expect" :
{
"name" : "YaDirectFetcher",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexCalendar",
"ua" : "Mozilla/5.0 (compatible; YandexCalendar/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexCalendar",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexDirect",
"ua" : "Mozilla/5.0 (compatible; YandexDirect/3.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexDirect",
"version" : "3.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexDirectDyn",
"ua" : "Mozilla/5.0 (compatible; YandexDirectDyn/1.0; +http://yandex.com/bots",
"expect" :
{
"name" : "YandexDirectDyn",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexForDomain",
"ua" : "Mozilla/5.0 (compatible; YandexForDomain/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexForDomain",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexPagechecker",
"ua" : "Mozilla/5.0 (compatible; YandexPagechecker/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexPagechecker",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexSearchShop",
"ua" : "Mozilla/5.0 (compatible; YandexSearchShop/1.0; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexSearchShop",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "YandexSitelinks",
"ua" : "Mozilla/5.0 (compatible; YandexSitelinks; Dyatel; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexSitelinks",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "YandexUserproxy",
"ua" : "Mozilla/5.0 (compatible; YandexUserproxy; robot; +http://yandex.com/bots)",
"expect" :
{
"name" : "YandexUserproxy",
"version" : "undefined",
"type" : "fetcher"
}
},
{ {
"desc" : "Zoombot", "desc" : "Zoombot",
"ua" : "Mozilla/5.0 (compatible; Zoombot/1.0; +https://zoom.us; crawler@domain.com)", "ua" : "Mozilla/5.0 (compatible; Zoombot/1.0; +https://zoom.us; crawler@domain.com)",

View File

@ -1,5 +1,5 @@
import { UAParser } from '../../src/main/ua-parser.mjs'; import { UAParser } from '../../src/main/ua-parser.mjs';
import { CPUArch, DeviceType, EngineName } from '../../src/enums/ua-parser-enums.mjs'; import { CPU, Device, Engine } 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(CPUArch.ARM), true); assert.strictEqual(cpu.is(CPU.ARM), true);
assert.strictEqual(device.is(DeviceType.MOBILE), true); assert.strictEqual(device.is(Device.MOBILE), true);
assert.strictEqual(engine.is(EngineName.GECKO), true); assert.strictEqual(engine.is(Engine.GECKO), true);
}); });
}); });