Skip to content

Справочник

Архитектура

os-detect

├── src/utils/platform.ts
│     getUADataPlatform()    → navigator.userAgentData.platform (Chrome/Edge)
│     getNodePlatform()      → process.platform (только Node.js)

├── src/utils/cache.ts
│     memoizeBoolean()       → оборачивает детектор одноразовым кэшем
│     resetDetectionCache()  → очищает каждый кэш, зарегистрированный через memoizeBoolean()

├── src/detectors/ios.ts        detectIsIOS()       → UA + maxTouchPoints (учитывает iPadOS 13+)
├── src/detectors/macos.ts      detectIsMacOS()      → UAData / UA / process.platform=darwin
├── src/detectors/android.ts    detectIsAndroid()    → UAData / UA / process.platform=android
├── src/detectors/chromeos.ts   detectIsChromeOS()   → UAData / UA (только браузер)
├── src/detectors/linux.ts      detectIsLinux()      → UAData / UA / process.platform=linux
│                                                        (исключает Android и ChromeOS)
├── src/detectors/windows.ts    detectIsWindows()    → UAData / UA / process.platform=win32
│                                detectIsWindows11()  → асинхронно
│                                  браузер: userAgentData.getHighEntropyValues(['platformVersion'])
│                                           platformVersion >= 13.0.0 → Windows 11
│                                  Node.js: import('os').release() номер сборки >= 22000

├── src/index.ts  (базовая точка входа — реэкспортирует детекторы выше, плюс:)
│     getOS()               → вызывает детекторы в порядке приоритета
│     isMobileDevice()      → detectIsIOS() || detectIsAndroid()
│     isDesktopDevice()     → detectIsMacOS() || detectIsWindows()
│                               || detectIsLinux() || detectIsChromeOS()
│     detectIsiOS()         → устаревший алиас для detectIsIOS()

├── src/react.ts  (os-detect/react)
│     useOS()              → useState(() => getOS())
│     useIsWindows11()     → useState(null) + useEffect → detectIsWindows11()

└── src/vue.ts  (os-detect/vue)
      useOS()              → readonly(ref(getOS()))
      useIsWindows11()     → readonly(ref(null)) + onMounted → detectIsWindows11()

Размер бандла и точки входа

Точка входаPeer-зависимостиФорматЗаметки
os-detectESM, CJS, UMDБазовая часть — все функции определения и тип OS
os-detect/reactreact >=17ESM, CJSХуки useOS и useIsWindows11
os-detect/vuevue >=3ESM, CJSComposables useOS и useIsWindows11

Все три точки входа перечислены в exports пакета package.json. Адаптеры для React и Vue не добавляют никакой рантайм-логики сверх самих хуков/composables — они вызывают те же кэшируемые базовые функции.

У пакета нулевые runtime-зависимости. React и Vue — опциональные peer-зависимости, они нужны только при использовании соответствующей точки входа.

Миграция с v1.x

detectIsiOS() переименована в detectIsIOS() (заглавная OS) для согласованности с остальным API.

Старое имя всё ещё работает в v2, но выводит предупреждение об устаревании и будет удалено в v3.0:

ts
detectIsiOS() // ⚠ устарело — выводит console.warn во всех окружениях
detectIsIOS() // ✓ используйте это вместо

Других breaking-изменений между v1 и v2 нет.

Лицензия

MIT