native-fn 1.0.42 → 1.0.44

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 (62) hide show
  1. package/dist/native.cjs +372 -11
  2. package/dist/native.min.cjs +1 -1
  3. package/dist/native.min.mjs +1 -1
  4. package/dist/native.mjs +372 -11
  5. package/dist/native.umd.js +372 -11
  6. package/dist/native.umd.min.js +1 -1
  7. package/dist/plugin/app/index.cjs +317 -151
  8. package/dist/plugin/app/index.d.ts +5 -1
  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 +317 -151
  12. package/dist/plugin/app/index.umd.js +317 -151
  13. package/dist/plugin/app/index.umd.min.js +1 -1
  14. package/dist/plugin/app/src/constants/platform.d.ts +3 -13
  15. package/dist/plugin/app/src/plugin/app/types/app.d.ts +4 -0
  16. package/dist/plugin/app/src/types/platform.d.ts +17 -0
  17. package/dist/plugin/app/src/utils/create-hidden-element.d.ts +1 -1
  18. package/dist/plugin/camera/index.cjs +253 -86
  19. package/dist/plugin/camera/index.min.cjs +1 -1
  20. package/dist/plugin/camera/index.min.mjs +1 -1
  21. package/dist/plugin/camera/index.mjs +253 -86
  22. package/dist/plugin/camera/index.umd.js +253 -86
  23. package/dist/plugin/camera/index.umd.min.js +1 -1
  24. package/dist/plugin/camera/src/constants/platform.d.ts +3 -13
  25. package/dist/plugin/camera/src/plugin/app/types/app.d.ts +4 -0
  26. package/dist/plugin/camera/src/types/platform.d.ts +17 -0
  27. package/dist/plugin/camera/src/utils/create-hidden-element.d.ts +1 -1
  28. package/dist/plugin/clipboard/index.cjs +6 -0
  29. package/dist/plugin/clipboard/index.min.cjs +1 -1
  30. package/dist/plugin/clipboard/index.min.mjs +1 -1
  31. package/dist/plugin/clipboard/index.mjs +6 -0
  32. package/dist/plugin/clipboard/index.umd.js +6 -0
  33. package/dist/plugin/clipboard/index.umd.min.js +1 -1
  34. package/dist/plugin/clipboard/src/constants/platform.d.ts +3 -13
  35. package/dist/plugin/clipboard/src/plugin/app/types/app.d.ts +4 -0
  36. package/dist/plugin/clipboard/src/types/platform.d.ts +17 -0
  37. package/dist/plugin/clipboard/src/utils/create-hidden-element.d.ts +1 -1
  38. package/dist/plugin/fullscreen/index.cjs +246 -82
  39. package/dist/plugin/fullscreen/index.min.cjs +1 -1
  40. package/dist/plugin/fullscreen/index.min.mjs +1 -1
  41. package/dist/plugin/fullscreen/index.mjs +246 -82
  42. package/dist/plugin/fullscreen/index.umd.js +246 -82
  43. package/dist/plugin/fullscreen/index.umd.min.js +1 -1
  44. package/dist/plugin/fullscreen/src/constants/platform.d.ts +3 -13
  45. package/dist/plugin/fullscreen/src/plugin/app/types/app.d.ts +4 -0
  46. package/dist/plugin/fullscreen/src/types/platform.d.ts +17 -0
  47. package/dist/plugin/fullscreen/src/utils/create-hidden-element.d.ts +1 -1
  48. package/dist/plugin/theme/index.cjs +257 -91
  49. package/dist/plugin/theme/index.min.cjs +1 -1
  50. package/dist/plugin/theme/index.min.mjs +1 -1
  51. package/dist/plugin/theme/index.mjs +257 -91
  52. package/dist/plugin/theme/index.umd.js +257 -91
  53. package/dist/plugin/theme/index.umd.min.js +1 -1
  54. package/dist/plugin/theme/src/constants/platform.d.ts +3 -13
  55. package/dist/plugin/theme/src/plugin/app/types/app.d.ts +4 -0
  56. package/dist/plugin/theme/src/types/platform.d.ts +17 -0
  57. package/dist/plugin/theme/src/utils/create-hidden-element.d.ts +1 -1
  58. package/dist/src/constants/platform.d.ts +3 -13
  59. package/dist/src/plugin/app/types/app.d.ts +4 -0
  60. package/dist/src/types/platform.d.ts +17 -0
  61. package/dist/src/utils/create-hidden-element.d.ts +1 -1
  62. package/package.json +1 -8
@@ -19,7 +19,28 @@
19
19
  MessengerType["Mail"] = "mail";
