native-fn 1.0.74 → 1.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/index.d.ts +5 -5
  2. package/dist/native.cjs +1 -1
  3. package/dist/native.min.cjs +1 -1
  4. package/dist/native.min.mjs +1 -1
  5. package/dist/native.mjs +1 -1
  6. package/dist/native.umd.js +1 -1
  7. package/dist/native.umd.min.js +1 -1
  8. package/dist/plugin/app/index.cjs +355 -176
  9. package/dist/plugin/app/index.min.cjs +1 -1
  10. package/dist/plugin/app/index.min.mjs +1 -1
  11. package/dist/plugin/app/index.mjs +355 -176
  12. package/dist/plugin/app/index.umd.js +355 -176
  13. package/dist/plugin/app/index.umd.min.js +1 -1
  14. package/dist/plugin/app/src/plugin/platform/cores/index.d.ts +12 -0
  15. package/dist/plugin/app/src/plugin/platform/types/platform.d.ts +16 -6
  16. package/dist/plugin/app/src/types/native.d.ts +5 -5
  17. package/dist/plugin/appearance/index.cjs +344 -165
  18. package/dist/plugin/appearance/index.min.cjs +1 -1
  19. package/dist/plugin/appearance/index.min.mjs +1 -1
  20. package/dist/plugin/appearance/index.mjs +344 -165
  21. package/dist/plugin/appearance/index.umd.js +344 -165
  22. package/dist/plugin/appearance/index.umd.min.js +1 -1
  23. package/dist/plugin/appearance/src/plugin/platform/cores/index.d.ts +12 -0
  24. package/dist/plugin/appearance/src/plugin/platform/types/platform.d.ts +16 -6
  25. package/dist/plugin/appearance/src/types/native.d.ts +5 -5
  26. package/dist/plugin/clipboard/index.cjs +339 -160
  27. package/dist/plugin/clipboard/index.min.cjs +1 -1
  28. package/dist/plugin/clipboard/index.min.mjs +1 -1
  29. package/dist/plugin/clipboard/index.mjs +339 -160
  30. package/dist/plugin/clipboard/index.umd.js +339 -160
  31. package/dist/plugin/clipboard/index.umd.min.js +1 -1
  32. package/dist/plugin/clipboard/src/plugin/platform/cores/index.d.ts +12 -0
  33. package/dist/plugin/clipboard/src/plugin/platform/types/platform.d.ts +16 -6
  34. package/dist/plugin/clipboard/src/types/native.d.ts +5 -5
  35. package/dist/plugin/fullscreen/index.cjs +348 -169
  36. package/dist/plugin/fullscreen/index.min.cjs +1 -1
  37. package/dist/plugin/fullscreen/index.min.mjs +1 -1
  38. package/dist/plugin/fullscreen/index.mjs +348 -169
  39. package/dist/plugin/fullscreen/index.umd.js +348 -169
  40. package/dist/plugin/fullscreen/index.umd.min.js +1 -1
  41. package/dist/plugin/fullscreen/src/plugin/platform/cores/index.d.ts +12 -0
  42. package/dist/plugin/fullscreen/src/plugin/platform/types/platform.d.ts +16 -6
  43. package/dist/plugin/fullscreen/src/types/native.d.ts +5 -5
  44. package/dist/plugin/platform/index.cjs +339 -160
  45. package/dist/plugin/platform/index.d.ts +17 -7
  46. package/dist/plugin/platform/index.min.cjs +1 -1
  47. package/dist/plugin/platform/index.min.mjs +1 -1
  48. package/dist/plugin/platform/index.mjs +339 -160
  49. package/dist/plugin/platform/index.umd.js +339 -160
  50. package/dist/plugin/platform/index.umd.min.js +1 -1
  51. package/dist/plugin/platform/src/plugin/platform/cores/index.d.ts +12 -0
  52. package/dist/plugin/platform/src/plugin/platform/types/platform.d.ts +16 -6
  53. package/dist/plugin/platform/src/types/native.d.ts +5 -5
  54. package/dist/plugin/theme/index.cjs +339 -160
  55. package/dist/plugin/theme/index.min.cjs +1 -1
  56. package/dist/plugin/theme/index.min.mjs +1 -1
  57. package/dist/plugin/theme/index.mjs +339 -160
  58. package/dist/plugin/theme/index.umd.js +339 -160
  59. package/dist/plugin/theme/index.umd.min.js +1 -1
  60. package/dist/plugin/theme/src/plugin/platform/cores/index.d.ts +12 -0
  61. package/dist/plugin/theme/src/plugin/platform/types/platform.d.ts +16 -6
  62. package/dist/plugin/theme/src/types/native.d.ts +5 -5
  63. package/dist/src/plugin/platform/cores/index.d.ts +12 -0
  64. package/dist/src/plugin/platform/types/platform.d.ts +16 -6
  65. package/dist/src/types/native.d.ts +5 -5
  66. package/package.json +8 -1
