Lompat ke konten
dokumentasi.id
Commit bd74801
v2
Star10 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-225.

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-872. Versi ESM memakai daftar export yang sama isinya src/enums/ua-parser-enums.mjs:843-858, dan berkas itu ditandai sebagai hasil generate yang tidak boleh disunting manual src/enums/ua-parser-enums.mjs:1-3.

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:14. Bentuk Readonly yang sama dipakai untuk Extension yang bersarang src/enums/ua-parser-enums.d.ts:463.

⚠️ Berkas src/enums/ua-parser-enums.d.ts dan src/enums/ua-parser-enums.mjs adalah hasil generate dari src/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.

KonstantaRentang barisBentuk nilaiContoh pasangan kunci dan nilai
BrowserNamesrc/enums/ua-parser-enums.js:10nama tampilan browserCHROME: 'Chrome', OPERA_MINI: 'Opera Mini', SAFARI_MOBILE: 'Mobile Safari'
BrowserTypesrc/enums/ua-parser-enums.js:186-194kategori kelas browserCRAWLER: 'crawler', INAPP: 'inapp', LIBRARY: 'library'
CPUArchsrc/enums/ua-parser-enums.js:196-215arsitektur CPUARM_64: 'arm64', X86: 'ia32', X86_64: 'amd64'
DeviceTypesrc/enums/ua-parser-enums.js:221-233tipe perangkatMOBILE: 'mobile', SMARTTV: 'smarttv', XR: 'xr'
DeviceVendorsrc/enums/ua-parser-enums.js:239-241vendor perangkatSAMSUNG: 'Samsung', GOOGLE: 'Google', XIAOMI: 'Xiaomi'
EngineNamesrc/enums/ua-parser-enums.js:330-352mesin renderBLINK: 'Blink', GECKO: 'Gecko', WEBKIT: 'WebKit'
OSNamesrc/enums/ua-parser-enums.js:358-359sistem operasiMACOS: 'macOS', WINDOWS: 'Windows', LINUX: 'Linux'
Extensionsrc/enums/ua-parser-enums.js:465-807objek bersarang per submoduleBrowserName.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-215.

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-233. 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-184, sedangkan OS adalah alias OSName src/enums/ua-parser-enums.js:455-459. Alias ini tetap diekspor agar kode lama tidak langsung patah src/enums/ua-parser-enums.js:857-872.

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.
Fig. 1: Konstanta enum dan field hasil deteksiSetiap 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-807. 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-807.

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-855. 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.
Fig. 2: Konstanta enum dipakai submodule bawaanBerkas 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-13. Konstanta BrowserType dipakai untuk menyusun daftar tipe yang dianggap bot, yaitu CLI, CRAWLER, FETCHER, dan LIBRARY src/bot-detection/bot-detection.js:30-35.

device-detection membandingkan hasil parse dengan OSName.MACOS dan CPUArch.ARM di dalam fungsi isAppleSilicon src/device-detection/device-detection.js:20-21, sedangkan browser-detection memakai EngineName.BLINK untuk menentukan isChromeFamily src/browser-detection/browser-detection.js:15-19.

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:2. Ketiganya dipakai lewat cpu.is(...), device.is(...), dan engine.is(...) yang semuanya menghasilkan true untuk satu user agent tertentu test/unit/es6.mjs:19-25. 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:3. 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-50. Pola ini menunjukkan bahwa jalur client hints memakai kosakata nilai yang sama dengan jalur regex; mekanismenya dibahas di Deteksi Client Hints.