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
@@ -72,21 +72,43 @@ function compareVersion(lhs, rhs) {
72
72
  }
73
73
 
74
74
  var Platform = {
75
- device: Devices.Unknown,
76
- os: OS.Unknown,
77
- engine: Engines.Unknown,
78
- browser: Browsers.Unknown,
75
+ os: { name: OS.Unknown, version: '' },
76
+ engine: { name: Engines.Unknown, version: '' },
77
+ browser: { name: Browsers.Unknown, version: '' },
79
78
  crossPlatformFramework: CrossPlatformFramework.Unknown,
80
- osVersion: '',
81
- engineVersion: '',
82
- browserVersion: '',
83
- renderer: getRenderer(),
84
79
  userAgent: USER_AGENT,
85
- isNode: typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.node !== undefined,
86
- isMobile: false,
87
- isDesktop: false,
88
- isStandalone: false,
89
- isWebview: /; ?wv|applewebkit(?!.*safari)/i.test(USER_AGENT),
80
+ get network() {
81
+ return getNetwork();
82
+ },
83
+ get device() {
84
+ if (this.os.name === OS.iOS || this.os.name === OS.Android)
85
+ return Devices.Mobile;
86
+ if (this.os.name === OS.Windows || this.os.name === OS.MacOS)
87
+ return Devices.Desktop;
88
+ return Devices.Unknown;
89
+ },
90
+ get renderer() {
91
+ return getRenderer();
92
+ },
93
+ get isMobile() {
94
+ return this.device === Devices.Mobile;
95
+ },
96
+ get isDesktop() {
97
+ return this.device === Devices.Desktop;
98
+ },
99
+ get isWebview() {
100
+ return /; ?wv|applewebkit(?!.*safari)/i.test(this.userAgent);
101
+ },
102
+ get isNode() {
103
+ return typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.node !== undefined;
104
+ },
105
+ get isStandalone() {
106
+ if (this.os.name === OS.iOS)
107
+ return 'standalone' in globalThis.navigator && !!globalThis.navigator.standalone;
108
+ if (!('matchMedia' in globalThis))
109
+ return false;
110
+ return globalThis.matchMedia('(display-mode: standalone)').matches;
111
+ },
90
112
  };
91
113
  var OS_RESOLVER_MAP = [
92
114
  [/windows nt (6\.[23]); arm/i, OS.Windows, resolveWindowsVersion],
@@ -146,6 +168,14 @@ var BROWSER_RESOLVER_MAP = [
146
168
  [/mobile vr; rv:([\w.]+)\).+firefox/i, Browsers.Firefox],
147
169
  [/firefox\/([\w.]+)/i, Browsers.Firefox],
148
170
  ];