@@ -104,21 +104,43 @@
104
104
  var USER_AGENT = typeof globalThis.navigator !== 'undefined' && typeof globalThis.navigator.userAgent === 'string' ? globalThis.navigator.userAgent : '';
105
105
 
106
106
  var Platform = {
107
- device: Devices.Unknown,
108
- os: OS.Unknown,
109
- engine: Engines.Unknown,
110
- browser: Browsers.Unknown,
107
+ os: { name: OS.Unknown, version: '' },
108
+ engine: { name: Engines.Unknown, version: '' },
109
+ browser: { name: Browsers.Unknown, version: '' },
111
110
  crossPlatformFramework: CrossPlatformFramework.Unknown,
112
- osVersion: '',
113
- engineVersion: '',
114
- browserVersion: '',
115
- renderer: getRenderer(),
116
111
  userAgent: USER_AGENT,
117
- isNode: typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.node !== undefined,
118
- isMobile: false,
119
- isDesktop: false,
120
- isStandalone: false,
121
- isWebview: /; ?wv|applewebkit(?!.*safari)/i.test(USER_AGENT),
112
+ get network() {
113
+ return getNetwork();
114
+ },
115
+ get device() {
116
+ if (this.os.name === OS.iOS || this.os.name === OS.Android)
117
+ return Devices.Mobile;
118
+ if (this.os.name === OS.Windows || this.os.name === OS.MacOS)
119
+ return Devices.Desktop;
120
+ return Devices.Unknown;
121
+ },
122
+ get renderer() {
123
+ return getRenderer();
124
+ },
125
+ get isMobile() {
126
+ return this.device === Devices.Mobile;
127
+ },
128
+ get isDesktop() {
129
+ return this.device === Devices.Desktop;
130
+ },
131
+ get isWebview() {
132
+ return /; ?wv|applewebkit(?!.*safari)/i.test(this.userAgent);
133
+ },
134
+ get isNode() {
135
+ return typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.node !== undefined;
136
+ },
137
+ get isStandalone() {
138
+ if (this.os.name === OS.iOS)
139
+ return 'standalone' in globalThis.navigator && !!globalThis.navigator.standalone;
140
+ if (!('matchMedia' in globalThis))
141
+ return false;
142
+ return globalThis.matchMedia('(display-mode: standalone)').matches;
143
+ },
122
144
  };
123
145
  var OS_RESOLVER_MAP = [
124
146
  [/windows nt (6\.[23]); arm/i, OS.Windows, resolveWindowsVersion],
@@ -178,6 +200,14 @@
178
200
  [/mobile vr; rv:([\w.]+)\).+firefox/i, Browsers.Firefox],
179
201
  [/firefox\/([\w.]+)/i, Browsers.Firefox],
180
202
  ];
203
+ var HIGH_ENTROPY_BRAND_NAME_MAP = {
204
+ 'Google Chrome': 'Chrome',
205
+ 'Microsoft Edge': 'Edge',
206
+ 'Microsoft Edge WebView2': 'Edge WebView2',
207
+ 'Android WebView': 'Chrome WebView',
208
+ 'HeadlessChrome': 'Chrome Headless',
209
+ 'OperaMobile': 'Opera Mobi',
210
+ };
181
211
  function resolveWindowsVersion(string) {
182
212
  if (string === undefined)
183
213
  return '';
@@ -352,6 +382,33 @@
352
382
  return { brand: entry, version: '' };
353
383
  return { brand: entry.brand, version: entry.version };
354
384
  }