20
20
  })(MessengerType || (MessengerType = {}));
21
21
 
22
- var USER_AGENT = navigator.userAgent;
22
+ function dynamicImport(moduleName) {
23
+ if ('require' in globalThis && typeof globalThis.require === 'function') {
24
+ try {
25
+ return Promise.resolve(globalThis.require(moduleName));
26
+ }
27
+ catch (_) {
28
+ return Promise.resolve(null);
29
+ }
30
+ }
31
+ try {
32
+ return import(moduleName)
33
+ .then(function (module) {
34
+ return (module.default || module);
35
+ })
36
+ .catch(function () {
37
+ return Promise.resolve(null);
38
+ });
39
+ }
40
+ catch (_) {
41
+ return Promise.resolve(null);
42
+ }
43
+ }
23
44
 
24
45
  var OS;
25
46
  (function (OS) {
@@ -60,42 +81,22 @@
60
81
  Browsers["IE"] = "IE";
61
82
  Browsers["SamsungInternet"] = "SamsungInternet";
62
83
  })(Browsers || (Browsers = {}));
63
- function resolveWindowsVersion(string) {
64
- if (string === undefined)
65
- return '';
66
- var mapped = {
67
- '4.90': 'ME',
68
- 'NT3.51': 'NT 3.11',
69
- 'NT4.0': 'NT 4.0',
70
- 'NT 5.0': '2000',
71
- 'NT 5.1': 'XP',
72
- 'NT 5.2': 'XP',
73
- 'NT 6.0': 'Vista',
74
- 'NT 6.1': '7',
75
- 'NT 6.2': '8',
76
- 'NT 6.3': '8.1',
77
- 'NT 6.4': '10',
78
- 'NT 10.0': '10',
79
- 'ARM': 'RT'
80
- }[string];
81
- if (mapped !== undefined)
82
- return mapped;
83
- return string;
84
- }
85
- function resolveUnderscoreVersion(string) {
86
- if (string === undefined)
87
- return '';
88
- return string.replace(/_/g, '.');
89
- }
90
- function resolveVersion(string, resolver) {
91
- if (typeof resolver === 'function')
92
- return resolver(string);
93
- if (typeof resolver === 'string')
94
- return resolver;
95
- if (string === undefined)
96
- return '';
97
- return string;
98
- }
84
+ var Platform = {
85
+ device: Devices.Unknown,
86
+ os: OS.Unknown,
87
+ osVersion: '',
88
+ engine: Engines.Unknown,
89
+ engineVersion: '',
90
+ browser: Browsers.Unknown,
91
+ browserVersion: '',
92
+ renderer: getRenderer(),
93
+ userAgent: navigator.userAgent,
94
+ isWebview: false,
95
+ isMobile: false,
96
+ isDesktop: false,
97
+ isStandalone: false,
98
+ isNodeJS: getIsNode(),
99
+ };
99
100
  var OS_RESOLVER_MAP = [
100
101
  [/windows nt (6\.[23]); arm/i, OS.Windows, resolveWindowsVersion],
101
102
  [/windows (?:phone|mobile|iot)(?: os)?[\/ ]?([\d.]*( se)?)/i, OS.Windows, resolveWindowsVersion],
@@ -154,36 +155,115 @@
154
155
  [/mobile vr; rv:([\w.]+)\).+firefox/i, Browsers.Firefox],
155
156
  [/firefox\/([\w.]+)/i, Browsers.Firefox],
156
157
  ];
