From 638e237c8d0a0ac79f2495248703ceceabe694d3 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Mon, 2 Dec 2024 16:15:35 +0700 Subject: [PATCH] [device-utils] Add new method: `getMarketingName()` --- src/device-utils/data/marketing-name/samsung.json | 5 +++++ src/device-utils/data/marketing-name/xiaomi.json | 5 +++++ src/device-utils/ua-parser-device-utils.d.ts | 2 ++ src/device-utils/ua-parser-device-utils.js | 15 +++++++++++++++ test/unit/device-utils.js | 11 ++++++++++- 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/device-utils/data/marketing-name/samsung.json create mode 100644 src/device-utils/data/marketing-name/xiaomi.json diff --git a/src/device-utils/data/marketing-name/samsung.json b/src/device-utils/data/marketing-name/samsung.json new file mode 100644 index 0000000..1def45a --- /dev/null +++ b/src/device-utils/data/marketing-name/samsung.json @@ -0,0 +1,5 @@ +[ + { + "SM-S928N" : "Galaxy S24 Ultra" + } +] \ No newline at end of file diff --git a/src/device-utils/data/marketing-name/xiaomi.json b/src/device-utils/data/marketing-name/xiaomi.json new file mode 100644 index 0000000..75d83ef --- /dev/null +++ b/src/device-utils/data/marketing-name/xiaomi.json @@ -0,0 +1,5 @@ +[ + { + "M2101K9C" : "Mi 11 Lite 5G" + } +] \ No newline at end of file diff --git a/src/device-utils/ua-parser-device-utils.d.ts b/src/device-utils/ua-parser-device-utils.d.ts index 08a806d..f9c1d48 100644 --- a/src/device-utils/ua-parser-device-utils.d.ts +++ b/src/device-utils/ua-parser-device-utils.d.ts @@ -4,6 +4,7 @@ import type { IResult, IDevice } from "../main/ua-parser"; +declare function getMarketingName(model: string, vendor: string): boolean; declare function isMobile(val: IResult | IDevice | string): boolean; declare function isSmartTV(val: IResult | IDevice | string): boolean; declare function isTablet(val: IResult | IDevice | string): boolean; @@ -11,6 +12,7 @@ declare function isWearable(val: IResult | IDevice | string): boolean; declare function isXR(val: IResult | IDevice | string): boolean; export { + getMarketingName, isMobile, isSmartTV, isTablet, diff --git a/src/device-utils/ua-parser-device-utils.js b/src/device-utils/ua-parser-device-utils.js index fdfee9f..fc2f755 100644 --- a/src/device-utils/ua-parser-device-utils.js +++ b/src/device-utils/ua-parser-device-utils.js @@ -7,6 +7,8 @@ /*jshint esversion: 6 */ +const fs = require('fs'); +const path = require('path'); const UAParser = require('../main/ua-parser'); const { Device: DeviceType } = require('../enums/ua-parser-enums'); @@ -21,6 +23,18 @@ const isDeviceType = (val, expectedType) => { return actualType == expectedType; }; +const getMarketingName = (model, vendor) => { + const normalizedVendor = vendor.toLowerCase(); + const filePath = path.resolve(__dirname, `./data/marketing-name/${normalizedVendor}.json`); + if (fs.existsSync(filePath)) { + const map = require(`./data/marketing-name/${normalizedVendor}.json`)[0]; + if (model in map) { + return map[model]; + } + } + return model; +}; + const isMobile = val => isDeviceType(val, DeviceType.MOBILE); const isSmartTV = val => isDeviceType(val, DeviceType.SMARTTV); const isTablet = val => isDeviceType(val, DeviceType.TABLET); @@ -28,6 +42,7 @@ const isWearable = val => isDeviceType(val, DeviceType.WEARABLE); const isXR = val => isDeviceType(val, DeviceType.XR); module.exports = { + getMarketingName, isMobile, isSmartTV, isTablet, diff --git a/test/unit/device-utils.js b/test/unit/device-utils.js index 400b412..e9afe73 100644 --- a/test/unit/device-utils.js +++ b/test/unit/device-utils.js @@ -1,6 +1,7 @@ const assert = require('assert'); const { UAParser } = require('../../src/main/ua-parser'); -const { isMobile, isSmartTV, isTablet, isWearable, isXR } = require('../../src/device-utils/ua-parser-device-utils'); +const { getMarketingName, isMobile, isSmartTV, isTablet, isWearable, isXR } = require('../../src/device-utils/ua-parser-device-utils'); +const { Vendor } = require('../../src/enums/ua-parser-enums'); describe('Device type check', () => { @@ -45,3 +46,11 @@ describe('Device type check', () => { assert.strictEqual(isXR(questPro), true); }); }); + +describe('getMarketingName()', () => { + + it('Returns marketing name from given model name', () => { + assert.strictEqual(getMarketingName('M2101K9C', Vendor.XIAOMI), 'Mi 11 Lite 5G'); + assert.strictEqual(getMarketingName('SM-S928N', Vendor.SAMSUNG), 'Galaxy S24 Ultra'); + }); +}); \ No newline at end of file