10
Submodule bot-detection, browser-detection, dan device-detection
Tiga submodule di src/ menyediakan pertanyaan tingkat tinggi yang tidak dijawab langsung oleh UAParser: apakah sebuah user agent adalah bot, apakah browser berbasis Chromium, dan apakah perangkat adalah Apple Silicon. Ketiganya adalah modul tipis yang membungkus UAParser dengan daftar nama dan enum, bukan pipeline regex baru. Pipeline regex dan string map sendiri dibahas di Pipeline Deteksi Regex dan String Map.
Peta ketergantungan dan titik masuk
Setiap submodule mengambil UAParser dari ../main/ua-parser, lalu menambah satu ketergantungan lain: bot-detection memakai extension dan enum, browser-detection memakai paket eksternal, dan device-detection hanya memakai enum. Berkas src/helpers/ua-parser-helpers.js mengimpor ketiga submodule dan mengekspor ulang sebagian besar fungsinya sebagai alias deprecated. src/bot-detection/bot-detection.js:10-131 src/browser-detection/browser-detection.js:10-132 src/device-detection/device-detection.js:10-133 src/helpers/ua-parser-helpers.js:10-144
graph TD
UA["UAParser core"]
EN["enums/ua-parser-enums.js"]
EX["extensions/ua-parser-extensions.js"]
PKG["package.json exports"]
BOT["bot-detection"]
BROWSER["browser-detection"]
DEVICE["device-detection"]
HELP["helpers"]
PKG --> BOT
PKG --> BROWSER
PKG --> DEVICE
BOT --> UA
BOT --> EX
BOT --> EN
BROWSER --> UA
BROWSER --> EN
DEVICE --> UA
DEVICE --> EN
HELP --> BOT
HELP --> BROWSER
HELP --> DEVICE
style UA fill:#336791,color:#fff
style EN fill:#f59e0b,color:#000
style EX fill:#8b5cf6,color:#fff
style PKG fill:#f59e0b,color:#000
style HELP fill:#f59e0b,color:#000
style BOT fill:#2d7d46,color:#fff
style BROWSER fill:#2d7d46,color:#fff
style DEVICE fill:#2d7d46,color:#fff
%% fig: Ketergantungan tiga submodule deteksi
%% desc: package.json mengekspos tiga subpath, tiap submodule bergantung pada UAParser dan enum, bot-detection juga memakai extensions, dan helpers membungkus ketiganya.Ketiganya diekspos sebagai subpath terpisah di package.json, masing-masing dengan pasangan require, import, dan types yang menunjuk ke src/<submodule>/<submodule>.js, .mjs, dan .d.ts. package.json:206-2205 Pola ini konsisten dengan subpath enums, extensions, dan helpers yang dijelaskan di Arsitektur Modul dan Peta Ekspor.
bot-detection: pencocokan lewat BotList
Inti submodule ini adalah kelas kecil BotList. Konstruktor menyimpan extension, nama properti hasil, dan daftar nilai yang sudah diubah ke huruf kecil. Metode includes menerima string atau IResult: kalau string, ia membuat new UAParser(ua, this.ext) dan mengambil getBrowser(); kalau objek, ia memakai ua.browser. Nilai pada this.prop diubah ke huruf kecil sebelum dibandingkan dengan this.list. src/bot-detection/bot-detection.js:15-286
Tiga instance BotList menggerakkan tiga fungsi publik. BotTypes memakai extension Bots dan properti type, dengan nilai yang seluruhnya berasal dari BrowserType. src/bot-detection/bot-detection.js:30-357 Nilai cli, crawler, fetcher, dan library itu didefinisikan di objek BrowserType yang di-Object.freeze. src/enums/ua-parser-enums.js:186-1948
AIAssistants memakai extension Fetchers dan properti name, dengan delapan entri: Fetcher.AMAZON_NOVA_ACT, Fetcher.ANTHROPIC_CLAUDE_USER, Fetcher.COHERE_AI, Fetcher.DUCKDUCKGO_ASSISTBOT, Fetcher.GOOGLE_GEMINI_DEEP_RESEARCH, Fetcher.MISTRALAI_USER, Fetcher.OPENAI_CHATGPT_USER, dan Fetcher.PERPLEXITY_USER. src/bot-detection/bot-detection.js:37-629
AICrawlers memakai extension Crawlers dan properti name, tetapi daftarnya jauh lebih panjang: entri dikelompokkan per vendor lewat komentar, dari AI2, Amazon, Anthropic, Apple, hingga Zhipu AI. src/bot-detection/bot-detection.js:64-19010
Tiga fungsi publik cukup berupa satu baris masing-masing: isBot mendelegasikan ke BotTypes, isAIAssistant ke AIAssistants, dan isAICrawler ke AICrawlers. src/bot-detection/bot-detection.js:192-19411 Ketiganya diekspor sebagai module.exports bersama-sama. src/bot-detection/bot-detection.js:196-20012
| Fungsi | Instance BotList | Extension | Properti browser | Sumber nilai |
|---|---|---|---|---|
isBot | BotTypes | Bots | type | BrowserType.CLI, CRAWLER, FETCHER, LIBRARY |
isAIAssistant | AIAssistants | Fetchers | name | delapan konstanta Fetcher |
isAICrawler | AICrawlers | Crawlers | name | konstanta Crawler untuk vendor AI |
Tipe ketiganya menerima IResult | string dan mengembalikan boolean. src/bot-detection/bot-detection.d.ts:7-913 Extension Bots, Crawlers, dan Fetchers sendiri dijelaskan di Extensions: Bots, Crawlers, dan Lainnya.
⚠️
isBotmencocokkanbrowser.type, bukan nama bot. EntriCrawleratauFetcheryang tidak terdaftar diBotstidak akan membuatisBotbernilaitrue, meskipunisAICrawlerbisa bernilaitrueuntuk UA yang sama. Gunakan extension yang sesuai saat membuatUAParsersebelum memanggil fungsi-fungsi ini.
browser-detection: tiga helper lingkungan dan satu deteksi engine
isChromeFamily adalah satu-satunya fungsi di submodule ini yang menyentuh hasil parsing. Ia menerima string atau IResult, mengambil getEngine() atau val.engine, lalu memanggil .is(EngineName.BLINK). Nilai Blink berasal dari EngineName.BLINK. src/browser-detection/browser-detection.js:15-1914 src/enums/ua-parser-enums.js:33315
isElectron tidak menerima argumen sama sekali. Ia memeriksa dua lingkungan: di Node.js, process.versions harus memiliki properti electron; di browser, navigator.userAgent diuji dengan regex / electron\//i. src/browser-detection/browser-detection.js:21-2616
Dua fungsi sisanya bukan implementasi lokal. isStandalonePWA diimpor langsung dari paket is-standalone-pwa dan isFromEU dari paket detect-europe-js, lalu diteruskan apa adanya lewat module.exports. src/browser-detection/browser-detection.js:10-132 src/browser-detection/browser-detection.js:28-3317
| Fungsi | Argumen | Mekanisme |
|---|---|---|
isChromeFamily | `IResult | string` |
isElectron | tanpa argumen | process.versions.electron atau regex pada navigator.userAgent |
isFromEU | tanpa argumen | re-export dari detect-europe-js |
isStandalonePWA | tanpa argumen | re-export dari is-standalone-pwa |
Signature TypeScript-nya menegaskan bentuk tersebut: hanya isChromeFamily yang menerima resultOrUA, sedangkan tiga lainnya tanpa parameter. src/browser-detection/browser-detection.d.ts:7-1018
device-detection: vendor dari model dan deteksi Apple Silicon
getDeviceVendor tidak mem-parsing UA masukan. Ia menyusun UA sintetis Mozilla/5.0 (Linux; Android 10; <model>) AppleWebKit/537.36 ... Chrome/100.0.0.0 Safari/537.36 dari nama model, menjalankan new UAParser(...), lalu mengembalikan getDevice().vendor. src/device-detection/device-detection.js:10-133 Karena itu fungsi ini hanya menerima string, dan tipenya mengembalikan string | undefined. src/device-detection/device-detection.d.ts:7-819
isAppleSilicon menerima IResult atau string, lalu menurunkan os dan cpu dari hasil parsing. Cabang pertama mensyaratkan os.is(OSName.MACOS); di dalamnya cpu.is(CPUArch.ARM) langsung mengembalikan true. Kalau tidak, dan window tersedia, ia membuat canvas dan mencari renderer WebGL yang cocok dengan /apple m\d/i; kegagalan di blok itu ditangkap dan menghasilkan false. src/device-detection/device-detection.js:15-3820
graph TD
A["isAppleSilicon(val)"] --> B{"os.is(OSName.MACOS)"}
B -- tidak --> F["return false"]
B -- ya --> C{"cpu.is(CPUArch.ARM)"}
C -- ya --> T["return true"]
C -- tidak --> D{"window tersedia"}
D -- tidak --> F
D -- ya --> E["canvas.getContext webgl2 / webgl / experimental-webgl"]
E --> G["getParameter UNMASKED_RENDERER_WEBGL"]
G --> H{"cocok dengan /apple m"}
H -- cocok --> T
H -- tidak --> F
E -. exception .-> F
style A fill:#f59e0b,color:#000
style E fill:#8b5cf6,color:#fff
style T fill:#2d7d46,color:#fff
style F fill:#dc2626,color:#fff
%% fig: Alur keputusan isAppleSilicon
%% desc: Pemeriksaan macOS lalu CPU ARM menjadi jalur cepat, sementara jalur WebGL hanya dipakai ketika CPU tidak terbaca sebagai ARM dan window tersedia.Dua nilai enum yang dipakai adalah CPUArch.ARM bernilai arm dan OSName.MACOS bernilai macOS. src/enums/ua-parser-enums.js:196-20121 src/enums/ua-parser-enums.js:39922 Hanya getDeviceVendor dan isAppleSilicon yang diekspor submodule ini. src/device-detection/device-detection.js:40-4323
Test unit memberi contoh konkret. getDeviceVendor memetakan SM-A605G ke DeviceVendor.SAMSUNG, Redmi Note 8 ke DeviceVendor.XIAOMI, Nexus 6P ke DeviceVendor.HUAWEI, dan AQUOS-TVX19B ke DeviceVendor.SHARP. test/unit/submodules/device-detection.spec.js:7-1824
Untuk isAppleSilicon, UA uji dengan penanda ARM mengembalikan true, sedangkan UA Macintosh Intel mengembalikan false, baik saat diberi string maupun IResult dari UAParser(...). test/unit/submodules/device-detection.spec.js:21-3125
Alias deprecated di helpers
src/helpers/ua-parser-helpers.js mengimpor fungsi dari ketiga submodule dengan nama berawalan garis bawah, lalu mengekspornya kembali tanpa perubahan. getDeviceVendor dan isAppleSilicon diberi anotasi @deprecated Moved to device-detection submodule. src/helpers/ua-parser-helpers.js:16-2426
isAIBot hanyalah nama lain untuk isAICrawler, dan isBot meneruskan _isBot; keduanya ditandai pindah ke bot-detection. src/helpers/ua-parser-helpers.js:26-3427 Empat helper browser, yaitu isChromeFamily, isElectron, isFromEU, dan isStandalonePWA, juga diteruskan apa adanya dengan anotasi ke browser-detection. src/helpers/ua-parser-helpers.js:36-5428
Semua alias itu muncul di objek module.exports helpers bersama isFrozenUA dan getOutlookEdition. src/helpers/ua-parser-helpers.js:100-11129 Deklarasi .d.ts menandai masing-masing alias dengan @deprecated dan submodule tujuan yang sama. src/helpers/ua-parser-helpers.d.ts:10-4130
| Alias di helpers | Implementasi asal | Pengganti |
|---|---|---|
getDeviceVendor | _getDeviceVendor | device-detection |
isAppleSilicon | _isAppleSilicon | device-detection |
isAIBot | isAICrawler | bot-detection |
isBot | _isBot | bot-detection |
isChromeFamily | _isChromeFamily | browser-detection |
isElectron | _isElectron | browser-detection |
isFromEU | _isFromEU | browser-detection |
isStandalonePWA | _isStandalonePWA | browser-detection |
⚠️
isAIBottidak setara denganisAIAssistant. Alias deprecated itu menunjuk keisAICrawler, sehingga pembaca kode lama yang mengiraisAIBotmencakup asisten AI akan mendapat hasil berbeda dariisAIAssistantdibot-detection.
Pemakaian praktis ketiga submodule dari aplikasi, termasuk bentuk import ESM, dibahas di Memulai: Instalasi dan Pemakaian Dasar dan Feature Check dan Perbandingan Hasil.