171
+ var HIGH_ENTROPY_BRAND_NAME_MAP = {
172
+ 'Google Chrome': 'Chrome',
173
+ 'Microsoft Edge': 'Edge',
174
+ 'Microsoft Edge WebView2': 'Edge WebView2',
175
+ 'Android WebView': 'Chrome WebView',
176
+ 'HeadlessChrome': 'Chrome Headless',
177
+ 'OperaMobile': 'Opera Mobi',
178
+ };
149
179
  function resolveWindowsVersion(string) {
150
180
  if (string === undefined)
151
181
  return '';
@@ -320,6 +350,33 @@ function normalizeBrand(entry) {
320
350
  return { brand: entry, version: '' };
321
351
  return { brand: entry.brand, version: entry.version };
322
352
  }
353
+ function getSemanticVersion(string) {
354
+ var parts = string.split('.');
355
+ return {
356
+ major: parseInt(parts[0] || '0'),
357
+ minor: parseInt(parts[1] || '0'),
358
+ build: parseInt(parts[2] || '0')
359
+ };
360
+ }
361
+ function parseOSFromCordova() {
362
+ Platform.crossPlatformFramework = CrossPlatformFramework.Cordova;
363
+ if (typeof globalThis.device !== 'undefined') {
364
+ switch (globalThis.device.platform) {
365
+ case 'Android':
366
+ Platform.os = {
367
+ name: OS.Android,
368
+ version: globalThis.device.version,
369
+ };
370
+ break;
371
+ case 'iOS':
372
+ Platform.os = {
373
+ name: OS.iOS,
374
+ version: globalThis.device.version,
375
+ };
376
+ break;
377
+ }
378
+ }
379
+ }
323
380
  function getRenderer() {
324
381
  if (typeof globalThis.document === 'undefined')
325
382
  return '';
@@ -340,171 +397,293 @@ function getRenderer() {
340
397
  return '';
341
398
  }
342
399
  }
343
- function getIsStandalone(os) {
344
- if (!('matchMedia' in globalThis))
345
- return false;
346
- if (os === OS.iOS)
347
- return 'standalone' in navigator && !!navigator.standalone;
348
- return globalThis.matchMedia('(display-mode: standalone)').matches;
349
- }
350
- function getSemanticVersion(string) {
351
- var parts = string.split('.');
352
- return {
353
- major: parseInt(parts[0] || '0'),
354
- minor: parseInt(parts[1] || '0'),
355
- build: parseInt(parts[2] || '0')
400
+ function getNetwork() {
401
+ var network = {
402
+ isOnline: null,
403
+ effectiveType: null,
404
+ type: null,
405
+ downlink: null,
406
+ rtt: null,
407
+ saveData: null,
356
408
  };
357
- }
358
- if ((typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.electron !== undefined) || (/ electron\//i.test(USER_AGENT))) {
359
- Platform.crossPlatformFramework = CrossPlatformFramework.Electron;
360
- }
361
- if (typeof globalThis.navigator !== 'undefined' && globalThis.navigator.product === 'ReactNative') {
362
- Platform.crossPlatformFramework = CrossPlatformFramework.ReactNative;
363
- }
364
- for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
365
- var map = OS_RESOLVER_MAP[i];
366
- var regexp = map[0];
367
- var os = map[1];
368
- var resolver = map[2];
369
- var matched = Platform.userAgent.match(regexp);
370
- if (matched !== null) {
371
- Platform.os = os;
372
- Platform.osVersion = resolveVersion(matched[1], resolver);
373
- break;
409
+ if (typeof globalThis.navigator !== 'undefined') {
410
+ if (typeof globalThis.navigator.onLine !== 'undefined')
411
+ network.isOnline = globalThis.navigator.onLine;
412
+ var connection = globalThis.navigator.connection || globalThis.navigator.mozConnection || globalThis.navigator.webkitConnection;
413
+ if (typeof connection !== 'undefined') {
414
+ if (typeof connection.effectiveType !== 'undefined')
415
+ network.effectiveType = connection.effectiveType;
416
+ if (typeof connection.type !== 'undefined')
417
+ network.type = connection.type;
418
+ if (typeof connection.downlink !== 'undefined')
419
+ network.downlink = connection.downlink;
420
+ if (typeof connection.rtt !== 'undefined')
421
+ network.rtt = connection.rtt;
422
+ if (typeof connection.saveData !== 'undefined')
423
+ network.saveData = connection.saveData;
424
+ }
374
425
  }
375
- }
376
- if (Platform.os === OS.iOS && compareVersion(Platform.osVersion, '18.6') === 0) {
377
- var version = /\) Version\/([\d.]+)/.exec(Platform.userAgent);
378
- if (version !== null && parseInt(version[1].substring(0, 2), 10) >= 26)
379
- Platform.osVersion = version[1];
380
- }
381
- for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
382
- var map = ENGINE_RESOLVER_MAP[i];
383
- var regexp = map[0];
384
- var engine = map[1];
385
- var resolver = map[2];
386
- var matched = Platform.userAgent.match(regexp);
387
- if (matched !== null) {
388
- Platform.engine = engine;
389
- Platform.engineVersion = resolveVersion(matched[1], resolver);
390
- break;
426
+ if (Platform.isNode) {
427
+ try {
428
+ var os = require('os');
429
+ var networkInterfaces = os.networkInterfaces();
430
+ var networkInterfaceNames = Object.keys(networkInterfaces);
431
+ for (var i = 0; i < networkInterfaceNames.length; i++) {
432
+ var name_1 = networkInterfaceNames[i];
433
+ var networkInterface = networkInterfaces[name_1];
434
+ for (var j = 0; j < networkInterface.length; j++) {
435
+ var address = networkInterface[j];
436
+ if (!address.internal && address.family === 'IPv4')
437
+ network.isOnline = true;
438
+ }
439
+ if (network.isOnline)
440
+ break;
441
+ }
442
+ }
443
+ catch (_) {
444
+ }
445
+ try {
446
+ var childProcess = require('child_process');
447
+ if (Platform.os.name === OS.Windows) {
448
+ try {
449
+ var output = childProcess.execSync('netsh wlan show interfaces', { encoding: 'utf8', timeout: 5000 });
450
+ if (output.includes('State') && output.includes('connected'))
451
+ network.type = 'wifi';
452
+ }
453
+ catch (_) {
454
+ }
455
+ if (network.type === null) {
456
+ try {
457
+ var output = childProcess.execSync('ipconfig', { encoding: 'utf8', timeout: 5000 });
458
+ if (output.includes('Ethernet adapter'))
459
+ network.type = 'ethernet';
460
+ }
461
+ catch (_) {
462
+ }
463
+ }
464
+ if (network.type === null)
465
+ network.type = 'other';
466
+ }
467
+ else if (Platform.os.name === OS.MacOS) {
468
+ try {
469
+ var output = childProcess.execSync('networksetup -listallhardwareports', { encoding: 'utf8', timeout: 5000 });
470
+ var activeInterface = childProcess.execSync('route -n get default | grep interface', { encoding: 'utf8', timeout: 5000 });
471
+ if (activeInterface.includes('en0') && output.includes('Wi-Fi'))
472
+ network.type = 'wifi';
473
+ else if (activeInterface.includes('en') || output.includes('Ethernet'))
474
+ network.type = 'ethernet';
475
+ else
476
+ network.type = 'other';
477
+ }
478
+ catch (_) {
479
+ network.type = 'other';
480
+ }
481
+ }
482
+ }
483
+ catch (_) {
484
+ }
391
485
  }
486
+ return network;
392
487
  }
393
- for (var i = 0; i < BROWSER_RESOLVER_MAP.length; i++) {
394
- var map = BROWSER_RESOLVER_MAP[i];
395
- var regexp = map[0];
396
- var browser = map[1];
397
- var resolver = map[2];
398
- var matched = Platform.userAgent.match(regexp);
399
- if (matched !== null) {
400
- Platform.browser = browser;
401
- Platform.browserVersion = resolveVersion(matched[1], resolver);
402
- break;
403
- }
488
+ function canUseHighEntropyValues(navigator) {
489
+ return typeof globalThis.navigator !== 'undefined' && typeof navigator.userAgentData !== 'undefined' && typeof navigator.userAgentData.getHighEntropyValues !== 'undefined';
404
490
  }
405
- if (Platform.crossPlatformFramework === CrossPlatformFramework.ReactNative) {
406
- try {
407
- var reactNative = require('react-native');
408
- var platform = reactNative.Platform;
409
- var os = platform.OS;
410
- var release = '' + platform.Version;
411
- var version = getSemanticVersion(release);
412
- switch (os) {
413
- case 'android':
414
- Platform.os = OS.Android;
415
- Platform.osVersion = resolveSemanticAndroidVersion(version, release);
416
- break;
417
- case 'ios':
418
- Platform.os = OS.iOS;
419
- Platform.osVersion = release;
420
- break;
421
- case 'windows':
422
- Platform.os = OS.Windows;
423
- Platform.osVersion = resolveSemanticWindowsVersion(version, release);
424
- break;
425
- case 'macos':
426
- Platform.os = OS.MacOS;
427
- Platform.osVersion = release;
428
- break;
491
+ function init() {
492
+ if ((typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.electron !== undefined) || (/ electron\//i.test(USER_AGENT)))
493
+ Platform.crossPlatformFramework = CrossPlatformFramework.Electron;
494
+ if (typeof globalThis.navigator !== 'undefined' && globalThis.navigator.product === 'ReactNative')
495
+ Platform.crossPlatformFramework = CrossPlatformFramework.ReactNative;
496
+ for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
497
+ var map = OS_RESOLVER_MAP[i];
498
+ var regexp = map[0];
499
+ var os = map[1];
500
+ var resolver = map[2];
501
+ var matched = Platform.userAgent.match(regexp);
502
+ if (matched !== null) {
503
+ Platform.os = {
504
+ name: os,
505
+ version: resolveVersion(matched[1], resolver),
506
+ };
507
+ break;
429
508
  }
430
509
  }
431
- catch (_) {
510
+ if (Platform.os.name === OS.iOS && compareVersion(Platform.os.version, '18.6') === 0) {
511
+ var version = /\) Version\/([\d.]+)/.exec(Platform.userAgent);
512
+ if (version !== null && parseInt(version[1].substring(0, 2), 10) >= 26)
513
+ Platform.os.version = version[1];
432
514
  }
433
- }
434
- if (Platform.isNode) {
435
- try {
436
- var os = require('os');
437
- var platform = os.platform();
438
- var release = os.release();
439
- var version = getSemanticVersion(release);
440
- switch (platform) {
441
- case 'win32':
442
- Platform.os = OS.Windows;
443
- Platform.osVersion = resolveSemanticWindowsVersion(version, release);
444
- break;
445
- case 'darwin':
446
- Platform.os = OS.MacOS;
447
- Platform.osVersion = resolveSemanticDarwinVersion(version, release);
448
- break;
449
- case 'android':
450
- Platform.os = OS.Android;
451
- Platform.osVersion = release;
452
- break;
453
- case 'linux':
454
- if (/android/i.test(release)) {
455
- Platform.os = OS.Android;
456
- Platform.osVersion = release;
457
- }
458
- break;
515
+ for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
516
+ var map = ENGINE_RESOLVER_MAP[i];
517
+ var regexp = map[0];
518
+ var engine = map[1];
519
+ var resolver = map[2];
520
+ var matched = Platform.userAgent.match(regexp);
521
+ if (matched !== null) {
522
+ Platform.engine = {
523
+ name: engine,
524
+ version: resolveVersion(matched[1], resolver),
525
+ };
526
+ break;
459
527
  }
460
528
  }
461
- catch (_) {
529
+ for (var i = 0; i < BROWSER_RESOLVER_MAP.length; i++) {
530
+ var map = BROWSER_RESOLVER_MAP[i];
531
+ var regexp = map[0];
532
+ var browser = map[1];
533
+ var resolver = map[2];
534
+ var matched = Platform.userAgent.match(regexp);
535
+ if (matched !== null) {
536
+ Platform.browser = {
537
+ name: browser,
538
+ version: resolveVersion(matched[1], resolver),
539
+ };
540
+ break;
541
+ }
462
542
  }
463
- }
464
- if (typeof globalThis.document !== 'undefined') {
465
- globalThis.document.addEventListener("deviceready", function () {
466
- Platform.crossPlatformFramework = CrossPlatformFramework.Cordova;
467
- if (Platform.os === OS.Unknown && typeof globalThis.device !== 'undefined') {
468
- switch (globalThis.device.platform) {
469
- case 'Android':
470
- Platform.os = OS.Android;
543
+ if (Platform.crossPlatformFramework === CrossPlatformFramework.ReactNative) {
544
+ try {
545
+ var reactNative = require('react-native');
546
+ var platform = reactNative.Platform;
547
+ var os = platform.OS;
548
+ var release = '' + platform.Version;
549
+ var version = getSemanticVersion(release);
550
+ switch (os) {
551
+ case 'android':
552
+ Platform.os = {
553
+ name: OS.Android,
554
+ version: resolveSemanticAndroidVersion(version, release),
555
+ };
556
+ break;
557
+ case 'ios':
558
+ Platform.os = {
559
+ name: OS.iOS,
560
+ version: release,
561
+ };
471
562
  break;
472
- case 'iOS':
473
- Platform.os = OS.iOS;
563
+ case 'windows':
564
+ Platform.os = {
565
+ name: OS.Windows,
566
+ version: resolveSemanticWindowsVersion(version, release),
567
+ };
568
+ break;
569
+ case 'macos':
570
+ Platform.os = {
571
+ name: OS.MacOS,
572
+ version: release,
573
+ };
474
574
  break;
475
575
  }
476
- Platform.osVersion = globalThis.device.version;
477
576
  }
478
- }, false);
479
- }
480
- if (navigator.userAgentData !== undefined && navigator.userAgentData.getHighEntropyValues !== undefined) {
481
- navigator
482
- .userAgentData
483
- .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])
484
- .then(function (result) {
485
- var brands = result.fullVersionList || result.brands || [];
486
- var platformVersion = result.platformVersion;
487
- for (var i = 0; i < brands.length; i++) {
488
- var brand = normalizeBrand(brands[i]);
489
- var brandName = brand.brand;
490
- var brandVersion = brand.version;
491
- if (/not.a.brand/i.test(brandName))
492
- continue;
493
- if (brandName === "Chromium")
494
- Platform.engineVersion = brandVersion;
577
+ catch (_) {
578
+ }
579
+ finally {
580
+ }
581
+ }
582
+ if (Platform.isNode) {
583
+ try {
584
+ var os = require('os');
585
+ var platform = os.platform();
586
+ var release = os.release();
587
+ var version = getSemanticVersion(release);
588
+ switch (platform) {
589
+ case 'win32':
590
+ Platform.os = {
591
+ name: OS.Windows,
592
+ version: resolveSemanticWindowsVersion(version, release),
593
+ };
594
+ break;
595
+ case 'darwin':
596
+ Platform.os = {
597
+ name: OS.MacOS,
598
+ version: resolveSemanticDarwinVersion(version, release),
599
+ };
600
+ break;
601
+ case 'android':
602
+ Platform.os = {
603
+ name: OS.Android,
604
+ version: release,
605
+ };
606
+ break;
607
+ case 'linux':
608
+ if (/android/i.test(release)) {
609
+ Platform.os = {
610
+ name: OS.Android,
611
+ version: release,
612
+ };
613
+ }
614
+ break;
615
+ }
495
616
  }
496
- if (typeof platformVersion === 'string') {
497
- if (Platform.os === OS.Windows && parseInt(platformVersion.replace(/[^\d.]/g, '').split('.')[0], 10) >= 13)
498
- Platform.osVersion = '11';
499
- else
500
- Platform.osVersion = platformVersion;
617
+ catch (_) {
501
618
  }
502
- });
619
+ finally {
620
+ }
621
+ }
622
+ if (typeof globalThis.document !== 'undefined') {
623
+ if (typeof globalThis.device !== 'undefined') {
624
+ parseOSFromCordova();
625
+ }
626
+ else {
627
+ globalThis.document.addEventListener("deviceready", parseOSFromCordova, false);
628
+ }
629
+ }
630
+ if (canUseHighEntropyValues(globalThis.navigator)) {
631
+ globalThis
632
+ .navigator
633
+ .userAgentData
634
+ .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])
635
+ .then(function (result) {
636
+ var brands = result.fullVersionList || result.brands || [];
637
+ var platformVersion = result.platformVersion;
638
+ var platform = result.platform;
639
+ var browserName = Platform.browser.name;
640
+ var prevBrandName = null;
641
+ for (var i = 0; i < brands.length; i++) {
642
+ var brand = normalizeBrand(brands[i]);
643
+ var brandVersion = brand.version;
644
+ var brandName = brand.brand;
645
+ if (/not.a.brand/i.test(brandName))
646
+ continue;
647
+ if (prevBrandName === null || (/Chrom/.test(prevBrandName) && brandName !== 'Chromium') || (prevBrandName === 'Edge' && /WebView2/.test(brandName))) {
648
+ brandName = HIGH_ENTROPY_BRAND_NAME_MAP[brandName] || brandName;
649
+ prevBrandName = browserName;
650
+ if (prevBrandName === null || /Chrom/.test(prevBrandName) || !/Chrom/.test(brandName)) {
651
+ browserName = brandName;
652
+ if (browserName === 'Chrome' || browserName === 'Chrome WebView' || browserName === 'Chrome Headless')
653
+ Platform.browser.name = Browsers.Chrome;
654
+ else if (browserName === 'Edge' || browserName === 'Edge WebView2')
655
+ Platform.browser.name = Browsers.Edge;
656
+ else if (browserName === 'Opera Mobi')
657
+ Platform.browser.name = Browsers.Opera;
658
+ Platform.browser.version = brandVersion;
659
+ }
660
+ prevBrandName = brandName;
661
+ }
662
+ if (brandName === 'Chromium')
663
+ Platform.engine.version = brandVersion;
664
+ }
665
+ if (typeof platformVersion === 'string') {
666
+ if (Platform.os.name === OS.Windows)
667
+ Platform.os.version = parseInt(platformVersion.split('.')[0], 10) >= 13 ? '11' : '10';
668
+ else
669
+ Platform.os.version = platformVersion;
670
+ }
671
+ if (typeof platform === 'string') {
672
+ if (/android/i.test(platform))
673
+ Platform.os.name = OS.Android;
674
+ else if (/ios|iphone|ipad/i.test(platform))
675
+ Platform.os.name = OS.iOS;
676
+ else if (/windows|win32/i.test(platform))
677
+ Platform.os.name = OS.Windows;
678
+ else if (/macos|macintel/i.test(platform))
679
+ Platform.os.name = OS.MacOS;
680
+ }
681
+ if (result.mobile === true)
682
+ Platform.device = Devices.Mobile;
683
+ });
684
+ }
503
685
  }
504
- Platform.device = Platform.os === OS.iOS || Platform.os === OS.Android ? Devices.Mobile : Platform.os === OS.Windows || Platform.os === OS.MacOS ? Devices.Desktop : Devices.Unknown;
505
- Platform.isMobile = Platform.device === Devices.Mobile;
506
- Platform.isDesktop = Platform.device === Devices.Desktop;
507
- Platform.isStandalone = getIsStandalone(Platform.os);
686
+ init();
508
687
 
509
688
  var NativePlatformPlugin = {
510
689
  installed: false,
@@ -49,14 +49,12 @@ declare enum CrossPlatformFramework {
49
49
  }
50
50
 
51
51
  declare interface PlatformInstance {
52
- os: OS;
52
+ os: NameVersionPair<OS>;
53
+ engine: NameVersionPair<Engines>;
54
+ browser: NameVersionPair<Browsers>;
53
55
  device: Devices;
54
- engine: Engines;
55
- browser: Browsers;
56
56
  crossPlatformFramework: CrossPlatformFramework;
57
- osVersion: string;
58
- engineVersion: string;
59
- browserVersion: string;
57
+ network: Network;
60
58
  renderer: string;
61
59
  userAgent: string;
62
60
  isNode: boolean;
@@ -65,6 +63,18 @@ declare interface PlatformInstance {
65
63
  isDesktop: boolean;
66
64
  isWebview: boolean;
67
65
  }
66
+ declare interface NameVersionPair<T> {
67
+ name: T;
68
+ version: string;
69
+ }
70
+ declare interface Network {
71
+ isOnline: boolean | null;
72
+ effectiveType: 'slow-2g' | '2g' | '3g' | '4g' | null;
73
+ type: 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | null;
74
+ downlink: number | null;
75
+ rtt: number | null;
76
+ saveData: boolean | null;
77
+ }
68
78
 
69
79
  declare module 'native-fn' {
70
80
  interface NativePlugins {
@@ -85,4 +95,4 @@ declare const NativePlatformPlugin: NativePlugin<'Platform', PlatformInstance, {
85
95
  }, {}>;
86
96
 
87
97
  export { NativePlatformPlugin as default };
88
- export type { PlatformInstance };
98
+ export type { NameVersionPair, Network, PlatformInstance };
@@ -1 +1 @@
1
- "use strict";var o,r,e,i,n;!function(o){o.Unknown="Unknown",o.Android="Android",o.iOS="iOS",o.Windows="Windows",o.MacOS="MacOS"}(o||(o={})),function(o){o.Unknown="Unknown",o.Mobile="Mobile",o.Desktop="Desktop"}(r||(r={})),function(o){o.Unknown="Unknown",o.EdgeHTML="EdgeHTML",o.ArkWeb="ArkWeb",o.Blink="Blink",o.Presto="Presto",o.WebKit="WebKit",o.Trident="Trident",o.NetFront="NetFront",o.KHTML="KHTML",o.Tasman="Tasman",o.Gecko="Gecko"}(e||(e={})),function(o){o.Unknown="Unknown",o.Chrome="Chrome",o.Safari="Safari",o.Edge="Edge",o.Firefox="Firefox",o.Opera="Opera",o.IE="IE",o.SamsungInternet="SamsungInternet"}(i||(i={})),function(o){o.Unknown="Unknown",o.ReactNative="ReactNative",o.Electron="Electron",o.Cordova="Cordova"}(n||(n={}));var a=void 0!==globalThis.navigator&&"string"==typeof globalThis.navigator.userAgent?globalThis.navigator.userAgent:"";var s={device:r.Unknown,os:o.Unknown,engine:e.Unknown,browser:i.Unknown,crossPlatformFramework:n.Unknown,osVersion:"",engineVersion:"",browserVersion:"",renderer:function(){if(void 0===globalThis.document)return"";var o=globalThis.document.createElement("canvas");if("function"!=typeof o.getContext)return"";var r=o.getContext("webgl2")||o.getContext("experimental-webgl")||o.getContext("webgl");if(null===r)return"";if(r instanceof WebGLRenderingContext||"getParameter"in r&&"function"==typeof r.getParameter){var e=r.getExtension("WEBGL_debug_renderer_info");return null===e?r.getParameter(r.RENDERER):r.getParameter(e.UNMASKED_RENDERER_WEBGL)}return""}(),userAgent:a,isNode:void 0!==globalThis.process&&void 0!==globalThis.process.versions&&void 0!==globalThis.process.versions.node,isMobile:!1,isDesktop:!1,isStandalone:!1,isWebview:/; ?wv|applewebkit(?!.*safari)/i.test(a)},t=[[/windows nt (6\.[23]); arm/i,o.Windows,l],[/windows (?:phone|mobile|iot)(?: os)?[\/ ]?([\d.]*( se)?)/i,o.Windows,l],[/windows[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i,o.Windows,l],[/windows nt ?([\d.)]*)(?!.+xbox)/i,o.Windows,l],[/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d.;]*)/i,o.Windows,l],[/windows ce\/?([\d.]*)/i,o.Windows,l],[/[adehimnop]{4,7}\b(?:.*os (\w+) like mac|; opera)/i,o.iOS,w],[/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w.]+)/i,o.iOS,w],[/cfnetwork\/.+darwin/i,o.iOS,w],[/mac os x ?([\w. ]*)/i,o.MacOS,w],[/(?:macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i,o.MacOS,w],[/droid ([\w.]+)\b.+(android[- ]x86)/i,o.Android],[/android\w*[-\/.; ]?([\d.]*)/i,o.Android]],m=[[/windows.+ edge\/([\w.]+)/i,e.EdgeHTML],[/arkweb\/([\w.]+)/i,e.ArkWeb],[/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i,e.Blink],[/presto\/([\w.]+)/i,e.Presto],[/webkit\/([\w.]+)/i,e.WebKit],[/trident\/([\w.]+)/i,e.Trident],[/netfront\/([\w.]+)/i,e.NetFront],[/khtml[\/ ]\(?([\w.]+)/i,e.KHTML],[/tasman[\/ ]\(?([\w.]+)/i,e.Tasman],[/rv:([\w.]{1,9})\b.+gecko/i,e.Gecko]],d=[[/\b(?:crmo|crios)\/([\w.]+)/i,i.Chrome],[/webview.+edge\/([\w.]+)/i,i.Edge],[/edg(?:e|ios|a)?\/([\w.]+)/i,i.Edge],[/opera mini\/([-\w.]+)/i,i.Opera],[/opera [mobileta]{3,6}\b.+version\/([-\w.]+)/i,i.Opera],[/opera(?:.+version\/|[\/ ]+)([\w.]+)/i,i.Opera],[/opios[\/ ]+([\w.]+)/i,i.Opera],[/\bop(?:rg)?x\/([\w.]+)/i,i.Opera],[/\bopr\/([\w.]+)/i,i.Opera],[/iemobile(?:browser|boat|jet)[\/ ]?([\d.]*)/i,i.IE],[/(?:ms|\()ie ([\w.]+)/i,i.IE],[/trident.+rv[: ]([\w.]{1,9})\b.+like gecko/i,i.IE],[/\bfocus\/([\w.]+)/i,i.Firefox],[/\bopt\/([\w.]+)/i,i.Opera],[/coast\/([\w.]+)/i,i.Opera],[/fxios\/([\w.-]+)/i,i.Firefox],[/samsungbrowser\/([\w.]+)/i,i.SamsungInternet],[/headlesschrome(?:\/([\w.]+)| )/i,i.Chrome],[/wv\).+chrome\/([\w.]+).+edgw\//i,i.Edge],[/ wv\).+(chrome)\/([\w.]+)/i,i.Chrome],[/chrome\/([\w.]+) mobile/i,i.Chrome],[/chrome\/v?([\w.]+)/i,i.Chrome],[/version\/([\w.,]+) .*mobile(?:\/\w+ | ?)safari/i,i.Safari],[/iphone .*mobile(?:\/\w+ | ?)safari/i,i.Safari],[/version\/([\w.,]+) .*safari/i,i.Safari],[/webkit.+?(?:mobile ?safari|safari)(\/[\w.]+)/i,i.Safari,"1"],[/(?:mobile|tablet);.*firefox\/([\w.-]+)/i,i.Firefox],[/mobile vr; rv:([\w.]+)\).+firefox/i,i.Firefox],[/firefox\/([\w.]+)/i,i.Firefox]];function l(o){if(void 0===o)return"";var r={"4.90":"ME","NT3.51":"NT 3.11","NT4.0":"NT 4.0","NT 5.0":"2000","NT 5.1":"XP","NT 5.2":"XP","NT 6.0":"Vista","NT 6.1":"7","NT 6.2":"8","NT 6.3":"8.1","NT 6.4":"10","NT 10.0":"10",ARM:"RT"}[o];return void 0!==r?r:o}function w(o){return void 0===o?"":o.replace(/_/g,".")}function c(o,r){return 10===o.major&&0===o.minor&&o.build>=22e3?"11":10===o.major&&0===o.minor&&o.build<22e3?"10":6===o.major&&3===o.minor?"8.1":6===o.major&&2===o.minor?"8":6===o.major&&1===o.minor?"7":6===o.major&&0===o.minor?"Vista":5===o.major&&1===o.minor||5===o.major&&2===o.minor?"XP":5===o.major&&0===o.minor?"2000":4===o.major&&90===o.minor?"ME":4===o.major&&0===o.minor?"NT 4.0":3===o.major&&51===o.minor?"NT 3.11":r}function b(o,r){return"function"==typeof r?r(o):"string"==typeof r?r:void 0===o?"":o}function g(o){var r=o.split(".");return{major:parseInt(r[0]||"0"),minor:parseInt(r[1]||"0"),build:parseInt(r[2]||"0")}}(void 0!==globalThis.process&&void 0!==globalThis.process.versions&&void 0!==globalThis.process.versions.electron||/ electron\//i.test(a))&&(s.crossPlatformFramework=n.Electron),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product&&(s.crossPlatformFramework=n.ReactNative);for(var v=0;v<t.length;v++){var f=(j=t[v])[0],u=j[1],p=j[2];if(null!==(k=s.userAgent.match(f))){s.os=u,s.osVersion=b(k[1],p);break}}s.os===o.iOS&&0===function(o,r){for(var e=o.split("."),i=r.split("."),n=Math.max(e.length,i.length),a=0;a<n;a++){var s=void 0,t=void 0;if((s=a<e.length?parseInt(e[a],10):0)>(t=a<i.length?parseInt(i[a],10):0))return 1;if(s<t)return-1}return 0}(s.osVersion,"18.6")&&(null!==(E=/\) Version\/([\d.]+)/.exec(s.userAgent))&&parseInt(E[1].substring(0,2),10)>=26&&(s.osVersion=E[1]));for(v=0;v<m.length;v++){f=(j=m[v])[0];var h=j[1];p=j[2];if(null!==(k=s.userAgent.match(f))){s.engine=h,s.engineVersion=b(k[1],p);break}}for(v=0;v<d.length;v++){f=(j=d[v])[0];var j,k,T=j[1];p=j[2];if(null!==(k=s.userAgent.match(f))){s.browser=T,s.browserVersion=b(k[1],p);break}}if(s.crossPlatformFramework===n.ReactNative)try{u=(V=require("react-native").Platform).OS;var E=g(S=""+V.Version);switch(u){case"android":s.os=o.Android,s.osVersion=function(o,r){return o.major>=36?"16":35===o.major?"15":34===o.major?"14":33===o.major?"13":32===o.major?"12.1":31===o.major?"12":30===o.major?"11":29===o.major?"10":28===o.major?"9":27===o.major?"8.1":26===o.major?"8.0":25===o.major?"7.1":24===o.major?"7.0":23===o.major?"6.0":22===o.major?"5.1":21===o.major?"5.0":20===o.major||19===o.major?"4.4":18===o.major?"4.3":17===o.major?"4.2":16===o.major?"4.1":15===o.major?"4.0.3":14===o.major?"4.0":13===o.major?"3.2":12===o.major?"3.1":11===o.major?"3.0":10===o.major?"2.3.3":9===o.major?"2.3":8===o.major?"2.2":7===o.major?"2.1":6===o.major?"2.0.1":5===o.major?"2.0":4===o.major?"1.6":3===o.major?"1.5":2===o.major?"1.1":1===o.major?"1.0":r}(E,S);break;case"ios":s.os=o.iOS,s.osVersion=S;break;case"windows":s.os=o.Windows,s.osVersion=c(E,S);break;case"macos":s.os=o.MacOS,s.osVersion=S}}catch(o){}if(s.isNode)try{var S,V=(u=require("os")).platform();E=g(S=u.release());switch(V){case"win32":s.os=o.Windows,s.osVersion=c(E,S);break;case"darwin":s.os=o.MacOS,s.osVersion=function(o,r){return o.major>=24?o.major-9+"."+o.minor+"."+o.build:23===o.major?"14."+o.minor+"."+o.build:22===o.major?"13."+o.minor+"."+o.build:21===o.major?"12."+o.minor+"."+o.build:20===o.major?"11."+o.minor+"."+o.build:19===o.major?"10.15."+o.minor:18===o.major?"10.14."+o.minor:17===o.major?"10.13."+o.minor:16===o.major?"10.12."+o.minor:15===o.major?"10.11."+o.minor:14===o.major?"10.10."+o.minor:13===o.major?"10.9."+o.minor:o.major>=5&&o.major<=12?"10."+(o.major-4)+"."+o.minor:r}(E,S);break;case"android":s.os=o.Android,s.osVersion=S;break;case"linux":/android/i.test(S)&&(s.os=o.Android,s.osVersion=S)}}catch(o){}void 0!==globalThis.document&&globalThis.document.addEventListener("deviceready",(function(){if(s.crossPlatformFramework=n.Cordova,s.os===o.Unknown&&void 0!==globalThis.device){switch(globalThis.device.platform){case"Android":s.os=o.Android;break;case"iOS":s.os=o.iOS}s.osVersion=globalThis.device.version}}),!1),void 0!==navigator.userAgentData&&void 0!==navigator.userAgentData.getHighEntropyValues&&navigator.userAgentData.getHighEntropyValues(["brands","fullVersionList","mobile","model","platform","platformVersion","architecture","formFactors","bitness","uaFullVersion","wow64"]).then((function(r){for(var e,i=r.fullVersionList||r.brands||[],n=r.platformVersion,a=0;a<i.length;a++){var t=null==(e=i[a])?{brand:"",version:""}:"string"==typeof e?{brand:e,version:""}:{brand:e.brand,version:e.version},m=t.brand,d=t.version;/not.a.brand/i.test(m)||"Chromium"===m&&(s.engineVersion=d)}"string"==typeof n&&(s.os===o.Windows&&parseInt(n.replace(/[^\d.]/g,"").split(".")[0],10)>=13?s.osVersion="11":s.osVersion=n)})),s.device=s.os===o.iOS||s.os===o.Android?r.Mobile:s.os===o.Windows||s.os===o.MacOS?r.Desktop:r.Unknown,s.isMobile=s.device===r.Mobile,s.isDesktop=s.device===r.Desktop,s.isStandalone=function(r){return"matchMedia"in globalThis&&(r===o.iOS?"standalone"in navigator&&!!navigator.standalone:globalThis.matchMedia("(display-mode: standalone)").matches)}(s.os);var O={installed:!1,name:"Platform",module:s,Constants:{OS:o,Devices:r,Engines:e,Browsers:i,CrossPlatformFramework:n},Errors:{}};module.exports=O;
1
+ "use strict";var e,o,r,i,n;!function(e){e.Unknown="Unknown",e.Android="Android",e.iOS="iOS",e.Windows="Windows",e.MacOS="MacOS"}(e||(e={})),function(e){e.Unknown="Unknown",e.Mobile="Mobile",e.Desktop="Desktop"}(o||(o={})),function(e){e.Unknown="Unknown",e.EdgeHTML="EdgeHTML",e.ArkWeb="ArkWeb",e.Blink="Blink",e.Presto="Presto",e.WebKit="WebKit",e.Trident="Trident",e.NetFront="NetFront",e.KHTML="KHTML",e.Tasman="Tasman",e.Gecko="Gecko"}(r||(r={})),function(e){e.Unknown="Unknown",e.Chrome="Chrome",e.Safari="Safari",e.Edge="Edge",e.Firefox="Firefox",e.Opera="Opera",e.IE="IE",e.SamsungInternet="SamsungInternet"}(i||(i={})),function(e){e.Unknown="Unknown",e.ReactNative="ReactNative",e.Electron="Electron",e.Cordova="Cordova"}(n||(n={}));var a=void 0!==globalThis.navigator&&"string"==typeof globalThis.navigator.userAgent?globalThis.navigator.userAgent:"";var t={os:{name:e.Unknown,version:""},engine:{name:r.Unknown,version:""},browser:{name:i.Unknown,version:""},crossPlatformFramework:n.Unknown,userAgent:a,get network(){return function(){var o={isOnline:null,effectiveType:null,type:null,downlink:null,rtt:null,saveData:null};if(void 0!==globalThis.navigator){void 0!==globalThis.navigator.onLine&&(o.isOnline=globalThis.navigator.onLine);var r=globalThis.navigator.connection||globalThis.navigator.mozConnection||globalThis.navigator.webkitConnection;void 0!==r&&(void 0!==r.effectiveType&&(o.effectiveType=r.effectiveType),void 0!==r.type&&(o.type=r.type),void 0!==r.downlink&&(o.downlink=r.downlink),void 0!==r.rtt&&(o.rtt=r.rtt),void 0!==r.saveData&&(o.saveData=r.saveData))}if(t.isNode){try{for(var i=require("os").networkInterfaces(),n=Object.keys(i),a=0;a<n.length;a++){for(var s=i[n[a]],m=0;m<s.length;m++){var l=s[m];l.internal||"IPv4"!==l.family||(o.isOnline=!0)}if(o.isOnline)break}}catch(e){}try{var d=require("child_process");if(t.os.name===e.Windows){try{(c=d.execSync("netsh wlan show interfaces",{encoding:"utf8",timeout:5e3})).includes("State")&&c.includes("connected")&&(o.type="wifi")}catch(e){}if(null===o.type)try{(c=d.execSync("ipconfig",{encoding:"utf8",timeout:5e3})).includes("Ethernet adapter")&&(o.type="ethernet")}catch(e){}null===o.type&&(o.type="other")}else if(t.os.name===e.MacOS)try{var c=d.execSync("networksetup -listallhardwareports",{encoding:"utf8",timeout:5e3}),v=d.execSync("route -n get default | grep interface",{encoding:"utf8",timeout:5e3});v.includes("en0")&&c.includes("Wi-Fi")?o.type="wifi":v.includes("en")||c.includes("Ethernet")?o.type="ethernet":o.type="other"}catch(e){o.type="other"}}catch(e){}}return o}()},get device(){return this.os.name===e.iOS||this.os.name===e.Android?o.Mobile:this.os.name===e.Windows||this.os.name===e.MacOS?o.Desktop:o.Unknown},get renderer(){return function(){if(void 0===globalThis.document)return"";var e=globalThis.document.createElement("canvas");if("function"!=typeof e.getContext)return"";var o=e.getContext("webgl2")||e.getContext("experimental-webgl")||e.getContext("webgl");if(null===o)return"";if(o instanceof WebGLRenderingContext||"getParameter"in o&&"function"==typeof o.getParameter){var r=o.getExtension("WEBGL_debug_renderer_info");return null===r?o.getParameter(o.RENDERER):o.getParameter(r.UNMASKED_RENDERER_WEBGL)}return""}()},get isMobile(){return this.device===o.Mobile},get isDesktop(){return this.device===o.Desktop},get isWebview(){return/; ?wv|applewebkit(?!.*safari)/i.test(this.userAgent)},get isNode(){return void 0!==globalThis.process&&void 0!==globalThis.process.versions&&void 0!==globalThis.process.versions.node},get isStandalone(){return this.os.name===e.iOS?"standalone"in globalThis.navigator&&!!globalThis.navigator.standalone:"matchMedia"in globalThis&&globalThis.matchMedia("(display-mode: standalone)").matches}},s=[[/windows nt (6\.[23]); arm/i,e.Windows,c],[/windows (?:phone|mobile|iot)(?: os)?[\/ ]?([\d.]*( se)?)/i,e.Windows,c],[/windows[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i,e.Windows,c],[/windows nt ?([\d.)]*)(?!.+xbox)/i,e.Windows,c],[/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d.;]*)/i,e.Windows,c],[/windows ce\/?([\d.]*)/i,e.Windows,c],[/[adehimnop]{4,7}\b(?:.*os (\w+) like mac|; opera)/i,e.iOS,v],[/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w.]+)/i,e.iOS,v],[/cfnetwork\/.+darwin/i,e.iOS,v],[/mac os x ?([\w. ]*)/i,e.MacOS,v],[/(?:macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i,e.MacOS,v],[/droid ([\w.]+)\b.+(android[- ]x86)/i,e.Android],[/android\w*[-\/.; ]?([\d.]*)/i,e.Android]],m=[[/windows.+ edge\/([\w.]+)/i,r.EdgeHTML],[/arkweb\/([\w.]+)/i,r.ArkWeb],[/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i,r.Blink],[/presto\/([\w.]+)/i,r.Presto],[/webkit\/([\w.]+)/i,r.WebKit],[/trident\/([\w.]+)/i,r.Trident],[/netfront\/([\w.]+)/i,r.NetFront],[/khtml[\/ ]\(?([\w.]+)/i,r.KHTML],[/tasman[\/ ]\(?([\w.]+)/i,r.Tasman],[/rv:([\w.]{1,9})\b.+gecko/i,r.Gecko]],l=[[/\b(?:crmo|crios)\/([\w.]+)/i,i.Chrome],[/webview.+edge\/([\w.]+)/i,i.Edge],[/edg(?:e|ios|a)?\/([\w.]+)/i,i.Edge],[/opera mini\/([-\w.]+)/i,i.Opera],[/opera [mobileta]{3,6}\b.+version\/([-\w.]+)/i,i.Opera],[/opera(?:.+version\/|[\/ ]+)([\w.]+)/i,i.Opera],[/opios[\/ ]+([\w.]+)/i,i.Opera],[/\bop(?:rg)?x\/([\w.]+)/i,i.Opera],[/\bopr\/([\w.]+)/i,i.Opera],[/iemobile(?:browser|boat|jet)[\/ ]?([\d.]*)/i,i.IE],[/(?:ms|\()ie ([\w.]+)/i,i.IE],[/trident.+rv[: ]([\w.]{1,9})\b.+like gecko/i,i.IE],[/\bfocus\/([\w.]+)/i,i.Firefox],[/\bopt\/([\w.]+)/i,i.Opera],[/coast\/([\w.]+)/i,i.Opera],[/fxios\/([\w.-]+)/i,i.Firefox],[/samsungbrowser\/([\w.]+)/i,i.SamsungInternet],[/headlesschrome(?:\/([\w.]+)| )/i,i.Chrome],[/wv\).+chrome\/([\w.]+).+edgw\//i,i.Edge],[/ wv\).+(chrome)\/([\w.]+)/i,i.Chrome],[/chrome\/([\w.]+) mobile/i,i.Chrome],[/chrome\/v?([\w.]+)/i,i.Chrome],[/version\/([\w.,]+) .*mobile(?:\/\w+ | ?)safari/i,i.Safari],[/iphone .*mobile(?:\/\w+ | ?)safari/i,i.Safari],[/version\/([\w.,]+) .*safari/i,i.Safari],[/webkit.+?(?:mobile ?safari|safari)(\/[\w.]+)/i,i.Safari,"1"],[/(?:mobile|tablet);.*firefox\/([\w.-]+)/i,i.Firefox],[/mobile vr; rv:([\w.]+)\).+firefox/i,i.Firefox],[/firefox\/([\w.]+)/i,i.Firefox]],d={"Google Chrome":"Chrome","Microsoft Edge":"Edge","Microsoft Edge WebView2":"Edge WebView2","Android WebView":"Chrome WebView",HeadlessChrome:"Chrome Headless",OperaMobile:"Opera Mobi"};function c(e){if(void 0===e)return"";var o={"4.90":"ME","NT3.51":"NT 3.11","NT4.0":"NT 4.0","NT 5.0":"2000","NT 5.1":"XP","NT 5.2":"XP","NT 6.0":"Vista","NT 6.1":"7","NT 6.2":"8","NT 6.3":"8.1","NT 6.4":"10","NT 10.0":"10",ARM:"RT"}[e];return void 0!==o?o:e}function v(e){return void 0===e?"":e.replace(/_/g,".")}function w(e,o){return 10===e.major&&0===e.minor&&e.build>=22e3?"11":10===e.major&&0===e.minor&&e.build<22e3?"10":6===e.major&&3===e.minor?"8.1":6===e.major&&2===e.minor?"8":6===e.major&&1===e.minor?"7":6===e.major&&0===e.minor?"Vista":5===e.major&&1===e.minor||5===e.major&&2===e.minor?"XP":5===e.major&&0===e.minor?"2000":4===e.major&&90===e.minor?"ME":4===e.major&&0===e.minor?"NT 4.0":3===e.major&&51===e.minor?"NT 3.11":o}function g(e,o){return e.major>=24?e.major-9+"."+e.minor+"."+e.build:23===e.major?"14."+e.minor+"."+e.build:22===e.major?"13."+e.minor+"."+e.build:21===e.major?"12."+e.minor+"."+e.build:20===e.major?"11."+e.minor+"."+e.build:19===e.major?"10.15."+e.minor:18===e.major?"10.14."+e.minor:17===e.major?"10.13."+e.minor:16===e.major?"10.12."+e.minor:15===e.major?"10.11."+e.minor:14===e.major?"10.10."+e.minor:13===e.major?"10.9."+e.minor:e.major>=5&&e.major<=12?"10."+(e.major-4)+"."+e.minor:o}function b(e,o){return e.major>=36?"16":35===e.major?"15":34===e.major?"14":33===e.major?"13":32===e.major?"12.1":31===e.major?"12":30===e.major?"11":29===e.major?"10":28===e.major?"9":27===e.major?"8.1":26===e.major?"8.0":25===e.major?"7.1":24===e.major?"7.0":23===e.major?"6.0":22===e.major?"5.1":21===e.major?"5.0":20===e.major||19===e.major?"4.4":18===e.major?"4.3":17===e.major?"4.2":16===e.major?"4.1":15===e.major?"4.0.3":14===e.major?"4.0":13===e.major?"3.2":12===e.major?"3.1":11===e.major?"3.0":10===e.major?"2.3.3":9===e.major?"2.3":8===e.major?"2.2":7===e.major?"2.1":6===e.major?"2.0.1":5===e.major?"2.0":4===e.major?"1.6":3===e.major?"1.5":2===e.major?"1.1":1===e.major?"1.0":o}function u(e,o){return"function"==typeof o?o(e):"string"==typeof o?o:void 0===e?"":e}function f(e){var o=e.split(".");return{major:parseInt(o[0]||"0"),minor:parseInt(o[1]||"0"),build:parseInt(o[2]||"0")}}function h(){if(t.crossPlatformFramework=n.Cordova,void 0!==globalThis.device)switch(globalThis.device.platform){case"Android":t.os={name:e.Android,version:globalThis.device.version};break;case"iOS":t.os={name:e.iOS,version:globalThis.device.version}}}!function(){(void 0!==globalThis.process&&void 0!==globalThis.process.versions&&void 0!==globalThis.process.versions.electron||/ electron\//i.test(a))&&(t.crossPlatformFramework=n.Electron),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product&&(t.crossPlatformFramework=n.ReactNative);for(var r=0;r<s.length;r++){var c=(T=s[r])[0],v=T[1],p=T[2];if(null!==(E=t.userAgent.match(c))){t.os={name:v,version:u(E[1],p)};break}}var j;for(t.os.name===e.iOS&&0===function(e,o){for(var r=e.split("."),i=o.split("."),n=Math.max(r.length,i.length),a=0;a<n;a++){var t=void 0,s=void 0;if((t=a<r.length?parseInt(r[a],10):0)>(s=a<i.length?parseInt(i[a],10):0))return 1;if(t<s)return-1}return 0}(t.os.version,"18.6")&&null!==(O=/\) Version\/([\d.]+)/.exec(t.userAgent))&&parseInt(O[1].substring(0,2),10)>=26&&(t.os.version=O[1]),r=0;r<m.length;r++){c=(T=m[r])[0];var k=T[1];p=T[2];if(null!==(E=t.userAgent.match(c))){t.engine={name:k,version:u(E[1],p)};break}}for(r=0;r<l.length;r++){c=(T=l[r])[0];var T,E,y=T[1];p=T[2];if(null!==(E=t.userAgent.match(c))){t.browser={name:y,version:u(E[1],p)};break}}if(t.crossPlatformFramework===n.ReactNative)try{v=(x=require("react-native").Platform).OS;var O=f(S=""+x.Version);switch(v){case"android":t.os={name:e.Android,version:b(O,S)};break;case"ios":t.os={name:e.iOS,version:S};break;case"windows":t.os={name:e.Windows,version:w(O,S)};break;case"macos":t.os={name:e.MacOS,version:S}}}catch(e){}if(t.isNode)try{var S,x=(v=require("os")).platform();O=f(S=v.release());switch(x){case"win32":t.os={name:e.Windows,version:w(O,S)};break;case"darwin":t.os={name:e.MacOS,version:g(O,S)};break;case"android":t.os={name:e.Android,version:S};break;case"linux":/android/i.test(S)&&(t.os={name:e.Android,version:S})}}catch(e){}void 0!==globalThis.document&&(void 0!==globalThis.device?h():globalThis.document.addEventListener("deviceready",h,!1)),j=globalThis.navigator,void 0!==globalThis.navigator&&void 0!==j.userAgentData&&void 0!==j.userAgentData.getHighEntropyValues&&globalThis.navigator.userAgentData.getHighEntropyValues(["brands","fullVersionList","mobile","model","platform","platformVersion","architecture","formFactors","bitness","uaFullVersion","wow64"]).then((function(r){for(var n,a=r.fullVersionList||r.brands||[],s=r.platformVersion,m=r.platform,l=t.browser.name,c=null,v=0;v<a.length;v++){var w=null==(n=a[v])?{brand:"",version:""}:"string"==typeof n?{brand:n,version:""}:{brand:n.brand,version:n.version},g=w.version,b=w.brand;/not.a.brand/i.test(b)||((null===c||/Chrom/.test(c)&&"Chromium"!==b||"Edge"===c&&/WebView2/.test(b))&&(b=d[b]||b,null!==(c=l)&&!/Chrom/.test(c)&&/Chrom/.test(b)||("Chrome"===(l=b)||"Chrome WebView"===l||"Chrome Headless"===l?t.browser.name=i.Chrome:"Edge"===l||"Edge WebView2"===l?t.browser.name=i.Edge:"Opera Mobi"===l&&(t.browser.name=i.Opera),t.browser.version=g),c=b),"Chromium"===b&&(t.engine.version=g))}"string"==typeof s&&(t.os.name===e.Windows?t.os.version=parseInt(s.split(".")[0],10)>=13?"11":"10":t.os.version=s),"string"==typeof m&&(/android/i.test(m)?t.os.name=e.Android:/ios|iphone|ipad/i.test(m)?t.os.name=e.iOS:/windows|win32/i.test(m)?t.os.name=e.Windows:/macos|macintel/i.test(m)&&(t.os.name=e.MacOS)),!0===r.mobile&&(t.device=o.Mobile)}))}();var p={installed:!1,name:"Platform",module:t,Constants:{OS:e,Devices:o,Engines:r,Browsers:i,CrossPlatformFramework:n},Errors:{}};module.exports=p;