diff --git a/package.json b/package.json index 81e2905..dbe33f8 100644 --- a/package.json +++ b/package.json @@ -142,20 +142,21 @@ "Zach Bjornson " ], "type": "commonjs", - "main": "src/ua-parser.js", - "module": "src/module/ua-parser.mjs", + "main": "src/main/ua-parser.js", + "module": "src/main/ua-parser.mjs", + "browser": "dist/ua-parser.pack.js", "exports": { ".": { - "require": "./src/ua-parser.js", - "import": "./src/module/ua-parser.mjs" + "require": "./src/main/ua-parser.js", + "import": "./src/main/ua-parser.mjs" }, "./enums": { - "require": "./src/ua-parser-enum.js", - "import": "./src/module/ua-parser-enum.mjs" + "require": "./src/enums/ua-parser-enums.js", + "import": "./src/enums/ua-parser-enums.mjs" }, "./extensions": { - "require": "./src/ua-parser-extension.js", - "import": "./src/module/ua-parser-extension.mjs" + "require": "./src/extensions/ua-parser-extensions.js", + "import": "./src/extensions/ua-parser-extensions.mjs" } }, "files": [ diff --git a/script/build-dist.sh b/script/build-dist.sh index 4df2da7..884f4b4 100755 --- a/script/build-dist.sh +++ b/script/build-dist.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -SRC_PATH="src/ua-parser.js" +SRC_PATH="src/main/ua-parser.js" MIN_PATH="dist/ua-parser.min.js" PACK_PATH="dist/ua-parser.pack.js" diff --git a/script/build-module.js b/script/build-module.js index 4d36273..bbeb72c 100755 --- a/script/build-module.js +++ b/script/build-module.js @@ -3,19 +3,19 @@ const fs = require('fs'); const PATH = { main : { - src : 'src/ua-parser.js', - dest : 'src/module/ua-parser.mjs', + src : 'src/main/ua-parser.js', + dest : 'src/main/ua-parser.mjs', title : '' }, - enum : { - src : 'src/ua-parser-enum.js', - dest :'src/module/ua-parser-enum.mjs', - title : 'enum' + enums : { + src : 'src/enums/ua-parser-enums.js', + dest :'src/enums/ua-parser-enums.mjs', + title : 'enums' }, - extension : { - src : 'src/ua-parser-extension.js', - dest : 'src/module/ua-parser-extension.mjs', - title : 'extension' + extensions : { + src : 'src/extensions/ua-parser-extensions.js', + dest : 'src/extensions/ua-parser-extensions.mjs', + title : 'extensions' } }; const generateMJS = (module, replacers) => { @@ -30,15 +30,11 @@ const generateMJS = (module, replacers) => { fs.writeFileSync(dest, `// Generated ESM version of UAParser.js ${title} // DO NOT EDIT THIS FILE! -// Source: /src/ua-parser.js +// Source: /${src} ${text}`, 'utf-8'); }; -if (!fs.existsSync('src/module')) { - fs.mkdirSync('src/module', { recursive: true }); -} - // ua-parser.mjs generateMJS('main', [ [/\(func[\s\S]+strict\';/ig, ''], @@ -47,7 +43,7 @@ generateMJS('main', [ ]); // ua-parser-enum.mjs -generateMJS('enum', [[/module\.exports =/ig, 'export']]); +generateMJS('enums', [[/module\.exports =/ig, 'export']]); // ua-parser-extension.mjs -generateMJS('extension', [[/module\.exports =/ig, 'export']]); \ No newline at end of file +generateMJS('extensions', [[/module\.exports =/ig, 'export']]); \ No newline at end of file diff --git a/src/ua-parser-enum.js b/src/enums/ua-parser-enums.js similarity index 100% rename from src/ua-parser-enum.js rename to src/enums/ua-parser-enums.js diff --git a/src/module/ua-parser-enum.mjs b/src/enums/ua-parser-enums.mjs similarity index 98% rename from src/module/ua-parser-enum.mjs rename to src/enums/ua-parser-enums.mjs index 2081f10..d766e24 100644 --- a/src/module/ua-parser-enum.mjs +++ b/src/enums/ua-parser-enums.mjs @@ -1,6 +1,6 @@ // Generated ESM version of UAParser.js enums // DO NOT EDIT THIS FILE! -// Source: /src/ua-parser-enum.js +// Source: /src/enums/ua-parser-enums.js /////////////////////////////////////////////// /* Enums for UAParser.js v2.0.0-alpha.2 diff --git a/src/ua-parser-extension.js b/src/extensions/ua-parser-extensions.js similarity index 100% rename from src/ua-parser-extension.js rename to src/extensions/ua-parser-extensions.js diff --git a/src/module/ua-parser-extension.mjs b/src/extensions/ua-parser-extensions.mjs similarity index 91% rename from src/module/ua-parser-extension.mjs rename to src/extensions/ua-parser-extensions.mjs index 44932a2..d0b6f8c 100644 --- a/src/module/ua-parser-extension.mjs +++ b/src/extensions/ua-parser-extensions.mjs @@ -1,6 +1,6 @@ // Generated ESM version of UAParser.js extensions // DO NOT EDIT THIS FILE! -// Source: /src/ua-parser-extension.js +// Source: /src/extensions/ua-parser-extensions.js /////////////////////////////////////////////// /* Extensions for UAParser.js v2.0.0-alpha.2 @@ -19,10 +19,19 @@ const VERSION = 'version'; const MOBILE = 'mobile'; const TABLET = 'tablet'; +const Apps = Object.freeze({ + browser : [ + [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, 'app']] + ] +}); + const Bots = Object.freeze({ browser : [ - // Googlebot / BingBot / MSNBot / FacebookBot - [/((?:google|bing|msn|facebook)bot(?:\-[imagevdo]{5})?|bingpreview)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']] + // Googlebot / BingBot / MSNBot / FacebookBot + [/((?:google|bing|msn|facebook)bot(?:\-[imagevdo]{5})?|bingpreview)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']], + + // Slackbot - https://api.slack.com/robots + [/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']] ] }); @@ -111,16 +120,17 @@ const Emails = Object.freeze({ ] }); -const Tools = Object.freeze({ +const CLI = Object.freeze({ browser : [ // wget / curl / lynx - [/(wget|curl|lynx)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'tool']] + [/(wget|curl|lynx)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'cli']] ] }); export { + Apps, Bots, ExtraDevices, Emails, - Tools + CLI }; \ No newline at end of file diff --git a/src/ua-parser.js b/src/main/ua-parser.js similarity index 100% rename from src/ua-parser.js rename to src/main/ua-parser.js diff --git a/src/module/ua-parser.mjs b/src/main/ua-parser.mjs similarity index 98% rename from src/module/ua-parser.mjs rename to src/main/ua-parser.mjs index 250eea7..e49eb72 100644 --- a/src/module/ua-parser.mjs +++ b/src/main/ua-parser.mjs @@ -1,6 +1,6 @@ -// Generated ESM version of UAParser.js +// Generated ESM version of UAParser.js // DO NOT EDIT THIS FILE! -// Source: /src/ua-parser.js +// Source: /src/main/ua-parser.js ///////////////////////////////////////////////////////////////////////////////// /* UAParser.js v2.0.0-alpha.2 @@ -734,7 +734,7 @@ // iOS/macOS /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS - /ios;fbsv\/([\d\.]+)/i, + /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i, /cfnetwork\/.+darwin/i ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [ /(mac os x) ?([\w\. ]*)/i, @@ -920,10 +920,10 @@ // Constructor //////////////// - function UACHData (uach, isHTTP_UACH) { + function UACHData (uach, isHttpUACH) { uach = uach || {}; setProps.call(this, CH_ALL_VALUES); - if (isHTTP_UACH) { + if (isHttpUACH) { setProps.call(this, [ [BRANDS, itemListToArray(uach[CH_HEADER])], [FULLVERLIST, itemListToArray(uach[CH_HEADER_FULL_VER_LIST])], @@ -1108,15 +1108,12 @@ return new UAParser(ua, extensions, headers).getResult(); } - var userAgent = ua || - ((NAVIGATOR && NAVIGATOR.userAgent) ? - NAVIGATOR.userAgent : - (headers && headers[USER_AGENT] ? - headers[USER_AGENT] : - EMPTY)), - - HTTP_UACH = new UACHData(headers, true), + var userAgent = typeof ua === STR_TYPE ? ua : // Passed user-agent string + ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent + (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers + EMPTY)), // empty string + httpUACH = new UACHData(headers, true), regexMap = extensions ? extend(defaultRegexes, extensions) : defaultRegexes, @@ -1124,7 +1121,7 @@ createItemFunc = function (itemType) { if (itemType == UA_RESULT) { return function () { - return new UAItem(itemType, userAgent, regexMap, HTTP_UACH) + return new UAItem(itemType, userAgent, regexMap, httpUACH) .set('ua', userAgent) .set(UA_BROWSER, this.getBrowser()) .set(UA_CPU, this.getCPU()) @@ -1135,13 +1132,13 @@ }; } else { return function () { - return new UAItem(itemType, userAgent, regexMap[itemType], HTTP_UACH) + return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH) .parseUA() .get(); }; } }; - + // public methods setProps.call(this, [ ['getBrowser', createItemFunc(UA_BROWSER)], diff --git a/test/mocha-test.js b/test/mocha-test.js index e85322d..682f710 100644 --- a/test/mocha-test.js +++ b/test/mocha-test.js @@ -4,7 +4,7 @@ var assert = require('assert'); var requirejs = require('requirejs'); var parseJS = require('@babel/parser').parse; var traverse = require('@babel/traverse').default; -var UAParser = require('../src/ua-parser'); +var UAParser = require('ua-parser-js'); var browsers = require('./specs/browser-all.json'); var cpus = require('./specs/cpu-all.json'); var devices = require('./specs/device-all.json'); @@ -159,7 +159,7 @@ describe('Testing regexes', function () { var regexes; before('Read main js file', function () { - var code = fs.readFileSync('src/ua-parser.js', 'utf8').toString(); + var code = fs.readFileSync('src/main/ua-parser.js', 'utf8').toString(); var ast = parseJS(code, { sourceType: "script" }); regexes = []; traverse(ast, {