mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-28 00:18:45 +03:00
[submodule:helpers] Enable directly pass user-agent as an input to isAppleSilicon()
/ isBot()
/ isChromeFamily()
This commit is contained in:
parent
b1c7dfcc3a
commit
5b375b90d5
6
src/helpers/ua-parser-helpers.d.ts
vendored
6
src/helpers/ua-parser-helpers.d.ts
vendored
@ -5,9 +5,9 @@
|
|||||||
import { IResult } from "../main/ua-parser";
|
import { IResult } from "../main/ua-parser";
|
||||||
|
|
||||||
declare function getDeviceVendor(model: string): string | undefined;
|
declare function getDeviceVendor(model: string): string | undefined;
|
||||||
declare function isAppleSilicon(res: IResult, useFeatureDetection?: boolean): boolean;
|
declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
|
||||||
declare function isBot(res: IResult): boolean;
|
declare function isBot(resultOrUA: IResult | string): boolean;
|
||||||
declare function isChromeFamily(res: IResult): boolean;
|
declare function isChromeFamily(resultOrUA: IResult | string): boolean;
|
||||||
declare function isElectron(): boolean;
|
declare function isElectron(): boolean;
|
||||||
declare function isFromEU(): boolean;
|
declare function isFromEU(): boolean;
|
||||||
declare function isFrozenUA(ua: string): boolean;
|
declare function isFrozenUA(ua: string): boolean;
|
||||||
|
@ -9,18 +9,22 @@
|
|||||||
|
|
||||||
const { UAParser } = require('../main/ua-parser');
|
const { UAParser } = require('../main/ua-parser');
|
||||||
const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
|
const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
|
||||||
|
const { Bots } = require('../extensions/ua-parser-extensions');
|
||||||
const { isFromEU } = require('detect-europe-js');
|
const { isFromEU } = require('detect-europe-js');
|
||||||
const { isFrozenUA } = require('ua-is-frozen');
|
const { isFrozenUA } = require('ua-is-frozen');
|
||||||
const { isStandalonePWA } = require('is-standalone-pwa');
|
const { isStandalonePWA } = require('is-standalone-pwa');
|
||||||
|
|
||||||
|
const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
|
||||||
|
|
||||||
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 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 = (resultOrUA) => {
|
||||||
|
const res = toResult(resultOrUA);
|
||||||
if (res.os.is(OS.MACOS)) {
|
if (res.os.is(OS.MACOS)) {
|
||||||
if (res.cpu.is(CPU.ARM)) {
|
if (res.cpu.is(CPU.ARM)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (typeof window !== 'undefined') {
|
if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
|
||||||
try {
|
try {
|
||||||
const canvas = document.createElement('canvas');
|
const canvas = document.createElement('canvas');
|
||||||
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
||||||
@ -37,9 +41,14 @@ const isAppleSilicon = (res) => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isBot = (res) => ['cli', 'crawler', 'fetcher', 'library'].includes(res.browser.type);
|
const isBot = (resultOrUA) => [
|
||||||
|
'cli',
|
||||||
|
'crawler',
|
||||||
|
'fetcher',
|
||||||
|
'library'
|
||||||
|
].includes(toResult(resultOrUA, Bots).browser.type);
|
||||||
|
|
||||||
const isChromeFamily = (res) => res.engine.is(Engine.BLINK);
|
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
|
||||||
|
|
||||||
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
|
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
|
||||||
/ electron\//i.test(navigator?.userAgent)); // browser
|
/ electron\//i.test(navigator?.userAgent)); // browser
|
||||||
|
@ -28,7 +28,9 @@ describe('isAppleSilicon', () => {
|
|||||||
const macIntel = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0';
|
const macIntel = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0';
|
||||||
|
|
||||||
assert.equal(isAppleSilicon(UAParser(macIntel)), false);
|
assert.equal(isAppleSilicon(UAParser(macIntel)), false);
|
||||||
|
assert.equal(isAppleSilicon(macIntel), false);
|
||||||
assert.equal(isAppleSilicon(UAParser(macARM)), true);
|
assert.equal(isAppleSilicon(UAParser(macARM)), true);
|
||||||
|
assert.equal(isAppleSilicon(macARM), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -46,6 +48,11 @@ describe('isBot', () => {
|
|||||||
assert.equal(isBot(botParser.setUA(ahrefsBot).getResult()), true);
|
assert.equal(isBot(botParser.setUA(ahrefsBot).getResult()), true);
|
||||||
assert.equal(isBot(botParser.setUA(scrapy).getResult()), true);
|
assert.equal(isBot(botParser.setUA(scrapy).getResult()), true);
|
||||||
assert.equal(isBot(botParser.setUA(thunderbird).getResult()), false);
|
assert.equal(isBot(botParser.setUA(thunderbird).getResult()), false);
|
||||||
|
|
||||||
|
assert.equal(isBot(ahrefsBot), true);
|
||||||
|
assert.equal(isBot(firefox), false);
|
||||||
|
assert.equal(isBot(scrapy), true);
|
||||||
|
assert.equal(isBot(thunderbird), false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -57,5 +64,7 @@ describe('isChromeFamily', () => {
|
|||||||
|
|
||||||
assert.equal(isChromeFamily(UAParser(edge)), true);
|
assert.equal(isChromeFamily(UAParser(edge)), true);
|
||||||
assert.equal(isChromeFamily(UAParser(firefox)), false);
|
assert.equal(isChromeFamily(UAParser(firefox)), false);
|
||||||
|
assert.equal(isChromeFamily(edge), true);
|
||||||
|
assert.equal(isChromeFamily(firefox), false);
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
x
Reference in New Issue
Block a user