diff --git a/src/helpers/ua-parser-helpers.d.ts b/src/helpers/ua-parser-helpers.d.ts index 905e5ed..c58fc14 100644 --- a/src/helpers/ua-parser-helpers.d.ts +++ b/src/helpers/ua-parser-helpers.d.ts @@ -4,12 +4,14 @@ import { IResult } from "../main/ua-parser"; +declare function getDeviceVendor(model: string): string | undefined; declare function isAppleSilicon(res: IResult): boolean; declare function isChromeFamily(res: IResult): boolean; declare function isFrozenUA(ua: string): boolean; declare function isStandalonePWA(): boolean; export { + getDeviceVendor, isAppleSilicon, isChromeFamily, isFrozenUA, diff --git a/src/helpers/ua-parser-helpers.js b/src/helpers/ua-parser-helpers.js index 3c7d399..e0729c9 100644 --- a/src/helpers/ua-parser-helpers.js +++ b/src/helpers/ua-parser-helpers.js @@ -8,6 +8,9 @@ /*jshint esversion: 6 */ const { CPU, OS, Engine } = require('../enums/ua-parser-enums'); +const { UAParser } = require('../main/ua-parser'); + +const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${model}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36`).device.vendor; const isAppleSilicon = (res) => { if (res.os.is(OS.MACOS)) { @@ -44,6 +47,7 @@ const isStandalonePWA = () => window && (window.matchMedia('(display-mode: stand document.referrer.startsWith('app-info://platform/microsoft-store')); module.exports = { + getDeviceVendor, isAppleSilicon, isChromeFamily, isFrozenUA, diff --git a/test/mocha-test-helpers.js b/test/mocha-test-helpers.js index 1cfffea..da9ae2c 100644 --- a/test/mocha-test-helpers.js +++ b/test/mocha-test-helpers.js @@ -1,6 +1,23 @@ const assert = require('assert'); const { UAParser } = require('../src/main/ua-parser'); -const { isAppleSilicon, isChromeFamily } = require('../src/helpers/ua-parser-helpers'); +const { getDeviceVendor, isAppleSilicon, isChromeFamily } = require('../src/helpers/ua-parser-helpers'); + +describe('getDeviceVendor', () => { + it('Can guess the device vendor from a model name', () => { + + const modelSM = 'SM-A605G'; + const modelRedmi = 'Redmi Note 8'; + const modelNexus = 'Nexus 6P'; + const modelQuest = 'Quest 3'; + const modelAquos = 'AQUOS-TVX19B'; + + assert.equal(getDeviceVendor(modelSM), 'Samsung'); + assert.equal(getDeviceVendor(modelRedmi), 'Xiaomi'); + assert.equal(getDeviceVendor(modelNexus), 'Huawei'); + assert.equal(getDeviceVendor(modelQuest), 'Facebook'); + assert.equal(getDeviceVendor(modelAquos), 'Sharp'); + }); +}); describe('isAppleSilicon', () => { it('Can detect Apple Silicon device', () => {