{"version":3,"file":"711.chunk.js","mappings":"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","sources":["../node_modules/@log4js2/core/dist/appender/appender.wrapper.js","../node_modules/@log4js2/core/dist/appender/console.appender.js","../node_modules/@log4js2/core/dist/appender/index.js","../node_modules/@log4js2/core/dist/appender/log.appender.js","../node_modules/@log4js2/core/dist/const/log.level.js","../node_modules/@log4js2/core/dist/decorator/appender.js","../node_modules/@log4js2/core/dist/decorator/filter.js","../node_modules/@log4js2/core/dist/decorator/log.js","../node_modules/@log4js2/core/dist/filter/index.js","../node_modules/@log4js2/core/dist/filter/log.filter.action.js","../node_modules/@log4js2/core/dist/filter/log.filter.js","../node_modules/@log4js2/core/dist/filter/marker.filter.js","../node_modules/@log4js2/core/dist/filter/threshold.filter.js","../node_modules/@log4js2/core/dist/index.js","../node_modules/@log4js2/core/dist/layout/date.formatter.js","../node_modules/@log4js2/core/dist/layout/formatter.js","../node_modules/@log4js2/core/dist/log4js.js","../node_modules/@log4js2/core/dist/logger/index.js","../node_modules/@log4js2/core/dist/logger/logger.js","../node_modules/@log4js2/core/dist/marker.js","../node_modules/@log4js2/core/dist/util/utility.js","../node_modules/@log4js2/core/dist/util/virtual.console.js","../node_modules/@luxottica/vm-devicedetection/src/parser/UserAgentParser.ts","../node_modules/@luxottica/vm-devicedetection/src/wasm/WasmDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/webgl/WebGlDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/webrtc/WebRtcDetection.ts","../node_modules/@luxottica/vm-devicedetection/src/DeviceDetection.ts","../node_modules/@luxottica/vm-remotelog/src/domain/model/LogMessage.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBRemoteLogFactory.ts","../node_modules/@luxottica/vm-remotelog/src/config/LogsConfigurationRetriever.ts","../node_modules/@luxottica/vm-remotelog/src/config/LogsConfig.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/RemoteLogService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/appender/RemoteLogAppender.ts","../node_modules/@luxottica/vm-remotelog/src/domain/RemoteLogConfig.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBAppViewSessionFactory.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/config/VmAnalyticsApiConfig.ts","../node_modules/@luxottica/vm-remotelog/src/helpers/RequestHelper.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/AppViewSessionAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/AppViewSessionConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/AppViewSessionConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBBrowserSessionFactory.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/BrowserSessionAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/BrowserSessionConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/BrowserSessionConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/RemoteLogAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/RemoteLogConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/RemoteLogConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/db/factory/DBTrackingStatusFactory.ts","../node_modules/@luxottica/vm-remotelog/src/adapter/rest/TrackingStatusAdapter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/consumer/TrackingStatusConsumer.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/TrackingStatusConsumerJob.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/job/JobsStarter.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/AppViewSessionService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/BrowserSessionService.ts","../node_modules/@luxottica/vm-remotelog/src/domain/service/log/producer/TrackingStatusService.ts","../node_modules/@luxottica/vm-remotelog/src/RemoteLog.ts","../node_modules/localforage/dist/localforage.js","../node_modules/path-browserify/index.js","../node_modules/reflect-metadata/Reflect.js","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js"],"sourcesContent":["Object.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../filter\");\nvar log_filter_action_1 = require(\"../filter/log.filter.action\");\nvar AppenderWrapper = /** @class */ (function () {\n function AppenderWrapper(appender, _config) {\n this._config = _config;\n this._appender = new appender(_config.config);\n this._appender.setLayout(_config.layout);\n this._isPassThrough = (!_config || !_config.filters || _config.filters.length === 0);\n if (!this._isPassThrough) {\n this._filters = _config.filters.map(function (value) {\n return {\n filter: (value.filter instanceof Function) ? new value.filter(value.config) :\n new (filter_1.getFilter(value.filter))(value.config),\n config: value.config,\n onMatch: value.onMatch,\n onMismatch: value.onMismatch\n };\n });\n }\n else {\n this._filters = [];\n }\n }\n Object.defineProperty(AppenderWrapper.prototype, \"appender\", {\n get: function () {\n return this._appender;\n },\n enumerable: true,\n configurable: true\n });\n AppenderWrapper.prototype.append = function (event) {\n if (this.isMatch(event)) {\n this._appender.append(event);\n }\n };\n AppenderWrapper.prototype.isMatch = function (event) {\n return this._isPassThrough || this._isMatch(event);\n };\n AppenderWrapper.prototype._isMatch = function (event) {\n var item;\n var count = this._filters.length;\n for (var i = 0; i < count; i++) {\n item = this._filters[i];\n if (!item.filter.isMatch(event)) {\n if (item.onMismatch === log_filter_action_1.LogFilterAction.DENY) {\n return false;\n }\n else if (item.onMismatch === log_filter_action_1.LogFilterAction.ALLOW) {\n return true;\n }\n }\n else {\n if (item.onMatch === log_filter_action_1.LogFilterAction.DENY) {\n return false;\n }\n else if (item.onMatch === log_filter_action_1.LogFilterAction.ALLOW) {\n return true;\n }\n }\n }\n return true;\n };\n return AppenderWrapper;\n}());\nexports.AppenderWrapper = AppenderWrapper;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar log_level_1 = require(\"../const/log.level\");\nvar appender_1 = require(\"../decorator/appender\");\nvar virtual_console_1 = require(\"../util/virtual.console\");\nvar log_appender_1 = require(\"./log.appender\");\nvar ConsoleAppender = /** @class */ (function (_super) {\n __extends(ConsoleAppender, _super);\n function ConsoleAppender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Appends the log event\n * @param {ILogEvent} logEvent\n */\n ConsoleAppender.prototype.append = function (logEvent) {\n if (logEvent.level <= this.getLogLevel()) {\n this._appendToConsole(logEvent);\n }\n };\n /**\n * @private\n * @function\n *\n * @param {ILogEvent} logEvent\n */\n ConsoleAppender.prototype._appendToConsole = function (logEvent) {\n var message = this.format(logEvent);\n switch (logEvent.level) {\n case log_level_1.LogLevel.FATAL:\n case log_level_1.LogLevel.ERROR: {\n if (logEvent.error) {\n virtual_console_1.getVirtualConsole().error(message, logEvent.error);\n }\n else {\n virtual_console_1.getVirtualConsole().error(message);\n }\n break;\n }\n case log_level_1.LogLevel.WARN: {\n virtual_console_1.getVirtualConsole().warn(message);\n break;\n }\n case log_level_1.LogLevel.INFO: {\n virtual_console_1.getVirtualConsole().info(message);\n break;\n }\n case log_level_1.LogLevel.DEBUG:\n case log_level_1.LogLevel.TRACE: {\n virtual_console_1.getVirtualConsole().debug(message);\n break;\n }\n default:\n break;\n }\n };\n ConsoleAppender = __decorate([\n appender_1.Appender('Console')\n ], ConsoleAppender);\n return ConsoleAppender;\n}(log_appender_1.LogAppender));\nexports.ConsoleAppender = ConsoleAppender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar utility_1 = require(\"../util/utility\");\nvar appender_wrapper_1 = require(\"./appender.wrapper\");\nvar log_appender_1 = require(\"./log.appender\");\nvar _appenderMethods = new Set();\n_appenderMethods.add('append');\n_appenderMethods.add('isActive');\n_appenderMethods.add('setLogLevel');\n_appenderMethods.add('setLayout');\n_appenderMethods.add('getLayout');\n_appenderMethods.add('format');\nvar _appenders = new Map();\nvar _registeredLoggerAppenders = new Map();\n/**\n * Validates that the appender\n *\n * @private\n * @function\n *\n * @params {APPENDER} appender\n * @throws {Error} if the appender is invalid\n */\nvar _validateAppender = function (appender) {\n // if we are running ES6, we can make sure it extends LogAppender\n // otherwise, it must be a function\n if (!(appender instanceof log_appender_1.LogAppender)) {\n return;\n }\n // ensure that the appender methods are present (and are functions)\n _appenderMethods.forEach(function (element) {\n if (!appender.prototype[element] || !(appender.prototype[element] instanceof Function)) {\n throw new Error(\"Invalid appender: missing/invalid method: \" + element);\n }\n });\n};\nexports.getAppenderName = function (appender) { return appender.name || utility_1.getFunctionName(appender); };\n/**\n * Adds an appender to the appender queue\n *\n * @function\n *\n * @param {LogAppender} appender\n * @param {string} name\n */\nexports.addAppender = function (appender, name) {\n _validateAppender(appender);\n var appenderName = name || exports.getAppenderName(appender);\n // only put the appender into the set if it doesn't exist already\n if (!_appenders.has(appenderName)) {\n _appenders.set(appenderName, appender);\n }\n return appender;\n};\n/**\n * Registers an appender\n *\n * @param {Newable} appender\n */\nexports.registerAppender = function (appender) {\n var name = exports.getAppenderName(appender);\n if (_appenders.has(name)) {\n exports.addAppender(appender);\n }\n _appenders.set(name, appender);\n return appender;\n};\n/**\n * Gets the appender with the specified name\n *\n * @param name\n */\nexports.getAppender = function (name) { return _appenders.get(name); };\n/**\n * Gets the appender instances. If the appenders parameter is set, then it will only fetch those within the array, otherwise return all\n *\n * @param {string[]} appenders\n */\nexports.getLoggerAppenderInstances = function (appenders) {\n if (appenders && appenders.length > 0) {\n return appenders.map(function (value) {\n if (_registeredLoggerAppenders.has(value)) {\n var appenderConfig = _registeredLoggerAppenders.get(value);\n return new appender_wrapper_1.AppenderWrapper(appenderConfig.appender, appenderConfig);\n }\n throw new Error(\"Invalid appender reference '\" + value + \"'\");\n });\n }\n else {\n var result_1 = [];\n _registeredLoggerAppenders.forEach(function (appenderConfig) {\n return result_1.push(new appender_wrapper_1.AppenderWrapper(appenderConfig.appender, appenderConfig));\n });\n return result_1;\n }\n};\n/**\n * Sets the appender configuration for a specified appender name\n *\n * @param {string} appenderName\n * @param {IAppenderConfiguration} config\n */\nexports.setLoggerAppenderConfig = function (appenderName, config) {\n _registeredLoggerAppenders.set(appenderName, config);\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar formatter_1 = require(\"../layout/formatter\");\nvar LogAppender = /** @class */ (function () {\n function LogAppender(config) {\n // do nothing\n }\n /**\n * Returns whether or not the appender is active\n * @returns {boolean}\n */\n LogAppender.prototype.isActive = function () {\n return this.active === true;\n };\n /**\n * Appends the log\n * @param {ILogEvent} logEvent\n */\n LogAppender.prototype.append = function (logEvent) {\n // stub\n };\n /**\n * Gets the current log level\n * @returns {number}\n */\n LogAppender.prototype.getLogLevel = function () {\n return this.logLevel;\n };\n /**\n * Sets the log level of the appender\n * @param {LogLevel} logLevel\n */\n LogAppender.prototype.setLogLevel = function (logLevel) {\n this.logLevel = logLevel;\n };\n /**\n * Sets the layout of the appender\n * @param {string} layout\n */\n LogAppender.prototype.setLayout = function (layout) {\n this.layout = layout;\n };\n /**\n * Gets the layout associated with the appender\n * @returns {string}\n */\n LogAppender.prototype.getLayout = function () {\n return this.layout;\n };\n /**\n * Formats the log event using the layout provided\n * @param {ILogEvent} logEvent\n */\n LogAppender.prototype.format = function (logEvent) {\n return formatter_1.format(this.getLayout(), logEvent);\n };\n return LogAppender;\n}());\nexports.LogAppender = LogAppender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"OFF\"] = 0] = \"OFF\";\n LogLevel[LogLevel[\"FATAL\"] = 100] = \"FATAL\";\n LogLevel[LogLevel[\"ERROR\"] = 200] = \"ERROR\";\n LogLevel[LogLevel[\"WARN\"] = 300] = \"WARN\";\n LogLevel[LogLevel[\"INFO\"] = 400] = \"INFO\";\n LogLevel[LogLevel[\"DEBUG\"] = 500] = \"DEBUG\";\n LogLevel[LogLevel[\"TRACE\"] = 600] = \"TRACE\";\n LogLevel[LogLevel[\"ALL\"] = 2147483647] = \"ALL\";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"../appender\");\n/**\n *\n * @returns {(target: Newable) => void}\n * @constructor\n */\nfunction Appender(name) {\n return function (target) {\n appender_1.addAppender(target, name);\n return target;\n };\n}\nexports.Appender = Appender;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../filter\");\n/**\n * @returns {(target: Newable) => void}\n * @constructor\n */\nfunction Filter(name) {\n return function (target) {\n filter_1.addFilter(target, name);\n return target;\n };\n}\nexports.Filter = Filter;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"../\");\nrequire(\"reflect-metadata\");\nvar logMarker = Symbol('logMarker');\n/**\n * Sets the marker for the @Log decorator\n *\n * @constructor\n *\n * @param {Marker} marker\n */\nfunction LogMarker(marker) {\n return function (target, key) {\n Reflect.defineMetadata(logMarker, marker, target, key);\n };\n}\nexports.LogMarker = LogMarker;\n/**\n * Log an error on function entry\n *\n * @constructor\n *\n * @param {LogLevel} level\n * @param {string} message\n * @param {any[]} options\n *\n * @returns {Function}\n */\nfunction Log(level, message) {\n var options = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n options[_i - 2] = arguments[_i];\n }\n return function (target, key, descriptor) {\n var originalMethod = descriptor.value;\n descriptor.value = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var marker = Reflect.getOwnMetadata(logMarker, target, key);\n var logger = __1.getLogger(target);\n if (marker) {\n logger.log.apply(logger, [level, marker, message].concat(options));\n }\n else {\n logger.log.apply(logger, [level, message].concat(options));\n }\n return originalMethod.call(this, args);\n };\n return descriptor;\n };\n}\nexports.Log = Log;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"..\");\nvar _filterMethods = new Set();\n_filterMethods.add('isMatch');\nvar _filters = new Map();\n/**\n * Validates that the appender\n *\n * @private\n * @function\n *\n * @params {APPENDER} appender\n * @throws {Error} if the appender is invalid\n */\nvar _validateFilter = function (filter) {\n // if we are running ES6, we can make sure it extends LogAppender\n // otherwise, it must be a function\n if (!(filter instanceof __1.LogFilter)) {\n return;\n }\n // instantiate the appender function\n var filterObj = new filter();\n // ensure that the appender methods are present (and are functions)\n _filterMethods.forEach(function (element) {\n if (!filterObj[element] || !(filterObj[element] instanceof Function)) {\n throw new Error(\"Invalid filter: missing/invalid method: \" + element);\n }\n });\n};\nexports.addFilter = function (filter, name) {\n _validateFilter(filter);\n // only put the appender into the set if it doesn't exist already\n if (!_filters.has(name)) {\n _filters.set(name, filter);\n }\n return filter;\n};\nexports.getFilter = function (name) { return _filters.get(name); };\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogFilterAction;\n(function (LogFilterAction) {\n LogFilterAction[\"ALLOW\"] = \"ALLOW\";\n LogFilterAction[\"NEUTRAL\"] = \"NEUTRAL\";\n LogFilterAction[\"DENY\"] = \"DENY\";\n})(LogFilterAction = exports.LogFilterAction || (exports.LogFilterAction = {}));\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar LogFilter = /** @class */ (function () {\n function LogFilter(configuration) {\n this.configuration = configuration;\n }\n return LogFilter;\n}());\nexports.LogFilter = LogFilter;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../decorator/filter\");\nvar log_filter_1 = require(\"./log.filter\");\nvar MarkerFilter = /** @class */ (function (_super) {\n __extends(MarkerFilter, _super);\n function MarkerFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Checks to see if the marker matches the filter configuration\n *\n * @param {ILogEvent} logEvent\n */\n MarkerFilter.prototype.isMatch = function (logEvent) {\n if (!logEvent.marker) {\n return false;\n }\n else {\n return logEvent.marker.name === this.configuration.marker || this._isParentMarkerMatch(logEvent.marker);\n }\n };\n /**\n * Checks if the parent markers match the filter criteria\n *\n * @private\n *\n * @param {Marker} marker\n * @return {boolean}\n */\n MarkerFilter.prototype._isParentMarkerMatch = function (marker) {\n var _this = this;\n if (!marker.hasParents()) {\n return false;\n }\n else {\n return marker.getParents().every(function (parent) {\n return (parent.name === _this.configuration.marker || _this._isParentMarkerMatch(parent));\n });\n }\n };\n MarkerFilter = __decorate([\n filter_1.Filter('Marker')\n ], MarkerFilter);\n return MarkerFilter;\n}(log_filter_1.LogFilter));\nexports.MarkerFilter = MarkerFilter;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar filter_1 = require(\"../decorator/filter\");\nvar log_filter_1 = require(\"./log.filter\");\nvar ThresholdFilter = /** @class */ (function (_super) {\n __extends(ThresholdFilter, _super);\n function ThresholdFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ThresholdFilter.prototype.isMatch = function (logEvent) {\n return logEvent.level <= this.configuration.level;\n };\n ThresholdFilter = __decorate([\n filter_1.Filter('Threshold')\n ], ThresholdFilter);\n return ThresholdFilter;\n}(log_filter_1.LogFilter));\nexports.ThresholdFilter = ThresholdFilter;\n","function __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"reflect-metadata\");\n__export(require(\"./log4js\"));\nvar logger_1 = require(\"./logger/logger\");\nexports.Logger = logger_1.Logger;\nvar log_level_1 = require(\"./const/log.level\");\nexports.LogLevel = log_level_1.LogLevel;\nvar log_appender_1 = require(\"./appender/log.appender\");\nexports.LogAppender = log_appender_1.LogAppender;\nvar console_appender_1 = require(\"./appender/console.appender\");\nexports.ConsoleAppender = console_appender_1.ConsoleAppender;\nvar marker_1 = require(\"./marker\");\nexports.Marker = marker_1.Marker;\nvar appender_1 = require(\"./decorator/appender\");\nexports.Appender = appender_1.Appender;\nvar filter_1 = require(\"./decorator/filter\");\nexports.Filter = filter_1.Filter;\nvar log_1 = require(\"./decorator/log\");\nexports.Log = log_1.Log;\nexports.LogMarker = log_1.LogMarker;\nvar log_filter_action_1 = require(\"./filter/log.filter.action\");\nexports.LogFilterAction = log_filter_action_1.LogFilterAction;\nvar log_filter_1 = require(\"./filter/log.filter\");\nexports.LogFilter = log_filter_1.LogFilter;\nvar marker_filter_1 = require(\"./filter/marker.filter\");\nexports.MarkerFilter = marker_filter_1.MarkerFilter;\nvar threshold_filter_1 = require(\"./filter/threshold.filter\");\nexports.ThresholdFilter = threshold_filter_1.ThresholdFilter;\n","// tslint:disable:bool-param-default\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable-next-line\nvar TIMEZONE = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\nvar TIMEZONE_CLIP = /[^-+\\dA-Z]/g;\n/**\n * Pads numbers in the date format\n *\n * @param {string|number} value\n * @param {number} length\n * @param {string} character\n *\n * @returns {string} the padded string\n */\nexports.padLeft = function (value, length, character) {\n if (character === void 0) { character = ' '; }\n var strValue = String(value);\n while (strValue.length < length) {\n strValue = character + strValue;\n }\n return strValue;\n};\nvar DateTimeFormat;\n(function (DateTimeFormat) {\n DateTimeFormat[\"DEFAULT\"] = \"yyyy-MM-dd HH:mm:ss,S\";\n DateTimeFormat[\"ABSOLUTE\"] = \"HH:mm:ss,S\";\n DateTimeFormat[\"COMPACT\"] = \"yyyyMMddHHmmssS\";\n DateTimeFormat[\"DATE\"] = \"dd MMM yyyy HH:mm:ss,S\";\n DateTimeFormat[\"ISO8601\"] = \"yyyy-MM-ddTHH:mm:ss,S\";\n DateTimeFormat[\"ISO8601_BASIC\"] = \"yyyyMMddTHHmmss,S\";\n})(DateTimeFormat = exports.DateTimeFormat || (exports.DateTimeFormat = {}));\nvar _i18n = {\n d: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sunday', 'Monday',\n 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n m: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar _maskStore = {};\nvar _flags = {\n d: function (date) { return date.getDate(); },\n dd: function (date) { return exports.padLeft(date.getDate(), 2, '0'); },\n ddd: function (date) { return _i18n.d[date.getDay()]; },\n dddd: function (date) { return _i18n.d[date.getDay() + 7]; },\n M: function (date) { return date.getMonth() + 1; },\n MM: function (date) { return exports.padLeft(date.getMonth() + 1, 2, '0'); },\n MMM: function (date) { return _i18n.m[date.getMonth()]; },\n MMMM: function (date) { return _i18n.m[date.getMonth() + 12]; },\n yy: function (date, isUTC) { return String(isUTC ? date.getFullYear() : date.getUTCFullYear()).slice(2); },\n yyyy: function (date, isUTC) { return isUTC ? date.getFullYear() : date.getUTCFullYear(); },\n h: function (date) { return date.getHours() % 12 || 12; },\n hh: function (date) { return exports.padLeft(date.getHours() % 12 || 12, 2, '0'); },\n H: function (date) { return date.getHours(); },\n HH: function (date) { return exports.padLeft(date.getHours(), 2, '0'); },\n m: function (date) { return date.getMinutes(); },\n mm: function (date) { return exports.padLeft(date.getMinutes(), 2, '0'); },\n s: function (date) { return date.getSeconds(); },\n ss: function (date) { return exports.padLeft(date.getSeconds(), 2, '0'); },\n S: function (date) { return exports.padLeft(date.getMilliseconds(), 1); },\n a: function (date) { return date.getHours() < 12 ? 'a' : 'p'; },\n aa: function (date) { return date.getHours() < 12 ? 'am' : 'pm'; },\n A: function (date) { return date.getHours() < 12 ? 'A' : 'P'; },\n AA: function (date) { return date.getHours() < 12 ? 'AM' : 'PM'; },\n Z: function (date, isUTC) { return isUTC ? 'UTC' : (String(date).match(TIMEZONE)).pop().replace(TIMEZONE_CLIP, ''); },\n o: function (date, isUTC) {\n var offset = isUTC ? 0 : date.getTimezoneOffset();\n return (offset > 0 ? '-' : '+') + exports.padLeft(Math.floor(Math.abs(offset) / 60) * 100 + Math.abs(offset) % 60, 4, '0');\n }\n};\nfunction _createMask(mask) {\n if (_maskStore[mask] instanceof Array) {\n return _maskStore[mask];\n }\n var formatMap = [];\n var regex = /(.)\\1+|(.)/;\n var maskStr = mask;\n var match;\n var value;\n // tslint:disable-next-line:no-conditional-assignment\n while (match = maskStr.match(regex)) {\n value = match[0];\n formatMap.push(_flags[value] || value);\n maskStr = maskStr.substring(value.length);\n }\n _maskStore[mask] = formatMap;\n return formatMap;\n}\n/**\n * Converts a date to a formatted string\n * @param {Date | string | number} date\n * @param {string} mask\n * @returns {string}\n */\nexports.formatDate = function (date, mask) {\n if (!(date instanceof Date)) {\n date = new Date(date);\n }\n mask = String(mask || DateTimeFormat.DEFAULT);\n var isUTC = (mask.slice(0, 4) === 'UTC:');\n if (isUTC) {\n mask = mask.slice(4);\n }\n return _createMask(mask).map(function (value) {\n return value instanceof Function ? value(date, isUTC) : value;\n }).join('');\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar log_level_1 = require(\"../const/log.level\");\nvar utility_1 = require(\"../util/utility\");\nvar date_formatter_1 = require(\"./date.formatter\");\n/**\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction format(layout, logEvent) {\n return _formatLogEvent(_getCompiledLayout(layout), logEvent);\n}\nexports.format = format;\n/** @type {Map} */\nvar _compiledLayouts = new Map();\nvar _formatters = {\n 'c|logger': _formatLogger,\n 'd|date': _formatDate,\n 'ex|exception|throwable': _formatException,\n 'F|file': _formatFile,\n 'K|map|MAP': _formatMapMessage,\n 'L|line': _formatLineNumber,\n 'column': _formatColumn,\n 'm|msg|message': _formatLogMessage,\n 'M|method': _formatMethodName,\n 'marker': _formatMarker,\n 'markerSimpleName': _formatMarkerSimple,\n 'n': _formatLineSeparator,\n 'p|level': _formatLevel,\n 'r|relative': _formatRelative,\n 'sn|sequenceNumber': _formatSequenceNumber\n};\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogger(logEvent) {\n return logEvent.logger;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n * @param {Array.} params\n *\n * @return {string}\n */\nfunction _formatDate(logEvent, params) {\n return date_formatter_1.formatDate(logEvent.date, date_formatter_1.DateTimeFormat[params[0]] || params[0]);\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatException(logEvent) {\n var message = '';\n if (logEvent.error != null) {\n if (logEvent.error.stack) {\n var stacks = logEvent.error.stack.split(/\\n/g);\n message += stacks.reduce(function (accumulator, value) { return accumulator + (\"\\t\" + value + \"\\n\"); });\n }\n else if (logEvent.error.message != null && logEvent.error.message !== '') {\n message += \"\\t\" + logEvent.error.name + \": \" + logEvent.error.message + \"\\n\";\n }\n }\n return message;\n}\n/**\n * Formats the file (e.g. test.js) to the file\n *\n * @private\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n */\nfunction _formatFile(logEvent) {\n if (!logEvent.file) {\n _getFileDetails(logEvent);\n }\n return logEvent.file;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLineNumber(logEvent) {\n if (!logEvent.lineNumber) {\n _getFileDetails(logEvent);\n }\n return \"\" + logEvent.lineNumber;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatColumn(logEvent) {\n if (!logEvent.column) {\n _getFileDetails(logEvent);\n }\n return \"\" + logEvent.column;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n * @param {Array.} params\n *\n * @return {string}\n */\nfunction _formatMapMessage(logEvent, params) {\n var message = null;\n if (logEvent.properties) {\n message = [];\n for (var key in logEvent.properties) {\n if (params[0]) {\n if (params[0] === key) {\n message.push(logEvent.properties[key]);\n }\n }\n else {\n message.push('{' + key + ',' + logEvent.properties[key] + '}');\n }\n }\n return '{' + message.join(',') + '}';\n }\n return message;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogMessage(logEvent) {\n return logEvent.message;\n}\nfunction _formatMarkerFromEvent(marker) {\n if (marker.hasParents()) {\n var formatted = marker.getParents().map(function (parent) { return _formatMarkerFromEvent(parent); });\n return marker.name + \"[ \" + formatted + \" ]\";\n }\n else {\n return \"\" + marker.name;\n }\n}\n/**\n *\n * @private\n *\n * @param {ILogEvent} logEvent\n * @return {string}\n */\nfunction _formatMarker(logEvent) {\n return (logEvent.marker) ? _formatMarkerFromEvent(logEvent.marker) : '';\n}\n/**\n * Formats just the marker name (no parents)\n *\n * @private\n *\n * @param {ILogEvent} logEvent\n * @return {string}\n */\nfunction _formatMarkerSimple(logEvent) {\n return (logEvent.marker) ? logEvent.marker.name : '';\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatMethodName(logEvent) {\n return utility_1.getFunctionName(logEvent.method);\n}\n/**\n * @private\n * @function\n * @memberOf formatter\n */\nfunction _formatLineSeparator() {\n return '\\n';\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLevel(logEvent) {\n switch (logEvent.level) {\n case log_level_1.LogLevel.FATAL:\n return 'FATAL';\n case log_level_1.LogLevel.ERROR:\n return 'ERROR';\n case log_level_1.LogLevel.WARN:\n return 'WARN';\n case log_level_1.LogLevel.INFO:\n return 'INFO';\n case log_level_1.LogLevel.DEBUG:\n return 'DEBUG';\n case log_level_1.LogLevel.TRACE:\n default:\n return 'TRACE';\n }\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatRelative(logEvent) {\n return '' + logEvent.relative;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatSequenceNumber(logEvent) {\n return '' + logEvent.sequence;\n}\n/**\n * Get the compiled layout for the specified layout string. If the compiled layout does not\n * exist, then we want to create it.\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n *\n * @return {Array.}\n */\nfunction _getCompiledLayout(layout) {\n if (_compiledLayouts.has(layout)) {\n return _compiledLayouts.get(layout);\n }\n return _compileLayout(layout);\n}\n/**\n * Compiles a layout into an array. The array contains functions\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} layout\n *\n * @return {Array.}\n */\nfunction _compileLayout(layout) {\n var formatArray = layout.match(/(%\\w+({[\\w-]+}|)|.)/g)\n .map(function (value) { return _getFormatterObject(value); });\n // set the format array to the specified compiled layout\n _compiledLayouts.set(layout, formatArray);\n return formatArray;\n}\n/**\n * @function\n * @memberOf formatter\n *\n * @param {string} formatString\n *\n * @return {Object|string}\n */\nfunction _getFormatterObject(formatString) {\n var result = /%(\\w+)(?:{([\\w-]+)})*/g.exec(formatString);\n if (result == null) {\n return formatString;\n }\n else if (result.length < 3) {\n return {\n formatter: _getFormatterFunction(result[1]),\n params: []\n };\n }\n else {\n var formatter = _getFormatterFunction(result[1]);\n if (!formatter) {\n return null;\n }\n var params = _getLayoutTagParams(result[2]);\n return {\n formatter: formatter,\n params: params\n };\n }\n}\n/**\n * Determines what formatter function has been configured\n *\n * @function\n * @memberOf formatter\n *\n * @param {string} command\n *\n * @return {?string}\n */\nfunction _getFormatterFunction(command) {\n var regex;\n for (var key in _formatters) {\n if (_formatters.hasOwnProperty(key)) {\n regex = new RegExp('^(' + key + ')$');\n if (regex.exec(command)) {\n return _formatters[key];\n }\n }\n }\n return null;\n}\n/**\n * Gets the layout tag params associated with the layout tag. So, for example, '%d{yyyy-MM-dd}`\n * would output an array of ['yyyy-MM-dd']\n *\n * @private\n * @function\n *\n * @param {string} command\n *\n * @return {Array.}\n */\nfunction _getLayoutTagParams(command) {\n return (command) ? command.split(',') : [];\n}\n/**\n * Handles formatting the log event using the specified formatter array\n *\n * @private\n * @function\n *\n * @param {Array.} formatter\n * @param {ILogEvent} logEvent\n *\n * @return {string}\n */\nfunction _formatLogEvent(formatter, logEvent) {\n var response;\n var message = '';\n var count = formatter.length;\n for (var i = 0; i < count; i++) {\n if (formatter[i] !== null) {\n if (formatter[i] instanceof Object) {\n response = formatter[i].formatter(logEvent, formatter[i].params);\n if (response != null) {\n message += response;\n }\n }\n else {\n message += formatter[i];\n }\n }\n }\n return message.trim();\n}\n/**\n *\n * @private\n * @function\n * @memberOf formatter\n *\n * @param {ILogEvent} logEvent\n */\nfunction _getFileDetails(logEvent) {\n if (logEvent.logErrorStack) {\n var parts = logEvent.logErrorStack.stack.split(/\\n/g);\n var file = parts[3];\n file = file.replace(/at (.*\\(|)(file|http|https|)(:|)(\\/|)*/, '');\n file = file.replace(')', '');\n file = file.replace((typeof location !== 'undefined') ? location.host : '', '').trim();\n var fileParts = file.split(/:/g);\n logEvent.column = fileParts.pop();\n logEvent.lineNumber = fileParts.pop();\n if (typeof define !== 'undefined') {\n var path = require('path');\n var appDir = path.dirname(require.main.filename);\n if (!fileParts[0] || !fileParts[0].startsWith(appDir)) {\n appDir = '';\n }\n logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^([\\\\\\/])/, '');\n }\n else {\n logEvent.filename = fileParts.join(':');\n }\n }\n else {\n logEvent.column = '?';\n logEvent.filename = 'anonymous';\n logEvent.lineNumber = '?';\n }\n logEvent.file = logEvent.filename;\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"./appender\");\nvar console_appender_1 = require(\"./appender/console.appender\");\nvar log_level_1 = require(\"./const/log.level\");\nvar logger_1 = require(\"./logger\");\nvar logger_2 = require(\"./logger/logger\");\nvar utility_1 = require(\"./util/utility\");\nvar virtual_console_1 = require(\"./util/virtual.console\");\n/**\n * The default appenders that should be included if no appenders are specified\n * @const\n */\nvar _DEFAULT_APPENDERS = (function () {\n return [console_appender_1.ConsoleAppender];\n})();\nvar _DEFAULT_PATTERN_LAYOUT = '%d [%p] %c - %m';\n/**\n * The default configuration for log4js2. If no configuration is specified, then this\n * configuration will be injected\n * @const\n */\nvar _DEFAULT_CONFIG = (function () { return ({\n appenders: _DEFAULT_APPENDERS,\n loggers: [{\n level: log_level_1.LogLevel.ERROR\n }],\n layout: '%d [%p] %c - %m'\n}); })();\n/** @type {?IConfiguration} */\nvar _configuration = null;\n/**\n * Gets the appenders for the level and layout\n *\n * @private\n * @function\n *\n * @param {ILoggerConfiguration} logConfig\n *\n * @returns {Array}\n */\nvar _getAppendersForLogger = function (logConfig) {\n var appenderList = [];\n appender_1.getLoggerAppenderInstances(logConfig.appenders).forEach(function (appenderWrapper) {\n appenderWrapper.appender.setLogLevel(logConfig.level);\n appenderWrapper.appender.setLayout(logConfig.layout);\n appenderList.push(appenderWrapper);\n });\n return appenderList;\n};\n/**\n * Configures the loggers\n *\n * @private\n * @function\n *\n * @param {IConfiguration} config\n */\nvar _configureLoggers = function (config) {\n var loggers = config.loggers;\n var hasMain = false;\n if (utility_1.isArray(loggers)) {\n loggers.forEach(function (logger) {\n logger.tag = logger.tag || logger_1.MAIN_LOGGER;\n hasMain = hasMain || logger.tag === logger_1.MAIN_LOGGER;\n if (!logger.layout || typeof logger.layout !== 'string') {\n logger.layout = config.layout;\n }\n logger.layout = logger.layout || _DEFAULT_PATTERN_LAYOUT;\n logger.level = logger.level || config.level || log_level_1.LogLevel.ERROR;\n logger_1.addLogger(logger.tag, new logger_2.Logger(logger.tag, _getAppendersForLogger(logger)));\n });\n }\n else {\n loggers = [];\n }\n if (!hasMain) {\n var mainLoggerConfig = {\n tag: logger_1.MAIN_LOGGER,\n level: config.level || log_level_1.LogLevel.ERROR,\n layout: config.layout || _DEFAULT_PATTERN_LAYOUT,\n };\n loggers.push(mainLoggerConfig);\n logger_1.addLogger(logger_1.MAIN_LOGGER, new logger_2.Logger(logger_1.MAIN_LOGGER, _getAppendersForLogger(mainLoggerConfig)));\n }\n return __assign({}, config, { loggers: loggers });\n};\n/**\n * Configures appenders\n *\n * @private\n * @function\n *\n * @param {IConfiguration} config\n */\nvar _configureAppenders = function (config) {\n var appenders = config.appenders;\n if (!utility_1.isArray(appenders)) {\n appenders = _DEFAULT_APPENDERS;\n }\n var result = appenders\n .map(function (value) {\n var appender;\n var appenderConfig;\n if (typeof value === 'string') {\n appender = appender_1.getAppender(value);\n appenderConfig = {\n name: appender_1.getAppenderName(appender),\n appender: appender\n };\n }\n else if (value.appender) {\n if (typeof value.appender === 'string') {\n appender = appender_1.getAppender(value.appender);\n }\n else {\n appender = appender_1.registerAppender(value.appender);\n }\n appenderConfig = __assign({}, value, { name: value.name || appender_1.getAppenderName(appender), appender: appender });\n }\n else if (value.prototype.append) {\n appender = appender_1.registerAppender(value);\n appenderConfig = {\n name: appender_1.getAppenderName(appender),\n appender: appender\n };\n }\n else {\n throw new Error('Invalid appender: \\'' + value + '\\'');\n }\n appender_1.setLoggerAppenderConfig(appenderConfig.name, appenderConfig);\n return appenderConfig;\n });\n return __assign({}, config, { appenders: result });\n};\n/**\n * Configures the logger\n *\n * @function\n * @params {IConfiguration} config\n */\nfunction configure(config) {\n // set the default layout\n if (!config.layout) {\n config.layout = _DEFAULT_PATTERN_LAYOUT;\n }\n // configure the appenders\n config = _configureAppenders(config);\n // configure the loggers\n config = _configureLoggers(config);\n _configuration = config;\n if (config.virtualConsole !== false) {\n virtual_console_1.getVirtualConsole(logger_1.getLogger(logger_1.MAIN_LOGGER, _getLoggerConfiguration(logger_1.MAIN_LOGGER)));\n }\n else {\n virtual_console_1.useVirtualConsole(false);\n }\n}\nexports.configure = configure;\nexports.getLogger = function (context) {\n if (!_configuration) {\n configure(_DEFAULT_CONFIG);\n }\n var logContext = _determineContext(context);\n var loggerConfig = _getLoggerConfiguration(logContext) || _getLoggerConfiguration(logger_1.MAIN_LOGGER);\n return logger_1.getLogger(logContext, loggerConfig);\n};\nfunction _getLoggerConfiguration(context) {\n return _configuration.loggers.filter(function (value) { return value.tag === context; })[0];\n}\nfunction _determineContext(context) {\n // determine the context\n if (typeof context === 'string') {\n return context;\n }\n if (typeof context === 'function') {\n return utility_1.getFunctionName(context);\n }\n else if (typeof context === 'object') {\n context = utility_1.getFunctionName(context.constructor);\n if (context === 'Object') {\n return 'anonymous';\n }\n else {\n return context;\n }\n }\n else {\n return logger_1.MAIN_LOGGER;\n }\n}\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar appender_1 = require(\"../appender\");\nvar logger_1 = require(\"./logger\");\n/**\n * The name of the main logger. We use this in case no logger is specified\n * @const\n */\nexports.MAIN_LOGGER = 'main';\n/**\n *\n */\nvar _loggers = new Map();\nexports.addLogger = function (tag, logger) {\n _loggers.set(tag, logger);\n};\n/**\n * Handles creating the logger and returning it\n *\n * @function\n *\n * @param {function|string=} context\n * @param {ILoggerConfiguration} config\n * @return {Logger}\n */\nexports.getLogger = function (context, config) {\n if (_loggers.has(context)) {\n return _loggers.get(context);\n }\n else {\n var appenders = appender_1.getLoggerAppenderInstances(config.appenders)\n .map(function (appenderWrapper) {\n appenderWrapper.appender.setLogLevel(config.level);\n appenderWrapper.appender.setLayout(config.layout);\n return appenderWrapper;\n });\n return new logger_1.Logger(context, appenders);\n }\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar __1 = require(\"..\");\nvar marker_1 = require(\"../marker\");\nvar Logger = /** @class */ (function () {\n function Logger(context, _appenders) {\n this._appenders = _appenders;\n this._logContext = context;\n this._logSequence = 0;\n this._relative = (new Date()).getTime();\n }\n Logger.prototype.log = function (level, marker) {\n var _this = this;\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(level, passed, 1));\n });\n };\n Logger.prototype.fatal = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.FATAL, passed));\n });\n };\n Logger.prototype.error = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.ERROR, passed));\n });\n };\n Logger.prototype.warn = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.WARN, passed));\n });\n };\n Logger.prototype.info = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.INFO, passed));\n });\n };\n Logger.prototype.debug = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.DEBUG, passed));\n });\n };\n Logger.prototype.trace = function (marker) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var passed = arguments;\n this._appenders.forEach(function (appender) {\n return appender.append(_this._constructLogEvent(__1.LogLevel.TRACE, passed));\n });\n };\n /**\n * @function\n *\n * @param {number} level\n * @param {Array.} args\n * @param {number} offset\n *\n * @return {ILogEvent}\n */\n Logger.prototype._constructLogEvent = function (level, args, offset) {\n if (offset === void 0) { offset = 0; }\n var logTime = new Date();\n var error = null;\n // this looks horrible, but this is the only way to catch the stack for IE to later parse the stack\n try {\n throw new Error();\n }\n catch (e) {\n error = e;\n }\n var logEvent = {\n date: logTime,\n error: null,\n logErrorStack: error,\n file: null,\n level: level,\n lineNumber: null,\n logger: this._logContext,\n message: '',\n method: this._isNotStrict() ? args.callee.caller : 0,\n properties: undefined,\n relative: logTime.getTime() - this._relative,\n sequence: this._logSequence++,\n };\n var regex = /\\{\\}/g;\n for (var i = offset; i < args.length; i++) {\n if (i === offset || (i === offset + 1 && logEvent.marker)) {\n if (args[i] instanceof marker_1.Marker) {\n logEvent.marker = args[i];\n }\n else {\n logEvent.message = args[i];\n }\n }\n else if (regex.exec(logEvent.message)) {\n logEvent.message = logEvent.message.replace(/\\{\\}/, args[i]);\n }\n else if (args[i] instanceof Error) {\n logEvent.error = args[i];\n }\n else {\n logEvent.properties = args[i];\n }\n }\n return logEvent;\n };\n /**\n * Returns whether or not the script is in strict mode\n *\n * @private\n * @function\n *\n * @returns {boolean}\n */\n Logger.prototype._isNotStrict = function () {\n var _this = this;\n return (function () { return !_this; })();\n };\n return Logger;\n}());\nexports.Logger = Logger;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\nvar Marker = /** @class */ (function () {\n /**\n * Hide the constructor. We don't want people to arbitrarily make these without access to Marker#getMarker\n * @param {string} name\n */\n function Marker(name) {\n this._parents = new Set();\n this._name = name;\n }\n /**\n * Gets the marker for the specified name\n * @param {string} name\n * @returns {Marker}\n */\n Marker.getMarker = function (name) {\n if (!Marker._markers.hasOwnProperty(name)) {\n Marker._markers[name] = new Marker(name);\n }\n return Marker._markers[name];\n };\n Object.defineProperty(Marker.prototype, \"name\", {\n /**\n * The name of the marker\n * @returns {string}\n */\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the parents of the marker. This converts the WeakSet into an array\n * @returns {Marker[]}\n */\n Marker.prototype.getParents = function () {\n var result = [];\n this._parents.forEach(function (marker) { return result.push(marker); });\n return result;\n };\n /**\n * Returns whether or not the marker has parents\n * @returns {boolean}\n */\n Marker.prototype.hasParents = function () {\n return this._parents.size > 0;\n };\n /**\n * Removes the specified marker as a parent\n * @param {Marker} marker\n */\n Marker.prototype.remove = function (marker) {\n this._parents.delete(marker);\n return this;\n };\n /**\n * Sets the parent markers by replacing the current set\n * @param {Marker} markers\n */\n Marker.prototype.setParents = function () {\n var markers = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n markers[_i] = arguments[_i];\n }\n var index = markers.length;\n while (index--) {\n this._parents.add(markers[index]);\n }\n return this;\n };\n Marker._markers = {};\n return Marker;\n}());\nexports.Marker = Marker;\n","Object.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Gets the function name of the specified function\n *\n * @function\n * @param {Function} func\n *\n * @returns {string}\n */\nexports.getFunctionName = function (func) {\n if (func.name !== '') {\n return func.name;\n }\n else {\n // get the name of the function\n var name_1 = func.toString().substring('function '.length);\n name_1 = name_1.substring(0, name_1.indexOf('('));\n // if the string is not empty\n return (name_1 && name_1.trim()) ? name_1 : 'anonymous';\n }\n};\n/**\n * Determines whether or not the value is an array. Return false is null\n *\n * @param {any} value\n * @returns {boolean} true if non-null array, else false\n */\nexports.isArray = function (value) {\n return (typeof value === 'object' && value instanceof Array);\n};\n","Object.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:bool-param-default\nvar _virtualConsole;\nvar _isUseVirtualConsole = true;\nexports.useVirtualConsole = function (state) {\n _isUseVirtualConsole = state;\n};\nexports.getVirtualConsole = function (logger) {\n if (!_isUseVirtualConsole) {\n return console;\n }\n var Log4JConsole = /** @class */ (function () {\n function Log4JConsole() {\n this.isVirtual = true;\n this.memory = {};\n }\n Log4JConsole.prototype.assert = function (condition, message) {\n var data = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n data[_i - 2] = arguments[_i];\n }\n _virtualConsole.assert.call(arguments);\n };\n Log4JConsole.prototype.clear = function () {\n _virtualConsole.clear();\n };\n Log4JConsole.prototype.count = function (label) {\n _virtualConsole.count(label);\n };\n Log4JConsole.prototype.dir = function (value) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.dir.apply(_virtualConsole, [value].concat(optionalParams));\n };\n Log4JConsole.prototype.dirxml = function (value) {\n _virtualConsole.dirxml(value);\n };\n Log4JConsole.prototype.group = function (groupTitle) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.group.apply(_virtualConsole, [groupTitle].concat(optionalParams));\n };\n Log4JConsole.prototype.groupCollapsed = function (groupTitle) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n _virtualConsole.groupCollapsed.apply(_virtualConsole, [groupTitle].concat(optionalParams));\n };\n Log4JConsole.prototype.groupEnd = function () {\n _virtualConsole.groupEnd();\n };\n Log4JConsole.prototype.markTimeline = function (label) {\n if (typeof _virtualConsole.markTimeline === 'function') {\n _virtualConsole.markTimeline(label);\n }\n };\n Log4JConsole.prototype.msIsIndependentlyComposed = function (element) {\n if (typeof _virtualConsole.msIsIndependentlyComposed === 'function') {\n return _virtualConsole.msIsIndependentlyComposed(element);\n }\n };\n Log4JConsole.prototype.profile = function (reportName) {\n if (typeof _virtualConsole.profile === 'function') {\n _virtualConsole.profile(reportName);\n }\n };\n Log4JConsole.prototype.profileEnd = function () {\n if (typeof _virtualConsole.profileEnd === 'function') {\n _virtualConsole.profileEnd();\n }\n };\n Log4JConsole.prototype.table = function () {\n var tabularData = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tabularData[_i] = arguments[_i];\n }\n _virtualConsole.table.apply(_virtualConsole, tabularData);\n };\n Log4JConsole.prototype.time = function (label) {\n _virtualConsole.time(label);\n };\n Log4JConsole.prototype.timeEnd = function (label) {\n if (typeof _virtualConsole.timeEnd === 'function') {\n _virtualConsole.timeEnd(label);\n }\n };\n Log4JConsole.prototype.timeStamp = function (label) {\n if (typeof _virtualConsole.timeStamp === 'function') {\n _virtualConsole.timeStamp(label);\n }\n };\n Log4JConsole.prototype.timeline = function (label) {\n if (typeof _virtualConsole.timeline === 'function') {\n _virtualConsole.timeline(label);\n }\n };\n Log4JConsole.prototype.timelineEnd = function (label) {\n if (typeof _virtualConsole.timelineEnd === 'function') {\n _virtualConsole.timelineEnd(label);\n }\n };\n Log4JConsole.prototype.debug = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.debug.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.error = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.error.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.exception = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.error.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.info = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.info.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.log = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.debug.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.trace = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.trace.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.warn = function (message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n logger.warn.apply(logger, [message].concat(optionalParams));\n };\n Log4JConsole.prototype.countReset = function (label) {\n _virtualConsole.countReset(label);\n };\n Log4JConsole.prototype.timeLog = function (label) {\n var data = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n data[_i - 1] = arguments[_i];\n }\n _virtualConsole.timeLog.apply(_virtualConsole, [label].concat(data));\n };\n return Log4JConsole;\n }());\n if (!_virtualConsole) {\n _virtualConsole = console;\n console = new Log4JConsole();\n }\n return _virtualConsole;\n};\n","import { UAParser } from \"ua-parser-js\";\n\nclass UserAgentParser {\n\n public static getInstance() {\n if (!UserAgentParser.instance) {\n UserAgentParser.instance = new UserAgentParser();\n }\n return UserAgentParser.instance;\n }\n\n private static instance: UserAgentParser;\n private userAgentData: IUAParser.IResult;\n\n private constructor() {\n this.userAgentData = new UAParser().getResult();\n }\n\n public getUserAgentData(): IUAParser.IResult {\n return this.userAgentData;\n }\n\n}\n\nexport { UserAgentParser };\n","\nclass WasmDetection {\n\n public static getInstance() {\n if (!WasmDetection.instance) {\n WasmDetection.instance = new WasmDetection();\n }\n return WasmDetection.instance;\n }\n\n private static instance: WasmDetection;\n\n private simplewasm = Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00);\n\n public isWebAssemblySupported(): boolean {\n let supported = false;\n try {\n if (typeof WebAssembly === \"object\" && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(this.simplewasm);\n supported = module instanceof WebAssembly.Module\n && new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n } catch (e) {\n supported = false;\n }\n return supported;\n }\n\n}\n\nexport { WasmDetection };\n","\nclass WebGlDetection {\n\n public static getInstance() {\n if (!WebGlDetection.instance) {\n WebGlDetection.instance = new WebGlDetection();\n }\n return WebGlDetection.instance;\n }\n\n private static instance: WebGlDetection;\n\n private static tmpCanvasElementId = \"canvas-for-webgl-check\";\n private static webglCtxAttributes: WebGLContextAttributes = { depth: true, premultipliedAlpha: false };\n\n public isWebGlSupported(): boolean {\n let supported = false;\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\"id\", WebGlDetection.tmpCanvasElementId);\n if (canvas) {\n const webglContext = this.getWebglContext(canvas, [\"webgl2\", \"webgl\", \"experimental-webgl\"]);\n if (webglContext) {\n supported = true;\n }\n }\n } catch (e) {\n supported = false;\n } finally {\n if (document) {\n const elementToRemove = document.getElementById(WebGlDetection.tmpCanvasElementId);\n if (elementToRemove) {\n elementToRemove.outerHTML = \"\";\n }\n }\n }\n return supported;\n }\n\n private getWebglContext(canvas: HTMLCanvasElement, webglContext: string[]): WebGLRenderingContext {\n let webglRenderingContext: any;\n for (const contextName of webglContext) {\n webglRenderingContext = canvas.getContext(contextName, WebGlDetection.webglCtxAttributes);\n if (webglRenderingContext) {\n break;\n }\n }\n return webglRenderingContext;\n }\n\n}\n\nexport { WebGlDetection };\n","declare global {\n // tslint:disable-next-line:interface-name\n interface Window { webkit: any; }\n}\n\nclass WebRtcDetection {\n\n public static getInstance() {\n if (!WebRtcDetection.instance) {\n WebRtcDetection.instance = new WebRtcDetection();\n }\n return WebRtcDetection.instance;\n }\n\n private static instance: WebRtcDetection;\n\n public isUserMediaSupported(): boolean {\n return this.isMediaDeviceAvailable() || this.isNativeBridgePresent();\n }\n\n public isVideoInputDeviceAvailable() {\n let videoInputDeviceAvailability: Promise;\n try {\n if (this.isMediaDeviceAvailable()) {\n videoInputDeviceAvailability = navigator.mediaDevices.enumerateDevices()\n .then((devices) => devices.some((device) => device.kind === \"videoinput\"));\n } else if (this.isNativeBridgePresent()) {\n videoInputDeviceAvailability = Promise.resolve(true);\n } else {\n videoInputDeviceAvailability = Promise.resolve(false);\n }\n } catch (e) {\n videoInputDeviceAvailability = Promise.resolve(false);\n }\n return videoInputDeviceAvailability;\n }\n\n private isMediaDeviceAvailable(): boolean {\n return (typeof navigator.mediaDevices === \"object\") && (typeof navigator.mediaDevices.getUserMedia === \"function\");\n }\n\n private isNativeBridgePresent(): boolean {\n return (\n // TODO do we need to create a vm-nativebridge module in order to centralise this check?\n typeof window.webkit === \"object\" &&\n typeof(window.webkit.messageHandlers) === \"object\" &&\n typeof(window.webkit.messageHandlers.startNativeCam) === \"object\"\n );\n }\n}\n\nexport { WebRtcDetection };\n","import { UserAgentParser } from \"./parser/UserAgentParser\";\nimport { WasmDetection } from \"./wasm/WasmDetection\";\nimport { WebGlDetection } from \"./webgl/WebGlDetection\";\nimport { WebRtcDetection } from \"./webrtc/WebRtcDetection\";\n\nclass DeviceDetection {\n\n private uaData: IUAParser.IResult;\n\n constructor() {\n this.uaData = UserAgentParser.getInstance().getUserAgentData();\n }\n\n public isAppleiOS13() {\n let isIOS13 = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.os.version && this.uaData.os.version.startsWith(\"13\")) {\n isIOS13 = true;\n // tslint:disable-next-line: no-console\n console.info(\"--- detected iOS 13 ---\");\n }\n } else if (this.isiPadOS()) {\n isIOS13 = true;\n // tslint:disable-next-line: no-console\n console.info(\"--- detected iPad 13 ---\");\n // tslint:disable-next-line: no-console\n console.warn(\"iPad OS detection is still a workaround, Apple does not use a specific UA for iPad\");\n }\n return isIOS13;\n }\n\n public isiOS(): boolean {\n return ((this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") || this.isiPadOS());\n }\n\n // Workaround for iPadOS which is currently not detectable via UA\n // https://github.com/faisalman/ua-parser-js/issues/387#issuecomment-579147248\n public isiPadOS() {\n const osName = (this.uaData.os && this.uaData.os.name && this.uaData.os.name) || undefined;\n const iPadOS = window.orientation !== undefined && osName === \"Mac OS\";\n return osName === \"iOS\" || iPadOS;\n }\n\n public getUserAgentData(): IUAParser.IResult {\n return this.uaData;\n }\n\n public isWebView(): boolean {\n let isWebView = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.engine && this.uaData.engine.name && this.uaData.engine.name === \"WebKit\") {\n if (this.uaData.browser && this.uaData.browser.name && this.uaData.browser.name === \"WebKit\") {\n isWebView = true;\n }\n }\n }\n return isWebView;\n }\n\n public isWebViewBrowser(): boolean {\n let isWebViewBrowser = false;\n if (this.uaData.os && this.uaData.os.name && this.uaData.os.name === \"iOS\") {\n if (this.uaData.engine && this.uaData.engine.name && this.uaData.engine.name === \"WebKit\") {\n if (this.uaData.browser && this.uaData.browser.name && this.uaData.browser.name !== \"Mobile Safari\") {\n isWebViewBrowser = true;\n }\n }\n }\n return isWebViewBrowser;\n }\n\n public isWebAssemblySupported(): boolean {\n return WasmDetection.getInstance().isWebAssemblySupported();\n }\n\n public isUserMediaSupported(): boolean {\n return WebRtcDetection.getInstance().isUserMediaSupported();\n }\n\n public isVideoInputDeviceAvailable() {\n return WebRtcDetection.getInstance().isVideoInputDeviceAvailable();\n }\n\n public isWebGlSupported() {\n return WebGlDetection.getInstance().isWebGlSupported();\n }\n\n}\n\nexport { DeviceDetection };\n","export class LogMessage {\n\n public level: string;\n public logName: string;\n public message: string;\n public date: string = new Date().toISOString();\n\n constructor(level: string, logName: string, message: string) {\n this.level = level;\n this.message = message;\n this.logName = logName;\n }\n\n public getLevel() {\n return this.level;\n }\n\n public getLogName() {\n return this.logName;\n }\n\n public getMessage() {\n return this.message;\n }\n\n public getDate() {\n return this.date;\n }\n\n}\n","import localforage from \"localforage\";\n\nconst dbName = \"db_remotelog\";\n\nclass DBRemoteLogFactory {\n\n public static getInstance() {\n if (!DBRemoteLogFactory.instance) {\n DBRemoteLogFactory.instance = new DBRemoteLogFactory();\n }\n return DBRemoteLogFactory.instance;\n }\n\n private static instance: DBRemoteLogFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBRemoteLogFactory };\n","import { ILogsConfiguration } from \"./LogsConfiguration.js\";\n\nclass LogsConfigurationRetriever {\n\n private configurationUrl = \"https://vmcore.luxottica.com/static/config/remotelog/configuration.json\";\n private currentHostname = window.location.hostname;\n\n public getConfiguration(): Promise {\n return new Promise(\n (resolve) => {\n fetch(this.configurationUrl,\n {\n headers: { \"Accept\": \"application/json\", \"Accept-Encoding\": \"gzip\" },\n method: \"GET\",\n },\n ).then((res) => {\n if (res.ok) {\n return res.json();\n } else {\n resolve(this.defaultConfiguration());\n }\n },\n ).then((json) => {\n if (json[this.currentHostname]) {\n const config: ILogsConfiguration = {\n appviewSessionIsActive: json[this.currentHostname].appviewSessionIsActive,\n browserSessionIsActive: json[this.currentHostname].browserSessionIsActive,\n clientLogIsActive: json[this.currentHostname].clientLogIsActive,\n serverLogIsActive: json[this.currentHostname].serverLogIsActive,\n trackingStatusIsActive: json[this.currentHostname].trackingStatusIsActive,\n };\n resolve(config);\n } else {\n resolve(this.defaultConfiguration());\n }\n },\n ).catch((e) => {\n resolve(this.defaultConfiguration());\n });\n },\n );\n }\n\n private defaultConfiguration(): ILogsConfiguration {\n return {\n appviewSessionIsActive: true,\n browserSessionIsActive: true,\n clientLogIsActive: true,\n serverLogIsActive: false,\n trackingStatusIsActive: true,\n };\n }\n\n}\n\nexport { LogsConfigurationRetriever };\n","import { LogsConfigurationRetriever } from \"./LogsConfigurationRetriever\";\n\nclass LogsConfig {\n\n public static getInstance() {\n if (!LogsConfig.instance) {\n LogsConfig.instance = new LogsConfig();\n }\n return LogsConfig.instance;\n }\n\n private static instance: LogsConfig;\n\n private appViewSessionActive: Promise;\n private browserSessionActive: Promise;\n private trackingStatusActive: Promise;\n private clientLogActive: Promise;\n private serverLogActive: Promise;\n\n private configuration = new LogsConfigurationRetriever().getConfiguration();\n\n public constructor() {\n this.appViewSessionActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.appviewSessionIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.browserSessionActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.browserSessionIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.trackingStatusActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.trackingStatusIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.clientLogActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.clientLogIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n this.serverLogActive = new Promise((resolve) => {\n this.configuration\n .then((cfg) => {\n resolve(cfg.serverLogIsActive);\n })\n .catch((reason) => {\n resolve(true);\n });\n });\n }\n\n public async isAppViewSessionActive() {\n return this.appViewSessionActive;\n }\n\n public async isBrowserSessionActive() {\n return this.browserSessionActive;\n }\n\n public async isTrackingStatusActive() {\n return this.trackingStatusActive;\n }\n\n public async isServerLogActive() {\n return this.serverLogActive;\n }\n\n public async isClientLogActive() {\n return this.clientLogActive;\n }\n\n}\n\nexport { LogsConfig };\n","import { v4 as uuid } from \"uuid\";\nimport { DBRemoteLogFactory } from \"../../../../adapter/db/factory/DBRemoteLogFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { LogMessage } from \"../../../model/LogMessage\";\n\nclass RemoteLogService {\n\n public log(message: LogMessage): void {\n LogsConfig.getInstance().isServerLogActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message);\n }\n });\n }\n\n private queueMessage(logMessage: LogMessage) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: logMessage.getDate(),\n level: logMessage.getLevel(),\n logName: logMessage.getLogName(),\n message: logMessage.getMessage(),\n });\n }\n\n private dbInstance() {\n return DBRemoteLogFactory.getInstance();\n }\n\n}\n\nexport { RemoteLogService };\n","import { Appender, ILogEvent, LogAppender, LogLevel } from \"@log4js2/core\";\nimport { LogMessage } from \"../model/LogMessage\";\nimport { RemoteLogService } from \"../service/log/producer/RemoteLogService\";\n\n@Appender(\"RemoteLogAppender\")\nclass RemoteLogAppender extends LogAppender<{}> {\n\n private logService = new RemoteLogService();\n\n public static get appenderName(): string {\n return \"RemoteLogAppender\";\n }\n\n public append(logEvent: ILogEvent) {\n if (logEvent && logEvent.level && logEvent.level <= this.getLogLevel()) {\n this.log(logEvent);\n }\n }\n\n private log(logEvent: ILogEvent) {\n switch (logEvent.level) {\n case LogLevel.FATAL:\n case LogLevel.ERROR: {\n if (logEvent.error) {\n this.logService.log(this.newLogMessage(\"E\", logEvent));\n } else {\n this.logService.log(this.newLogMessage(\"E\", logEvent));\n }\n break;\n }\n case LogLevel.WARN: {\n this.logService.log(this.newLogMessage(\"W\", logEvent));\n break;\n }\n case LogLevel.INFO: {\n this.logService.log(this.newLogMessage(\"I\", logEvent));\n break;\n }\n case LogLevel.DEBUG:\n case LogLevel.TRACE: {\n break;\n }\n default:\n break;\n }\n }\n\n private newLogMessage(logLevel: string, logEvent: ILogEvent) {\n return new LogMessage(logLevel, logEvent.logger || \"\", logEvent.message || \"\");\n }\n}\n\nexport { RemoteLogAppender };\n","import { configure, getLogger, LogAppender, LogLevel } from \"@log4js2/core\";\nimport { v4 as uuid } from \"uuid\";\nimport { LogsConfig } from \"../config/LogsConfig\";\nimport { RemoteLogAppender } from \"./appender/RemoteLogAppender\";\n\nconst VM_BROWSERSESSION_UUID = \"vm.browsersessionuuid.20200120\";\nconst VM_LOGLEVEL_OVERRIDE = \"vm.loglevel.override\";\n\nconst defaultLevel = LogLevel.DEBUG;\nconst defaultVirtualConsole = false;\nconst defaultLayout = \"%d [%p] %c - %m\";\n\nclass RemoteLogConfig {\n\n public static getInstance() {\n if (!RemoteLogConfig.instance) {\n RemoteLogConfig.instance = new RemoteLogConfig();\n }\n return RemoteLogConfig.instance;\n }\n\n private static instance: RemoteLogConfig;\n\n private storage = window.localStorage;\n private configured = false;\n\n private browserUUID: string = \"\";\n\n public static get storageIdentifier() {\n return VM_BROWSERSESSION_UUID;\n }\n\n private constructor() {\n this.createSessionId();\n this.configureLevel(defaultLevel);\n (window as any).VMAvailableLogLevels = LogLevel;\n (window as any).VMLogLevelsOverrideKey = VM_LOGLEVEL_OVERRIDE;\n }\n\n public getLogger(moduleName: string, moduleVersion: string, loggerName: string) {\n return getLogger([moduleName, moduleVersion, loggerName].join(\".\"));\n }\n\n public getLoggerInfo(moduleName: string, moduleVersion: string, loggerName: string) {\n return getLogger([moduleName, moduleVersion, loggerName].join(\".\"));\n }\n\n public get currentUuid() {\n return this.browserUUID;\n }\n\n private configureLevel(logLevel: LogLevel) {\n const logOverride = this.storage.getItem(VM_LOGLEVEL_OVERRIDE);\n if (logOverride !== null) {\n const logLevelOverride = logOverride as unknown as LogLevel;\n // tslint:disable-next-line: no-console\n console.warn(\"overriding loglevel with localstorage one ->\", logLevelOverride);\n this.configureLog4js2([\"Console\", RemoteLogAppender], logLevelOverride);\n } else {\n try {\n const isActive = LogsConfig.getInstance().isClientLogActive();\n this.configureLog4js2([\"Console\", RemoteLogAppender], LogLevel.INFO);\n isActive.then((value) => {\n this.configureLog4js2([\"Console\", RemoteLogAppender], value ? LogLevel.INFO : LogLevel.ERROR);\n this.configured = true;\n }).catch((e) => {\n // tslint:disable-next-line: no-console\n console.error(e);\n });\n } catch (e) {\n // tslint:disable-next-line: no-console\n console.error(e);\n this.configureLog4js2([\"Console\", RemoteLogAppender], defaultLevel);\n }\n }\n }\n\n private configureLog4js2(logAppenders: Array, logLevel: LogLevel) {\n if (!this.configured) {\n configure({\n appenders: logAppenders,\n layout: defaultLayout,\n level: logLevel,\n virtualConsole: defaultVirtualConsole,\n });\n const appenders = logAppenders.map((appender) => this.logAppenderName(appender));\n // tslint:disable-next-line: no-console\n console.info(`appenders : ${appenders}\nlayout : ${defaultLayout}\nlevel : ${logLevel}\nvirtual console : ${defaultVirtualConsole}`);\n }\n }\n\n private logAppenderName(appender: string | typeof LogAppender): string {\n let name = \"n.a\";\n switch (typeof appender) {\n case \"string\":\n name = \"Console\";\n break;\n case \"function\":\n name = \"RemoteLogAppender\";\n break;\n default:\n name = \"n.a.[\" + typeof appender + \"]\";\n break;\n }\n return name;\n }\n\n private createSessionId() {\n let currentUuid = this.storage.getItem(VM_BROWSERSESSION_UUID);\n if (!currentUuid) {\n const newUuid = uuid();\n if (newUuid) {\n this.storage.setItem(VM_BROWSERSESSION_UUID, newUuid);\n currentUuid = newUuid;\n }\n }\n this.browserUUID = currentUuid || \"cantcreateuuid\";\n }\n\n}\n\nexport { RemoteLogConfig };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_appviewsession\";\n\nclass DBAppViewSessionFactory {\n\n public static getInstance() {\n if (!DBAppViewSessionFactory.instance) {\n DBAppViewSessionFactory.instance = new DBAppViewSessionFactory();\n }\n return DBAppViewSessionFactory.instance;\n }\n\n private static instance: DBAppViewSessionFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBAppViewSessionFactory };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"VmAnalyticsApiConfig\");\n\nexport class VmAnalyticsApiConfig {\n\n private hostTest = \"https://vmcore-test.luxottica.com\";\n private hostProd = \"https://vmcore.luxottica.com\";\n private appViewSessionApi = \"/api/appviewsession\";\n private browserSessionApi = \"/api/browsersession\";\n private trackingStatusApi = \"/api/trackingstatus\";\n private remoteLogApi = \"/api/remotelog\";\n private currentHostname = window.location.hostname;\n\n public get appViewSessionApiEndpoint() {\n return this.getHostname() + this.appViewSessionApi;\n }\n\n public get browserSessionApiEndpoint() {\n return this.getHostname() + this.browserSessionApi;\n }\n\n public get trackingStatusApiEndpoint() {\n return this.getHostname() + this.trackingStatusApi;\n }\n\n public get remoteLogApiEndpoint() {\n return this.getHostname() + this.remoteLogApi;\n }\n\n private getHostname() {\n const host = this.isDevEnvironment() ? this.hostTest : this.hostProd;\n logger.debug(\"analytics api hostname: {}\", host);\n return host;\n }\n\n private isDevEnvironment() {\n const isDev = this.currentHostname === \"localhost\";\n logger.debug(\"is dev environment: {}\", isDev);\n return isDev;\n }\n}\n","const sendXhrRequest = (\r\n method: string,\r\n url: string,\r\n body: any,\r\n responseType: XMLHttpRequestResponseType,\r\n responseHeaders: string[] = [],\r\n options: Record = {},\r\n onProgress?: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null\r\n): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(method || \"GET\", url);\r\n xhr.responseType = responseType;\r\n for (const header in options) {\r\n if (options[header]) {\r\n xhr.setRequestHeader(header, options[header]);\r\n }\r\n }\r\n\r\n xhr.onload = (e: any) => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n\r\n const responseHeaderValues: {[header: string]: string} = {};\r\n responseHeaders.forEach((header) => {\r\n const responseHeaderValue = xhr.getResponseHeader(header);\r\n if (responseHeaderValue !== null && responseHeaderValue !== undefined) {\r\n responseHeaderValues[header] = responseHeaderValue;\r\n }\r\n });\r\n\r\n resolve({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response,\r\n headers: responseHeaderValues\r\n });\r\n } else {\r\n reject({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response\r\n });\r\n }\r\n };\r\n\r\n xhr.onerror = (e) => {\r\n reject({\r\n status: xhr.status,\r\n statusText: xhr.statusText,\r\n response: xhr.response\r\n });\r\n };\r\n\r\n if (xhr.upload && onProgress) {\r\n xhr.upload.onprogress = onProgress;\r\n }\r\n xhr.send(body);\r\n });\r\n};\r\n\r\nexport {\r\n sendXhrRequest\r\n};\r\n","import { name, version } from \"../../../package.json\";\nimport { IRemoteAppViewSession } from \"../../domain/model/IRemoteAppViewSession\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionAdapter\");\n\nclass AppViewSessionAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(message: IRemoteAppViewSession): Promise {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n statusCode: message.statusCode,\n statusText: message.statusText,\n });\n\n const requestUrl = this.config.appViewSessionApiEndpoint;\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n logger.warn(\"sessionId not available\");\n return Promise.reject();\n }\n }\n}\n\nexport { AppViewSessionAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBAppViewSessionFactory } from \"../../../../adapter/db/factory/DBAppViewSessionFactory\";\nimport { AppViewSessionAdapter } from \"../../../../adapter/rest/AppViewSessionAdapter\";\nimport { IRemoteAppViewSession } from \"../../../model/IRemoteAppViewSession\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionConsumer\");\n\nconst dbInstance = () => {\n return DBAppViewSessionFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new AppViewSessionAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteAppViewSession,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n statusCode: value.statusCode,\n statusText: value.statusText\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass AppViewSessionConsumer {\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n}\n\nexport { AppViewSessionConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { AppViewSessionConsumer } from \"../log/consumer/AppViewSessionConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"AppViewSessionConsumerJob\");\n\nclass AppViewSessionConsumerJob {\n\n public static getInstance() {\n if (!AppViewSessionConsumerJob.instance) {\n AppViewSessionConsumerJob.instance = new AppViewSessionConsumerJob();\n }\n return AppViewSessionConsumerJob.instance;\n }\n\n private static instance: AppViewSessionConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.info(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.info(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new AppViewSessionConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { AppViewSessionConsumerJob };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_browsersession\";\n\nclass DBBrowserSessionFactory {\n\n public static getInstance() {\n if (!DBBrowserSessionFactory.instance) {\n DBBrowserSessionFactory.instance = new DBBrowserSessionFactory();\n }\n return DBBrowserSessionFactory.instance;\n }\n\n private static instance: DBBrowserSessionFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBBrowserSessionFactory };\n","import { DeviceDetection } from \"@luxottica/vm-devicedetection\";\nimport { name, version } from \"../../../package.json\";\nimport { IRemoteBrowserSession } from \"../../domain/model/IRemoteBrowserSession\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionAdapter\");\n\nconst VM_BROWSERSESSION_FLAG = RemoteLogConfig.storageIdentifier + \".flag\";\nconst VM_BROWSERSESSION_ETAG = RemoteLogConfig.storageIdentifier + \".etag\";\n\nclass BrowserSessionAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n private storage = window.localStorage;\n\n public log(message: IRemoteBrowserSession): Promise {\n const deviceDetection: DeviceDetection = new DeviceDetection();\n const userAgentData = deviceDetection.getUserAgentData();\n const persistedSessionFlag = this.storage.getItem(VM_BROWSERSESSION_FLAG);\n const persistedSessionUuid = RemoteLogConfig.getInstance().currentUuid;\n\n if (persistedSessionFlag) {\n logger.info(\"skip (session id already created)\");\n return Promise.resolve(false);\n } else {\n if (persistedSessionUuid) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: persistedSessionUuid,\n date: message.date,\n device: {\n cpuArchitecture: userAgentData.cpu.architecture,\n model: userAgentData.device.model,\n resolution: {\n dpi: message.deviceResolution.dpi,\n h: message.deviceResolution.h,\n w: message.deviceResolution.w,\n },\n type: userAgentData.device.type,\n vendor: userAgentData.device.vendor,\n webapi: {\n ambientLight: \"ondevicelight\" in window,\n connection: \"connection\" in navigator,\n serviceWorker: \"serviceWorker\" in navigator,\n share: \"share\" in navigator,\n visibility: \"hidden\" in document,\n },\n webcam: {\n available: message.deviceWebcam.enabled,\n resolutionW: message.deviceWebcam.resolution,\n },\n webgl: {\n version: message.deviceWebgl.version,\n },\n },\n os: {\n name: userAgentData.os.name,\n version: parseFloat(userAgentData.os.version!),\n },\n userAgent: {\n browserEngineName: userAgentData.engine.name,\n browserEngineVersion: parseFloat(userAgentData.engine.version!),\n browserName: userAgentData.browser.name,\n browserVersion: parseFloat(userAgentData.browser.version!),\n webView: deviceDetection.isWebView(),\n },\n });\n\n const requestUrl = this.config.browserSessionApiEndpoint;\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [\"etag\"],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).then((response) => {\n const etagsessionId = response.headers.etag;\n this.storage.setItem(VM_BROWSERSESSION_FLAG, \"true\");\n this.storage.setItem(VM_BROWSERSESSION_ETAG, etagsessionId ? etagsessionId.slice(-1, 1) : \"n.a.\");\n return true;\n }).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n logger.warn(\"persistent session uuid not available\");\n return Promise.reject(\"persistent session uuid not available\");\n }\n }\n }\n\n}\n\nexport { BrowserSessionAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBBrowserSessionFactory } from \"../../../../adapter/db/factory/DBBrowserSessionFactory\";\nimport { BrowserSessionAdapter } from \"../../../../adapter/rest/BrowserSessionAdapter\";\nimport { IRemoteBrowserSession } from \"../../../model/IRemoteBrowserSession\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionConsumer\");\n\nconst dbInstance = () => {\n return DBBrowserSessionFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new BrowserSessionAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteBrowserSession,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n date: value.date,\n deviceResolution: value.deviceResolution,\n deviceWebcam: value.deviceWebcam,\n deviceWebgl: value.deviceWebgl,\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass BrowserSessionConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { BrowserSessionConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { BrowserSessionConsumer } from \"../log/consumer/BrowserSessionConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"BrowserSessionConsumerJob\");\n\nclass BrowserSessionConsumerJob {\n\n public static getInstance() {\n if (!BrowserSessionConsumerJob.instance) {\n BrowserSessionConsumerJob.instance = new BrowserSessionConsumerJob();\n }\n return BrowserSessionConsumerJob.instance;\n }\n\n private static instance: BrowserSessionConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.info(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.info(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new BrowserSessionConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { BrowserSessionConsumerJob };\n","import { name, version } from \"../../../package.json\";\nimport { LogMessage } from \"../../domain/model/LogMessage\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogAdapter\");\n\nclass RemoteLogAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(logMessage: LogMessage): Promise {\n try {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n const jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n level: logMessage.getLevel(),\n logName: logMessage.getLogName(),\n message: logMessage.getMessage(),\n });\n\n const requestUrl = this.config.remoteLogApiEndpoint;\n\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n console.warn(\"sessionId not available\");\n return Promise.reject(\"sessionId not available\");\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n}\n\nexport { RemoteLogAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBRemoteLogFactory } from \"../../../../adapter/db/factory/DBRemoteLogFactory\";\nimport { RemoteLogAdapter } from \"../../../../adapter/rest/RemoteLogAdapter\";\nimport { LogMessage } from \"../../../model/LogMessage\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogConsumer\");\n\nconst dbInstance = () => {\n return DBRemoteLogFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new RemoteLogAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: LogMessage,\n key: string\n ) => {\n if (value === null) {\n // console.error(\"undefined: \", { key });\n }\n messageAdapter().log(\n new LogMessage(value.level, value.logName, value.message)\n ).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass RemoteLogConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { RemoteLogConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { RemoteLogConsumer } from \"../log/consumer/RemoteLogConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"RemoteLogConsumerJob\");\n\nclass RemoteLogConsumerJob {\n\n public static getInstance() {\n if (!RemoteLogConsumerJob.instance) {\n RemoteLogConsumerJob.instance = new RemoteLogConsumerJob();\n }\n return RemoteLogConsumerJob.instance;\n }\n\n private static instance: RemoteLogConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.info(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.info(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new RemoteLogConsumer().consume, 5000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { RemoteLogConsumerJob };\n","import localforage from \"localforage\";\n\nconst dbName = \"db_trackingstatus\";\n\nclass DBTrackingStatusFactory {\n\n public static getInstance() {\n if (!DBTrackingStatusFactory.instance) {\n DBTrackingStatusFactory.instance = new DBTrackingStatusFactory();\n }\n return DBTrackingStatusFactory.instance;\n }\n\n private static instance: DBTrackingStatusFactory;\n private db: LocalForage;\n\n private constructor() {\n this.db = localforage.createInstance({ name: dbName });\n }\n\n public getDB(): LocalForage {\n return this.db;\n }\n\n public getLogsTableName() {\n return \"logs\";\n }\n\n}\n\nexport { DBTrackingStatusFactory };\n","import { name, version } from \"../../../package.json\";\nimport { IRemoteTrackingStatus } from \"../../domain/model/IRemoteTrackingStatus\";\nimport { RemoteLogConfig } from \"../../domain/RemoteLogConfig\";\nimport { VmAnalyticsApiConfig } from \"../../domain/service/config/VmAnalyticsApiConfig\";\nimport { sendXhrRequest } from \"../../helpers/RequestHelper\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusAdapter\");\n\nclass TrackingStatusAdapter implements LogAdapter {\n\n private config = new VmAnalyticsApiConfig();\n\n public log(message: IRemoteTrackingStatus): Promise {\n const sessionId = RemoteLogConfig.getInstance().currentUuid;\n if (sessionId) {\n let jsonBody;\n if (message.fps) {\n jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n fps: message.fps,\n });\n } else {\n jsonBody = JSON.stringify({\n browserSessionUuid: sessionId,\n date: new Date().toISOString(),\n trackingCode: message.trackingCode,\n trackingText: message.trackingText,\n });\n }\n const requestUrl = this.config.trackingStatusApiEndpoint;\n\n return sendXhrRequest(\n \"POST\",\n requestUrl,\n jsonBody,\n \"\",\n [],\n {\n \"Accept\": \"application/json\",\n \"Content-type\": \"application/json\",\n // \"Referrer-Policy\": \"unsafe-url\"\n },\n ).catch((e) => {\n return Promise.reject(e);\n });\n\n } else {\n console.warn(\"sessionId not available\");\n return Promise.reject(\"sessionId not available\");\n }\n }\n}\n\nexport { TrackingStatusAdapter };\n","import { name, version } from \"../../../../../package.json\";\nimport { DBTrackingStatusFactory } from \"../../../../adapter/db/factory/DBTrackingStatusFactory\";\nimport { TrackingStatusAdapter } from \"../../../../adapter/rest/TrackingStatusAdapter\";\nimport { IRemoteTrackingStatus } from \"../../../model/IRemoteTrackingStatus.js\";\nimport { RemoteLogConfig } from \"../../../RemoteLogConfig\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusConsumer\");\n\nconst dbInstance = () => {\n return DBTrackingStatusFactory.getInstance();\n};\n\nconst messageAdapter = () => {\n return new TrackingStatusAdapter();\n};\n\nconst consumeDbRows = () => {\n const dbase = dbInstance().getDB();\n\n dbase.iterate((\n value: IRemoteTrackingStatus,\n key: string\n ) => {\n // if (value === null) {\n // console.error(\"undefined: \", { key });\n // }\n messageAdapter().log({\n fps: value.fps,\n trackingCode: value.trackingCode,\n trackingText: value.trackingText,\n }).then(() => {\n logger.debug(\"consumed stored log message: {}\", JSON.stringify(value));\n // console.info(\"consumed: \", {key, value});\n return dbase.removeItem(key);\n }).catch(() => {\n // console.error(\"failed: \", { key });\n });\n }).then(() => {\n logger.debug(\"all logs consumed from local indexdb\");\n });\n};\n\nclass TrackingStatusConsumer {\n\n public consume() {\n const time1 = window.performance.now();\n consumeDbRows();\n const time2 = window.performance.now();\n logger.debug(\"logs consumed in {} ms\", time2 - time1);\n }\n\n}\n\nexport { TrackingStatusConsumer };\n","import { name, version } from \"../../../../package.json\";\nimport { RemoteLogConfig } from \"../../RemoteLogConfig\";\nimport { TrackingStatusConsumer } from \"../log/consumer/TrackingStatusConsumer\";\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, \"TrackingStatusConsumerJob\");\n\nclass TrackingStatusConsumerJob {\n\n public static getInstance() {\n if (!TrackingStatusConsumerJob.instance) {\n TrackingStatusConsumerJob.instance = new TrackingStatusConsumerJob();\n }\n return TrackingStatusConsumerJob.instance;\n }\n\n private static instance: TrackingStatusConsumerJob;\n private started: boolean = false;\n private intervalFunction: any;\n\n private constructor() {\n logger.info(\"remote log consumer job created\");\n }\n\n public start(): void {\n if (this.started === true) {\n logger.debug(\"already started\");\n } else {\n logger.info(\"start to consume logs\");\n this.started = true;\n this.intervalFunction = window.setInterval(new TrackingStatusConsumer().consume, 3000);\n }\n }\n\n public stop(): void {\n if (this.intervalFunction) {\n window.clearInterval(this.intervalFunction);\n }\n }\n\n}\n\nexport { TrackingStatusConsumerJob };\n","import { AppViewSessionConsumerJob } from \"./AppViewSessionConsumerJob\";\nimport { BrowserSessionConsumerJob } from \"./BrowserSessionConsumerJob\";\nimport { RemoteLogConsumerJob } from \"./RemoteLogConsumerJob\";\nimport { TrackingStatusConsumerJob } from \"./TrackingStatusConsumerJob\";\n\nclass JobsStarter {\n\n public static getInstance() {\n if (!JobsStarter.instance) {\n JobsStarter.instance = new JobsStarter();\n }\n return JobsStarter.instance;\n }\n\n private static instance: JobsStarter;\n\n public constructor() {\n this.createJobs();\n }\n\n private createJobs() {\n BrowserSessionConsumerJob.getInstance().start();\n AppViewSessionConsumerJob.getInstance().start();\n TrackingStatusConsumerJob.getInstance().start();\n RemoteLogConsumerJob.getInstance().start();\n }\n\n}\n\nexport { JobsStarter };\n","import { v4 as uuid } from \"uuid\";\nimport { DBAppViewSessionFactory } from \"../../../../adapter/db/factory/DBAppViewSessionFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteAppViewSession } from \"../../../model/IRemoteAppViewSession\";\n\nclass AppViewSessionService {\n\n public log(message: IRemoteAppViewSession): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isAppViewSessionActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteAppViewSession, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n statusCode: message.statusCode,\n statusText: message.statusText,\n });\n }\n\n private dbInstance() {\n return DBAppViewSessionFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { AppViewSessionService };\n","import { v4 as uuid } from \"uuid\";\nimport { DBBrowserSessionFactory } from \"../../../../adapter/db/factory/DBBrowserSessionFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteBrowserSession } from \"../../../model/IRemoteBrowserSession\";\n\nclass BrowserSessionService {\n\n public log(message: IRemoteBrowserSession): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isBrowserSessionActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteBrowserSession, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n deviceResolution: message.deviceResolution,\n deviceWebcam: message.deviceWebcam,\n deviceWebgl: message.deviceWebgl,\n });\n }\n\n private dbInstance() {\n return DBBrowserSessionFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { BrowserSessionService };\n","import { v4 as uuid } from \"uuid\";\nimport { DBTrackingStatusFactory } from \"../../../../adapter/db/factory/DBTrackingStatusFactory\";\nimport { LogsConfig } from \"../../../../config/LogsConfig\";\nimport { IRemoteTrackingStatus } from \"../../../model/IRemoteTrackingStatus\";\n\nclass TrackingStatusService {\n\n public log(message: IRemoteTrackingStatus): void {\n const timestamp = this.now();\n LogsConfig.getInstance().isTrackingStatusActive().then((isActive) => {\n if (isActive) {\n this.queueMessage(message, timestamp);\n }\n });\n }\n\n private queueMessage(message: IRemoteTrackingStatus, timestamp: string) {\n this.dbInstance().getDB().setItem(uuid(), {\n date: timestamp,\n fps: message.fps,\n trackingCode: message.trackingCode,\n trackingText: message.trackingText,\n });\n }\n\n private dbInstance() {\n return DBTrackingStatusFactory.getInstance();\n }\n\n private now() {\n return new Date().toISOString();\n }\n\n}\n\nexport { TrackingStatusService };\n","import { RemoteLogAppender } from \"./domain/appender/RemoteLogAppender\";\nimport { IRemoteAppViewSession } from \"./domain/model/IRemoteAppViewSession\";\nimport { IRemoteBrowserSession } from \"./domain/model/IRemoteBrowserSession\";\nimport { IRemoteTrackingStatus } from \"./domain/model/IRemoteTrackingStatus\";\nimport { RemoteLogConfig } from \"./domain/RemoteLogConfig\";\nimport { JobsStarter } from \"./domain/service/job/JobsStarter\";\nimport { AppViewSessionService } from \"./domain/service/log/producer/AppViewSessionService\";\nimport { BrowserSessionService } from \"./domain/service/log/producer/BrowserSessionService\";\nimport { TrackingStatusService } from \"./domain/service/log/producer/TrackingStatusService\";\n\nclass RemoteLog {\n\n private browserSessionService = new BrowserSessionService();\n private appViewSessionService = new AppViewSessionService();\n private trackingStatusService = new TrackingStatusService();\n\n public constructor() {\n JobsStarter.getInstance();\n }\n\n public sendBrowserSession(browserSession: IRemoteBrowserSession) {\n this.browserSessionService.log(browserSession);\n }\n\n public sendAppViewSession(...appViewSession: IRemoteAppViewSession[]) {\n appViewSession.forEach((item) => {\n this.appViewSessionService.log(item);\n });\n }\n\n public sendTracking(...trackingStatus: IRemoteTrackingStatus[]) {\n trackingStatus.forEach((item) => {\n this.trackingStatusService.log(item);\n });\n }\n\n public sendFps(...trackingStatus: IRemoteTrackingStatus[]) {\n trackingStatus.forEach((item) => {\n this.trackingStatusService.log(item);\n });\n }\n\n}\n\nexport { RemoteLog, RemoteLogAppender, RemoteLogConfig };\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.9.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.31\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.31',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}"],"names":["Object","defineProperty","exports","value","filter_1","require","log_filter_action_1","AppenderWrapper","appender","_config","this","_appender","config","setLayout","layout","_isPassThrough","filters","length","_filters","map","filter","Function","getFilter","onMatch","onMismatch","prototype","get","enumerable","configurable","append","event","isMatch","_isMatch","item","count","i","LogFilterAction","DENY","ALLOW","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","log_level_1","appender_1","virtual_console_1","ConsoleAppender","_super","apply","logEvent","level","getLogLevel","_appendToConsole","message","format","LogLevel","FATAL","ERROR","error","getVirtualConsole","WARN","warn","INFO","info","DEBUG","TRACE","debug","Appender","LogAppender","utility_1","appender_wrapper_1","log_appender_1","_appenderMethods","Set","add","_appenders","Map","_registeredLoggerAppenders","getAppenderName","name","getFunctionName","addAppender","forEach","element","Error","_validateAppender","appenderName","has","set","registerAppender","getAppender","getLoggerAppenderInstances","appenders","appenderConfig","result_1","push","setLoggerAppenderConfig","formatter_1","isActive","active","logLevel","setLogLevel","getLayout","Filter","addFilter","__1","logMarker","Symbol","LogMarker","marker","defineMetadata","Log","options","_i","descriptor","originalMethod","args","getOwnMetadata","logger","getLogger","log","concat","call","_filterMethods","LogFilter","filterObj","_validateFilter","configuration","MarkerFilter","_isParentMarkerMatch","_this","hasParents","getParents","every","parent","ThresholdFilter","m","__export","logger_1","Logger","console_appender_1","marker_1","Marker","log_1","log_filter_1","marker_filter_1","threshold_filter_1","DateTimeFormat","TIMEZONE","TIMEZONE_CLIP","padLeft","character","strValue","String","_i18n","_maskStore","_flags","date","getDate","dd","ddd","getDay","dddd","M","getMonth","MM","MMM","MMMM","yy","isUTC","getFullYear","getUTCFullYear","slice","yyyy","h","getHours","hh","H","HH","getMinutes","mm","s","getSeconds","ss","S","getMilliseconds","a","aa","A","AA","Z","match","pop","replace","o","offset","getTimezoneOffset","Math","floor","abs","formatDate","mask","Date","DEFAULT","formatMap","regex","maskStr","substring","_createMask","join","date_formatter_1","formatter","response","params","trim","_formatLogEvent","_compiledLayouts","formatArray","formatString","result","exec","_getFormatterFunction","command","split","_getFormatterObject","_compileLayout","_getCompiledLayout","_formatters","stack","stacks","reduce","accumulator","file","_getFileDetails","properties","lineNumber","column","method","_formatMarkerFromEvent","relative","sequence","formatted","RegExp","logErrorStack","fileParts","location","host","appDir","dirname","filename","startsWith","__assign","assign","t","n","logger_2","_DEFAULT_APPENDERS","_DEFAULT_PATTERN_LAYOUT","_DEFAULT_CONFIG","loggers","_configuration","_getAppendersForLogger","logConfig","appenderList","appenderWrapper","configure","hasMain","isArray","tag","MAIN_LOGGER","addLogger","mainLoggerConfig","_configureLoggers","_configureAppenders","virtualConsole","_getLoggerConfiguration","useVirtualConsole","context","logContext","_determineContext","loggerConfig","_loggers","_logContext","_logSequence","_relative","getTime","passed","_constructLogEvent","fatal","trace","logTime","e","_isNotStrict","callee","caller","undefined","_parents","_name","getMarker","_markers","size","remove","delete","setParents","markers","index","func","name_1","toString","indexOf","_virtualConsole","_isUseVirtualConsole","state","console","Log4JConsole","isVirtual","memory","assert","condition","data","clear","label","dir","optionalParams","dirxml","group","groupTitle","groupCollapsed","groupEnd","markTimeline","msIsIndependentlyComposed","profile","reportName","profileEnd","table","tabularData","time","timeEnd","timeStamp","timeline","timelineEnd","exception","countReset","timeLog","UserAgentParser","userAgentData","UAParser","getResult","instance","WasmDetection","simplewasm","Uint8Array","of","supported","WebAssembly","instantiate","module","Module","Instance","WebGlDetection","canvas","document","createElement","setAttribute","tmpCanvasElementId","getWebglContext","elementToRemove","getElementById","outerHTML","webglContext","webglRenderingContext","contextName","getContext","webglCtxAttributes","depth","premultipliedAlpha","WebRtcDetection","isMediaDeviceAvailable","isNativeBridgePresent","videoInputDeviceAvailability","navigator","mediaDevices","enumerateDevices","then","devices","some","device","kind","Promise","resolve","getUserMedia","window","webkit","messageHandlers","startNativeCam","DeviceDetection","uaData","getInstance","getUserAgentData","isIOS13","os","version","isiPadOS","osName","iPadOS","orientation","isWebView","engine","browser","isWebViewBrowser","isWebAssemblySupported","isUserMediaSupported","isVideoInputDeviceAvailable","isWebGlSupported","LogMessage","logName","toISOString","DBRemoteLogFactory","db","localforage","LogsConfigurationRetriever","configurationUrl","currentHostname","hostname","fetch","headers","res","ok","json","defaultConfiguration","appviewSessionIsActive","browserSessionIsActive","clientLogIsActive","serverLogIsActive","trackingStatusIsActive","catch","LogsConfig","getConfiguration","appViewSessionActive","cfg","reason","browserSessionActive","trackingStatusActive","clientLogActive","serverLogActive","RemoteLogService","isServerLogActive","queueMessage","logMessage","dbInstance","getDB","setItem","uuid","getLevel","getLogName","getMessage","RemoteLogAppender","logService","newLogMessage","VM_BROWSERSESSION_UUID","VM_LOGLEVEL_OVERRIDE","defaultLevel","defaultLayout","RemoteLogConfig","storage","localStorage","configured","browserUUID","createSessionId","configureLevel","VMAvailableLogLevels","VMLogLevelsOverrideKey","moduleName","moduleVersion","loggerName","logOverride","getItem","logLevelOverride","configureLog4js2","isClientLogActive","logAppenders","logAppenderName","currentUuid","newUuid","DBAppViewSessionFactory","getLoggerInfo","VmAnalyticsApiConfig","hostTest","hostProd","appViewSessionApi","browserSessionApi","trackingStatusApi","remoteLogApi","getHostname","isDevEnvironment","isDev","sendXhrRequest","url","body","responseType","responseHeaders","onProgress","reject","xhr","XMLHttpRequest","header","open","setRequestHeader","onload","status","responseHeaderValues","responseHeaderValue","getResponseHeader","statusText","onerror","upload","onprogress","send","AppViewSessionAdapter","sessionId","jsonBody","JSON","stringify","browserSessionUuid","statusCode","requestUrl","appViewSessionApiEndpoint","consumeDbRows","dbase","iterate","removeItem","AppViewSessionConsumer","time1","performance","now","time2","AppViewSessionConsumerJob","started","intervalFunction","setInterval","consume","clearInterval","DBBrowserSessionFactory","VM_BROWSERSESSION_FLAG","storageIdentifier","VM_BROWSERSESSION_ETAG","BrowserSessionAdapter","deviceDetection","persistedSessionFlag","persistedSessionUuid","cpuArchitecture","cpu","architecture","model","resolution","dpi","deviceResolution","w","type","vendor","webapi","ambientLight","connection","serviceWorker","share","visibility","webcam","available","deviceWebcam","enabled","resolutionW","webgl","deviceWebgl","parseFloat","userAgent","browserEngineName","browserEngineVersion","browserName","browserVersion","webView","browserSessionApiEndpoint","etagsessionId","etag","BrowserSessionConsumer","BrowserSessionConsumerJob","RemoteLogAdapter","remoteLogApiEndpoint","RemoteLogConsumer","RemoteLogConsumerJob","DBTrackingStatusFactory","TrackingStatusAdapter","fps","trackingCode","trackingText","trackingStatusApiEndpoint","TrackingStatusConsumer","TrackingStatusConsumerJob","JobsStarter","createJobs","start","AppViewSessionService","timestamp","isAppViewSessionActive","BrowserSessionService","isBrowserSessionActive","TrackingStatusService","isTrackingStatusActive","RemoteLog","browserSessionService","appViewSessionService","trackingStatusService","browserSession","appViewSession","trackingStatus","u","f","code","l","_dereq_","global","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","createTextNode","observe","characterData","setImmediate","MessageChannel","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","len","immediate","task","self","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","TypeError","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","getThen","obj","thenable","onError","onSuccess","tryToUnwrap","tryCatch","out","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","_typeof","iterator","_classCallCheck","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","isSafari","openDatabase","test","platform","hasFetch","IDBKeyRange","createBlob","parts","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","buf","ArrayBuffer","arr","charCodeAt","_checkBlobSupportWithoutCaching","txn","transaction","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","matchedEdge","parseInt","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","close","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","ready","initPromises","ignoreErrors","j","_defaultConfig","k","req","openCursor","iterationNumber","cursor","blobSupport","store","advanced","openKeyCursor","advance","keys","dropInstance","currentConfig","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","bufferToString","base64String","serialize","valueType","fileReader","str","readAsArrayBuffer","deserialize","parse","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","description","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","getItem$1","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","isNaN","includes","array","searchElement","arg","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driverName","defineDriver","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","_len","optionalDriverMethod","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","assertPath","path","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","lastIndexOf","posix","cwd","resolvedPath","resolvedAbsolute","process","normalize","isAbsolute","trailingSeparator","joined","from","to","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","_makeLong","hasRoot","end","matchedSlash","basename","ext","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","sep","root","base","_format","ret","delimiter","win32","factory","exporter","makeExporter","previous","writable","hasOwn","supportsSymbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","supportsCreate","supportsProto","downLevel","HashMap","MakeDictionary","functionPrototype","getPrototypeOf","usePolyfill","_Map","entries","CreateMapPolyfill","_Set","CreateSetPolyfill","Metadata","WeakMap","CreateWeakMapPolyfill","propertyKey","attributes","IsUndefined","IsArray","IsConstructor","DecorateConstructor","IsObject","IsNull","DecorateProperty","ToPropertyKey","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","targetMetadata","decorated","O","P","Create","MetadataKey","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","ownKeys_1","_a","parentKeys_1","GetIterator","next","IteratorStep","nextValue","IteratorValue","IteratorClose","Type","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","OrdinaryToPrimitive","toString_1","IsCallable","valueOf","toString_2","argument","ToString","V","iterResult","done","proto","prototypeProto","cacheSentinel","arraySentinel","MapIterator","selector","_index","_keys","_values","_selector","throw","return","_cacheKey","_cacheIndex","_find","getKey","getValue","getEntry","insert","_","_map","UUID_SIZE","rootKey","CreateUniqueKey","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","random","GenRandomBytes","crypto","getRandomValues","msCrypto","byte","toLowerCase","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","enums","toUpperCase","str1","str2","lowerize","rgxMapper","ua","arrays","q","matches","props","strMapper","windowsVersionMap","regexes","CHROME","EDGE","extensions","_ua","_rgxmap","mergedRegexes","getBrowser","_browser","major","getCPU","_cpu","getDevice","_device","getEngine","_engine","getOS","_os","getUA","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","define","$","jQuery","Zepto","parser","prop","rnds8","rng","bind","REGEX","byteToHex","substr","validate","rnds","_assertThisInitialized","ReferenceError","_createForOfIteratorHelper","allowArrayLike","it","F","_e","normalCompletion","didErr","step","_e2","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","construct","_getPrototypeOf","_inherits","subClass","superClass","_isNativeReflectConstruct","sham","Proxy","Boolean","_possibleConstructorReturn","_setPrototypeOf","_construct","Parent","Class","isNativeReflectConstruct","_wrapNativeSuper","_cache","fn","Wrapper"],"sourceRoot":""}