Fix #660 - Add new helper method: getDeviceVendor() to guess the device vendor from a model name

This commit is contained in:
Faisal Salman 2024-07-27 22:47:27 +07:00
parent c391d8a73c
commit 62fb6c2925
3 changed files with 24 additions and 1 deletions

View File

@ -4,12 +4,14 @@
import { IResult } from "../main/ua-parser"; import { IResult } from "../main/ua-parser";
declare function getDeviceVendor(model: string): string | undefined;
declare function isAppleSilicon(res: IResult): boolean; declare function isAppleSilicon(res: IResult): boolean;
declare function isChromeFamily(res: IResult): boolean; declare function isChromeFamily(res: IResult): boolean;
declare function isFrozenUA(ua: string): boolean; declare function isFrozenUA(ua: string): boolean;
declare function isStandalonePWA(): boolean; declare function isStandalonePWA(): boolean;
export { export {
getDeviceVendor,
isAppleSilicon, isAppleSilicon,
isChromeFamily, isChromeFamily,
isFrozenUA, isFrozenUA,

View File

@ -8,6 +8,9 @@
/*jshint esversion: 6 */ /*jshint esversion: 6 */
const { CPU, OS, Engine } = require('../enums/ua-parser-enums'); 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) => { const isAppleSilicon = (res) => {
if (res.os.is(OS.MACOS)) { 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')); document.referrer.startsWith('app-info://platform/microsoft-store'));
module.exports = { module.exports = {
getDeviceVendor,
isAppleSilicon, isAppleSilicon,
isChromeFamily, isChromeFamily,
isFrozenUA, isFrozenUA,

View File

@ -1,6 +1,23 @@
const assert = require('assert'); const assert = require('assert');
const { UAParser } = require('../src/main/ua-parser'); 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', () => { describe('isAppleSilicon', () => {
it('Can detect Apple Silicon device', () => { it('Can detect Apple Silicon device', () => {