Lompat ke konten
dokumentasi.id
Commit bd74801
v2
Star10 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-13 src/browser-detection/browser-detection.js:10-13 src/device-detection/device-detection.js:10-13 src/helpers/ua-parser-helpers.js:10-14

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.
Fig. 1: Ketergantungan tiga submodule deteksipackage.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-220 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-28

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-35 Nilai cli, crawler, fetcher, dan library itu didefinisikan di objek BrowserType yang di-Object.freeze. src/enums/ua-parser-enums.js:186-194

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-62

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-190

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-194 Ketiganya diekspor sebagai module.exports bersama-sama. src/bot-detection/bot-detection.js:196-200

FungsiInstance BotListExtensionProperti browserSumber nilai
isBotBotTypesBotstypeBrowserType.CLI, CRAWLER, FETCHER, LIBRARY
isAIAssistantAIAssistantsFetchersnamedelapan konstanta Fetcher
isAICrawlerAICrawlersCrawlersnamekonstanta Crawler untuk vendor AI

Tipe ketiganya menerima IResult | string dan mengembalikan boolean. src/bot-detection/bot-detection.d.ts:7-9 Extension Bots, Crawlers, dan Fetchers sendiri dijelaskan di Extensions: Bots, Crawlers, dan Lainnya.

⚠️ isBot mencocokkan browser.type, bukan nama bot. Entri Crawler atau Fetcher yang tidak terdaftar di Bots tidak akan membuat isBot bernilai true, meskipun isAICrawler bisa bernilai true untuk UA yang sama. Gunakan extension yang sesuai saat membuat UAParser sebelum 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-19 src/enums/ua-parser-enums.js:333

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-26

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-13 src/browser-detection/browser-detection.js:28-33

FungsiArgumenMekanisme
isChromeFamily`IResultstring`
isElectrontanpa argumenprocess.versions.electron atau regex pada navigator.userAgent
isFromEUtanpa argumenre-export dari detect-europe-js
isStandalonePWAtanpa argumenre-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-10

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-13 Karena itu fungsi ini hanya menerima string, dan tipenya mengembalikan string | undefined. src/device-detection/device-detection.d.ts:7-8

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-38

 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.
Fig. 2: Alur keputusan isAppleSiliconPemeriksaan 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-201 src/enums/ua-parser-enums.js:399 Hanya getDeviceVendor dan isAppleSilicon yang diekspor submodule ini. src/device-detection/device-detection.js:40-43

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-18

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-31

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-24

isAIBot hanyalah nama lain untuk isAICrawler, dan isBot meneruskan _isBot; keduanya ditandai pindah ke bot-detection. src/helpers/ua-parser-helpers.js:26-34 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-54

Semua alias itu muncul di objek module.exports helpers bersama isFrozenUA dan getOutlookEdition. src/helpers/ua-parser-helpers.js:100-111 Deklarasi .d.ts menandai masing-masing alias dengan @deprecated dan submodule tujuan yang sama. src/helpers/ua-parser-helpers.d.ts:10-41

Alias di helpersImplementasi asalPengganti
getDeviceVendor_getDeviceVendordevice-detection
isAppleSilicon_isAppleSilicondevice-detection
isAIBotisAICrawlerbot-detection
isBot_isBotbot-detection
isChromeFamily_isChromeFamilybrowser-detection
isElectron_isElectronbrowser-detection
isFromEU_isFromEUbrowser-detection
isStandalonePWA_isStandalonePWAbrowser-detection

⚠️ isAIBot tidak setara dengan isAIAssistant. Alias deprecated itu menunjuk ke isAICrawler, sehingga pembaca kode lama yang mengira isAIBot mencakup asisten AI akan mendapat hasil berbeda dari isAIAssistant di bot-detection.

Pemakaian praktis ketiga submodule dari aplikasi, termasuk bentuk import ESM, dibahas di Memulai: Instalasi dan Pemakaian Dasar dan Feature Check dan Perbandingan Hasil.