157
- var DEVICE_NAME = Devices.Unknown;
158
- var OS_NAME = OS.Unknown;
159
- var OS_VERSION = '';
160
- Engines.Unknown;
161
- var BROWSER_NAME = Browsers.Unknown;
162
- var BROWSER_VERSION = '';
158
+ function resolveWindowsVersion(string) {
159
+ if (string === undefined)
160
+ return '';
161
+ var mapped = {
162
+ '4.90': 'ME',
163
+ 'NT3.51': 'NT 3.11',
164
+ 'NT4.0': 'NT 4.0',
165
+ 'NT 5.0': '2000',
166
+ 'NT 5.1': 'XP',
167
+ 'NT 5.2': 'XP',
168
+ 'NT 6.0': 'Vista',
169
+ 'NT 6.1': '7',
170
+ 'NT 6.2': '8',
171
+ 'NT 6.3': '8.1',
172
+ 'NT 6.4': '10',
173
+ 'NT 10.0': '10',
174
+ 'ARM': 'RT'
175
+ }[string];
176
+ if (mapped !== undefined)
177
+ return mapped;
178
+ return string;
179
+ }
180
+ function resolveUnderscoreVersion(string) {
181
+ if (string === undefined)
182
+ return '';
183
+ return string.replace(/_/g, '.');
184
+ }
185
+ function resolveVersion(string, resolver) {
186
+ if (typeof resolver === 'function')
187
+ return resolver(string);
188
+ if (typeof resolver === 'string')
189
+ return resolver;
190
+ if (string === undefined)
191
+ return '';
192
+ return string;
193
+ }
194
+ function normalizeBrand(entry) {
195
+ if (entry === null || entry === undefined)
196
+ return { brand: '', version: '' };
197
+ if (typeof entry === 'string')
198
+ return { brand: entry, version: '' };
199
+ return { brand: entry.brand, version: entry.version };
200
+ }
201
+ function getRenderer() {
202
+ if (typeof globalThis.document === 'undefined')
203
+ return '';
204
+ var canvas = globalThis.document.createElement('canvas');
205
+ if (typeof canvas.getContext !== 'function')
206
+ return '';
207
+ var context = canvas.getContext('webgl2') || canvas.getContext('experimental-webgl') || canvas.getContext('webgl');
208
+ if (context === null)
209
+ return '';
210
+ if (context instanceof WebGLRenderingContext || 'getParameter' in context && typeof context.getParameter === 'function') {
211
+ var extension = context.getExtension('WEBGL_debug_renderer_info');
212
+ if (extension === null)
213
+ return context.getParameter(context.RENDERER);
214
+ else
215
+ return context.getParameter(extension.UNMASKED_RENDERER_WEBGL);
216
+ }
217
+ else {
218
+ return '';
219
+ }
220
+ }
221
+ function getIsStandalone(os) {
222
+ if (!('matchMedia' in globalThis))
223
+ return false;
224
+ if (os === OS.iOS)
225
+ return 'standalone' in navigator && !!navigator.standalone;
226
+ return globalThis.matchMedia('(display-mode: standalone)').matches;
227
+ }
228
+ function getIsWebview() {
229
+ return /; ?wv|applewebkit(?!.*safari)/i.test(Platform.userAgent);
230
+ }
231
+ function getIsNode() {
232
+ return typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && globalThis.process.versions.node !== undefined;
233
+ }
234
+ function getNodeOSVersion(string) {
235
+ var parts = string.split('.');
236
+ return {
237
+ major: parseInt(parts[0] || '0'),
238
+ minor: parseInt(parts[1] || '0'),
239
+ build: parseInt(parts[2] || '0')
240
+ };
241
+ }
163
242
  for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
164
243
  var map = OS_RESOLVER_MAP[i];
165
244
  var regexp = map[0];
166
245
  var os = map[1];
167
246
  var resolver = map[2];
168
- var matched = USER_AGENT.match(regexp);
247
+ var matched = Platform.userAgent.match(regexp);
169
248
  if (matched !== null) {
170
- OS_NAME = os;
171
- OS_VERSION = resolveVersion(matched[1], resolver);
249
+ Platform.os = os;
250
+ Platform.osVersion = resolveVersion(matched[1], resolver);
172
251
  if (os === OS.iOS || os === OS.Android)
173
- DEVICE_NAME = Devices.Mobile;
252
+ Platform.device = Devices.Mobile;
174
253
  else if (os === OS.Windows || os === OS.MacOS)
175
- DEVICE_NAME = Devices.Desktop;
254
+ Platform.device = Devices.Desktop;
176
255
  break;
177
256
  }
178
257
  }
179
258
  for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
180
259
  var map = ENGINE_RESOLVER_MAP[i];
181
260
  var regexp = map[0];
182
- map[1];
261
+ var engine = map[1];
183
262
  var resolver = map[2];
184
- var matched = USER_AGENT.match(regexp);
263
+ var matched = Platform.userAgent.match(regexp);
185
264
  if (matched !== null) {
186
- resolveVersion(matched[1], resolver);
265
+ Platform.engine = engine;
266
+ Platform.engineVersion = resolveVersion(matched[1], resolver);
187
267
  break;
188
268
  }
189
269
  }
@@ -192,42 +272,123 @@
192
272
  var regexp = map[0];
193
273
  var browser = map[1];
194
274
  var resolver = map[2];
195
- var matched = USER_AGENT.match(regexp);
275
+ var matched = Platform.userAgent.match(regexp);
196
276
  if (matched !== null) {
197
- BROWSER_NAME = browser;
198
- BROWSER_VERSION = resolveVersion(matched[1], resolver);
277
+ Platform.browser = browser;
278
+ Platform.browserVersion = resolveVersion(matched[1], resolver);
199
279
  break;
200
280
  }
