8
Enums dan Konstanta Deteksi
Subpath ua-parser-js/enums mengekspos delapan objek konstanta yang menjadi nilai baku pembanding untuk hasil deteksi: BrowserName, BrowserType, CPUArch, DeviceType, DeviceVendor, EngineName, OSName, dan Extension. Subpath ini dipetakan ke tiga berkas sekaligus, yaitu versi CommonJS, versi ESM, dan berkas deklarasi tipe package.json:221-2251.
Bentuk Modul
Semua konstanta dibentuk dengan Object.freeze, sehingga pemanggil tidak bisa menambah atau mengubah anggota pada saat runtime. Berkas CommonJS menutup berkasnya dengan module.exports yang mendaftarkan keenam alias usang (Browser, CPU, Device, Vendor, Engine, OS) bersama delapan konstanta utama src/enums/ua-parser-enums.js:857-8722. Versi ESM memakai daftar export yang sama isinya src/enums/ua-parser-enums.mjs:843-8583, dan berkas itu ditandai sebagai hasil generate yang tidak boleh disunting manual src/enums/ua-parser-enums.mjs:1-34.
Deklarasi tipe memakai bentuk Readonly<{ ... }> untuk setiap konstanta, sehingga nilai literal seperti CHROME: 'Chrome' terbaca sebagai tipe literal, bukan string biasa src/enums/ua-parser-enums.d.ts:145. Bentuk Readonly yang sama dipakai untuk Extension yang bersarang src/enums/ua-parser-enums.d.ts:4636.
⚠️ Berkas
src/enums/ua-parser-enums.d.tsdansrc/enums/ua-parser-enums.mjsadalah hasil generate darisrc/enums/ua-parser-enums.js. Sunting sumbernya, jangan berkas hasil generate.
Delapan Konstanta
Tabel berikut merangkum isi tiap konstanta beserta nilai contoh yang benar-benar ada di berkas sumber.
| Konstanta | Rentang baris | Bentuk nilai | Contoh pasangan kunci dan nilai |
|---|---|---|---|
BrowserName | src/enums/ua-parser-enums.js:107 | nama tampilan browser | CHROME: 'Chrome', OPERA_MINI: 'Opera Mini', SAFARI_MOBILE: 'Mobile Safari' |
BrowserType | src/enums/ua-parser-enums.js:186-1948 | kategori kelas browser | CRAWLER: 'crawler', INAPP: 'inapp', LIBRARY: 'library' |
CPUArch | src/enums/ua-parser-enums.js:196-2159 | arsitektur CPU | ARM_64: 'arm64', X86: 'ia32', X86_64: 'amd64' |
DeviceType | src/enums/ua-parser-enums.js:221-23310 | tipe perangkat | MOBILE: 'mobile', SMARTTV: 'smarttv', XR: 'xr' |
DeviceVendor | src/enums/ua-parser-enums.js:239-24111 | vendor perangkat | SAMSUNG: 'Samsung', GOOGLE: 'Google', XIAOMI: 'Xiaomi' |
EngineName | src/enums/ua-parser-enums.js:330-35212 | mesin render | BLINK: 'Blink', GECKO: 'Gecko', WEBKIT: 'WebKit' |
OSName | src/enums/ua-parser-enums.js:358-35913 | sistem operasi | MACOS: 'macOS', WINDOWS: 'Windows', LINUX: 'Linux' |
Extension | src/enums/ua-parser-enums.js:465-80714 | objek bersarang per submodule | BrowserName.Crawler, BrowserName.Library, DeviceVendor.Vehicle |
Nilai BrowserName ditulis sebagai nama yang dipakai di hasil deteksi, misalnya ANDROID: 'Android Browser' dan SAMSUNG: 'Samsung Internet'. Perhatikan bahwa CPUArch memakai nama arsitektur gaya compiler, bukan nama pemasaran: X86: 'ia32' dan X86_64: 'amd64' src/enums/ua-parser-enums.js:196-2159.
DeviceType memuat satu anggota yang ditandai usang, yaitu DESKTOP: 'desktop', dengan keterangan bahwa UAParser tidak mendukung tipe desktop src/enums/ua-parser-enums.js:221-23310. Jangan membandingkan hasil deteksi dengan DeviceType.DESKTOP.
Alias Usang
Setiap konstanta utama punya alias lama yang dideklarasikan tepat setelah objeknya dan ditandai @deprecated. Browser adalah alias BrowserName src/enums/ua-parser-enums.js:181-18415, sedangkan OS adalah alias OSName src/enums/ua-parser-enums.js:455-45916. Alias ini tetap diekspor agar kode lama tidak langsung patah src/enums/ua-parser-enums.js:857-8722.
Relasi Konstanta dengan Hasil Deteksi
Diagram berikut menunjukkan konstanta mana yang mengisi field mana pada hasil UAParser, dan bagaimana Extension memecah BrowserName menjadi grup.
erDiagram
Extension {
object BrowserName
object DeviceVendor
}
BrowserName ||--o{ ParseResult : "browser.name"
BrowserType ||--o{ ParseResult : "browser.type"
CPUArch ||--o{ ParseResult : "cpu.architecture"
DeviceType ||--o{ ParseResult : "device.type"
DeviceVendor ||--o{ ParseResult : "device.vendor"
EngineName ||--o{ ParseResult : "engine.name"
OSName ||--o{ ParseResult : "os.name"
Extension ||--|| BrowserType : "grup CLI Crawler Fetcher Library"
ParseResult {
string browser_name
string browser_type
string cpu_architecture
string device_type
string device_vendor
string engine_name
string os_name
}
%% fig: Konstanta enum dan field hasil deteksi
%% desc: Setiap konstanta mengisi satu field ParseResult, dan Extension memecah BrowserName menjadi grup yang sejajar dengan BrowserType.Extension sebagai Konstanta Bersarang
Extension bukan daftar datar. Objek ini memuat sub-objek BrowserName yang dikelompokkan per kategori: CLI, Crawler, Email, Fetcher, InApp, dan Library src/enums/ua-parser-enums.js:465-80714. Grup CLI berisi tool baris perintah seperti CURL: 'curl' dan WGET: 'Wget', sedangkan grup Library berisi klien HTTP seperti AXIOS: 'axios' dan NODE_FETCH: 'node-fetch' src/enums/ua-parser-enums.js:465-80714.
Selain BrowserName, Extension juga memuat DeviceVendor yang di dalamnya ada grup Vehicle untuk vendor kendaraan, misalnya TESLA: 'Tesla' dan BMW: 'BMW' src/enums/ua-parser-enums.js:845-85517. Isi grup bot dan crawler dibahas pada halaman Extensions: Bots, Crawlers, dan Lainnya.
Pemakaian di Submodule
Konstanta ini dipakai langsung oleh submodule bawaan, bukan hanya oleh kode pemanggil.
graph LR
ENUM["ua-parser-enums.js"] --> BOT["bot-detection.js"]
ENUM --> DEV["device-detection.js"]
ENUM --> BR["browser-detection.js"]
BOT -->|BrowserType.CLI CRAWLER FETCHER LIBRARY| LIST["BotList.includes"]
BOT -->|Extension.BrowserName| GRP["Crawler dan Fetcher"]
DEV -->|OSName.MACOS dan CPUArch.ARM| SIL["isAppleSilicon"]
BR -->|EngineName.BLINK| FAM["isChromeFamily"]
style ENUM fill:#f59e0b,color:#000
style BOT fill:#8b5cf6,color:#fff
style DEV fill:#8b5cf6,color:#fff
style BR fill:#8b5cf6,color:#fff
style LIST fill:#2d7d46,color:#fff
style SIL fill:#2d7d46,color:#fff
style FAM fill:#2d7d46,color:#fff
style GRP fill:#336791,color:#fff
%% fig: Konstanta enum dipakai submodule bawaan
%% desc: Berkas enum menjadi sumber nilai baku bagi bot-detection, device-detection, dan browser-detection.bot-detection mengimpor BrowserType dan Extension, lalu mendestrukturisasi Extension.BrowserName menjadi Crawler dan Fetcher src/bot-detection/bot-detection.js:12-1318. Konstanta BrowserType dipakai untuk menyusun daftar tipe yang dianggap bot, yaitu CLI, CRAWLER, FETCHER, dan LIBRARY src/bot-detection/bot-detection.js:30-3519.
device-detection membandingkan hasil parse dengan OSName.MACOS dan CPUArch.ARM di dalam fungsi isAppleSilicon src/device-detection/device-detection.js:20-2120, sedangkan browser-detection memakai EngineName.BLINK untuk menentukan isChromeFamily src/browser-detection/browser-detection.js:15-1921.
Perbandingan Lewat Metode is()
Hasil deteksi menyediakan metode is() yang menerima nilai enum, sehingga pemanggil tidak perlu membandingkan string mentah. Test ESM mengimpor enum lalu memeriksa tiga field sekaligus: CPUArch.ARM, DeviceType.MOBILE, dan EngineName.GECKO test/unit/es6.mjs:222. Ketiganya dipakai lewat cpu.is(...), device.is(...), dan engine.is(...) yang semuanya menghasilkan true untuk satu user agent tertentu test/unit/es6.mjs:19-2523. Detail metode ini ada di halaman Feature Check dan Perbandingan Hasil.
Nilai Baku pada Jalur Client Hints
Test client hints mengimpor BrowserName, CPUArch, DeviceType, DeviceVendor, EngineName, dan OSName dari subpath enum test/unit/ua-ch.js:324. Hasil withClientHints() kemudian diperiksa terhadap konstanta tersebut, misalnya BrowserName.CHROME, CPUArch.ARM_64, DeviceType.MOBILE, DeviceVendor.GOOGLE, EngineName.BLINK, dan OSName.WINDOWS test/unit/ua-ch.js:30-5025. Pola ini menunjukkan bahwa jalur client hints memakai kosakata nilai yang sama dengan jalur regex; mekanismenya dibahas di Deteksi Client Hints.