385
+ function getSemanticVersion(string) {
386
+ var parts = string.split('.');
387
+ return {
388
+ major: parseInt(parts[0] || '0'),
389
+ minor: parseInt(parts[1] || '0'),
390
+ build: parseInt(parts[2] || '0')
391
+ };
392
+ }
393
+ function parseOSFromCordova() {
394
+ Platform.crossPlatformFramework = CrossPlatformFramework.Cordova;
395
+ if (typeof globalThis.device !== 'undefined') {
396
+ switch (globalThis.device.platform) {
397
+ case 'Android':
398
+ Platform.os = {
399
+ name: OS.Android,
400
+ version: globalThis.device.version,
401
+ };
402
+ break;
403
+ case 'iOS':
404
+ Platform.os = {
405
+ name: OS.iOS,
406
+ version: globalThis.device.version,
407
+ };
408
+ break;
409
+ }
410
+ }
411
+ }
355
412
  function getRenderer() {
356
413
  if (typeof globalThis.document === 'undefined')
357
414
  return '';
@@ -372,171 +429,293 @@
372
429
  return '';
373
430
  }
374
431
  }
375
- function getIsStandalone(os) {
376
- if (!('matchMedia' in globalThis))
377
- return false;
378
- if (os === OS.iOS)
379
- return 'standalone' in navigator && !!navigator.standalone;
380
- return globalThis.matchMedia('(display-mode: standalone)').matches;
381
- }
382
- function getSemanticVersion(string) {
383
- var parts = string.split('.');
384
- return {
385
- major: parseInt(parts[0] || '0'),
386
- minor: parseInt(parts[1] || '0'),
387
- build: parseInt(parts[2] || '0')
432
+ function getNetwork() {
433
+ var network = {
434
+ isOnline: null,
435
+ effectiveType: null,
436
+ type: null,
437
+ downlink: null,
438
+ rtt: null,
439
+ saveData: null,
388
440
  };
389
- }
390
- if ((typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.electron !== undefined) || (/ electron\//i.test(USER_AGENT))) {
391
- Platform.crossPlatformFramework = CrossPlatformFramework.Electron;
392
- }
393
- if (typeof globalThis.navigator !== 'undefined' && globalThis.navigator.product === 'ReactNative') {
394
- Platform.crossPlatformFramework = CrossPlatformFramework.ReactNative;
395
- }
396
- for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
397
- var map = OS_RESOLVER_MAP[i];
398
- var regexp = map[0];
399
- var os = map[1];
400
- var resolver = map[2];
401
- var matched = Platform.userAgent.match(regexp);
402
- if (matched !== null) {
403
- Platform.os = os;
404
- Platform.osVersion = resolveVersion(matched[1], resolver);
405
- break;
406
- }
407
- }
408
- if (Platform.os === OS.iOS && compareVersion(Platform.osVersion, '18.6') === 0) {
409
- var version = /\) Version\/([\d.]+)/.exec(Platform.userAgent);
410
- if (version !== null && parseInt(version[1].substring(0, 2), 10) >= 26)
411
- Platform.osVersion = version[1];
412
- }
413
- for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
414
- var map = ENGINE_RESOLVER_MAP[i];
415
- var regexp = map[0];
416
- var engine = map[1];
417
- var resolver = map[2];
418
- var matched = Platform.userAgent.match(regexp);
419
- if (matched !== null) {
420
- Platform.engine = engine;
421
- Platform.engineVersion = resolveVersion(matched[1], resolver);
422
- break;
441
+ if (typeof globalThis.navigator !== 'undefined') {
442
+ if (typeof globalThis.navigator.onLine !== 'undefined')
443
+ network.isOnline = globalThis.navigator.onLine;
444
+ var connection = globalThis.navigator.connection || globalThis.navigator.mozConnection || globalThis.navigator.webkitConnection;
445
+ if (typeof connection !== 'undefined') {
446
+ if (typeof connection.effectiveType !== 'undefined')
447
+ network.effectiveType = connection.effectiveType;
448
+ if (typeof connection.type !== 'undefined')
449
+ network.type = connection.type;
450
+ if (typeof connection.downlink !== 'undefined')
451
+ network.downlink = connection.downlink;
452
+ if (typeof connection.rtt !== 'undefined')
453
+ network.rtt = connection.rtt;
454
+ if (typeof connection.saveData !== 'undefined')
455
+ network.saveData = connection.saveData;
456
+ }
423
457
  }
424
- }
425
- for (var i = 0; i < BROWSER_RESOLVER_MAP.length; i++) {
426
- var map = BROWSER_RESOLVER_MAP[i];
427
- var regexp = map[0];
428
- var browser = map[1];
429
- var resolver = map[2];
430
- var matched = Platform.userAgent.match(regexp);
431
- if (matched !== null) {
432
- Platform.browser = browser;
433
- Platform.browserVersion = resolveVersion(matched[1], resolver);
434
- break;
458
+ if (Platform.isNode) {
459
+ try {
460
+ var os = require('os');
461
+ var networkInterfaces = os.networkInterfaces();
462
+ var networkInterfaceNames = Object.keys(networkInterfaces);
463
+ for (var i = 0; i < networkInterfaceNames.length; i++) {
464
+ var name_1 = networkInterfaceNames[i];
465
+ var networkInterface = networkInterfaces[name_1];
466
+ for (var j = 0; j < networkInterface.length; j++) {
467
+ var address = networkInterface[j];
468
+ if (!address.internal && address.family === 'IPv4')
469
+ network.isOnline = true;
470
+ }
471
+ if (network.isOnline)
472
+ break;
473
+ }
474
+ }
475
+ catch (_) {
476
+ }
477
+ try {
478
+ var childProcess = require('child_process');
479
+ if (Platform.os.name === OS.Windows) {
480
+ try {
481
+ var output = childProcess.execSync('netsh wlan show interfaces', { encoding: 'utf8', timeout: 5000 });
482
+ if (output.includes('State') && output.includes('connected'))
483
+ network.type = 'wifi';
484
+ }
485
+ catch (_) {
486
+ }
487
+ if (network.type === null) {
488
+ try {
489
+ var output = childProcess.execSync('ipconfig', { encoding: 'utf8', timeout: 5000 });
490
+ if (output.includes('Ethernet adapter'))
491
+ network.type = 'ethernet';
492
+ }
493
+ catch (_) {
494
+ }
495
+ }
496
+ if (network.type === null)
497
+ network.type = 'other';
498
+ }
499
+ else if (Platform.os.name === OS.MacOS) {
500
+ try {
501
+ var output = childProcess.execSync('networksetup -listallhardwareports', { encoding: 'utf8', timeout: 5000 });
502
+ var activeInterface = childProcess.execSync('route -n get default | grep interface', { encoding: 'utf8', timeout: 5000 });
503
+ if (activeInterface.includes('en0') && output.includes('Wi-Fi'))
504
+ network.type = 'wifi';
505
+ else if (activeInterface.includes('en') || output.includes('Ethernet'))
506
+ network.type = 'ethernet';
507
+ else
508
+ network.type = 'other';
509
+ }
510
+ catch (_) {
511
+ network.type = 'other';
512
+ }
513
+ }
514
+ }
515
+ catch (_) {
516
+ }
435
517
  }
436
- }
437
- if (Platform.crossPlatformFramework === CrossPlatformFramework.ReactNative) {
438
- try {
439
- var reactNative = require('react-native');
440
- var platform = reactNative.Platform;
441
- var os = platform.OS;
442
- var release = '' + platform.Version;
443
- var version = getSemanticVersion(release);
444
- switch (os) {
445
- case 'android':
446
- Platform.os = OS.Android;
447
- Platform.osVersion = resolveSemanticAndroidVersion(version, release);
448
- break;
449
- case 'ios':
450
- Platform.os = OS.iOS;
451
- Platform.osVersion = release;
452
- break;
453
- case 'windows':
454
- Platform.os = OS.Windows;
455
- Platform.osVersion = resolveSemanticWindowsVersion(version, release);
456
- break;
457
- case 'macos':
458
- Platform.os = OS.MacOS;
459
- Platform.osVersion = release;
460
- break;
518
+ return network;
519
+ }
520
+ function canUseHighEntropyValues(navigator) {
521
+ return typeof globalThis.navigator !== 'undefined' && typeof navigator.userAgentData !== 'undefined' && typeof navigator.userAgentData.getHighEntropyValues !== 'undefined';
522
+ }
523
+ function init() {
524
+ if ((typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.electron !== undefined) || (/ electron\//i.test(USER_AGENT)))
525
+ Platform.crossPlatformFramework = CrossPlatformFramework.Electron;
526
+ if (typeof globalThis.navigator !== 'undefined' && globalThis.navigator.product === 'ReactNative')
527
+ Platform.crossPlatformFramework = CrossPlatformFramework.ReactNative;
528
+ for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
529
+ var map = OS_RESOLVER_MAP[i];
530
+ var regexp = map[0];
531
+ var os = map[1];
532
+ var resolver = map[2];
533
+ var matched = Platform.userAgent.match(regexp);
534
+ if (matched !== null) {
535
+ Platform.os = {
536
+ name: os,
537
+ version: resolveVersion(matched[1], resolver),
538
+ };
539
+ break;
461
540
  }
462
541
  }
463
- catch (_) {
542
+ if (Platform.os.name === OS.iOS && compareVersion(Platform.os.version, '18.6') === 0) {
543
+ var version = /\) Version\/([\d.]+)/.exec(Platform.userAgent);
544
+ if (version !== null && parseInt(version[1].substring(0, 2), 10) >= 26)
545
+ Platform.os.version = version[1];
464
546
  }
465
- }
466
- if (Platform.isNode) {
467
- try {
468
- var os = require('os');
469
- var platform = os.platform();
470
- var release = os.release();
471
- var version = getSemanticVersion(release);
472
- switch (platform) {
473
- case 'win32':
474
- Platform.os = OS.Windows;
475
- Platform.osVersion = resolveSemanticWindowsVersion(version, release);
476
- break;
477
- case 'darwin':
478
- Platform.os = OS.MacOS;
479
- Platform.osVersion = resolveSemanticDarwinVersion(version, release);
480
- break;
481
- case 'android':
482
- Platform.os = OS.Android;
483
- Platform.osVersion = release;
484
- break;
485
- case 'linux':
486
- if (/android/i.test(release)) {
487
- Platform.os = OS.Android;
488
- Platform.osVersion = release;
489
- }
490
- break;
547
+ for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
548
+ var map = ENGINE_RESOLVER_MAP[i];
549
+ var regexp = map[0];
550
+ var engine = map[1];
551
+ var resolver = map[2];
552
+ var matched = Platform.userAgent.match(regexp);
553
+ if (matched !== null) {
554
+ Platform.engine = {
555
+ name: engine,
556
+ version: resolveVersion(matched[1], resolver),
557
+ };
558
+ break;
491
559
  }
492
560
  }
493
- catch (_) {
561
+ for (var i = 0; i < BROWSER_RESOLVER_MAP.length; i++) {
562
+ var map = BROWSER_RESOLVER_MAP[i];
563
+ var regexp = map[0];
564
+ var browser = map[1];
565
+ var resolver = map[2];
566
+ var matched = Platform.userAgent.match(regexp);
567
+ if (matched !== null) {
568
+ Platform.browser = {
569
+ name: browser,
570
+ version: resolveVersion(matched[1], resolver),
571
+ };
572
+ break;
573
+ }
494
574
  }
495
- }
496
- if (typeof globalThis.document !== 'undefined') {
497
- globalThis.document.addEventListener("deviceready", function () {
498
- Platform.crossPlatformFramework = CrossPlatformFramework.Cordova;
499
- if (Platform.os === OS.Unknown && typeof globalThis.device !== 'undefined') {
500
- switch (globalThis.device.platform) {
501
- case 'Android':
502
- Platform.os = OS.Android;
575
+ if (Platform.crossPlatformFramework === CrossPlatformFramework.ReactNative) {
576
+ try {
577
+ var reactNative = require('react-native');
578
+ var platform = reactNative.Platform;
579
+ var os = platform.OS;
580
+ var release = '' + platform.Version;
581
+ var version = getSemanticVersion(release);
582
+ switch (os) {
583
+ case 'android':
584
+ Platform.os = {
585
+ name: OS.Android,
586
+ version: resolveSemanticAndroidVersion(version, release),
587
+ };
588
+ break;
589
+ case 'ios':
590
+ Platform.os = {
591
+ name: OS.iOS,
592
+ version: release,
593
+ };
594
+ break;
595
+ case 'windows':
596
+ Platform.os = {
597
+ name: OS.Windows,
598
+ version: resolveSemanticWindowsVersion(version, release),
599
+ };
503
600
  break;
504
- case 'iOS':
505
- Platform.os = OS.iOS;
601
+ case 'macos':
602
+ Platform.os = {
603
+ name: OS.MacOS,
604
+ version: release,
605
+ };
506
606
  break;
507
607
  }
508
- Platform.osVersion = globalThis.device.version;
509
608
  }
510
- }, false);
511
- }
512
- if (navigator.userAgentData !== undefined && navigator.userAgentData.getHighEntropyValues !== undefined) {
513
- navigator
514
- .userAgentData
515
- .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])
516
- .then(function (result) {
517
- var brands = result.fullVersionList || result.brands || [];
518
- var platformVersion = result.platformVersion;
519
- for (var i = 0; i < brands.length; i++) {
520
- var brand = normalizeBrand(brands[i]);
521
- var brandName = brand.brand;
522
- var brandVersion = brand.version;
523
- if (/not.a.brand/i.test(brandName))
524
- continue;
525
- if (brandName === "Chromium")
526
- Platform.engineVersion = brandVersion;
609
+ catch (_) {
527
610
  }
528
- if (typeof platformVersion === 'string') {
529
- if (Platform.os === OS.Windows && parseInt(platformVersion.replace(/[^\d.]/g, '').split('.')[0], 10) >= 13)
530
- Platform.osVersion = '11';
531
- else
532
- Platform.osVersion = platformVersion;
611
+ finally {
533
612
  }
534
- });
613
+ }
614
+ if (Platform.isNode) {
615
+ try {
616
+ var os = require('os');
617
+ var platform = os.platform();
618
+ var release = os.release();
619
+ var version = getSemanticVersion(release);
620
+ switch (platform) {
621
+ case 'win32':
622
+ Platform.os = {
623
+ name: OS.Windows,
624
+ version: resolveSemanticWindowsVersion(version, release),
625
+ };
626
+ break;
627
+ case 'darwin':
628
+ Platform.os = {
629
+ name: OS.MacOS,
630
+ version: resolveSemanticDarwinVersion(version, release),
631
+ };
632
+ break;
633
+ case 'android':
634
+ Platform.os = {
635
+ name: OS.Android,
636
+ version: release,
637
+ };
638
+ break;
639
+ case 'linux':
640
+ if (/android/i.test(release)) {
641
+ Platform.os = {
642
+ name: OS.Android,
643
+ version: release,
644
+ };
645
+ }
646
+ break;
647
+ }
648
+ }
649
+ catch (_) {
650
+ }
651
+ finally {
652
+ }
653
+ }
654
+ if (typeof globalThis.document !== 'undefined') {
655
+ if (typeof globalThis.device !== 'undefined') {
656
+ parseOSFromCordova();
657
+ }
658
+ else {
659
+ globalThis.document.addEventListener("deviceready", parseOSFromCordova, false);
660
+ }
661
+ }
662
+ if (canUseHighEntropyValues(globalThis.navigator)) {
663
+ globalThis
664
+ .navigator
665
+ .userAgentData
666
+ .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])
667
+ .then(function (result) {
668
+ var brands = result.fullVersionList || result.brands || [];
669
+ var platformVersion = result.platformVersion;
670
+ var platform = result.platform;
671
+ var browserName = Platform.browser.name;
672
+ var prevBrandName = null;
673
+ for (var i = 0; i < brands.length; i++) {
674
+ var brand = normalizeBrand(brands[i]);
675
+ var brandVersion = brand.version;
676
+ var brandName = brand.brand;
677
+ if (/not.a.brand/i.test(brandName))
678
+ continue;
679
+ if (prevBrandName === null || (/Chrom/.test(prevBrandName) && brandName !== 'Chromium') || (prevBrandName === 'Edge' && /WebView2/.test(brandName))) {
680
+ brandName = HIGH_ENTROPY_BRAND_NAME_MAP[brandName] || brandName;
681
+ prevBrandName = browserName;
682
+ if (prevBrandName === null || /Chrom/.test(prevBrandName) || !/Chrom/.test(brandName)) {
683
+ browserName = brandName;
684
+ if (browserName === 'Chrome' || browserName === 'Chrome WebView' || browserName === 'Chrome Headless')
685
+ Platform.browser.name = Browsers.Chrome;
686
+ else if (browserName === 'Edge' || browserName === 'Edge WebView2')
687
+ Platform.browser.name = Browsers.Edge;
688
+ else if (browserName === 'Opera Mobi')
689
+ Platform.browser.name = Browsers.Opera;
690
+ Platform.browser.version = brandVersion;
691
+ }
692
+ prevBrandName = brandName;
693
+ }
694
+ if (brandName === 'Chromium')
695
+ Platform.engine.version = brandVersion;
696
+ }
697
+ if (typeof platformVersion === 'string') {
698
+ if (Platform.os.name === OS.Windows)
699
+ Platform.os.version = parseInt(platformVersion.split('.')[0], 10) >= 13 ? '11' : '10';
700
+ else
701
+ Platform.os.version = platformVersion;
702
+ }
703
+ if (typeof platform === 'string') {
704
+ if (/android/i.test(platform))
705
+ Platform.os.name = OS.Android;
706
+ else if (/ios|iphone|ipad/i.test(platform))
707
+ Platform.os.name = OS.iOS;
708
+ else if (/windows|win32/i.test(platform))
709
+ Platform.os.name = OS.Windows;
710
+ else if (/macos|macintel/i.test(platform))
711
+ Platform.os.name = OS.MacOS;
712
+ }
713
+ if (result.mobile === true)
714
+ Platform.device = Devices.Mobile;
715
+ });
716
+ }
535
717
  }
536
- Platform.device = Platform.os === OS.iOS || Platform.os === OS.Android ? Devices.Mobile : Platform.os === OS.Windows || Platform.os === OS.MacOS ? Devices.Desktop : Devices.Unknown;
537
- Platform.isMobile = Platform.device === Devices.Mobile;
538
- Platform.isDesktop = Platform.device === Devices.Desktop;
539
- Platform.isStandalone = getIsStandalone(Platform.os);
718
+ init();
540
719
 
541
720
  var currentAppearance = null;
542
721
  var appearanceIntervalId = null;
@@ -602,7 +781,7 @@
602
781
  return new Promise(function (resolve) {
603
782
  resolve(getAppearanceFromElectron());
604
783
  });
605
- if (Platform.browser === Browsers.SamsungInternet)
784
+ if (Platform.browser.name === Browsers.SamsungInternet)
606
785
  return getAppearanceFromEngine();
607
786
  return new Promise(function (resolve) {
608
787
  resolve(getAppearanceFromMediaQuery());
@@ -686,7 +865,7 @@
686
865
  if (index !== -1)
687
866
  ENTRIES.splice(index, 1);
688
867
  if (ENTRIES.length === 0) {
689
- if (Platform.browser === Browsers.SamsungInternet)
868
+ if (Platform.browser.name === Browsers.SamsungInternet)
690
869
  stopPolling();
691
870
  else
692
871
  removeListener(entry.capture);
@@ -751,7 +930,7 @@
751
930
  if (index === -1) {
752
931
  ENTRIES.push(entry);
753
932
  if (ENTRIES.length === 1) {
754
- if (Platform.browser === Browsers.SamsungInternet)
933
+ if (Platform.browser.name === Browsers.SamsungInternet)
755
934
  startPolling();
756
935
  else
757
936
  addListener(entry.capture);