201
281
  }
202
- ((function () {
203
- if (typeof globalThis.document === 'undefined')
204
- return '';
205
- var canvas = globalThis.document.createElement('canvas');
206
- if (typeof canvas.getContext !== 'function')
207
- return '';
208
- var context = canvas.getContext('webgl2') || canvas.getContext('experimental-webgl') || canvas.getContext('webgl');
209
- if (context === null)
210
- return '';
211
- if (context instanceof WebGLRenderingContext || 'getParameter' in context && typeof context.getParameter === 'function') {
212
- var extension = context.getExtension('WEBGL_debug_renderer_info');
213
- if (extension === null)
214
- return context.getParameter(context.RENDERER);
215
- else
216
- return context.getParameter(extension.UNMASKED_RENDERER_WEBGL);
217
- }
218
- else {
219
- return '';
220
- }
221
- }))();
222
- DEVICE_NAME === Devices.Mobile;
223
- DEVICE_NAME === Devices.Desktop;
224
- ((function () {
225
- if (!('matchMedia' in globalThis))
226
- return false;
227
- if (OS_NAME === OS.iOS)
228
- return 'standalone' in navigator && !!navigator.standalone;
229
- return globalThis.matchMedia('(display-mode: standalone)').matches;
230
- }))();
282
+ if (Platform.isNodeJS) {
283
+ dynamicImport('os')
284
+ .then(function (os) {
285
+ if (os === null)
286
+ return;
287
+ var platform = os.platform();
288
+ var release = os.release();
289
+ var version = getNodeOSVersion(release);
290
+ switch (platform) {
291
+ case 'win32':
292
+ Platform.os = OS.Windows;
293
+ if (version.major === 10 && version.minor === 0 && version.build >= 22000)
294
+ Platform.osVersion = '11';
295
+ else if (version.major === 10 && version.minor === 0 && version.build < 22000)
296
+ Platform.osVersion = '10';
297
+ else if (version.major === 6 && version.minor === 3)
298
+ Platform.osVersion = '8.1';
299
+ else if (version.major === 6 && version.minor === 2)
300
+ Platform.osVersion = '8';
301
+ else if (version.major === 6 && version.minor === 1)
302
+ Platform.osVersion = '7';
303
+ else if (version.major === 6 && version.minor === 0)
304
+ Platform.osVersion = 'Vista';
305
+ else if (version.major === 5 && version.minor === 1)
306
+ Platform.osVersion = 'XP';
307
+ else if (version.major === 5 && version.minor === 2)
308
+ Platform.osVersion = 'XP';
309
+ else if (version.major === 5 && version.minor === 0)
310
+ Platform.osVersion = '2000';
311
+ else if (version.major === 4 && version.minor === 90)
312
+ Platform.osVersion = 'ME';
313
+ else if (version.major === 4 && version.minor === 0)
314
+ Platform.osVersion = 'NT 4.0';
315
+ else if (version.major === 3 && version.minor === 51)
316
+ Platform.osVersion = 'NT 3.11';
317
+ else
318
+ Platform.osVersion = release;
319
+ break;
320
+ case 'darwin':
321
+ Platform.os = OS.MacOS;
322
+ if (version.major >= 24)
323
+ Platform.osVersion = '' + (version.major - 9) + '.' + version.minor + '.' + version.build;
324
+ else if (version.major === 23)
325
+ Platform.osVersion = '14.' + version.minor + '.' + version.build;
326
+ else if (version.major === 22)
327
+ Platform.osVersion = '13.' + version.minor + '.' + version.build;
328
+ else if (version.major === 21)
329
+ Platform.osVersion = '12.' + version.minor + '.' + version.build;
330
+ else if (version.major === 20)
331
+ Platform.osVersion = '11.' + version.minor + '.' + version.build;
332
+ else if (version.major === 19)
333
+ Platform.osVersion = '10.15.' + version.minor;
334
+ else if (version.major === 18)
335
+ Platform.osVersion = '10.14.' + version.minor;
336
+ else if (version.major === 17)
337
+ Platform.osVersion = '10.13.' + version.minor;
338
+ else if (version.major === 16)
339
+ Platform.osVersion = '10.12.' + version.minor;
340
+ else if (version.major === 15)
341
+ Platform.osVersion = '10.11.' + version.minor;
342
+ else if (version.major === 14)
343
+ Platform.osVersion = '10.10.' + version.minor;
344
+ else if (version.major === 13)
345
+ Platform.osVersion = '10.9.' + version.minor;
346
+ else if (version.major >= 5 && version.major <= 12)
347
+ Platform.osVersion = '10.' + (version.major - 4) + '.' + version.minor;
348
+ else
349
+ Platform.osVersion = release;
350
+ break;
351
+ case 'android':
352
+ Platform.os = OS.Android;
353
+ Platform.osVersion = release;
354
+ break;
355
+ case 'linux':
356
+ if (/android/i.test(release)) {
357
+ Platform.os = OS.Android;
358
+ Platform.osVersion = release;
359
+ }
360
+ break;
361
+ }
362
+ });
363
+ }
364
+ if (navigator.userAgentData !== undefined && navigator.userAgentData.getHighEntropyValues !== undefined) {
365
+ navigator
366
+ .userAgentData
367
+ .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])
368
+ .then(function (result) {
369
+ var brands = result.fullVersionList || result.brands || [];
370
+ var platformVersion = result.platformVersion;
371
+ for (var i = 0; i < brands.length; i++) {
372
+ var brand = normalizeBrand(brands[i]);
373
+ var brandName = brand.brand;
374
+ var brandVersion = brand.version;
375
+ if (/not.a.brand/i.test(brandName))
376
+ continue;
377
+ if (brandName === "Chromium")
378
+ Platform.engineVersion = brandVersion;
379
+ }
380
+ if (typeof platformVersion === 'string') {
381
+ if (Platform.os === OS.Windows && parseInt(platformVersion.replace(/[^\d.]/g, '').split('.')[0], 10) >= 13)
382
+ Platform.osVersion = '11';
383
+ else
384
+ Platform.osVersion = platformVersion;
385
+ }
386
+ });
387
+ }
388
+ Platform.isMobile = Platform.device === Devices.Mobile;
389
+ Platform.isDesktop = Platform.device === Devices.Desktop;
390
+ Platform.isWebview = getIsWebview();
391
+ Platform.isStandalone = getIsStandalone(Platform.os);
231
392
 
