diff --git a/CHANGELOG.md b/CHANGELOG.md index 685e118..3da608d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +#### 0.5.0 (2019年08月25日) +* **Database:** Added support for Chromium based Edge. Updated Android and iOS models. Added Chrome 75 and 76. Added Samsung Galaxy Fold and Galaxy A models. +* **Fixes:** False positive for Obigo browser. + #### 0.4.2 (2019年06月01日) Now *TypeScript Types* are available thanks to @[AnandChowdhary](https://github.com/AnandChowdhary) and his PR [#36](https://github.com/WhichBrowser/Parser-JavaScript/pull/36) * **Database:** Added Chrome 73 and 74 ([d2ea800](https://github.com/WhichBrowser/Parser-JavaScript/commit/d2ea8009277426ea874559e8e426f29510816ae0)) diff --git a/data/browsers-chrome.js b/data/browsers-chrome.js index 8dc25a9..294c860 100644 --- a/data/browsers-chrome.js +++ b/data/browsers-chrome.js @@ -78,6 +78,8 @@ module.exports = { '72.0.3626': 'stable', '73.0.3683': 'stable', '74.0.3729': 'stable', + '75.0.3770': 'stable', + '76.0.3809': 'stable', }, MOBILE: { '16.0.912': 'beta', @@ -130,5 +132,7 @@ module.exports = { '72.0.3626': 'stable', '73.0.3683': 'stable', '74.0.3729': 'stable', + '75.0.3770': 'stable', + '76.0.3809': 'stable', }, }; diff --git a/data/indices/models-android.js b/data/indices/models-android.js index 6296b49..302462a 100644 --- a/data/indices/models-android.js +++ b/data/indices/models-android.js @@ -87,7 +87,7 @@ exports.ANDROID_INDEX = { '4027[ADNX]!', '4028[AEJS]!', '4032[ADEX]!', - '4033[AL]!', + '4033[ADLX]!', '4034[ADEFGX]!', '4035[ADYX]!', '4036[E]!', @@ -95,9 +95,11 @@ exports.ANDROID_INDEX = { '4037[T]!', '4037[V]!', '4045[ADEFLOYX]!', + '4047[ADFGX]!', + '4049[DG]!', '4055[JU]!', '4060[A]!', - '4060[W]!', + '4060[SW]!', '40[0-9]SC!!', '40[0-9]SO!!', '402ZT' @@ -106,6 +108,7 @@ exports.ANDROID_INDEX = { '@5': ['(3|5|6|7)0[0-9]SH!!'], '@50': [ '5010[DEGSUX]!', + '5011[A]!', '5012[G]!', '5015[ADEX]!', '5016[AJ]!', @@ -115,28 +118,39 @@ exports.ANDROID_INDEX = { '5020[A]!', '5022[DEX]!', '5023[F]!', + '5024[D]!', '5025[DEGX]!', '5027[B]!', + '5033[ADJOX]!', + '5034[D]!', '5036[D]!', '5038[ADEX]!', + '5039[D]!', + '5041[C]!', '5042[ADEFGTWXY]!', - '5044[ADOY]!', - '5045[ADGJTX]!', - '5046[DGJY]!', - '5047[DUY]!', + '5044[ADGIOSTY]!', + '5045[ADFGJTXY]!', + '5046[DGIJUY]!', + '5047[DIUY]!', '5049[EGSWZ]!', '5050[ASYX]!', '5051[ADJMX]!', - '5052[D]!', + '5052[DY]!', + '5053[D]!', '5054[ADOSTX]!', '5054[NW]!', - '5056[ADENUWX]!', + '5056[ADEINUWX]!', '5056[O]!', '5057[M]!', + '5058[I]!', + '5059[ADJTXY]!', + '5060[D]!', '5065[ADJNWX]!', '5070[DJX]!', + '5080[A]!', '5080[DFQX]!', - '5085[CDJNY]!', + '5085[CDJNOYX]!', + '5086[ADY]!', '5090[Y]!', '5095[BIKY]!', '5096[AI]!', @@ -167,6 +181,9 @@ exports.ANDROID_INDEX = { '6045[BFGIKOXY]!', '6050[AFWY]!', '6055[ABDHIKPUY]!', + '6058[D]!', + '6060[S]!', + '6062[W]!', '6070[KOY]!', '602LV', '60[0-9]SO!!', @@ -1777,7 +1794,6 @@ exports.ANDROID_INDEX = { '(Google )?Nexus ?9!', '(Google )?Nexus ?10!', 'Google Pixel', - 'Google Pixel XL', 'Google Pixel 2', 'Google Pixel 2XL', 'Google Chromebook Pixel (2015)', @@ -2390,6 +2406,7 @@ exports.ANDROID_INDEX = { 'LG-DS1203', 'LG-?E[0-9]{3,3}!!', 'LG-F[0-9]{3,3}!!', + 'LG-FL40L!', 'LG-GT540!', 'LG-GW620!', 'LG-H[0-9]{3,3}!!', @@ -2409,6 +2426,9 @@ exports.ANDROID_INDEX = { 'LG-?MS[0-9]{3,3}!!', 'LGMP260', 'LG-P[0-9]{3,3}!!', + 'LG-Q710!', + 'LG-RS988!', + 'LG-SP[0-9]{3,3}!!', 'LG-SU[0-9]{3,3}!!', 'LG-T480!', 'LG-T540!', @@ -3149,6 +3169,26 @@ exports.ANDROID_INDEX = { 'Now', 'NO1 S6', 'NOAIN!!', + 'Nokia 1 Plus', + 'Nokia 1', + 'Nokia 2.1', + 'Nokia 2', + 'Nokia 3.1 Plus', + 'Nokia 3.1', + 'Nokia 4.2', + 'Nokia 5.1 Plus', + 'Nokia 5.1', + 'Nokia 6.1 Plus', + 'Nokia 6.1', + 'Nokia 6.2', + 'Nokia 6', + 'Nokia 7.1', + 'Nokia 7 Plus', + 'Nokia 8.1', + 'Nokia 8 Sirocco', + 'Nokia 8', + 'Nokia 9', + 'Nokia 10.1', 'Nokia N9', 'Nokia N900', 'Nokia X', @@ -3784,6 +3824,10 @@ exports.ANDROID_INDEX = { 'Pixel 2', 'Pixel 2XL', 'Pixel 2 XL', + 'Pixel 3', + 'Pixel 3 XL', + 'Pixel 3a', + 'Pixel 3a XL', '(Axioo[\\- ])?PICO!!', 'picoBit-L', '(GIO-)?(GiONEE[- ])?Pioneer P1!', @@ -4456,9 +4500,11 @@ exports.ANDROID_INDEX = { 'SM-A[0-9]{3,3}!!', 'SM-C[0-9]{3,3}!!', 'SM-E[0-9]{3,3}!!', + 'SM-F[0-9]{3,3}!!', 'SM-G[0-9]{3,3}!!', 'SM-I9500', 'SM-J[0-9]{3,3}!!', + 'SM-M[0-9]{3,4}!!', 'SM-N[0-9]{3,4}!!', 'SM-P[0-9]{3,3}!!', 'SM-S[0-9]{3,3}!!', diff --git a/data/models-android.js b/data/models-android.js index 5affe82..9bf3234 100644 --- a/data/models-android.js +++ b/data/models-android.js @@ -262,12 +262,15 @@ exports.ANDROID_MODELS = { Pixel: ['Google', 'Pixel'], 'Google Pixel': ['Google', 'Pixel'], 'Pixel XL': ['Google', 'Pixel XL'], - 'Google Pixel XL': ['Google', 'Pixel XL'], 'Pixel 2': ['Google', 'Pixel 2'], 'Google Pixel 2': ['Google', 'Pixel 2'], 'Pixel 2XL': ['Google', 'Pixel 2 XL'], 'Pixel 2 XL': ['Google', 'Pixel 2 XL'], 'Google Pixel 2XL': ['Google', 'Pixel 2 XL'], + 'Pixel 3': ['Google', 'Pixel 3'], + 'Pixel 3 XL': ['Google', 'Pixel 3 XL'], + 'Pixel 3a': ['Google', 'Pixel 3a'], + 'Pixel 3a XL': ['Google', 'Pixel 3a XL'], /* Google Edition */ 'HTC One': ['HTC', 'One (Google Edition)'], @@ -960,7 +963,7 @@ exports.ANDROID_MODELS = { 'one ?touch 4032!': ['Alcatel', 'One Touch Pop C2'], '4032[ADEX]!': ['Alcatel', 'One Touch Pop C2'], 'one ?touch 4033!': ['Alcatel', 'One Touch Pop C3'], - '4033[AL]!': ['Alcatel', 'One Touch Pop C3'], + '4033[ADLX]!': ['Alcatel', 'One Touch Pop C3'], 'ONETOUCH POPC3': ['Alcatel', 'One Touch Pop C3'], '4034[ADEFGX]!': ['Alcatel', 'One Touch Pixi 4 (4)'], 'one ?touch 40(35|36|37)!': ['Alcatel', 'One Touch Pop D3'], @@ -971,10 +974,13 @@ exports.ANDROID_MODELS = { '4037[V]!': ['Alcatel', 'One Touch Elevate'], 'one ?touch 5045!': ['Alcatel', 'One Touch Pop 2 (4)'], '4045[ADEFLOYX]!': ['Alcatel', 'One Touch Pop 2 (4)'], + '4047[ADFGX]!': ['Alcatel', 'U5'], + '4049[DG]!': ['Alcatel', 'U3'], '4055[JU]!': ['Alcatel', 'One Touch Pixi 5 (4)'], '4060[A]!': ['Alcatel', 'IDEAL'], - '4060[W]!': ['Alcatel', 'One Touch Pixi 4 (5)'], + '4060[SW]!': ['Alcatel', 'One Touch Pixi 4 (5)'], '5010[DEGSUX]!': ['Alcatel', 'One Touch Pixi 4 (5)'], + '5011[A]!': ['Alcatel', 'A3 Plus'], '5012[G]!': ['Alcatel', 'One Touch Pixi 4 (5.5)'], '5015[ADEX]!': ['Alcatel', 'One Touch Pixi 3 (5)'], '5016[AJ]!': ['Alcatel', 'One Touch Pixi 3 (5)'], @@ -989,34 +995,45 @@ exports.ANDROID_MODELS = { 'one ?touch 5021!': ['Alcatel', 'One Touch Soleil'], '5022[DEX]!': ['Alcatel', 'One Touch Pop Star'], '5023[F]!': ['Alcatel', 'One Touch Pixi 4 Plus Power'], + '5024[D]!': ['Alcatel', '1S'], '5025[DEGX]!': ['Alcatel', 'One Touch Pop 3'], '5027[B]!': ['Alcatel', 'One Touch Dawn'], + '5033[ADJOX]!': ['Alcatel', '1'], + '5034[D]!': ['Alcatel', '3L'], 'one ?touch 5035!': ['Alcatel', "One Touch X'Pop"], '5036[D]!': ['Alcatel', 'One Touch Pop C5'], 'one ?touch 50(36|37)!': ['Alcatel', 'One Touch Pop C5'], 'ONETOUCH POPC5': ['Alcatel', 'One Touch Pop C5'], 'one ?touch 50(38)!': ['Alcatel', 'One Touch Pop D5'], '5038[ADEX]!': ['Alcatel', 'One Touch Pop D5'], + '5039[D]!': ['Alcatel', 'One Touch 3L'], + '5041[C]!': ['Alcatel', 'TETRA'], 'one ?touch 5042!': ['Alcatel', 'One Touch Pop 2 (4.5)'], '5042[ADEFGTWXY]!': ['Alcatel', 'One Touch Pop 2 (4.5)'], - '5044[ADOY]!': ['Alcatel', 'U5'], - '5045[ADGJTX]!': ['Alcatel', 'One Touch Pixi 4 (5.0)'], - '5046[DGJY]!': ['Alcatel', 'A3'], - '5047[DUY]!': ['Alcatel', 'U5 HD'], + '5044[ADGIOSTY]!': ['Alcatel', 'U5'], + '5045[ADFGJTXY]!': ['Alcatel', 'One Touch Pixi 4 (5.0)'], + '5046[DGIJUY]!': ['Alcatel', 'A3'], + '5047[DIUY]!': ['Alcatel', 'U5 HD'], '5049[EGSWZ]!': ['Alcatel', 'A30 Fierce'], 'one ?touch 5050!': ['Alcatel', 'One Touch Pop S3'], '5050[ASYX]!': ['Alcatel', 'One Touch Pop S3'], '5051[ADJMX]!': ['Alcatel', 'One Touch Pop 4 (5.0)'], - '5052[D]!': ['Alcatel', '3'], + '5052[DY]!': ['Alcatel', '3'], + '5053[D]!': ['Alcatel', '3 (2019)'], '5054[ADOSTX]!': ['Alcatel', 'One Touch Pixi 3 (5.5)'], '5054[NW]!': ['Alcatel', 'One Touch Fierce XL'], - '5056[ADENUWX]!': ['Alcatel', 'One Touch Pop 4+'], + '5056[ADEINUWX]!': ['Alcatel', 'One Touch Pop 4+'], '5056[O]!': ['Alcatel', 'One Touch Allura'], '5057[M]!': ['Alcatel', 'One Touch Pop Mirage'], + '5058[I]!': ['Alcatel', '3X'], + '5059[ADJTXY]!': ['Alcatel', '1X'], + '5060[D]!': ['Alcatel', '5V'], '5065[ADJNWX]!': ['Alcatel', 'One Touch Pixi 3 (5)'], '5070[DJX]!': ['Alcatel', 'One Touch Pop Star'], + '5080[A]!': ['Alcatel', 'Shine Lite'], '5080[DFQX]!': ['Alcatel', 'One Touch Pixi 4 (6)'], - '5085[CDJNY]!': ['Alcatel', 'A5 LED'], + '5085[CDJNOYX]!': ['Alcatel', 'A5 LED'], + '5086[ADY]!': ['Alcatel', '5'], '5090[Y]!': ['Alcatel', 'A7'], '5095[BIKY]!': ['Alcatel', 'One Touch Pop 4S'], '5096[AI]!': ['Alcatel', 'One Touch Net'], @@ -1051,6 +1068,9 @@ exports.ANDROID_MODELS = { 'one ?touch 6050!': ['Alcatel', 'One Touch Idol 2S'], '6050[AFWY]!': ['Alcatel', 'One Touch Idol 2S'], '6055[ABDHIKPUY]!': ['Alcatel', 'One Touch Idol 4'], + '6058[D]!': ['Alcatel', 'One Touch Idol 5'], + '6060[S]!': ['Alcatel', 'One Touch Idol 5s'], + '6062[W]!': ['Alcatel', '7'], '6070[KOY]!': ['Alcatel', 'One Touch Idol 4s'], 'one ?touch 7024!': ['Alcatel', 'One Touch Fierce'], 'one touch fierce!': ['Alcatel', 'One Touch Fierce'], @@ -4451,11 +4471,13 @@ exports.ANDROID_MODELS = { 'F-01H': ['Fujitsu', 'arrows Fit F-01H', { carrier: 'DoCoMo' }], 'F-01J': ['Fujitsu', 'arrows NX F-01J', { carrier: 'DoCoMo' }], 'F-01K': ['Fujitsu', 'arrows NX F-01K', { carrier: 'DoCoMo' }], + 'F-01L': ['Fujitsu', 'らくらくスマートフォン me F-01L', { carrier: 'DoCoMo' }], 'F-02E': ['Fujitsu', 'ARROWS X F-02E', { carrier: 'DoCoMo' }], 'F-02F': ['Fujitsu', 'ARROWS Tab F-02F', DeviceType.TABLET, { carrier: 'DoCoMo' }], 'F-02G': ['Fujitsu', 'ARROWS NX F-02G', { carrier: 'DoCoMo' }], 'F-02H': ['Fujitsu', 'arrows NX F-02H', { carrier: 'DoCoMo' }], 'F-02K': ['Fujitsu', 'ARROWS Tab F-02K', DeviceType.TABLET, { carrier: 'DoCoMo' }], + 'F-02L': ['Fujitsu', 'arrows Be3 F-02L', { carrier: 'DoCoMo' }], 'F-03D': ['Fujitsu', 'ARROWS Kiss F-03D', { carrier: 'DoCoMo' }], 'F-03E': ['Fujitsu', 'ARROWS Kiss with JILL STUART F-03E', { carrier: 'DoCoMo' }], 'F-03F': ['Fujitsu', 'F-03F', { carrier: 'Disney Mobile' }], @@ -8795,7 +8817,9 @@ exports.ANDROID_MODELS = { LGAS991: ['LG', 'G4'], 'LG-AS9(91)!': ['LG', 'G4'], LGAS992: ['LG', 'G5'], - LGAS995: ['LG', 'G Flex 2'] + 'LG-AS993': ['LG', 'G6'], + LGAS995: ['LG', 'G Flex 2'], + 'LG-AS998': ['LG', 'V30'] }, 'LG-?C[0-9]{3,3}!!': { @@ -8934,6 +8958,7 @@ exports.ANDROID_MODELS = { 'LG-F820!': ['LG', 'U'] }, + 'LG-FL40L!': ['LG', '070 Touch'], 'LG-GT540!': ['LG', 'Optimus'], 'LG-GW620!': ['LG', 'GW620 Eve'], @@ -9134,7 +9159,8 @@ exports.ANDROID_MODELS = { 'LG-M4(00)!': ['LG', 'Stylus 3'], 'LG-M4(30)!': ['LG', 'Stylo 3'], 'LG-M4(70)!': ['LG', 'Stylo 3 Plus'], - 'LG-M7(00|03)!': ['LG', 'Q6'] + 'LG-M7(00|03)!': ['LG', 'Q6'], + 'LG-M7(10)!': ['LG', 'X Venture'] }, 'LG-?MS[0-9]{3,3}!!': { @@ -9148,6 +9174,7 @@ exports.ANDROID_MODELS = { LGMS500: ['LG', 'Optimus F6'], 'LG-MS500': ['LG', 'Optimus F6'], LGMS550: ['LG', 'G Stylo 2'], + 'LG-MS550': ['LG', 'G Stylo 2'], LGMS631: ['LG', 'G Stylo'], 'LG-MS659': ['LG', 'Optimus F3'], LGMS659: ['LG', 'Optimus F3'], @@ -9202,6 +9229,16 @@ exports.ANDROID_MODELS = { 'LG-P815!': ['LG', 'G Pad II 8.3', DeviceType.TABLET] }, + 'LG-Q710!': ['LG', 'Stylo 4'], + + 'LG-RS988!': ['LG', 'G5'], + RS988: ['LG', 'G5'], + + 'LG-SP[0-9]{3,3}!!': { + 'LG-SP200': ['LG', 'Tribute Dynasty'], + 'LG-SP320': ['LG', 'X Charge'] + }, + 'LG-SU[0-9]{3,3}!!': { 'LG-SU370': ['LG', 'Optimus One'], 'LG-SU540': ['LG', 'PRADA 3.0'], @@ -9218,8 +9255,6 @@ exports.ANDROID_MODELS = { 'LG-TP260': ['LG', 'K20 Plus'], 'LG-TP450': ['LG', 'Stylo 3 Plus'], - RS988: ['LG', 'G5'], - 'LG-SU-760': ['LG', 'Optimus 3D'], LGUK410: ['LG', 'G Pad 7.0', DeviceType.TABLET], 'LG-UK495': ['LG', 'G Pad F 8.0', DeviceType.TABLET], @@ -9232,9 +9267,11 @@ exports.ANDROID_MODELS = { LGUS215: ['LG', 'K8 2017'], LGUS375: ['LG', 'K8'], LGUS550: ['LG', 'Logos'], + 'LG-US601': ['LG', 'X Charge'], LGUS610: ['LG', 'X Power'], 'LG-US670': ['LG', 'Optimus U'], - 'LG-US701': ['LG', 'X venture'], + 'LG-US700': ['LG', 'Q6'], + 'LG-US701': ['LG', 'X Venture'], 'LG-US730': ['LG', 'Splendor'], 'LG-US780': ['LG', 'Optimus F7'], 'LGUS990!': ['LG', 'G3'], @@ -9243,7 +9280,8 @@ exports.ANDROID_MODELS = { LGUS992: ['LG', 'G5'], 'LGUS995!': ['LG', 'G Flex 2'], 'LG-US996!': ['LG', 'V20'], - 'LG-US997': ['LG', 'G6'] + 'LG-US997': ['LG', 'G6'], + 'LG-US998': ['LG', 'V30'] }, 'LG-V[0-9]{3,3}!!': { @@ -11051,10 +11089,30 @@ exports.ANDROID_MODELS = { 'TA-10(00|03|21|25|33|39)!': ['Nokia', '6'], 'TA-10(43|50|54|68)!': ['Nokia', '6.1'], 'TA-10(41)!': ['Nokia', '7'], - 'TA-10(62)!': ['Nokia', '7 plus'], + 'TA-10(62)!': ['Nokia', '7 Plus'], 'TA-10(04|12|52)!': ['Nokia', '8'], 'TA-10(99)!': ['Nokia', 'X6'], 'TA-11(03|16)!': ['Nokia', 'X6'], + 'Nokia 1 Plus': ['Nokia', '1 Plus'], + 'Nokia 1': ['Nokia', '1'], + 'Nokia 2.1': ['Nokia', '2.1'], + 'Nokia 2': ['Nokia', '2'], + 'Nokia 3.1 Plus': ['Nokia', '3.1 Plus'], + 'Nokia 3.1': ['Nokia', '3.1'], + 'Nokia 4.2': ['Nokia', '4.2'], + 'Nokia 5.1 Plus': ['Nokia', '5.1 Plus'], + 'Nokia 5.1': ['Nokia', '5.1'], + 'Nokia 6.1 Plus': ['Nokia', '6.1 Plus'], + 'Nokia 6.1': ['Nokia', '6.1'], + 'Nokia 6.2': ['Nokia', '6.2'], + 'Nokia 6': ['Nokia', '6'], + 'Nokia 7.1': ['Nokia', '7.1'], + 'Nokia 7 Plus': ['Nokia', '7 Plus'], + 'Nokia 8.1': ['Nokia', '8.1'], + 'Nokia 8 Sirocco': ['Nokia', '8 Sirocco'], + 'Nokia 8': ['Nokia', '8'], + 'Nokia 9': ['Nokia', '9'], + 'Nokia 10.1': ['Nokia', '10.1'], 'Nokia N9': ['Nokia', 'N9'], 'Nokia N900': ['Nokia', 'N900'], 'Nokia X': ['Nokia', 'X', DeviceType.MOBILE, Flag.NOKIAX], @@ -13014,27 +13072,39 @@ exports.ANDROID_MODELS = { 'SMT-i9100': ['Samsung', 'Galaxy Tab 7.0', DeviceType.TABLET], 'SM-A[0-9]{3,3}!!': { + 'SM-A105!': ['Samsung', 'Galaxy A10'], + 'SM-A202!': ['Samsung', 'Galaxy A20e'], + 'SM-A205!': ['Samsung', 'Galaxy A20'], 'SM-A300!': ['Samsung', 'Galaxy A3'], + 'SM-A305!': ['Samsung', 'Galaxy A30'], 'SM-A310!': ['Samsung', 'Galaxy A3 (2016)'], 'SM-A320!': ['Samsung', 'Galaxy A3 (2017)'], + 'SM-A405!': ['Samsung', 'Galaxy A40'], 'SM-A430!': ['Samsung', 'Galaxy A4'], 'SM-A450!': ['Samsung', 'Galaxy A4 (2017)'], + 'SM-A460!': ['Samsung', 'SM-A460'], 'SM-A500!': ['Samsung', 'Galaxy A5'], + 'SM-A505!': ['Samsung', 'Galaxy A50'], 'SM-A510!': ['Samsung', 'Galaxy A5 (2016)'], 'SM-A520!': ['Samsung', 'Galaxy A5 (2017)'], 'SM-A530!': ['Samsung', 'Galaxy A8 (2018)'], 'SM-A600!': ['Samsung', 'Galaxy A6 (2018)'], 'SM-A6050!': ['Samsung', 'Galaxy A9 Star Lite'], 'SM-A605!': ['Samsung', 'Galaxy A6+ (2018)'], + 'SM-A606!': ['Samsung', 'Galaxy A60'], 'SM-A700!': ['Samsung', 'Galaxy A7'], + 'SM-A705!': ['Samsung', 'Galaxy A70'], 'SM-A710!': ['Samsung', 'Galaxy A7 (2016)'], 'SM-A720!': ['Samsung', 'Galaxy A7 (2017)'], 'SM-A730!': ['Samsung', 'Galaxy A8+ (2018)'], + 'SM-A750!': ['Samsung', 'Galaxy A7 (2018)'], 'SM-A800!': ['Samsung', 'Galaxy A8'], + 'SM-A805!': ['Samsung', 'Galaxy A80'], 'SM-A810!': ['Samsung', 'Galaxy A8 (2016)'], 'SM-A850!': ['Samsung', 'Galaxy Alpha'], 'SM-A900!': ['Samsung', 'Galaxy A9 (2016)'], - 'SM-A910!': ['Samsung', 'Galaxy A9 Pro'] + 'SM-A910!': ['Samsung', 'Galaxy A9 Pro'], + 'SM-A920!': ['Samsung', 'Galaxy A9 (2018)'] }, 'SM-C[0-9]{3,3}!!': { @@ -13053,6 +13123,10 @@ exports.ANDROID_MODELS = { 'SM-E700!': ['Samsung', 'Galaxy E7'] }, + 'SM-F[0-9]{3,3}!!': { + 'SM-F900!': ['Samsung', 'Galaxy Fold'] + }, + 'SM-G[0-9]{3,3}!!': { 'SM-G110!': ['Samsung', 'Galaxy Pocket 2'], 'SM-G130BT': ['Samsung', 'Galaxy Young 2'], @@ -13118,9 +13192,11 @@ exports.ANDROID_MODELS = { 'SM-G850!': ['Samsung', 'Galaxy Alpha'], 'SM-G860!': ['Samsung', 'Galaxy S5 Sport'], 'SM-G870!': ['Samsung', 'Galaxy S5 Active'], + 'SM-G875!': ['Samsung', 'Galaxy S Lite Luxury'], 'SM-G880!': ['Samsung', 'Galaxy S7 mini'], - 'SM-G885Y!': ['Samsung', 'Galaxy A8 Star'], + 'SM-G885[FSY]!': ['Samsung', 'Galaxy A8 Star'], 'SM-G8850!': ['Samsung', 'Galaxy A9 Star'], + 'SM-G887!': ['Samsung', 'Galaxy A9 Pro (2019)'], 'SM-G890!': ['Samsung', 'Galaxy S6 Active'], 'SM-G891!': ['Samsung', 'Galaxy S7 Active'], 'SM-G892!': ['Samsung', 'Galaxy S8 Active'], @@ -13140,7 +13216,11 @@ exports.ANDROID_MODELS = { 'SM-G950!': ['Samsung', 'Galaxy S8'], 'SM-G955!': ['Samsung', 'Galaxy S8+'], 'SM-G960!': ['Samsung', 'Galaxy S9'], - 'SM-G965!': ['Samsung', 'Galaxy S9+'] + 'SM-G965!': ['Samsung', 'Galaxy S9+'], + 'SM-G970!': ['Samsung', 'Galaxy S10e'], + 'SM-G973!': ['Samsung', 'Galaxy S10'], + 'SM-G975!': ['Samsung', 'Galaxy S10 Plus'], + 'SM-G977!': ['Samsung', 'Galaxy S10 5G'] }, 'SM-I9500': ['Samsung', 'Galaxy S4'], @@ -13154,6 +13234,7 @@ exports.ANDROID_MODELS = { 'SM-J200!': ['Samsung', 'Galaxy J2'], 'SM-J210!': ['Samsung', 'Galaxy J2 (2016)'], 'SM-J250!': ['Samsung', 'Galaxy J2 (2018)'], + 'SM-J260!': ['Samsung', 'Galaxy J2 Pure'], 'SM-J3(10|20)!': ['Samsung', 'Galaxy J3'], 'SM-J311!': ['Samsung', 'Galaxy J3 (2016)'], 'SM-J321!': ['Samsung', 'Galaxy Sol'], @@ -13161,12 +13242,17 @@ exports.ANDROID_MODELS = { 'SM-J327!': ['Samsung', 'Galaxy J3 Emerge'], 'SM-J330!': ['Samsung', 'Galaxy J3 (2017)'], 'SM-J337!': ['Samsung', 'Galaxy J3 (2018)'], + 'SM-J400!': ['Samsung', 'Galaxy J4'], + 'SM-J415!': ['Samsung', 'Galaxy J4+'], 'SM-J500!': ['Samsung', 'Galaxy J5'], 'SM-J510!': ['Samsung', 'Galaxy J5 (2016)'], 'SM-J530!': ['Samsung', 'Galaxy J5 (2017)'], + 'SM-J600!': ['Samsung', 'Galaxy J6'], + 'SM-J610!': ['Samsung', 'Galaxy J6+'], 'SM-J700!': ['Samsung', 'Galaxy J7'], 'SM-J701!': ['Samsung', 'Galaxy J7 Core'], 'SM-J710!': ['Samsung', 'Galaxy J7 (2016)'], + 'SM-J720!': ['Samsung', 'Galaxy J7 Duo'], 'SM-J727!': ['Samsung', 'Galaxy J7 Perx'], 'SM-J730!': ['Samsung', 'Galaxy J7 (2017)'], 'SM-J737!': ['Samsung', 'Galaxy Wide 3'], @@ -13175,6 +13261,12 @@ exports.ANDROID_MODELS = { 'SM-J900!': ['Samsung', 'Galaxy J9'] }, + 'SM-M[0-9]{3,4}!!': { + 'SM-M105!': ['Samsung', 'Galaxy M10'], + 'SM-M205!': ['Samsung', 'Galaxy M20'], + 'SM-M305!': ['Samsung', 'Galaxy M30'] + }, + 'SM-N[0-9]{3,4}!!': { 'SM-N750[025789][QV]?!': ['Samsung', 'Galaxy Note 3 Neo'], 'SM-N750[LS]?!': ['Samsung', 'Galaxy Note 3 Neo'], @@ -13204,11 +13296,14 @@ exports.ANDROID_MODELS = { 'SM-S320VL': ['Samsung', 'Galaxy Sky'], 'SM-S327VL': ['Samsung', 'Galaxy J3 Luna Pro'], 'SM-S337TL': ['Samsung', 'Galaxy J3 Luna Pro'], + 'SM-S367VL': ['Samsung', 'Galaxy J3 Orbit'], 'SM-S550TL': ['Samsung', 'Galaxy On5'], 'SM-S727VL': ['Samsung', 'Galaxy J7 Sky Pro'], 'SM-S737TL': ['Samsung', 'Galaxy J7 Sky Pro'], + 'SM-S757BL': ['Samsung', 'Galaxy J7 Top'], 'SM-S765C': ['Samsung', 'Galaxy Ace Style'], 'SM-S766C': ['Samsung', 'Galaxy Stardust'], + 'SM-S767VL': ['Samsung', 'Galaxy J7 Crown'], 'SM-S777C': ['Samsung', 'Galaxy J1'], 'SM-S780L': ['Samsung', 'Galaxy Mega 6.3'], 'SM-S820L': ['Samsung', 'Galaxy Core Prime'], @@ -13239,7 +13334,9 @@ exports.ANDROID_MODELS = { 'SM-T36[05]!': ['Samsung', 'Galaxy Tab Active 8.0', DeviceType.TABLET], 'SM-T37[578]!': ['Samsung', 'Galaxy Tab E 8.0', DeviceType.TABLET], 'SM-T38[05]!': ['Samsung', 'Galaxy Tab A 8.0 (2017)', DeviceType.TABLET], - 'SM-T39[5]!': ['Samsung', 'Galaxy Tab Active2 8.0', DeviceType.TABLET], + 'SM-T387!': ['Samsung', 'Galaxy Tab A 8.0 (2018)', DeviceType.TABLET], + 'SM-T39[05]!': ['Samsung', 'Galaxy Tab Active2 8.0', DeviceType.TABLET], + 'SM-T51[05]!': ['Samsung', 'Galaxy Tab A 10.1 (2019)', DeviceType.TABLET], 'SM-T520CC': ['Samsung', 'Galaxy Tab Pro 10.1 Chef Collection', DeviceType.TABLET], 'SM-T52[057]!': ['Samsung', 'Galaxy Tab Pro 10.1', DeviceType.TABLET], 'SM-T530NU': ['Samsung', 'Galaxy Tab 4 Nook 10.1', DeviceType.TABLET], @@ -13248,11 +13345,14 @@ exports.ANDROID_MODELS = { 'SM-T53[157]!': ['Samsung', 'Galaxy Tab 4 10.0', DeviceType.TABLET], 'SM-T55[015]!': ['Samsung', 'Galaxy Tab A 9.7', DeviceType.TABLET], 'SM-T58[057]!': ['Samsung', 'Galaxy Tab A 10.1 (2016)', DeviceType.TABLET], + 'SM-T583!': ['Samsung', 'Galaxy Tab Advanced2', DeviceType.TABLET], 'SM-T56[0127]!': ['Samsung', 'Galaxy Tab E 9.6', DeviceType.TABLET], + 'SM-T59[057]!': ['Samsung', 'Galaxy Tab A 10.5', DeviceType.TABLET], 'SM-T67[07]!': ['Samsung', 'Galaxy View', DeviceType.TABLET], 'SM-T70[057]!': ['Samsung', 'Galaxy Tab S 8.4', DeviceType.TABLET], 'SM-T71[05]!': ['Samsung', 'Galaxy Tab S2 8.0', DeviceType.TABLET], 'SM-T71[39]!': ['Samsung', 'Galaxy Tab S2 8.0 (2016)', DeviceType.TABLET], + 'SM-T72[05]!': ['Samsung', 'Galaxy Tab S5e', DeviceType.TABLET], 'SM-T80[0157]!': ['Samsung', 'Galaxy Tab S 10.5', DeviceType.TABLET], 'SM-T81[057]!': ['Samsung', 'Galaxy Tab S2 9.7', DeviceType.TABLET], 'SM-T81[39]!': ['Samsung', 'Galaxy Tab S2 9.7 (2016)', DeviceType.TABLET], @@ -13401,6 +13501,7 @@ exports.ANDROID_MODELS = { 'SC-01G': ['Samsung', 'GALAXY Note Edge SC-01G', { carrier: 'DoCoMo' }], 'SC-01H': ['Samsung', 'GALAXY Active neo SC-01H', { carrier: 'DoCoMo' }], 'SC-01K': ['Samsung', 'GALAXY Note 8 SC-01K', { carrier: 'DoCoMo' }], + 'SC-01L': ['Samsung', 'GALAXY Note9 SC-01L', { carrier: 'DoCoMo' }], 'SC-02B': ['Samsung', 'GALAXY S SC-02B', { carrier: 'DoCoMo' }], 'SC-02C': ['Samsung', 'GALAXY S II SC-02C', { carrier: 'DoCoMo' }], 'SC-02D': ['Samsung', 'GALAXY Tab 7.0 Plus SC-02D', DeviceType.TABLET, { carrier: 'DoCoMo' }], @@ -13410,6 +13511,7 @@ exports.ANDROID_MODELS = { 'SC-02H': ['Samsung', 'Galaxy S7 Edge SC-02H', { carrier: 'DoCoMo' }], 'SC-02J': ['Samsung', 'Galaxy S8 SC-02J', { carrier: 'DoCoMo' }], 'SC-02K': ['Samsung', 'Galaxy S9 SC-02K', { carrier: 'DoCoMo' }], + 'SC-02L': ['Samsung', 'Galaxy Feel2 SC-02L', { carrier: 'DoCoMo' }], 'SC-03D': ['Samsung', 'GALAXY S II LTE SC-03D', { carrier: 'DoCoMo' }], 'SC-03E': ['Samsung', 'GALAXY S III α SC-03E', { carrier: 'DoCoMo' }], SC03E: ['Samsung', 'GALAXY S III α SC-03E', { carrier: 'DoCoMo' }], @@ -13421,6 +13523,7 @@ exports.ANDROID_MODELS = { 'SC-04F': ['Samsung', 'GALAXY S5 SC-04F', { carrier: 'DoCoMo' }], 'SC-04G': ['Samsung', 'GALAXY S6 Edge SC-04G', { carrier: 'DoCoMo' }], 'SC-04J': ['Samsung', 'GALAXY Feel SC-04J', { carrier: 'DoCoMo' }], + 'SC-04L': ['Samsung', 'Galaxy S10+ SC-04L', { carrier: 'DoCoMo' }], 'SC-05D': ['Samsung', 'GALAXY Note SC-05D', { carrier: 'DoCoMo' }], 'SC-05G': ['Samsung', 'GALAXY S6 SC-05G', { carrier: 'DoCoMo' }], 'SC-06D': ['Samsung', 'GALAXY S III SC-06D', { carrier: 'DoCoMo' }] @@ -13606,6 +13709,7 @@ exports.ANDROID_MODELS = { 'SH-01H': ['Sharp', 'AQUOS PHONE ZETA SH-01H', { carrier: 'DoCoMo' }], 'SH-01J': ['Sharp', 'AQUOS ケータイ SH-01J', { carrier: 'DoCoMo' }], 'SH-01K': ['Sharp', 'AQUOS sense SH-01K', { carrier: 'DoCoMo' }], + 'SH-01L': ['Sharp', 'AQUOS sense2 SH-01L', { carrier: 'DoCoMo' }], 'SH-02D': ['Sharp', 'AQUOS PHONE slider SH-02D', { carrier: 'DoCoMo' }], 'SH-02E': ['Sharp', 'AQUOS PHONE ZETA SH-02E', { carrier: 'DoCoMo' }], 'SH-02F': ['Sharp', 'AQUOS PHONE EX SH-02F', { carrier: 'DoCoMo' }], @@ -13938,7 +14042,7 @@ exports.ANDROID_MODELS = { }, 'G[0-9]{4,4}!!': { - 'G31(12|16|21|23|25)!': ['Sony', 'Xperia XA1'], + 'G31(12|13|16|21|23|25)!': ['Sony', 'Xperia XA1'], 'G32(12|21|23|26)!': ['Sony', 'Xperia XA1 Ultra'], 'G33(11|12|13)!': ['Sony', 'Xperia L1'], 'G34(12|16|21|23|26)!': ['Sony', 'Xperia XA1 Plus'], @@ -13949,7 +14053,18 @@ exports.ANDROID_MODELS = { }, 'H[0-9]{4,4}!!': { - 'H42(33)!': ['Sony', 'Xperia XA2 Ultra'] + 'H31(13|23)!': ['Sony', 'Xperia XA2 Ultra'], + 'H32(13|23)!': ['Sony', 'Xperia XA2 Ultra'], + 'H33(11|21)!': ['Sony', 'Xperia L2'], + 'H41(13|33)!': ['Sony', 'Xperia XA2'], + 'H42(13|33)!': ['Sony', 'Xperia XA2 Ultra'], + 'H43(11|31)!': ['Sony', 'Xperia L2'], + 'H44(13|93)!': ['Sony', 'Xperia XA2 Plus'], + 'H81(16|66)!': ['Sony', 'Xperia XZ2 Premium'], + 'H82(16|66|76|96)!': ['Sony', 'Xperia XZ2'], + 'H83(14|24)!': ['Sony', 'Xperia XZ2 Compact'], + 'H84(16)!': ['Sony', 'Xperia XZ3'], + 'H84(41)!': ['Sony', 'Xperia XZ1 Compact'] }, 'E[0-9]{2,2}[a-z]!!': { diff --git a/data/models-ios.js b/data/models-ios.js index b1f1e54..1345dac 100644 --- a/data/models-ios.js +++ b/data/models-ios.js @@ -59,6 +59,7 @@ exports.IOS_MODELS = { 'iPod4,1': ['Apple', 'iPod touch (4th gen)', DeviceType.MEDIA], 'iPod5,1': ['Apple', 'iPod touch (5th gen)', DeviceType.MEDIA], 'iPod7,1': ['Apple', 'iPod touch (6th gen)', DeviceType.MEDIA], + 'iPod9,1': ['Apple', 'iPod touch (7th gen)', DeviceType.MEDIA], 'iPad1,1': ['Apple', 'iPad', DeviceType.TABLET], 'iPad1,2': ['Apple', 'iPad 2', DeviceType.TABLET], 'iPad2,1': ['Apple', 'iPad 2', DeviceType.TABLET], @@ -98,7 +99,19 @@ exports.IOS_MODELS = { 'iPad7,3': ['Apple', 'iPad Pro (10.5′′)', DeviceType.TABLET], 'iPad7,4': ['Apple', 'iPad Pro (10.5′′)', DeviceType.TABLET], 'iPad7,5': ['Apple', 'iPad (9.7′′, 6th gen)', DeviceType.TABLET], - 'iPad7,6': ['Apple', 'iPad (9.7′′, 6th gen)', DeviceType.TABLET] + 'iPad7,6': ['Apple', 'iPad (9.7′′, 6th gen)', DeviceType.TABLET], + 'iPad8,1': ['Apple', 'iPad Pro (11.0′′)', DeviceType.TABLET], + 'iPad8,2': ['Apple', 'iPad Pro (11.0′′)', DeviceType.TABLET], + 'iPad8,3': ['Apple', 'iPad Pro (11.0′′)', DeviceType.TABLET], + 'iPad8,4': ['Apple', 'iPad Pro (11.0′′)', DeviceType.TABLET], + 'iPad8,5': ['Apple', 'iPad Pro (12.9′′, 3rd gen)', DeviceType.TABLET], + 'iPad8,6': ['Apple', 'iPad Pro (12.9′′, 3rd gen)', DeviceType.TABLET], + 'iPad8,7': ['Apple', 'iPad Pro (12.9′′, 3rd gen)', DeviceType.TABLET], + 'iPad8,8': ['Apple', 'iPad Pro (12.9′′, 3rd gen)', DeviceType.TABLET], + 'iPad11,1': ['Apple', 'iPad mini (5th gen)', DeviceType.TABLET], + 'iPad11,2': ['Apple', 'iPad mini (5th gen)', DeviceType.TABLET], + 'iPad11,3': ['Apple', 'iPad Air (3rd gen)', DeviceType.TABLET], + 'iPad11,4': ['Apple', 'iPad Air (3rd gen)', DeviceType.TABLET] }; /* This file is automatically generated, do not edit manually! */ diff --git a/package.json b/package.json index e21c550..4c97037 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "which-browser", - "version": "0.4.2", + "version": "0.5.0", "description": "Browser sniffing tool and UA parser. Browser sniffing gone too far — A useragent parser library for JavaScript", "main": "src/Parser.js", "types": "which-browser.d.ts", "scripts": { + "pre-commit": "lint-staged", "test": "lab -a code -v", "test-and-coverage": "istanbul cover lab --report lcovonly -- -a code -v --timeout 10000 -l", "lint": "eslint --quiet .", diff --git a/src/Analyser/Derive.js b/src/Analyser/Derive.js index 37f2db6..722e956 100644 --- a/src/Analyser/Derive.js +++ b/src/Analyser/Derive.js @@ -173,7 +173,11 @@ class Derive { '2.2': '9.7', '2.1': '9.6', }; - const key = this.data.engine.getVersion().split('.').slice(0, 2).join('.'); + const key = this.data.engine + .getVersion() + .split('.') + .slice(0, 2) + .join('.'); if (data[key]) { this.data.browser.version = new Version({value: data[key]}); } else { @@ -414,6 +418,12 @@ class Derive { if (this.data.os.version.is('10.13')) { this.data.os.version.nickname = 'High Sierra'; } + if (this.data.os.version.is('10.14')) { + this.data.os.version.nickname = 'Mojave'; + } + if (this.data.os.version.is('10.15')) { + this.data.os.version.nickname = 'Catalina'; + } } } } diff --git a/src/Analyser/Header/Useragent/Browser.js b/src/Analyser/Header/Useragent/Browser.js index 51118d9..eeac6de 100644 --- a/src/Analyser/Header/Useragent/Browser.js +++ b/src/Analyser/Header/Useragent/Browser.js @@ -533,6 +533,16 @@ class Browser { }); this.data.browser.type = Constants.browserType.BROWSER; } + + if ((match = /Edg\/([0-9.]*)/u.exec(ua))) { + this.data.browser.name = 'Edge'; + this.data.browser.channel = ''; + this.data.browser.version = new Version({ + value: match[1], + details: 1, + }); + this.data.browser.type = Constants.browserType.BROWSER; + } } /* Opera */ @@ -1486,7 +1496,7 @@ class Browser { } } - if ((match = /(Q)0?([0-9][A-Z])/u.exec(ua))) { + if ((match = /[^A-Z](Q)0?([0-9][A-Z])/u.exec(ua))) { this.data.browser.name = `Obigo ${match[1].toUpperCase()}`; this.data.browser.version = new Version(processObigoVersion(match[2])); this.data.browser.type = Constants.browserType.BROWSER; diff --git a/test/data/desktop/browser-edge.yaml b/test/data/desktop/browser-edge.yaml index ff01652..2143d0e 100644 --- a/test/data/desktop/browser-edge.yaml +++ b/test/data/desktop/browser-edge.yaml @@ -30,3 +30,11 @@ headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.11111' result: { browser: { name: Edge, version: '14', type: browser }, engine: { name: EdgeHTML, version: '14.11111' }, os: { name: Windows, version: { value: '10.1', alias: '10' } }, device: { type: desktop } } readable: 'Edge 14 on Windows 10' +- + headers: 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3763.0 Safari/537.36 Edg/75.0.131.0' + readable: 'Edge 75 on Windows 10' + result: { browser: { name: Edge, family: { name: Chrome, version: 75 }, version: '75', type: browser }, engine: { name: Blink }, os: { name: Windows, version: { value: '10.0', alias: '10' } }, device: { type: desktop } } +- + headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3782.0 Safari/537.36 Edg/76.0.152.0' + readable: 'Edge 76 on macOS Mojave 10.14' + result: { browser: { name: Edge, family: { name: Chrome, version: 76 }, version: '76', type: browser }, engine: { name: Blink }, os: { name: 'OS X', alias: macOS, version: { value: '10.14', nickname: Mojave } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } } \ No newline at end of file diff --git a/test/data/desktop/browser-safari.yaml b/test/data/desktop/browser-safari.yaml index cd147d9..f9109ec 100644 --- a/test/data/desktop/browser-safari.yaml +++ b/test/data/desktop/browser-safari.yaml @@ -218,3 +218,11 @@ headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/603.1.13 (KHTML, like Gecko) Version/10.1 Safari/603.1.13' readable: 'Safari 10.1 on macOS High Sierra 10.13' result: { browser: { name: Safari, version: '10.1', type: browser }, engine: { name: Webkit, version: 603.1.13 }, os: { name: 'OS X', alias: macOS, version: { value: '10.13', nickname: High Sierra } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } } +- + headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15' + readable: 'Safari 12.0.2 on macOS Mojave 10.14' + result: { browser: { name: Safari, version: 12.0.2, type: browser }, engine: { name: Webkit, version: 605.1.15 }, os: { name: 'OS X', alias: macOS, version: { value: '10.14', nickname: Mojave } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } } +- + headers: 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15' + readable: 'Safari 13.0 on macOS Catalina 10.15' + result: { browser: { name: Safari, version: '13.0', type: browser }, engine: { name: Webkit, version: 605.1.15 }, os: { name: 'OS X', alias: macOS, version: { value: '10.15', nickname: Catalina } }, device: { type: desktop, manufacturer: Apple, model: Macintosh } } \ No newline at end of file diff --git a/test/data/mobile/browser-obigo.yaml b/test/data/mobile/browser-obigo.yaml index e46e2c0..63e7e4b 100644 --- a/test/data/mobile/browser-obigo.yaml +++ b/test/data/mobile/browser-obigo.yaml @@ -186,3 +186,7 @@ headers: 'User-Agent: LG-ME850c MIC/1.1.14 MIDP-2.0/CLDC-1.1' readable: 'Obigo 1.1 on a LG ME850c' result: { browser: { name: Obigo, version: '1.1', type: browser }, device: { type: mobile, subtype: feature, manufacturer: LG, model: ME850c } } +- + headers: 'User-Agent: Mozilla/5.0 (Linux; Android 9; Nokia 1 Build/PQ2A.190405.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36' + readable: 'Chromium WebView 66 on a Nokia 1 running Android 9' + result: { browser: { using: { name: 'Chromium WebView', version: '66' } }, engine: { name: Blink }, os: { name: Android, version: '9' }, device: { type: mobile, subtype: smart, manufacturer: Nokia, model: '1' } } \ No newline at end of file

AltStyle によって変換されたページ (->オリジナル) /