Skip to content

Commit 5b375b9

Browse files
committed
[submodule:helpers] Enable directly pass user-agent as an input to isAppleSilicon() / isBot() / isChromeFamily()
1 parent b1c7dfc commit 5b375b9

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

src/helpers/ua-parser-helpers.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import { IResult } from "../main/ua-parser";
66

77
declare function getDeviceVendor(model: string): string | undefined;
8-
declare function isAppleSilicon(res: IResult, useFeatureDetection?: boolean): boolean;
9-
declare function isBot(res: IResult): boolean;
10-
declare function isChromeFamily(res: IResult): boolean;
8+
declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
9+
declare function isBot(resultOrUA: IResult | string): boolean;
10+
declare function isChromeFamily(resultOrUA: IResult | string): boolean;
1111
declare function isElectron(): boolean;
1212
declare function isFromEU(): boolean;
1313
declare function isFrozenUA(ua: string): boolean;

src/helpers/ua-parser-helpers.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,22 @@
99

1010
const { UAParser } = require('../main/ua-parser');
1111
const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
12+
const { Bots } = require('../extensions/ua-parser-extensions');
1213
const { isFromEU } = require('detect-europe-js');
1314
const { isFrozenUA } = require('ua-is-frozen');
1415
const { isStandalonePWA } = require('is-standalone-pwa');
1516

17+
const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
18+
1619
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;
1720

18-
const isAppleSilicon = (res) => {
21+
const isAppleSilicon = (resultOrUA) => {
22+
const res = toResult(resultOrUA);
1923
if (res.os.is(OS.MACOS)) {
2024
if (res.cpu.is(CPU.ARM)) {
2125
return true;
2226
}
23-
if (typeof window !== 'undefined') {
27+
if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
2428
try {
2529
const canvas = document.createElement('canvas');
2630
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
@@ -37,9 +41,14 @@ const isAppleSilicon = (res) => {
3741
return false;
3842
}
3943

40-
const isBot = (res) => ['cli', 'crawler', 'fetcher', 'library'].includes(res.browser.type);
44+
const isBot = (resultOrUA) => [
45+
'cli',
46+
'crawler',
47+
'fetcher',
48+
'library'
49+
].includes(toResult(resultOrUA, Bots).browser.type);
4150

42-
const isChromeFamily = (res) => res.engine.is(Engine.BLINK);
51+
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
4352

4453
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
4554
/ electron\//i.test(navigator?.userAgent)); // browser

test/mocha-test-helpers.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ describe('isAppleSilicon', () => {
2828
const macIntel = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0';
2929

3030
assert.equal(isAppleSilicon(UAParser(macIntel)), false);
31+
assert.equal(isAppleSilicon(macIntel), false);
3132
assert.equal(isAppleSilicon(UAParser(macARM)), true);
33+
assert.equal(isAppleSilicon(macARM), true);
3234
});
3335
});
3436

@@ -46,6 +48,11 @@ describe('isBot', () => {
4648
assert.equal(isBot(botParser.setUA(ahrefsBot).getResult()), true);
4749
assert.equal(isBot(botParser.setUA(scrapy).getResult()), true);
4850
assert.equal(isBot(botParser.setUA(thunderbird).getResult()), false);
51+
52+
assert.equal(isBot(ahrefsBot), true);
53+
assert.equal(isBot(firefox), false);
54+
assert.equal(isBot(scrapy), true);
55+
assert.equal(isBot(thunderbird), false);
4956
});
5057
});
5158

@@ -57,5 +64,7 @@ describe('isChromeFamily', () => {
5764

5865
assert.equal(isChromeFamily(UAParser(edge)), true);
5966
assert.equal(isChromeFamily(UAParser(firefox)), false);
67+
assert.equal(isChromeFamily(edge), true);
68+
assert.equal(isChromeFamily(firefox), false);
6069
});
6170
});

0 commit comments

Comments
 (0)