232
393
  function capitalize(match) {
233
394
  var groups = [];
@@ -402,6 +563,8 @@
402
563
 
403
564
  function createHiddenElement(tagName, focusable) {
404
565
  if (focusable === void 0) { focusable = true; }
566
+ if (typeof globalThis.document === 'undefined')
567
+ return undefined;
405
568
  var element = globalThis.document.createElement(tagName);
406
569
  if ('width' in element)
407
570
  element.width = '0';
@@ -485,6 +648,8 @@
485
648
  return;
486
649
  }
487
650
  a = createHiddenElement('a');
651
+ if (a === undefined)
652
+ return;
488
653
  a.href = url;
489
654
  document.body.appendChild(a);
490
655
  dispatchClickEvent(a, top);
@@ -506,6 +671,8 @@
506
671
  var iframe = undefined;
507
672
  try {
508
673
  iframe = createHiddenElement('iframe');
674
+ if (iframe === undefined)
675
+ return;
509
676
  iframe.src = url;
510
677
  top.document.body.appendChild(iframe);
511
678
  globalThis.setTimeout(function () {
@@ -575,6 +742,8 @@
575
742
  var input = undefined;
576
743
  try {
577
744
  input = createHiddenElement('input');
745
+ if (input === undefined)
746
+ return false;
578
747
  input.type = 'text';
579
748
  input.readOnly = true;
580
749
  document.body.appendChild(input);
@@ -610,8 +779,8 @@
610
779
  var document = top.document;
611
780
  var eventType = { focus: undefined, blur: undefined, visibilitychange: undefined };
612
781
  var eventTarget = { focus: undefined, blur: undefined, visibilitychange: undefined };
613
- if (OS_NAME === OS.iOS) {
614
- if (compareVersion(OS_VERSION, '8.0') >= 0) {
782
+ if (Platform.os === OS.iOS) {
783
+ if (compareVersion(Platform.osVersion, '8.0') >= 0) {
615
784
  eventTarget = { visibilitychange: document };
616
785
  eventType = { visibilitychange: 'visibilitychange' };
617
786
  }
@@ -864,7 +1033,7 @@
864
1033
  case OS.MacOS:
865
1034
  return 'macappstore://itunes.apple.com/app/id' + packageName + '?mt=12';
866
1035
  default:
867
- throw new URLOpenError('Unsupported OS: \"' + USER_AGENT + '\"');
1036
+ throw new URLOpenError('Unsupported OS: \"' + Platform.userAgent + '\"');
868
1037
  }
869
1038
  }
870
1039
  function createWebStoreURL(packageName, os) {
@@ -880,7 +1049,7 @@
880
1049
  case OS.MacOS:
881
1050
  return 'https://apps.apple.com/app/id' + packageName + '?mt=12';
882
1051
  default:
883
- throw new URLOpenError('Unsupported OS: \"' + USER_AGENT + '\"');
1052
+ throw new URLOpenError('Unsupported OS: \"' + Platform.userAgent + '\"');
884
1053
  }
885
1054
  }
886
1055
  function getDefaultTimeoutByOS(os) {
@@ -894,26 +1063,26 @@
894
1063
  }
895
1064
  }
896
1065
  function canOpenIntentURL() {
897
- if (OS_NAME !== OS.Android)
1066
+ if (Platform.os !== OS.Android)
898
1067
  return false;
899
- if (BROWSER_NAME === Browsers.SamsungInternet && compareVersion(BROWSER_VERSION, '17.0.1.69') >= 0 && compareVersion(BROWSER_VERSION, '17.0.7.34') < 0)
1068
+ if (Platform.browser === Browsers.SamsungInternet && compareVersion(Platform.browserVersion, '17.0.1.69') >= 0 && compareVersion(Platform.browserVersion, '17.0.7.34') < 0)
900
1069
  return false;
901
- if (BROWSER_NAME === Browsers.Firefox && compareVersion(BROWSER_VERSION, '41.0') < 0)
1070
+ if (Platform.browser === Browsers.Firefox && compareVersion(Platform.browserVersion, '41.0') < 0)
902
1071
  return false;
903
- if (BROWSER_NAME === Browsers.Firefox && compareVersion(BROWSER_VERSION, '58.0') >= 0 && compareVersion(BROWSER_VERSION, '68.11.0') < 0)
1072
+ if (Platform.browser === Browsers.Firefox && compareVersion(Platform.browserVersion, '58.0') >= 0 && compareVersion(Platform.browserVersion, '68.11.0') < 0)
904
1073
  return false;
905
- if (BROWSER_NAME === Browsers.Firefox && compareVersion(BROWSER_VERSION, '79.0') >= 0 && compareVersion(BROWSER_VERSION, '81.2.0') < 0)
1074
+ if (Platform.browser === Browsers.Firefox && compareVersion(Platform.browserVersion, '79.0') >= 0 && compareVersion(Platform.browserVersion, '81.2.0') < 0)
906
1075
  return false;
907
- if (BROWSER_NAME === Browsers.Firefox && compareVersion(BROWSER_VERSION, '96.0') >= 0 && compareVersion(BROWSER_VERSION, '107.0') < 0)
1076
+ if (Platform.browser === Browsers.Firefox && compareVersion(Platform.browserVersion, '96.0') >= 0 && compareVersion(Platform.browserVersion, '107.0') < 0)
908
1077
  return false;
909
- if (BROWSER_NAME === Browsers.Opera && compareVersion(BROWSER_VERSION, '14.0') < 0)
1078
+ if (Platform.browser === Browsers.Opera && compareVersion(Platform.browserVersion, '14.0') < 0)
910
1079
  return false;
911
- if (/(?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/[\w.]+;/i.test(USER_AGENT) || /instagram[\/ ][-\w.]+/i.test(USER_AGENT) || /micromessenger\/([\w.]+)/i.test(USER_AGENT) || /musical_ly(?:.+app_?version\/|_)[\w.]+/i.test(USER_AGENT) || /ultralite app_version\/[\w.]+/i.test(USER_AGENT))
1080
+ if (/(?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/[\w.]+;/i.test(Platform.userAgent) || /instagram[\/ ][-\w.]+/i.test(Platform.userAgent) || /micromessenger\/([\w.]+)/i.test(Platform.userAgent) || /musical_ly(?:.+app_?version\/|_)[\w.]+/i.test(Platform.userAgent) || /ultralite app_version\/[\w.]+/i.test(Platform.userAgent))
912
1081
  return false;
913
1082
  return true;
914
1083
  }
915
1084
  function canOpenUniversalURL() {
916
- return OS_NAME === OS.iOS && compareVersion(OS_VERSION, '9.0') >= 0;
1085
+ return Platform.os === OS.iOS && compareVersion(Platform.osVersion, '9.0') >= 0;
917
1086
  }
918
1087
  function getURLOpenError(tried) {
919
1088
  var triedUrlString = '';
@@ -924,87 +1093,84 @@
924
1093
  return new URLOpenError('Failed to open any of the provided URLs: ' + triedUrlString);
925
1094
  }
926
1095
  function open(options) {
927
- var os = OS_NAME;
1096
+ var os = Platform.os;
928
1097
  var urls = [];
929
1098
  var tried = [];
1099
+ var infos = {};
930
1100
  var timeout;
931
1101
  if (os === OS.Android) {
932
1102
  var option = options[OS.Android];
933
1103
  if (option === undefined)
934
1104
  return Promise.reject(getURLOpenError(tried));
935
1105
  timeout = option.timeout;
936
- var scheme = urlToString(option.scheme);
937
- var intent = urlToString(option.intent);
938
- var packageName = option.packageName;
939
- var fallback = urlToString(option.fallback);
940
- var allowWebStore = option.allowWebStore;
941
- if (intent !== undefined && (scheme === undefined || packageName === undefined || fallback === undefined)) {
942
- var parsed = parseIntentURL(intent);
943
- if (parsed.scheme !== undefined && scheme === undefined)
944
- scheme = parsed.scheme;
945
- if (parsed.packageName !== undefined && packageName === undefined)
946
- packageName = parsed.packageName;
947
- if (parsed.fallback !== undefined && fallback === undefined)
948
- fallback = parsed.fallback;
1106
+ infos.scheme = urlToString(option.scheme);
1107
+ infos.intent = urlToString(option.intent);
1108
+ infos.packageName = option.packageName;
1109
+ infos.fallback = urlToString(option.fallback);
1110
+ infos.appStore = createAppStoreURL(infos.packageName, OS.Android);
1111
+ infos.webStore = createWebStoreURL(infos.packageName, OS.Android);
1112
+ infos.allowWebStore = option.allowWebStore;
1113
+ if (infos.intent !== undefined && (infos.scheme === undefined || infos.packageName === undefined || infos.fallback === undefined)) {
1114
+ var parsed = parseIntentURL(infos.intent);
1115
+ if (parsed.scheme !== undefined && infos.scheme === undefined)
1116
+ infos.scheme = parsed.scheme;
1117
+ if (parsed.packageName !== undefined && infos.packageName === undefined)
1118
+ infos.packageName = parsed.packageName;
1119
+ if (parsed.fallback !== undefined && infos.fallback === undefined)
1120
+ infos.fallback = parsed.fallback;
949
1121
  }
950
- if (scheme !== undefined && intent === undefined)
951
- intent = createIntentURL(scheme, packageName, fallback);
952
- pushUrl(urls, intent, AppOpenState.Intent, canOpenIntentURL());
953
- pushUrl(urls, scheme, AppOpenState.Scheme);
954
- pushUrl(urls, fallback, AppOpenState.Fallback);
955
- pushUrl(urls, createAppStoreURL(packageName, OS.Android), AppOpenState.Store);
956
- pushUrl(urls, createWebStoreURL(packageName, OS.Android), AppOpenState.Store, allowWebStore);
1122
+ if (infos.scheme !== undefined && infos.intent === undefined)
1123
+ infos.intent = createIntentURL(infos.scheme, infos.packageName, infos.fallback);
957
1124
  }
958
1125
  else if (os === OS.iOS) {
959
1126
  var option = options[OS.iOS];
960
1127
  if (option === undefined)
961
1128
  return Promise.reject(getURLOpenError(tried));
962
1129
  timeout = option.timeout;
963
- var scheme = urlToString(option.scheme);
964
- var packageName = option.bundleId;
965
- var trackId = option.trackId;
966
- var universal = urlToString(option.universal);
967
- var fallback = urlToString(option.fallback);
968
- var allowWebStore = option.allowWebStore;
969
- if (packageName !== undefined && trackId === undefined)
970
- trackId = getTrackId(packageName);
971
- pushUrl(urls, universal, AppOpenState.Universal, canOpenUniversalURL());
972
- pushUrl(urls, scheme, AppOpenState.Scheme);
973
- pushUrl(urls, fallback, AppOpenState.Fallback);
974
- pushUrl(urls, createAppStoreURL(trackId, OS.iOS), AppOpenState.Store);
975
- pushUrl(urls, createWebStoreURL(trackId, OS.iOS), AppOpenState.Store, allowWebStore);
1130
+ infos.scheme = urlToString(option.scheme);
1131
+ infos.bundleId = option.bundleId;
1132
+ infos.trackId = option.trackId;
1133
+ infos.universal = urlToString(option.universal);
1134
+ infos.fallback = urlToString(option.fallback);
1135
+ infos.appStore = createAppStoreURL(infos.trackId, OS.iOS);
1136
+ infos.webStore = createWebStoreURL(infos.trackId, OS.iOS);
1137
+ infos.allowWebStore = option.allowWebStore;
1138
+ if (infos.bundleId !== undefined && infos.trackId === undefined)
1139
+ infos.trackId = getTrackId(infos.bundleId);
976
1140
  }
977
1141
  else if (os === OS.Windows) {
978
1142
  var option = options[OS.Windows];
979
1143
  if (option === undefined)
980
1144
  return Promise.reject(getURLOpenError(tried));
981
1145
  timeout = option.timeout;
982
- var scheme = urlToString(option.scheme);
983
- var productId = option.productId;
984
- var fallback = urlToString(option.fallback);
985
- var allowWebStore = option.allowWebStore;
986
- pushUrl(urls, scheme, AppOpenState.Scheme);
987
- pushUrl(urls, fallback, AppOpenState.Fallback);
988
- pushUrl(urls, createAppStoreURL(productId, OS.Windows), AppOpenState.Store);
989
- pushUrl(urls, createWebStoreURL(productId, OS.Windows), AppOpenState.Store, allowWebStore);
1146
+ infos.scheme = urlToString(option.scheme);
1147
+ infos.productId = option.productId;
1148
+ infos.fallback = urlToString(option.fallback);
1149
+ infos.appStore = createAppStoreURL(infos.productId, OS.Windows);
1150
+ infos.webStore = createWebStoreURL(infos.productId, OS.Windows);
1151
+ infos.allowWebStore = option.allowWebStore;
990
1152
  }
991
1153
  else if (os === OS.MacOS) {
992
1154
  var option = options[OS.MacOS];
993
1155
  if (option === undefined)
994
1156
  return Promise.reject(getURLOpenError(tried));
995
1157
  timeout = option.timeout;
996
- var scheme = urlToString(option.scheme);
997
- var packageName = option.bundleId;
998
- var trackId = option.trackId;
999
- var fallback = urlToString(option.fallback);
1000
- var allowWebStore = option.allowWebStore;
1001
- if (packageName !== undefined && trackId === undefined)
1002
- trackId = getTrackId(packageName);
1003
- pushUrl(urls, scheme, AppOpenState.Scheme);
1004
- pushUrl(urls, fallback, AppOpenState.Fallback);
1005
- pushUrl(urls, createAppStoreURL(trackId, OS.MacOS), AppOpenState.Store);
1006
- pushUrl(urls, createWebStoreURL(trackId, OS.MacOS), AppOpenState.Store, allowWebStore);
1158
+ infos.scheme = urlToString(option.scheme);
1159
+ infos.bundleId = option.bundleId;
1160
+ infos.trackId = option.trackId;
1161
+ infos.fallback = urlToString(option.fallback);
1162
+ infos.appStore = createAppStoreURL(infos.trackId, OS.MacOS);
1163
+ infos.webStore = createWebStoreURL(infos.trackId, OS.MacOS);
1164
+ infos.allowWebStore = option.allowWebStore;
1165
+ if (infos.bundleId !== undefined && infos.trackId === undefined)
1166
+ infos.trackId = getTrackId(infos.bundleId);
1007
1167
  }
1168
+ pushUrl(urls, infos.intent, AppOpenState.Intent, canOpenIntentURL());
1169
+ pushUrl(urls, infos.universal, AppOpenState.Universal, canOpenUniversalURL());
1170
+ pushUrl(urls, infos.scheme, AppOpenState.Scheme);
1171
+ pushUrl(urls, infos.fallback, AppOpenState.Fallback);
1172
+ pushUrl(urls, infos.appStore, AppOpenState.Store);
1173
+ pushUrl(urls, infos.webStore, AppOpenState.Store, infos.allowWebStore);
1008
1174
  if (timeout === undefined)
1009
1175
  timeout = getDefaultTimeoutByOS(os);
1010
1176
  return new Promise(function (resolve, reject) {
@@ -1036,7 +1202,7 @@
1036
1202
  }
1037
1203
  function pushUrl(urls, url, state, condition) {
1038
1204
  if (condition === void 0) { condition = true; }
1039
- if (url !== undefined && condition)
1205
+ if ((typeof url === 'function' || typeof url === 'string') && condition)
1040
1206
  urls.push([state, url]);
1041
1207
  }
1042
1208
  function isArrayLike(value) {
@@ -1164,7 +1330,7 @@
1164
1330
  + '?cc=' + options.cc
1165
1331
  + '&bcc=' + options.bcc
1166
1332
  + '&subject=' + options.subject
1167
- + '&body=' + options.body, 0, getDefaultTimeoutByOS(OS_NAME));
1333
+ + '&body=' + options.body, 0, getDefaultTimeoutByOS(Platform.os));
1168
1334
  }
1169
1335
  function openMessengerTelephone(options) {
1170
1336
  return openMessenger(options, 'tel');