native-fn
Version:
4 lines • 123 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/polyfill/promise.min.js", "../src/index.js", "../src/utils/freeze.js", "../src/os.js", "../src/engine.js", "../src/utils/matchMedia.js", "../src/appearance.js", "../src/theme.js", "../src/utils/openURL.js", "../src/utils/createCustomError.js", "../src/utils/initializationError.js", "../src/utils/urlOpenError.js", "../src/app.js", "../src/utils/userNotSelectedError.js", "../src/camera.js", "../src/messenger.js", "../src/geolocation.js", "../package.json"],
"sourcesContent": ["!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t():\"function\"==typeof define&&define.amd?define(t):t()}(0,function(){\"use strict\";function e(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}function t(e){return new this(function(t,n){function r(e,n){if(n&&(\"object\"==typeof n||\"function\"==typeof n)){var f=n.then;if(\"function\"==typeof f)return void f.call(n,function(t){r(e,t)},function(n){o[e]={status:\"rejected\",reason:n},0==--i&&t(o)})}o[e]={status:\"fulfilled\",value:n},0==--i&&t(o)}if(!e||\"undefined\"==typeof e.length)return n(new TypeError(typeof e+\" \"+e+\" is not iterable(cannot read property Symbol(Symbol.iterator))\"));var o=Array.prototype.slice.call(e);if(0===o.length)return t([]);for(var i=o.length,f=0;o.length>f;f++)r(f,o[f])})}function n(e,t){this.name=\"AggregateError\",this.errors=e,this.message=t||\"\"}function r(e){var t=this;return new t(function(r,o){if(!e||\"undefined\"==typeof e.length)return o(new TypeError(\"Promise.any accepts an array\"));var i=Array.prototype.slice.call(e);if(0===i.length)return o();for(var f=[],u=0;i.length>u;u++)try{t.resolve(i[u]).then(r)[\"catch\"](function(e){f.push(e),f.length===i.length&&o(new n(f,\"All promises were rejected\"))})}catch(c){o(c)}})}function o(e){return!(!e||\"undefined\"==typeof e.length)}function i(){}function f(e){if(!(this instanceof f))throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof e)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],s(e,this)}function u(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,f._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(o){return void a(t.promise,o)}c(t.promise,r)}else(1===e._state?c:a)(t.promise,e._value)})):e._deferreds.push(t)}function c(e,t){try{if(t===e)throw new TypeError(\"A promise cannot be resolved with itself.\");if(t&&(\"object\"==typeof t||\"function\"==typeof t)){var n=t.then;if(t instanceof f)return e._state=3,e._value=t,void l(e);if(\"function\"==typeof n)return void s(function(e,t){return function(){e.apply(t,arguments)}}(n,t),e)}e._state=1,e._value=t,l(e)}catch(r){a(e,r)}}function a(e,t){e._state=2,e._value=t,l(e)}function l(e){2===e._state&&0===e._deferreds.length&&f._immediateFn(function(){e._handled||f._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;n>t;t++)u(e,e._deferreds[t]);e._deferreds=null}function s(e,t){var n=!1;try{e(function(e){n||(n=!0,c(t,e))},function(e){n||(n=!0,a(t,e))})}catch(r){if(n)return;n=!0,a(t,r)}}n.prototype=Error.prototype;var d=setTimeout;f.prototype[\"catch\"]=function(e){return this.then(null,e)},f.prototype.then=function(e,t){var n=new this.constructor(i);return u(this,new function(e,t,n){this.onFulfilled=\"function\"==typeof e?e:null,this.onRejected=\"function\"==typeof t?t:null,this.promise=n}(e,t,n)),n},f.prototype[\"finally\"]=e,f.all=function(e){return new f(function(t,n){function r(e,o){try{if(o&&(\"object\"==typeof o||\"function\"==typeof o)){var u=o.then;if(\"function\"==typeof u)return void u.call(o,function(t){r(e,t)},n)}i[e]=o,0==--f&&t(i)}catch(c){n(c)}}if(!o(e))return n(new TypeError(\"Promise.all accepts an array\"));var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var f=i.length,u=0;i.length>u;u++)r(u,i[u])})},f.any=r,f.allSettled=t,f.resolve=function(e){return e&&\"object\"==typeof e&&e.constructor===f?e:new f(function(t){t(e)})},f.reject=function(e){return new f(function(t,n){n(e)})},f.race=function(e){return new f(function(t,n){if(!o(e))return n(new TypeError(\"Promise.race accepts an array\"));for(var r=0,i=e.length;i>r;r++)f.resolve(e[r]).then(t,n)})},f._immediateFn=\"function\"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){d(e,0)},f._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn(\"Possible Unhandled Promise Rejection:\",e)};var p=function(){if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(\"undefined\"!=typeof global)return global;throw Error(\"unable to locate global object\")}();\"function\"!=typeof p.Promise?p.Promise=f:(p.Promise.prototype[\"finally\"]||(p.Promise.prototype[\"finally\"]=e),p.Promise.allSettled||(p.Promise.allSettled=t),p.Promise.any||(p.Promise.any=r))});\n", "'use strict';\n\nimport(\"./polyfill/promise.min\");\nimport freeze from \"./utils/freeze.js\";\n\nimport OS from \"./os.js\";\nimport Engine from \"./engine.js\";\nimport Appearance from \"./appearance.js\";\nimport Theme from \"./theme.js\";\nimport App from \"./app.js\";\nimport Camera from \"./camera.js\";\nimport Messenger from \"./messenger.js\";\nimport Geolocation from \"./geolocation.js\";\n\nimport InitializationError from \"./utils/initializationError.js\";\nimport URLOpenError from \"./utils/urlOpenError.js\";\nimport UserNotSelectedError from \"./utils/userNotSelectedError.js\";\n\nimport packageJSON from '../package.json';\n\nconst Error = {\n\tInitializationError,\n\tURLOpenError,\n\tUserNotSelectedError,\n};\n\nconst Native = freeze({\n\tversion: packageJSON.version,\n\tOS,\n\tEngine,\n\tAppearance,\n\tTheme,\n\tApp,\n\tCamera,\n\tMessenger,\n\tGeolocation,\n\tError,\n});\n\nif (typeof globalThis !== 'undefined') {\n\tglobalThis.Native = Native;\n}\n\nexport {\n\tNative,\n\tApp,\n\tOS,\n\tEngine,\n\tAppearance,\n\tTheme,\n\tCamera,\n\tMessenger,\n\tGeolocation,\n\tError\n};\n", "/**\n * @template T\n * @param obj {T}\n * @returns {Readonly<T>}\n */\nexport default function freeze(obj) {\n\tif (typeof Object.freeze !== \"function\") {\n\t\tvar keys = Object.keys(obj);\n\t\t\n\t\tfor (var i = 0, key = keys[i]; i < keys.length; i++) {\n\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\ttry {\n\t\t\t\t\tObject.defineProperty(obj, key, {\n\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\tconfigurable: false\n\t\t\t\t\t});\n\t\t\t\t} catch (_) {\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn obj;\n\t}\n\t\n\treturn Object.freeze(obj);\n}\n", "import freeze from \"./utils/freeze.js\";\n\n/**\n * @param str {string | undefined}\n * @returns {string | undefined}\n */\nfunction parseWindowsVersion(str) {\n\tvar map = {\n\t\t\"4.90\": \"ME\",\n\t\t\"NT3.51\": \"NT 3.11\",\n\t\t\"NT4.0\": \"NT 4.0\",\n\t\t\"NT 5.0\": \"2000\",\n\t\t\"NT 5.1\": \"XP\",\n\t\t\"NT 5.2\": \"XP\",\n\t\t\"NT 6.0\": \"Vista\",\n\t\t\"NT 6.1\": \"7\",\n\t\t\"NT 6.2\": \"8\",\n\t\t\"NT 6.3\": \"8.1\",\n\t\t\"NT 6.4\": \"10\",\n\t\t\"NT 10.0\": \"10\",\n\t\t\"ARM\": \"RT\"\n\t};\n\t\n\tvar mapped = map[str];\n\t\n\tif (mapped !== void 0) {\n\t\treturn mapped;\n\t}\n\t\n\treturn str;\n}\n\n/**\n * @param str {string | undefined}\n * @returns {string | undefined}\n */\nfunction parseIOSOrMacVersion(str) {\n\tif (str === void 0) {\n\t\treturn void 0;\n\t}\n\t\n\treturn str.replace(/_/g, \".\");\n}\n\nfunction getRenderer() {\n\t/** @type {HTMLCanvasElement} */\n\tvar canvas = document.createElement(\"CANVAS\");\n\t\n\tif (typeof canvas.getContext !== \"function\") return void 0;\n\t\n\tvar gl = canvas.getContext(\"experimental-webgl\") || canvas.getContext(\"webgl\");\n\t\n\tif (gl === null) return void 0;\n\t\n\tvar extension = gl.getExtension(\"WEBGL_debug_renderer_info\");\n\t\n\tif (typeof gl.getParameter !== \"function\") return void 0;\n\t\n\tif (extension == null) return gl.getParameter(gl.RENDERER);\n\t\n\treturn gl.getParameter(extension.UNMASKED_RENDERER_WEBGL);\n}\n\n/**\n * @type {NativeOS}\n */\nvar OS = (function (ua) {\n\tvar matched,\n\t\tresult = {\n\t\t\trenderer: getRenderer(),\n\t\t\tname: \"Unknown\",\n\t\t\tversion: void 0,\n\t\t},\n\t\t/** @type {[RegExp, string, undefined | ((matched: string | undefined) => string | undefined)][]} */\n\t\tmaps = [\n\t\t\t[/android\\w*[-\\/.; ]?([\\d.]*)/i, \"Android\"],\n\t\t\t[/microsoft windows (vista|xp)/i, \"Windows\"],\n\t\t\t[/windows (?:phone(?: os)?|mobile|iot)[\\/ ]?([.\\w ]*)/i, \"Windows\", parseWindowsVersion],\n\t\t\t[/windows nt 6\\.2; (arm)/i, \"Windows\", parseWindowsVersion],\n\t\t\t[/windows[\\/ ]([ntce\\d. ]+\\w)(?!.+xbox)/i, \"Windows\", parseWindowsVersion],\n\t\t\t[/(?:win(?=[39n])|win 9x )([nt\\d.]+)/i, \"Windows\", parseWindowsVersion],\n\t\t\t[/[adehimnop]{4,7}\\b(?:.*os (\\w+) like mac|; opera)/i, \"iOS\", parseIOSOrMacVersion],\n\t\t\t[/(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d.]+)/i, \"iOS\", parseIOSOrMacVersion],\n\t\t\t[/cfnetwork\\/.+darwin/i, \"iOS\"],\n\t\t\t[/mac os x ?([\\w. ]*)/i, \"MacOS\", parseIOSOrMacVersion],\n\t\t\t[/(?:macintosh|mac_powerpc\\b)(?!.+haiku)/i, \"MacOS\", parseIOSOrMacVersion],\n\t\t];\n\t\n\tfor (var i = 0; i < maps.length; i++) {\n\t\tmatched = ua.match(maps[i][0]);\n\t\t\n\t\tif (matched !== null) {\n\t\t\tresult.name = maps[i][1];\n\t\t\tif (maps[i][2] !== void 0) {\n\t\t\t\tresult.version = maps[i][2](matched[1]);\n\t\t\t} else {\n\t\t\t\tresult.version = matched[1];\n\t\t\t}\n\t\t\t\n\t\t\treturn freeze(result);\n\t\t}\n\t}\n\t\n\treturn freeze(result);\n})(navigator.userAgent);\n\nexport default OS;\n", "import freeze from \"./utils/freeze.js\";\n\n/**\n * @param str {string | undefined}\n * @returns {string}\n */\nfunction parseLibWebVersion(str) {\n\treturn \"LibWeb\";\n}\n\n/**\n * @type {NativeEngine}\n */\nvar Engine = (function (ua) {\n\tvar matched,\n\t\tresult = {\n\t\t\tname: \"Unknown\",\n\t\t\tisWebView: /; ?wv|applewebkit(?!.*safari)/i.test(ua),\n\t\t\tversion: void 0,\n\t\t},\n\t\t/** @type {[RegExp, string, undefined | ((matched: string | undefined) => string | undefined)][]} */\n\t\tmaps = [\n\t\t\t[/windows.+ edge\\/([\\w.]+)/i, \"EdgeHTML\"],\n\t\t\t[/arkweb\\/([\\w.]+)/i, \"ArkWeb\"],\n\t\t\t[/webkit\\/537\\.36.+chrome\\/(?!27)([\\w.]+)/i, \"Blink\"],\n\t\t\t[/presto\\/([\\w.]+)/i, \"Presto\"],\n\t\t\t[/webkit\\/([\\w.]+)/i, \"WebKit\"],\n\t\t\t[/trident\\/([\\w.]+)/i, \"Trident\"],\n\t\t\t[/netfront\\/([\\w.]+)/i, \"NetFront\"],\n\t\t\t[/netsurf\\/([\\w.]+)/i, \"NetSurf\"],\n\t\t\t[/amaya\\/([\\w.]+)/i, \"Amaya\"],\n\t\t\t[/lynx\\/([\\w.]+)/i, \"Lynx\"],\n\t\t\t[/w3m\\/([\\w.]+)/i, \"w3m\"],\n\t\t\t[/goanna\\/([\\w.]+)/i, \"Goanna\"],\n\t\t\t[/servo\\/([\\w.]+)/i, \"Servo\"],\n\t\t\t[/ekiohflow\\/([\\w.]+)/i, \"Flow\"],\n\t\t\t[/khtml[\\/ ]\\(?([\\w.]+)/i, \"KHTML\"],\n\t\t\t[/tasman[\\/ ]\\(?([\\w.]+)/i, \"Tasman\"],\n\t\t\t[/links[\\/ ]\\(?([\\w.]+)/i, \"Links\"],\n\t\t\t[/icab[\\/ ]([23]\\.[\\d.]+)/i, \"iCab\"],\n\t\t\t[/\\blibweb/i, \"LibWeb\", parseLibWebVersion],\n\t\t\t[/ladybird\\//i, \"LibWeb\", parseLibWebVersion],\n\t\t\t[/rv:([\\w.]{1,9})\\b.+gecko/i, \"Gecko\"],\n\t\t]\n\t\n\tfor (var i = 0; i < maps.length; i++) {\n\t\tmatched = ua.match(maps[i][0]);\n\t\t\n\t\tif (matched !== null) {\n\t\t\tresult.name = maps[i][1];\n\t\t\tif (maps[i][2] !== void 0) {\n\t\t\t\tresult.version = maps[i][2](matched[1]);\n\t\t\t} else {\n\t\t\t\tresult.version = matched[1];\n\t\t\t}\n\t\t\t\n\t\t\treturn freeze(result);\n\t\t}\n\t}\n\t\n\treturn freeze(result);\n})(navigator.userAgent);\n\nexport default Engine;\n", "export default (function () {\n\tif (typeof window.matchMedia === \"function\") {\n\t\treturn window.matchMedia;\n\t}\n\t\n\tvar media = window.styleMedia || window.media;\n\t\n\tif (media === void 0) {\n\t\tvar style = document.createElement(\"STYLE\"),\n\t\t\tinfo;\n\t\t\n\t\tstyle.type = \"text/css\";\n\t\tstyle.id = \"match-media-polyfill\";\n\t\t\n\t\tdocument.head.appendChild(style);\n\t\t\n\t\tif (typeof window.getComputedStyle === \"function\") {\n\t\t\tinfo = window.getComputedStyle(style);\n\t\t} else {\n\t\t\tinfo = style.currentStyle;\n\t\t}\n\t\t\n\t\tmedia = {\n\t\t\tmatchMedia: function (query) {\n\t\t\t\tvar text = \"@media \" + query + \"{ #\" + style.id + \" {width: 1px;} }\";\n\t\t\t\t\n\t\t\t\tif (style.styleSheet !== void 0) {\n\t\t\t\t\tstyle.styleSheet.cssText = text;\n\t\t\t\t} else {\n\t\t\t\t\tstyle.textContent = text;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn info.width === \"1px\";\n\t\t\t}\n\t\t};\n\t}\n\t\n\treturn function (query) {\n\t\treturn {\n\t\t\tmatches: media.matchMedia(query),\n\t\t\tmedia: query\n\t\t};\n\t};\n})();\n", "import freeze from \"./utils/freeze.js\";\nimport matchMedia from \"./utils/matchMedia.js\";\n\nvar listeners = [],\n\tquery = matchMedia(\"(prefers-color-scheme: dark)\");\n\n/**\n * @type {NativeAppearance}\n */\nvar Appearance = {\n\t/**\n\t * @param {(value: EnumValues<NativeAppearanceType>) => void} listener\n\t */\n\taddListener: function (listener) {\n\t\tfunction wrapped(event) {\n\t\t\tlistener(event.matches ? Appearance.Type.Dark : Appearance.Type.Light);\n\t\t}\n\t\t\n\t\tlisteners.push({original: listener, wrapped: wrapped});\n\t\t\n\t\tif (typeof query.addEventListener === \"function\") {\n\t\t\treturn query.addEventListener(\"change\", wrapped);\n\t\t} else if (typeof query.addListener === \"function\") {\n\t\t\treturn query.addListener(wrapped);\n\t\t}\n\t},\n\t/**\n\t * @param {(value: EnumValues<NativeAppearanceType>) => void} listener\n\t */\n\tremoveListener: function (listener) {\n\t\tfor (var i = 0; i < listeners.length; i++) {\n\t\t\tif (listeners[i].original === listener) {\n\t\t\t\tvar wrapped = listeners[i].wrapped;\n\t\t\t\t\n\t\t\t\tif (typeof query.removeEventListener === \"function\") {\n\t\t\t\t\tquery.removeEventListener(\"change\", wrapped);\n\t\t\t\t} else if (typeof query.removeListener === \"function\") {\n\t\t\t\t\treturn query.removeListener(wrapped);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlisteners.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nObject.defineProperty(Appearance, \"value\", {\n\t/**\n\t * @returns {EnumValues<NativeAppearanceType>}\n\t */\n\tget: function () {\n\t\tif (query.matches) {\n\t\t\treturn Appearance.Type.Dark;\n\t\t} else {\n\t\t\treturn Appearance.Type.Light;\n\t\t}\n\t},\n\tconfigurable: false,\n\tenumerable: true,\n});\n\n/**\n * @enum {string}\n * @type {NativeAppearanceType}\n */\nAppearance.Type = freeze({\n\tLight: \"light\",\n\tDark: \"dark\",\n});\n\nexport default Appearance;\n", "import Appearance from \"./appearance.js\";\nimport freeze from \"./utils/freeze.js\";\n\n/** @type {EnumValues<NativeAppearanceType> | undefined} */\nvar listener,\n\t/** @type {Record<string, HTMLMetaElement>} */\n\tmetas = {\n\t\tlight: void 0,\n\t\tdark: void 0,\n\t\tiosStatusBar: void 0,\n\t\twindowsPhone: void 0,\n\t},\n\t/** @type {MutationObserver} */\n\tobserver,\n\t/** @type {((value: Partial<NativeThemeContent>) => void)[]} */\n\tobserverListeners = [],\n\t/** @type {((value: EnumValues<NativeAppearanceType>) => void)[]} */\n\tappearanceListeners = [];\n\n/**\n * @param attributes {[string, string][]}\n * @returns {HTMLMetaElement}\n */\nfunction getMeta(attributes) {\n\tvar query = \"\",\n\t\telement,\n\t\ti;\n\t\n\tfor (i = 0; i < attributes.length; i++) {\n\t\tquery += \"[\" + attributes[i][0] + \"='\" + attributes[i][1] + \"']\";\n\t}\n\t\n\telement = top.document.head.querySelector(\"meta\" + query);\n\t\n\tif (element === null) {\n\t\telement = top.document.createElement(\"META\");\n\t\t\n\t\tfor (i = 0; i < attributes.length; i++) {\n\t\t\telement[attributes[i][0]] = attributes[i][1];\n\t\t}\n\t\t\n\t\ttop.document.head.appendChild(element);\n\t}\n\t\n\treturn element;\n}\n\nfunction initMetas() {\n\tif (metas.light === void 0) {\n\t\tmetas.light = getMeta([[\"name\", \"theme-color\"], [\"media\", \"(prefers-color-scheme: light)\"]]);\n\t}\n\t\n\tif (metas.dark === void 0) {\n\t\tmetas.dark = getMeta([[\"name\", \"theme-color\"], [\"media\", \"(prefers-color-scheme: dark)\"]]);\n\t}\n\t\n\tif (metas.iosStatusBar === void 0) {\n\t\tmetas.iosStatusBar = getMeta([[\"name\", \"apple-mobile-web-app-status-bar-style\"]]);\n\t}\n\t\n\tif (metas.windowsPhone === void 0) {\n\t\tmetas.windowsPhone = getMeta([[\"name\", \"msapplication-navbutton-color\"]]);\n\t}\n}\n\n/**\n * @type {NativeTheme}\n */\nvar Theme = {\n\t/**\n\t * @param {(value: Partial<NativeThemeContent>) => void} listener\n\t */\n\taddListener: function (listener) {\n\t\tif (typeof window.MutationObserver !== \"function\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (observer === void 0) {\n\t\t\tobserver = new MutationObserver(function (mutations) {\n\t\t\t\tvar i,\n\t\t\t\t\tchanged = false;\n\t\t\t\t\n\t\t\t\tfor (i = 0; i < mutations.length; i++) {\n\t\t\t\t\tvar mutation = mutations[i],\n\t\t\t\t\t\ttarget = mutation.target,\n\t\t\t\t\t\ttype = mutation.type;\n\t\t\t\t\t\n\t\t\t\t\tif (type !== \"attributes\" || target.tagName !== \"META\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ([metas.light, metas.dark, metas.iosStatusBar, metas.windowsPhone].indexOf(target) !== -1) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!changed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (i = 0; i < observerListeners.length; i++) {\n\t\t\t\t\tobserverListeners[i](Theme.value);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tobserver.observe(top.document.head, {attributes: true, childList: true, subtree: true});\n\t\t}\n\t\t\n\t\tfunction onAppearanceChange() {\n\t\t\tinitMetas();\n\t\t\t\n\t\t\tif (metas.dark.content !== metas.light.content) {\n\t\t\t\tlistener(Theme.value);\n\t\t\t}\n\t\t}\n\t\t\n\t\tAppearance.addListener(onAppearanceChange);\n\t\t\n\t\tappearanceListeners.push(onAppearanceChange);\n\t\tobserverListeners.push(listener);\n\t},\n\t/**\n\t * @param {(value: Partial<NativeThemeContent>) => void} listener\n\t */\n\tremoveListener: function (listener) {\n\t\tif (typeof window.MutationObserver !== \"function\" || observer === void 0) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < observerListeners.length; i++) {\n\t\t\tif (observerListeners[i] === listener) {\n\t\t\t\tobserverListeners.splice(i, 1);\n\t\t\t\tappearanceListeners.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (observerListeners.length === 0) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t},\n\t/**\n\t * @param theme {Partial<Record<NativeAppearanceType[keyof NativeAppearanceType], Partial<NativeThemeContent>>>}\n\t */\n\tsetTheme: function (theme) {\n\t\tinitMetas();\n\t\t\n\t\tif (listener !== void 0) {\n\t\t\tAppearance.removeListener(listener);\n\t\t\tlistener = void 0;\n\t\t}\n\t\t\n\t\tlistener = function (appearance) {\n\t\t\tvar color = theme[appearance];\n\t\t\t\n\t\t\tif (color !== void 0) {\n\t\t\t\tif (color.iosStatusBar !== void 0) {\n\t\t\t\t\tmetas.iosStatusBar.content = color.iosStatusBar;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (color.windowsPhone !== void 0) {\n\t\t\t\t\tmetas.windowsPhone.content = color.iosStatusBar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tAppearance.addListener(listener);\n\t\t\n\t\tvar light = theme.light,\n\t\t\tdark = theme.dark;\n\t\t\n\t\tif (dark !== void 0 && dark.theme !== void 0) {\n\t\t\tmetas.dark.content = dark.theme;\n\t\t}\n\t\t\n\t\tif (light !== void 0) {\n\t\t\tif (light.theme !== void 0) {\n\t\t\t\tmetas.light.content = light.theme;\n\t\t\t}\n\t\t\t\n\t\t\tif (Appearance.value === \"light\") {\n\t\t\t\tif (light.iosStatusBar !== void 0) {\n\t\t\t\t\tmetas.iosStatusBar.content = light.iosStatusBar;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (light.windowsPhone !== void 0) {\n\t\t\t\t\tmetas.windowsPhone.content = light.windowsPhone;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (dark !== void 0) {\n\t\t\tif (dark.theme !== void 0) {\n\t\t\t\tmetas.dark.content = dark.theme;\n\t\t\t}\n\t\t\t\n\t\t\tif (Appearance.value === \"dark\") {\n\t\t\t\tif (dark.iosStatusBar !== void 0) {\n\t\t\t\t\tmetas.iosStatusBar.content = dark.iosStatusBar;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (dark.windowsPhone !== void 0) {\n\t\t\t\t\tmetas.windowsPhone.content = dark.windowsPhone;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nObject.defineProperty(Theme, \"value\", {\n\t/**\n\t * @returns {Partial<NativeThemeContent>}\n\t */\n\tget: function () {\n\t\tvar result = {};\n\t\t\n\t\tinitMetas();\n\t\t\n\t\tif (metas[Appearance.value].content !== \"\") {\n\t\t\tresult.theme = metas[Appearance.value].content;\n\t\t}\n\t\t\n\t\tif (metas.iosStatusBar.content !== \"\") {\n\t\t\tresult.iosStatusBar = metas.iosStatusBar.content;\n\t\t}\n\t\t\n\t\tif (metas.windowsPhone.content !== \"\") {\n\t\t\tresult.windowsPhone = metas.windowsPhone.content;\n\t\t}\n\t\t\n\t\treturn result;\n\t},\n\tconfigurable: false,\n\tenumerable: true,\n});\n\n/**\n * @enum {string}\n * @type {NativeThemeType}\n */\nTheme.Type = freeze({\n\tTheme: 'theme',\n\tIOSStatusBar: 'iosStatusBar',\n\tWindowsPhone: 'windowsPhone',\n});\n\nexport default Theme;\n", "/**\n * @returns {boolean}\n */\nfunction isDocumentHidden(target) {\n\tif (target.document.hidden !== void 0) {\n\t\treturn target.document.hidden;\n\t}\n\t\n\tif (target.document.webkitHidden !== void 0) {\n\t\treturn target.document.webkitHidden;\n\t}\n\t\n\treturn true;\n}\n\n/**\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @returns {void}\n */\nfunction openURLWithIFrame(target, url) {\n\tvar iframe = document.createElement(\"IFRAME\"),\n\t\tid;\n\t\n\tfunction onload() {\n\t\tiframe.removeEventListener(\"load\", onload);\n\t\tclearTimeout(id);\n\t\t\n\t\ttarget.document.body.removeChild(iframe);\n\t}\n\t\n\tiframe.src = url;\n\tiframe.style.display = \"none\";\n\t\n\ttarget.document.body.appendChild(iframe);\n\t\n\tiframe.addEventListener(\"load\", onload);\n\t\n\tid = setTimeout(onload, 2000);\n}\n\n/**\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {void}\n */\nfunction openURLWithHref(target, url, aTarget = \"_self\") {\n\tvar a= /** @type HTMLAnchorElement */ target.document.createElement(\"A\"),\n\t\tfake;\n\t\n\ta.href = url;\n\ta.target = aTarget;\n\t\n\ttarget.document.body.appendChild(a);\n\t\n\ttry {\n\t\tfake = new target.MouseEvent(\"click\", {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: target\n\t\t});\n\t} catch (_) {\n\t\t// ES5 or Browsers in the ES5~ES6 transition period\n\t\tfake = target.document.createEvent(\"MouseEvents\");\n\t\t\n\t\tfake.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\t}\n\t\n\ta.dispatchEvent(fake);\n\t\n\ttarget.document.body.removeChild(a);\n}\n\n/**\n * @param os {NativeOS}\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param timeout {number}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {Promise<void>}\n */\nfunction openURLAndroidOrWindowsOrMacOS(os, target, url, timeout, aTarget) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar id;\n\t\t\n\t\tfunction onblur() {\n\t\t\tclearTimeout(id);\n\t\t\t\n\t\t\ttarget.removeEventListener(\"blur\", onblur);\n\t\t\ttarget.addEventListener(\"focus\", onfocus);\n\t\t}\n\t\t\n\t\tfunction onfocus() {\n\t\t\ttarget.removeEventListener(\"focus\", onfocus);\n\t\t\t\n\t\t\tresolve();\n\t\t}\n\t\t\n\t\tid = setTimeout(function () {\n\t\t\treject();\n\t\t\t\n\t\t\ttarget.removeEventListener(\"blur\", onblur);\n\t\t}, timeout);\n\t\t\n\t\ttarget.addEventListener(\"blur\", onblur);\n\t\t\n\t\topenURLWithHref(target, url, aTarget);\n\t});\n}\n\n/**\n * @param os {NativeOS}\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {Promise<void>}\n */\nfunction openURLIOS(os, target, url, aTarget) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar id,\n\t\t\tgoe8 = parseInt(os.version) >= 8;\n\t\t\n\t\tfunction onblur() {\n\t\t\tclearTimeout(id);\n\t\t\t\n\t\t\ttarget.addEventListener(\"focus\", onfocus);\n\t\t\ttarget.removeEventListener(\"blur\", onblur);\n\t\t}\n\t\t\n\t\tfunction onfocus() {\n\t\t\tid = setTimeout(function () {\n\t\t\t\tif (!isDocumentHidden(target)) {\n\t\t\t\t\treject();\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (goe8) {\n\t\t\t\t\ttarget.document.removeEventListener(\"visibilitychange\", onvisibilitychange);\n\t\t\t\t} else {\n\t\t\t\t\ttarget.document.removeEventListener(\"pagehide\", onvisibilitychange);\n\t\t\t\t}\n\t\t\t}, 2000);\n\t\t\t\n\t\t\ttarget.removeEventListener(\"focus\", onfocus);\n\t\t}\n\t\t\n\t\tfunction onvisibilitychange() {\n\t\t\tclearTimeout(id);\n\t\t\t\n\t\t\ttarget.removeEventListener(\"blur\", onblur);\n\t\t\ttarget.removeEventListener(\"focus\", onfocus);\n\t\t\t\n\t\t\tif (goe8) {\n\t\t\t\ttarget.document.removeEventListener(\"visibilitychange\", onvisibilitychange);\n\t\t\t} else {\n\t\t\t\ttarget.document.removeEventListener(\"pagehide\", onvisibilitychange);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t}\n\t\t\n\t\ttarget.addEventListener(\"blur\", onblur);\n\t\t\n\t\tif (goe8) {\n\t\t\ttarget.document.addEventListener(\"visibilitychange\", onvisibilitychange);\n\t\t} else {\n\t\t\ttarget.document.addEventListener(\"pagehide\", onvisibilitychange);\n\t\t}\n\t\t\n\t\topenURLWithHref(target, url, aTarget);\n\t});\n}\n\n/**\n * @param os {NativeOS}\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {Promise<void>}\n */\nfunction openURLAndroid(os, target, url, aTarget) {\n\treturn openURLAndroidOrWindowsOrMacOS(os, target, url, 1000, aTarget);\n}\n\n/**\n * @param os {NativeOS}\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {Promise<void>}\n */\nfunction openURLWindowsOrMacOS(os, target, url, aTarget) {\n\treturn openURLAndroidOrWindowsOrMacOS(os, target, url, 750, aTarget);\n}\n\n/**\n * @param os {NativeOS}\n * @param target {Window & typeof globalThis}\n * @param url {string}\n * @param [aTarget] {'_blank'|'_self'|'_parent'|'_top'|string}\n * @returns {Promise<void>}\n */\nexport default function openURL(os, target, url, aTarget) {\n\tif (url) {\n\t\tswitch (os.name) {\n\t\t\tcase \"Android\":\n\t\t\t\treturn openURLAndroid(os, target, url, aTarget);\n\t\t\tcase \"iOS\":\n\t\t\t\treturn openURLIOS(os, target, url, aTarget);\n\t\t\tcase \"Windows\":\n\t\t\tcase \"MacOS\":\n\t\t\t\treturn openURLWindowsOrMacOS(os, target, url, aTarget);\n\t\t}\n\t}\n\t\n\treturn Promise.reject();\n}\n", "export default function createCustomError(name) {\n\tfunction CustomError(message) {\n\t\tif (!(this instanceof CustomError)) {\n\t\t\treturn new CustomError(message);\n\t\t}\n\t\t\n\t\tthis.name = name;\n\t\tthis.message = message;\n\t\t\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, CustomError);\n\t\t} else {\n\t\t\tthis.stack = new Error().stack;\n\t\t}\n\t}\n\t\n\tCustomError.prototype = Object.create(Error.prototype);\n\tCustomError.prototype.constructor = CustomError;\n\t\n\treturn CustomError;\n};\n", "import createCustomError from \"./createCustomError.js\";\n\nexport default createCustomError(\"InitializationError\");\n", "import createCustomError from \"./createCustomError.js\";\n\nexport default createCustomError(\"URLOpenError\");\n", "import OS from \"./os\";\nimport openURL from \"./utils/openURL\";\nimport freeze from \"./utils/freeze\";\nimport InitializationError from \"./utils/initializationError\";\nimport URLOpenError from \"./utils/urlOpenError\";\n\n/**\n * @param bundle {string}\n * @returns {number | undefined}\n */\nfunction getTrackId(bundle) {\n\ttry {\n\t\tvar xhr = new XMLHttpRequest();\n\t\t\n\t\txhr.open(\"GET\", \"http://itunes.apple.com/lookup?bundleId=\" + bundle, false);\n\t\txhr.send();\n\t\t\n\t\tif (xhr.status === 200) {\n\t\t\tvar response = JSON.parse(xhr.response);\n\t\t\t\n\t\t\tif (response.results.length > 0) {\n\t\t\t\treturn response.results[0].trackId;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn void 0;\n\t} catch (_) {\n\t\treturn void 0;\n\t}\n}\n\n/**\n * @param input {string}\n * @returns {string}\n */\nfunction addDelimiter(input) {\n\tif (/\\w+:\\/\\/.*/.test(input)) return input;\n\t\n\treturn input + \"://\";\n}\n\n/**\n * @param input {string}\n * @returns {string}\n */\nfunction clearDelimiter(input) {\n\treturn input.replace(/:\\/\\/.*$/, \"\");\n}\n\n/**\n * @param {NativeAppArgument} data\n * @type {NativeApp}\n * @constructor\n */\nvar App = function (data) {\n\tif (data === void 0) {\n\t\tthrow new TypeError(\"Failed to construct 'Native.App': Illegal constructor.\");\n\t}\n\t\n\tthis.run = function () {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\treject(new InitializationError(\"Initialization error.\"));\n\t\t});\n\t};\n\t\n\tvar scheme,\n\t\tid,\n\t\tfallback,\n\t\tpackageName,\n\t\tready = Promise.resolve(),\n\t\turls = [],\n\t\tisOpenWebStore,\n\t\taTarget;\n\t\n\tswitch (OS.name) {\n\t\tcase \"Android\":\n\t\t\tif (data.android === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar matched,\n\t\t\t\tintent,\n\t\t\t\tchromiumVersion;\n\t\t\t\n\t\t\tscheme = data.android.scheme;\n\t\t\tid = data.android.package;\n\t\t\tfallback = data.android.fallback;\n\t\t\tintent = data.android.intent;\n\t\t\tisOpenWebStore = data.android.isOpenWebStore;\n\t\t\taTarget = data.android.aTarget;\n\t\t\t\n\t\t\tif (intent !== void 0 && scheme === void 0) {\n\t\t\t\tmatched = intent.match(/scheme=([^;]*)/);\n\t\t\t\t\n\t\t\t\tif (matched !== null) {\n\t\t\t\t\tscheme = matched[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (intent !== void 0 && id === void 0) {\n\t\t\t\tmatched = intent.match(/package=([^;]*)/);\n\t\t\t\t\n\t\t\t\tif (matched !== null) {\n\t\t\t\t\tid = matched[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (intent !== void 0 && fallback === void 0) {\n\t\t\t\tmatched = intent.match(/S\\.browser_fallback_url=([^;]*)/);\n\t\t\t\t\n\t\t\t\tif (matched !== null) {\n\t\t\t\t\tfallback = matched[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (scheme === void 0 && id === void 0 && fallback === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (intent === void 0) {\n\t\t\t\tintent = \"intent://open#Intent;\";\n\t\t\t\t\n\t\t\t\tif (scheme !== void 0) {\n\t\t\t\t\tintent = intent + \"scheme=\" + clearDelimiter(scheme) + \";\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (id !== void 0) {\n\t\t\t\t\tintent = intent + \"package=\" + id + \";\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tintent = intent + \"end;\";\n\t\t\t}\n\t\t\t\n\t\t\tif (window.chrome !== void 0) {\n\t\t\t\tmatched = navigator.userAgent.match(/chrom(?:e|ium)\\/([\\w.]+)/i);\n\t\t\t\t\n\t\t\t\tif (matched !== null) {\n\t\t\t\t\tchromiumVersion = parseInt(matched[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Intent-based app launching is not supported on Chromium versions below 25.0.0.0\n\t\t\t// On Chromium 25.0.0.0 to 42.0.0.0, fallback behavior for Intent needs to be verified\n\t\t\t// From Chromium 42.0.0.0 onward, Intent fallback works as expected\n\t\t\tif (chromiumVersion >= 25 && intent !== void 0) {\n\t\t\t\tif (chromiumVersion <= 42) {\n\t\t\t\t\tready = new Promise(function (resolve) {\n\t\t\t\t\t\tvar iframe = top.document.createElement(\"IFRAME\"),\n\t\t\t\t\t\t\turl = \"intent://open#Intent;scheme=;end;\",\n\t\t\t\t\t\t\tresolved = false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfunction cleanup(supported) {\n\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\tresolve(supported);\n\t\t\t\t\t\t\t\tiframe.removeEventListener(\"load\", onload);\n\t\t\t\t\t\t\t\ttop.document.body.removeChild(iframe);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tfunction onload() {\n\t\t\t\t\t\t\tcleanup(iframe.src !== url);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tiframe.addEventListener(\"load\", onload);\n\t\t\t\t\t\tiframe.src = url;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttop.document.body.appendChild(iframe);\n\t\t\t\t\t\t\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tcleanup(false);\n\t\t\t\t\t\t}, 500);\n\t\t\t\t\t})\n\t\t\t\t\t\t.then(function (supported) {\n\t\t\t\t\t\t\tif (supported) {\n\t\t\t\t\t\t\t\turls.push([intent, App.State.Intent]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\turls.push([intent.replace(/package=.*?;/, \"\").replace(/S\\.browser_fallback_url=.*?;/, \"\"), App.State.Intent]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (fallback !== void 0) {\n\t\t\t\t\t\t\t\turls.push([fallback, App.State.Fallback]);\n\t\t\t\t\t\t\t} else if (id !== void 0) {\n\t\t\t\t\t\t\t\turls.push([\"market://details?id=\" + id, App.State.Store]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (isOpenWebStore) {\n\t\t\t\t\t\t\t\t\turls.push([\"https://play.google.com/store/apps/details?id=\" + id, App.State.Store]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\turls.push([intent, App.State.Intent]);\n\t\t\t\t}\n\t\t\t} else if (scheme !== void 0) {\n\t\t\t\turls.push([addDelimiter(scheme), App.State.Scheme]);\n\t\t\t}\n\t\t\t\n\t\t\tif (fallback !== void 0) {\n\t\t\t\turls.push([fallback, App.State.Fallback]);\n\t\t\t} else if (id !== void 0) {\n\t\t\t\turls.push([\"market://details?id=\" + id, App.State.Store]);\n\t\t\t\t\n\t\t\t\tif (isOpenWebStore) {\n\t\t\t\t\turls.push([\"https://play.google.com/store/apps/details?id=\" + id, App.State.Store]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\tcase \"Windows\":\n\t\t\tif (data.windows === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tscheme = data.windows.scheme;\n\t\t\tid = data.windows.productId;\n\t\t\tisOpenWebStore = data.windows.isOpenWebStore;\n\t\t\tfallback = data.windows.fallback;\n\t\t\taTarget = data.windows.aTarget;\n\t\t\t\n\t\t\tif (scheme !== void 0) {\n\t\t\t\turls.push([addDelimiter(scheme), App.State.Scheme]);\n\t\t\t}\n\t\t\t\n\t\t\tif (fallback !== void 0) {\n\t\t\t\turls.push([fallback, App.State.Fallback]);\n\t\t\t} else if (id !== void 0) {\n\t\t\t\turls.push([\"ms-windows-store://pdp/?ProductId=\" + id, App.State.Store]);\n\t\t\t\t\n\t\t\t\tif (isOpenWebStore) {\n\t\t\t\t\turls.push([\"https://apps.microsoft.com/detail/\" + id, App.State.Store]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\tcase \"iOS\":\n\t\t\tif (data.ios === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar universal = data.ios.universal;\n\t\t\t\n\t\t\tscheme = data.ios.scheme;\n\t\t\tpackageName = data.ios.package;\n\t\t\tid = data.ios.trackId;\n\t\t\tfallback = data.ios.fallback;\n\t\t\taTarget = data.ios.aTarget;\n\t\t\t\n\t\t\tif (universal !== void 0 && parseInt(OS.version) >= 9) {\n\t\t\t\turls.push([universal, App.State.Universal]);\n\t\t\t} else if (scheme !== void 0) {\n\t\t\t\turls.push([scheme, App.State.Scheme]);\n\t\t\t}\n\t\t\t\n\t\t\tif (id === void 0 && packageName !== void 0) {\n\t\t\t\tid = getTrackId(packageName);\n\t\t\t}\n\t\t\t\n\t\t\tif (fallback !== void 0) {\n\t\t\t\turls.push([fallback, App.State.Fallback]);\n\t\t\t} else if (id !== void 0) {\n\t\t\t\tif (urls.length === 0) {\n\t\t\t\t\turls.push([\"itms-apps://itunes.apple.com/app/id\" + id + \"?mt=8\", App.State.Store]);\n\t\t\t\t} else {\n\t\t\t\t\turls.push([\"https://itunes.apple.com/kr/app/id\" + id + \"?mt=8\", App.State.Store]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\tcase \"MacOS\":\n\t\t\tif (data.mac === void 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tscheme = data.mac.scheme;\n\t\t\tpackageName = data.mac.package;\n\t\t\tid = data.mac.trackId;\n\t\t\tfallback = data.mac.fallback;\n\t\t\tisOpenWebStore = data.mac.isOpenWebStore;\n\t\t\taTarget = data.mac.aTarget;\n\t\t\t\n\t\t\tif (scheme !== void 0) {\n\t\t\t\turls.push([addDelimiter(scheme), App.State.Scheme]);\n\t\t\t}\n\t\t\t\n\t\t\tif (id === void 0 && packageName !== void 0) {\n\t\t\t\tid = getTrackId(packageName);\n\t\t\t}\n\t\t\t\n\t\t\tif (fallback !== void 0) {\n\t\t\t\turls.push([fallback, App.State.Fallback]);\n\t\t\t} else if (id !== void 0) {\n\t\t\t\turls.push([\"macappstore://itunes.apple.com/app/id\" + id + \"?mt=12\", App.State.Store]);\n\t\t\t\t\n\t\t\t\tif (isOpenWebStore) {\n\t\t\t\t\turls.push([\"https://apps.apple.com/us/app/id\" + id + \"?mt=12\", App.State.Store]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn;\n\t}\n\t\n\t/**\n\t * @param target {WindowProxy}\n\t * @returns {Promise<EnumValues<NativeAppState>>}\n\t */\n\tthis.run = function (target = top) {\n\t\treturn ready.then(function () {\n\t\t\tconsole.log(urls);\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tfunction tryOpenURL(index = 0) {\n\t\t\t\t\tif (index >= urls.length) {\n\t\t\t\t\t\treturn reject(new URLOpenError(\"No url can be opened.\"));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar url = urls[index][0],\n\t\t\t\t\t\tstate = urls[index][1];\n\t\t\t\t\t\n\t\t\t\t\treturn openURL(OS, target, url, aTarget)\n\t\t\t\t\t\t.then(function () {\n\t\t\t\t\t\t\tresolve(state);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(function (e) {\n\t\t\t\t\t\t\ttryOpenURL(++index);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn tryOpenURL();\n\t\t\t});\n\t\t});\n\t};\n};\n\n/**\n * @enum {number}\n * @type {NativeAppState}\n */\nApp.State = freeze({\n\tScheme: 0,\n\tUniversal: 1,\n\tIntent: 2,\n\tFallback: 3,\n\tStore: 4,\n});\n\nexport default App;\n", "import createCustomError from \"./createCustomError.js\";\n\nexport default createCustomError(\"UserNotSelectedError\");\n", "import OS from \"./os.js\";\nimport freeze from \"./utils/freeze.js\";\nimport matchMedia from \"./utils/matchMedia.js\";\nimport UserNotSelectedError from \"./utils/userNotSelectedError.js\";\nimport InitializationError from \"./utils/initializationError.js\";\n\nvar run = false;\n\n/**\n * @param type\n * @param stream\n * @param cleanups\n * @returns {Promise<Blob>}\n */\nfunction createCameraElement(type, stream, cleanups) {\n\tvar setting = stream.getVideoTracks()[0].getSettings(),\n\t\tbeforeOverflow = top.document.documentElement.style.overflow,\n\t\twidth = setting.width || 640,\n\t\theight = setting.height || 480,\n\t\tsample = createSampleElement(type),\n\t\tcontainer = createContainerElement(),\n\t\tvideo = createVideoElement(),\n\t\trecordButton = createRecordButtonElement(),\n\t\trecordButtonInner = createRecordButtonInnerElement(type),\n\t\tstopwatch = createStopwatchElement(),\n\t\tpaddingLeft = createPaddingElement(),\n\t\tpaddingRight = createPaddingElement(),\n\t\tcheck = createCheckButton(),\n\t\txMark = createXMarkButton(),\n\t\tpadding = top.innerHeight * 0.4 / height * width / 2,\n\t\trecording = false,\n\t\trecorder,\n\t\tchunks = [],\n\t\tt = 0,\n\t\tid;\n\t\n\trecordButton.appendChild(recordButtonInner);\n\tif (type === Camera.Type.Video) {\n\t\tcontainer.appendChild(stopwatch);\n\t}\n\tcontainer.appendChild(video);\n\tcontainer.appendChild(sample);\n\tcontainer.appendChild(recordButton);\n\tcontainer.appendChild(paddingLeft);\n\tcontainer.appendChild(paddingRight);\n\tcontainer.appendChild(check);\n\tcontainer.appendChild(xMark);\n\t\n\tvideo.style.left = sample.style.left = \"calc(50% - \" + padding + \"px)\";\n\tpaddingLeft.style.left = paddingRight.style.right = \"0\";\n\tcheck.style.left = xMark.style.right = \"calc(50% - \" + (padding - 50) + \"px)\";\n\tpaddingLeft.style.width = paddingRight.style.width = \"calc(50% - \" + padding + \"px)\";\n\t\n\tfunction clearVideoSourceObject() {\n\t}\n\t\n\tfunction clearStopwatchInterval() {\n\t\tif (id !== void 0) {\n\t\t\tclearInterval(id);\n\t\t\tid = void 0;\n\t\t}\n\t}\n\t\n\tfunction showSample(blob, resolve, reject) {\n\t\tblobToDataURL(blob)\n\t\t\t.then(function (dataURL) {\n\t\t\t\tsample.src = dataURL;\n\t\t\t\t\n\t\t\t\tvideo.style.display = recordButton.style.display = \"none\";\n\t\t\t\tsample.style.display = check.style.display = xMark.style.display = \"block\";\n\t\t\t\t\n\t\t\t\tcheck.onclick = function () {\n\t\t\t\t\tresolve({blob: blob, dataURL: dataURL});\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\txMark.onclick = function () {\n\t\t\t\t\tif (typeof window.URL === \"function\") {\n\t\t\t\t\t\tURL.revokeObjectURL(dataURL);\n\t\t\t\t\t} else if (typeof window.webkitURL === \"function\") {\n\t\t\t\t\t\twebkitURL.revokeObjectURL(dataURL);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tt = 0;\n\t\t\t\t\tvideo.style.display = recordButton.style.display = \"block\";\n\t\t\t\t\tsample.style.display = check.style.display = xMark.style.display = \"none\";\n\t\t\t\t};\n\t\t\t})\n\t\t\t.catch(function (e) {\n\t\t\t\treject(e);\n\t\t\t});\n\t}\n\t\n\tif (video.srcObject !== void 0) {\n\t\tvideo.srcObject = stream;\n\t\t\n\t\tclearVideoSourceObject = function () {\n\t\t\tvideo.srcObject = null;\n\t\t};\n\t} else if (video.mozSrcObject !== void 0) {\n\t\tvideo.mozSrcObject = stream;\n\t\t\n\t\tclearVideoSourceObject = function () {\n\t\t\tvideo.mozSrcObject = null;\n\t\t};\n\t}\n\t\n\tvideo.onloadedmetadata = function () {\n\t\tvideo.muted = true;\n\t\tvoid video.play();\n\t};\n\t\n\ttop.document.documentElement.style.overflow = \"hidden\";\n\ttop.document.body.appendChild(container);\n\t\n\tcleanups.push(\n\t\tfunction () {\n\t\t\ttop.document.documentElement.style.overflow = beforeOverflow;\n\t\t\ttop.document.body.removeChild(container);\n\t\t\t\n\t\t\tif (recorder !== void 0 && recorder.state !== \"inactive\") {\n\t\t\t\trecorder.stop();\n\t\t\t\trecorder = void 0;\n\t\t\t}\n\t\t\t\n\t\t\tclearVideoSourceObject();\n\t\t\tclearStopwatchInterval();\n\t\t}\n\t);\n\t\n\treturn new Promise(function (resolve, reject) {\n\t\ttop.document.addEventListener(\"keyup\", function onkeyup(e) {\n\t\t\tcleanups.push(\n\t\t\t\tfunction () {\n\t\t\t\t\ttop.document.removeEventListener(\"keyup\", onkeyup);\n\t\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\tif (e.keyCode === 27 || e.code === \"Escape\") {\n\t\t\t\treject(new UserNotSelectedError(\"User did not select.\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\trecordButton.onclick = function () {\n\t\t\ttry {\n\t\t\t\tif (type === Camera.Type.Image) {\n\t\t\t\t\tplayCaptureSound();\n\t\t\t\t\t\n\t\t\t\t\tvar canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\t\n\t\t\t\t\tvar ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\n\t\t\t\t\tctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\n\t\t\t\t\tcanvasToBlob(canvas)\n\t\t\t\t\t\t.then(function (blob) {\n\t\t\t\t\t\t\tshowSample(blob, resolve, reject);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(function (e) {\n\t\t\t\t\t\t\treject(e);\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (!recording) {\n\t\t\t\t\t\tplayRecordStartSound();\n\t\t\t\t\t\t\n\t\t\t\t\t\tid = setInterval(function () {\n\t\t\t\t\t\t\t++t;\n\t\t\t\t\t\t\tstopwatch.innerText = padLeft(t / 6000) + \":\" + padLeft((t / 100) % 60) + \":\" + padLeft(t % 100);\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\n\t\t\t\t\t\trecorder = new MediaRecorder(video.srcObject || video.mozSrcObject);\n\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\trecorder.ondataavailable = function (event) {\n\t\t\t\t\t\t\tif (event.data.size > 0) {\n\t\t\t\t\t\t\t\tchunks.push(event.data);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\trecorder.onstop = function () {\n\t\t\t\t\t\t\tclearStopwatchInterval();\n\t\t\t\t\t\t\tshowSample(new Blob(chunks, {type: \"video/webm\"}), resolve, reject);\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\trecorder.start();\n\t\t\t\t\t\t\n\t\t\t\t\t\trecordButtonInner.style.borderRadius = recordButtonInner.style.WebkitBorderRadius = recordButtonInner.style.MozBorderRadius = \"10%\";\n\t\t\t\t\t\trecordButtonInner.style.top = \"12px\";\n\t\t\t\t\t\trecordButtonInner.style.left = \"12px\";\n\t\t\t\t\t\trecordButtonInner.style.width = \"27px\";\n\t\t\t\t\t\trecordButtonInner.style.height = \"27px\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplayRecordStopSound();\n\t\t\t\t\t\t\n\t\t\t\t\t\trecorder.stop();\n\t\t\t\t\t\t\n\t\t\t\t\t\trecordButtonInner.style.borderRadius = recordButtonInner.style.WebkitBorderRadius = recordButtonInner.style.MozBorderRadius = \"50%\";\n\t\t\t\t\t\trecordButtonInner.style.left = \"3px\";\n\t\t\t\t\t\trecordButtonInner.style.top = \"3px\";\n\t\t\t\t\t\trecordButtonInner.style.width = \"44px\";\n\t\t\t\t\t\trecordButtonInner.style.height = \"44px\";\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trecording = !recording;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t};\n\t});\n}\n\nfunction padLeft(number) {\n\tnumber = parseInt(number);\n\tif (number <= 9) return \"0\" + number;\n\treturn number;\n}\n\nfunction blobToDataURL(blob) {\n\treturn new Promise(function (resolve, reject) {\n\t\ttry {\n\t\t\tvar reader = new FileReader();\n\t\t\t\n\t\t\treader.onloadend = function () {\n\t\t\t\tresolve(reader.result);\n\t\t\t};\n\t\t\t\n\t\t\treader.onerror = function (e) {\n\t\t\t\treject(e);\n\t\t\t};\n\t\t\t\n\t\t\treader.readAsDataURL(blob);\n\t\t} catch (e) {\n\t\t\treject(e);\n\t\t}\n\t});\n}\n\nfunction canvasToBlob(canvas) {\n\treturn new Promise(function (resolve, reject) {\n\t\tif (typeof canvas.toBlob === \"function\") {\n\t\t\tcanvas.toBlob(\n\t\t\t\tfunction (blob) {\n\t\t\t\t\tresolve(blob);\n\t\t\t\t}\n\t\t\t\t, \"image/png\"\n\t\t\t);\n\t\t} else if (typeof canvas.msToBlob === \"function\") {\n\t\t\tresolve(canvas.msToBlob());\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tvar dataURL = canvas.toDataURL(\"image/png\"),\n\t\t\t\t\tbyteString = atob(dataURL.split(\",\")[1]),\n\t\t\t\t\tab = new ArrayBuffer(byteString.length),\n\t\t\t\t\tia = new Uint8Array(ab);\n\t\t\t\t\n\t\t\t\tfor (var i = 0; i < byteString.length; i++) {\n\t\t\t\t\tia[i] = byteString.charCodeAt(i);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tresolve(\n\t\t\t\t\tnew Blob(\n\t\t\t\t\t\t[ab],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: dataURL\n\t\t\t\t\t\t\t\t.split(\",\")[0]\n\t\t\t\t\t\t\t\t.split(\":\")[1]\n\t\t\t\t\t\t\t\t.split(\";\")[0]\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction createContainerElement() {\n\tvar div = document.createElement(\"DIV\"),\n\t\tbackground = createBackgroundElement();\n\t\n\tdiv.style.position = \"absolute\";\n\tdiv.style.left = \"0\";\n\tdiv.style.top = top.scrollY + \"px\";\n\tdiv.style.width = \"100%\";\n\tdiv.style.height = \"100%\";\n\tdiv.style.zIndex = \"\" + 0x7fffffff;\n\t\n\tdiv.appendChild(background);\n\t\n\treturn div;\n}\n\nfunction createPaddingElement() {\n\tvar div = document.createElement(\"DIV\");\n\t\n\tdiv.style.position = \"absolute\";\n\tdiv.style.top = \"0\";\n\tdiv.style.height = \"100%\";\n\tdiv.style.backgroundColor = \"#000\";\n\t\n\treturn div;\n}\n\n/**\n *\n * @returns {HTMLVideoElement & {mozSrcObject?: MediaProvider}}\n */\nfunction createVideoElement() {\n\tvar video = document.createElement(\"VIDEO\");\n\t\n\tvideo.style.position = \"absolute\";\n\tvideo.style.top = \"30%\";\n\tvideo.style.height = \"40%\";\n\t\n\tvideo.controls = false;\n\t\n\treturn video;\n}\n\nfunction createBackgroundElement() {\n\tvar div = document.createElement(\"DIV\");\n\t\n\tdiv.style.position = \"absolute\";\n\tdiv.style.left = \"0\";\n\tdiv.style.top = \"0\";\n\tdiv.style.width = \"100%\";\n\tdiv.style.height = \"100%\";\n\tdiv.style.backgroundColor = \"#111\";\n\t\n\treturn div;\n}\n\nfunction createStopwatchElement() {\n\tvar div = document.createElement(\"DIV\");\n\t\n\tdiv.style.position = \"absolute\";\n\tdiv.style.left = \"calc(50% - 50px)\";\n\tdiv.style.top = \"calc(20% - 12px)\";\n\tdiv.style.width = \"100px\";\n\tdiv.style.height = \"24px\";\n\tdiv.style.color = \"#FFF\";\n\tdiv.style.fontWeight = \"400\";\n\tdiv.style.textAlign = \"center\";\n\tdiv.style.fontVariantNumeric = \"tabular-nums\";\n\tdiv.style.fontFeatureSettings = div.style.WebkitFontFeatureSettings = div.style.MozFontFeatureSettings = \"\\\"tnum\\\"\";\n\tdiv.innerText = \"00:00:00\";\n\t\n\treturn div;\n}\n\nfunction createRecordButtonElement() {\n\tvar button = document.createElement(\"BUTTON\");\n\t\n\tbutton.style.position = \"relative\";\n\tbutton.style.left = \"calc(50% - 30px)\";\n\tbutton.style.top = \"calc(80% - 30px)\";\n\tbutton.style.width = \"60px\";\n\tbutton.style.height = \"60px\";\n\tbutton.style.backgroundColor = \"#FFFFFF00\";\n\tbutton.style.borderRadius = button.style.WebkitBorderRadius = button.style.MozBorderRadius = \"50%\";\n\tbutton.style.cursor = \"pointer\";\n\tbutton.style.border = \"5px solid #FFF\";\n\t\n\treturn button;\n}\n\nfunction createRecordButtonInnerElement(type) {\n\tvar div = document.createElement(\"DIV\");\n\t\n\tdiv.style.position = \"absolute\";\n\tdiv.style.left = \"3px\";\n\tdiv.style.top = \"3px\";\n\tdiv.style.width = \"44px\";\n\tdiv.style.height = \"44px\";\n\tdiv.style.borderRadius = \"50%\";\n\t\n\tif (type === Camera.Type.Image) {\n\t\tdiv.style.backgroundColor = \"#FFF\";\n\t} else {\n\t\tdiv.style.backgroundColor = \"#F00\";\n\t}\n\t\n\tif (matchMedia(\"(prefers-reduced-motion: no-preference)\").matches) {\n\t\tdiv.style.transitionProperty = div.style.WebkitTransitionProperty = div.style.MozTransitionProperty = \"border-radius, width, height, top, left\";\n\t\tdiv.style.transitionDuration = div.style.WebkitTransitionDuration = div.style.MozTransitionDuration = \"150ms\";\n\t\tdiv.style.transitionTimingFunction = div.style.WebkitTransitionTimingFunction = div.style.MozTransitionTimingFunction = \"ease\";\n\t}\n\t\n\treturn div;\n}\n\nfunction createSampleElement(type) {\n\tvar media;\n\t\n\tif (type === Camera.Type.Video) {\n\t\tmedia = document.createElement(\"VIDEO\");\n\t\t\n\t\tmedia.controls = true;\n\t} else {\n\t\tmedia = document.createElement(\"IMG\");\n\t}\n\t\n\tmedia.style.position = \"absolute\";\n\tmedia.style.top = \"30%\";\n\tmedia.style.height = \"40%\";\n\tmedia.style.display = \"none\";\n\t\n\treturn media;\n}\n\nfunction createCheckButton() {\n\tvar button = document.createElement(\"BUTTON\"),\n\t\tdiv = document.createElement(\"DIV\");\n\t\n