Справочник
Архитектура
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-detect | — | ESM, CJS, UMD | Базовая часть — все функции определения и тип OS |
os-detect/react | react >=17 | ESM, CJS | Хуки useOS и useIsWindows11 |
os-detect/vue | vue >=3 | ESM, CJS | Composables 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