diff --git a/package.json b/package.json index b00b5c5..8617384 100644 --- a/package.json +++ b/package.json @@ -144,15 +144,21 @@ "main": "src/ua-parser.js", "module": "src/ua-parser.mjs", "exports": { + "." : { "require": "./src/ua-parser.js", "import": "./src/ua-parser.mjs" + }, + "./enums" : { + "require": "./src/ua-parser-enum.js", + "import": "./src/ua-parser-enum.mjs" + } }, "files": [ "dist", "src" ], "scripts": { - "build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/^ UA/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/^ UA/' --compress --mangle && node -e \"const fs=require('fs');fs.writeFileSync('src/ua-parser.mjs','// Generated ESM version of UAParser.js\\n// Source file: /src/ua-parser.js\\n\\nconst window = undefined;\\n\\n'+fs.readFileSync('src/ua-parser.js','utf-8').replace(/\\(func[\\s\\S]+strict\\';/ig,'').replace(/\\/[\\/\\s]+export[\\s\\S]+/ig,'export {UAParser};'),'utf-8')\"", + "build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/^ UA/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/^ UA/' --compress --mangle && node -e \"const fs=require('fs');fs.writeFileSync('src/ua-parser.mjs','// Generated ESM version of UAParser.js\\n// Source file: /src/ua-parser.js\\n\\nconst window = undefined;\\n\\n'+fs.readFileSync('src/ua-parser.js','utf-8').replace(/\\(func[\\s\\S]+strict\\';/ig,'').replace(/\\/[\\/\\s]+export[\\s\\S]+/ig,'export {UAParser};'),'utf-8');fs.writeFileSync('src/ua-parser-enum.mjs','// Generated ESM version of UAParser.js enums\\n// Source file: /src/ua-parser-enum.js\\n\\n'+fs.readFileSync('src/ua-parser-enum.js','utf-8').replace(/module\\.exports =/ig,'export'),'utf-8')\"", "test": "jshint src/ua-parser.js && mocha -R nyan test", "test-ci": "jshint src/ua-parser.js && mocha -R spec test", "verup": "node ./node_modules/verup", diff --git a/readme.md b/readme.md index 7ad1872..071593d 100644 --- a/readme.md +++ b/readme.md @@ -477,6 +477,14 @@ console.log('Server running at http://127.0.0.1:1337/'); ```js import { UAParser } from 'ua-parser-js'; +import { CPUArch, DeviceType } from 'ua-parser-js/enums'; + +const { cpu, device } = UAParser('Mozilla/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2a1pre) Gecko/20090928 Firefox/3.5 Maemo Browser 1.4.1.22 RX-51 N900'); + +console.log(browser.name) // Maemo Browser +console.log(cpu.is(CPUArch.ARM)) // true +console.log(device.is(DeviceType.MOBILE)) // true +console.log(device.model) // N900 ``` ## Using TypeScript diff --git a/src/ua-parser-enum.js b/src/ua-parser-enum.js new file mode 100644 index 0000000..6376252 --- /dev/null +++ b/src/ua-parser-enum.js @@ -0,0 +1,100 @@ +/////////////////////////////////////////////// +/* Enums for UAParser.js v2.0 + https://github.com/faisalman/ua-parser-js + Author: Faisal Salman + MIT License */ +////////////////////////////////////////////// + +const BrowserName = Object.freeze({ + CHROME : 'Chrome', + EDGE : 'Edge', + SAFARI : 'Safari', + FIREFOX : 'Firefox', + OPERA : 'Opera', + MOBILE_CHROME : 'Mobile Chrome', + MOBILE_SAFARI : 'Mobile Safari', + MOBILE_FIREFOX : 'Mobile Firefox', + ANDROID_BROWSER : 'Android Browser' + + // TODO : test! +}); + +const CPUArch = Object.freeze({ + IA32 : 'ia32', + AMD64 : 'amd64', + IA64 : 'ia64', + ARM : 'arm', + ARM64 : 'arm64', + ARMHF : 'armhf', + _68K : '68k', + AVR : 'avr', + IRIX : 'irix', + IRIX64 : 'irix64', + MIPS : 'mips', + MIPS64 : 'mips64', + PPC : 'ppc', + SPARC : 'sparc', + SPARC64 : 'sparc64' +}); + +const DeviceType = Object.freeze({ + MOBILE : 'mobile', + TABLET : 'tablet', + SMARTTV : 'smarttv', + CONSOLE : 'console', + WEARABLE: 'wearable', + EMBEDDED: 'embedded' +}); + +const DeviceVendor = Object.freeze({ + APPLE : 'Apple', + SAMSUNG : 'Samsung', + HUAWEI : 'Huawei', + XIAOMI : 'Xiaomi', + OPPO : 'OPPO', + VIVO : 'Vivo', + REALME : 'Realme', + LENOVO : 'Lenovo', + LG : 'LG' + + // TODO : test! +}); + +const EngineName = Object.freeze({ + AMAYA : 'Amaya', + BLINK : 'Blink', + EDGEHTML: 'EdgeHTML', + FLOW : 'Flow', + GECKO : 'Gecko', + GOANNA : 'Goanna', + ICAB : 'iCab', + KHTML : 'KHTML', + LINKS : 'Links', + LYNX : 'Lynx', + NETFRONT: 'NetFront', + NETSURF : 'NetSurf', + PRESTO : 'Presto', + TASMAN : 'Tasman', + TRIDENT : 'Trident', + W3M : 'w3m', + WEBKIT : 'WebKit' +}); + +const OSName = Object.freeze({ + WINDOWS : 'Windows', + LINUX : 'Linux', + MACOS : 'macOS', + IOS : 'iOS', + ANDROID : 'Android' + + // TODO : test! +}); + +module.exports = { + BrowserName, + CPUArch, + DeviceType, + DeviceVendor, + EngineName, + OSName +} \ No newline at end of file diff --git a/src/ua-parser-enum.mjs b/src/ua-parser-enum.mjs new file mode 100644 index 0000000..74e7537 --- /dev/null +++ b/src/ua-parser-enum.mjs @@ -0,0 +1,103 @@ +// Generated ESM version of UAParser.js enums +// Source file: /src/ua-parser-enum.js + +/////////////////////////////////////////////// +/* Enums for UAParser.js v2.0 + https://github.com/faisalman/ua-parser-js + Author: Faisal Salman + MIT License */ +////////////////////////////////////////////// + +const BrowserName = Object.freeze({ + CHROME : 'Chrome', + EDGE : 'Edge', + SAFARI : 'Safari', + FIREFOX : 'Firefox', + OPERA : 'Opera', + MOBILE_CHROME : 'Mobile Chrome', + MOBILE_SAFARI : 'Mobile Safari', + MOBILE_FIREFOX : 'Mobile Firefox', + ANDROID_BROWSER : 'Android Browser' + + // TODO : test! +}); + +const CPUArch = Object.freeze({ + IA32 : 'ia32', + AMD64 : 'amd64', + IA64 : 'ia64', + ARM : 'arm', + ARM64 : 'arm64', + ARMHF : 'armhf', + _68K : '68k', + AVR : 'avr', + IRIX : 'irix', + IRIX64 : 'irix64', + MIPS : 'mips', + MIPS64 : 'mips64', + PPC : 'ppc', + SPARC : 'sparc', + SPARC64 : 'sparc64' +}); + +const DeviceType = Object.freeze({ + MOBILE : 'mobile', + TABLET : 'tablet', + SMARTTV : 'smarttv', + CONSOLE : 'console', + WEARABLE: 'wearable', + EMBEDDED: 'embedded' +}); + +const DeviceVendor = Object.freeze({ + APPLE : 'Apple', + SAMSUNG : 'Samsung', + HUAWEI : 'Huawei', + XIAOMI : 'Xiaomi', + OPPO : 'OPPO', + VIVO : 'Vivo', + REALME : 'Realme', + LENOVO : 'Lenovo', + LG : 'LG' + + // TODO : test! +}); + +const EngineName = Object.freeze({ + AMAYA : 'Amaya', + BLINK : 'Blink', + EDGEHTML: 'EdgeHTML', + FLOW : 'Flow', + GECKO : 'Gecko', + GOANNA : 'Goanna', + ICAB : 'iCab', + KHTML : 'KHTML', + LINKS : 'Links', + LYNX : 'Lynx', + NETFRONT: 'NetFront', + NETSURF : 'NetSurf', + PRESTO : 'Presto', + TASMAN : 'Tasman', + TRIDENT : 'Trident', + W3M : 'w3m', + WEBKIT : 'WebKit' +}); + +const OSName = Object.freeze({ + WINDOWS : 'Windows', + LINUX : 'Linux', + MACOS : 'macOS', + IOS : 'iOS', + ANDROID : 'Android' + + // TODO : test! +}); + +export { + BrowserName, + CPUArch, + DeviceType, + DeviceVendor, + EngineName, + OSName +} \ No newline at end of file diff --git a/test/es6-test.mjs b/test/es6-test.mjs index 442170c..e3e0cbc 100644 --- a/test/es6-test.mjs +++ b/test/es6-test.mjs @@ -1,5 +1,6 @@ -import { UAParser } from '../src/ua-parser.mjs' -import * as assert from 'assert' +import { UAParser } from 'ua-parser-js'; +import { CPUArch, DeviceType, EngineName } from 'ua-parser-js/enums'; +import * as assert from 'assert'; describe('Returns', () => { it('getResult() should returns object', () => { @@ -14,4 +15,13 @@ describe('Returns', () => { os: { name: undefined, version: undefined } }); }); +}); + +describe('Enums', () => { + it('Can use enum', () => { + const { cpu, device, engine } = UAParser('Mozilla/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2a1pre) Gecko/20090928 Firefox/3.5 Maemo Browser 1.4.1.22 RX-51 N900'); + assert.strictEqual(cpu.is(CPUArch.ARM), true); + assert.strictEqual(device.is(DeviceType.MOBILE), true); + assert.strictEqual(engine.is(EngineName.GECKO), true); + }); }); \ No newline at end of file