' + extras[i] + '
';\r\n }\r\n list.innerHTML = extrasHTML;\r\n } else {\r\n control.classList.add('hidden');\r\n list.classList.add('hidden');\r\n list.innerHTML = '';\r\n }\r\n\r\n // Content is updated in Basket, invalidate ViewManager will cause mini-sticky-basket to get updates\r\n ViewManager.invalidate();\r\n}\r\n\r\nexport function uuid() {\r\n if (localStorage.getItem('uuid') !== null) {\r\n if (localStorage.getItem('uuid') === '') {\r\n localStorage.removeItem('uuid');\r\n uuid();\r\n } \r\n return localStorage.getItem('uuid');\r\n } else {\r\n let cryptoObj = window.crypto || window.msCrypto;\r\n let uuid = ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\r\n (c ^ cryptoObj.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\r\n )\r\n localStorage.setItem('uuid', uuid);\r\n return uuid;\r\n }\r\n}\r\n\r\nexport function cleanNumber(number) {\r\n number = parseFloat(number);\r\n if (number % 1 === 0) {\r\n number = Math.round(number);\r\n } else {\r\n number = number.toFixed(2);\r\n }\r\n return number;\r\n}\r\n\r\nexport function getTotalNumberOfAvailableBags() {\r\n let totalNumberOfAvailableBags = 0;\r\n\r\n if (sessionStorage.basket) {\r\n const basketData = JSON.parse(sessionStorage.getItem('basket'));\r\n\r\n if (basketData.Passengers && basketData.Passengers.Passengers) {\r\n totalNumberOfAvailableBags = basketData.Passengers.Passengers.reduce((sum, passenger) => {\r\n if (passenger.PassengerTypeValue === \"Adult\" || passenger.PassengerTypeValue === \"Child\") {\r\n return sum += 1\r\n } else {\r\n return sum;\r\n }\r\n },0);\r\n\r\n return totalNumberOfAvailableBags;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport function getMinimumWeight() {\r\n if (sessionStorage.basket) {\r\n const basketData = JSON.parse(sessionStorage.getItem('basket'));\r\n\r\n if (basketData.Flights) {\r\n let weight = Infinity;\r\n\r\n basketData.Flights.forEach((flightData) => {\r\n let currentWeight = parseInt(flightData.LuggageAllowance)\r\n if (currentWeight !== NaN) {\r\n Math.min(currentWeight, weight);\r\n }\r\n });\r\n\r\n return weight === Infinity ? 0 : weight;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n","// These values current sync with Bootstrap 3 Media Query Breakpoints\r\n\r\nexport const mobileBreakpoint = 320;\r\n\r\nexport const mobileLargeBreakpoint = 480;\r\n\r\nexport const tabletBreakpoint = 768;\r\n\r\nexport const desktopBreakpoint = 992;\r\n\r\nexport const desktopLargeBreakpoint = 1200;\r\n\r\nexport const breakpoints = [\r\n\t{key:'mobileBreakpoint', value: mobileBreakpoint},\r\n\t{key:'mobileLargeBreakpoint', value: mobileLargeBreakpoint},\r\n\t{key:'tabletBreakpoint', value: tabletBreakpoint},\r\n\t{key:'desktopBreakpoint', value: desktopBreakpoint},\r\n\t{key:'desktopLargeBreakpoint', value: desktopLargeBreakpoint}];\r\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\n/** An error emitted by Sentry SDKs and related utilities. */\nvar SentryError = /** @class */ (function (_super) {\n tslib_1.__extends(SentryError, _super);\n function SentryError(message) {\n var _newTarget = this.constructor;\n var _this = _super.call(this, message) || this;\n _this.message = message;\n // tslint:disable:no-unsafe-any\n _this.name = _newTarget.prototype.constructor.name;\n Object.setPrototypeOf(_this, _newTarget.prototype);\n return _this;\n }\n return SentryError;\n}(Error));\nexports.SentryError = SentryError;\n//# sourceMappingURL=error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar is_1 = require(\"@sentry/utils/is\");\nvar object_1 = require(\"@sentry/utils/object\");\nvar error_1 = require(\"./error\");\n/** Regular expression used to parse a Dsn. */\nvar DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w\\.-]+)(?::(\\d+))?\\/(.+)/;\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nvar Dsn = /** @class */ (function () {\n /** Creates a new Dsn component */\n function Dsn(from) {\n if (typeof from === 'string') {\n this.fromString(from);\n }\n else {\n this.fromComponents(from);\n }\n this.validate();\n }\n /**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\n Dsn.prototype.toString = function (withPassword) {\n if (withPassword === void 0) { withPassword = false; }\n // tslint:disable-next-line:no-this-assignment\n var _a = this, host = _a.host, path = _a.path, pass = _a.pass, port = _a.port, projectId = _a.projectId, protocol = _a.protocol, user = _a.user;\n return (protocol + \"://\" + user + (withPassword && pass ? \":\" + pass : '') +\n (\"@\" + host + (port ? \":\" + port : '') + \"/\" + (path ? path + \"/\" : path) + projectId));\n };\n /** Parses a string into this Dsn. */\n Dsn.prototype.fromString = function (str) {\n var match = DSN_REGEX.exec(str);\n if (!match) {\n throw new error_1.SentryError('Invalid Dsn');\n }\n var _a = tslib_1.__read(match.slice(1), 6), protocol = _a[0], user = _a[1], _b = _a[2], pass = _b === void 0 ? '' : _b, host = _a[3], _c = _a[4], port = _c === void 0 ? '' : _c, lastPath = _a[5];\n var path = '';\n var projectId = lastPath;\n var split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop();\n }\n object_1.assign(this, { host: host, pass: pass, path: path, projectId: projectId, port: port, protocol: protocol, user: user });\n };\n /** Maps Dsn components into this instance. */\n Dsn.prototype.fromComponents = function (components) {\n this.protocol = components.protocol;\n this.user = components.user;\n this.pass = components.pass || '';\n this.host = components.host;\n this.port = components.port || '';\n this.path = components.path || '';\n this.projectId = components.projectId;\n };\n /** Validates this Dsn and throws on error. */\n Dsn.prototype.validate = function () {\n var e_1, _a;\n try {\n for (var _b = tslib_1.__values(['protocol', 'user', 'host', 'projectId']), _c = _b.next(); !_c.done; _c = _b.next()) {\n var component = _c.value;\n if (!this[component]) {\n throw new error_1.SentryError(\"Invalid Dsn: Missing \" + component);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (this.protocol !== 'http' && this.protocol !== 'https') {\n throw new error_1.SentryError(\"Invalid Dsn: Unsupported protocol \\\"\" + this.protocol + \"\\\"\");\n }\n if (this.port && is_1.isNaN(parseInt(this.port, 10))) {\n throw new error_1.SentryError(\"Invalid Dsn: Invalid port number \\\"\" + this.port + \"\\\"\");\n }\n };\n return Dsn;\n}());\nexports.Dsn = Dsn;\n//# sourceMappingURL=dsn.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar is_1 = require(\"./is\");\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction truncate(str, max) {\n if (max === void 0) { max = 0; }\n if (max === 0 || !is_1.isString(str)) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\nexports.truncate = truncate;\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n var newLine = line;\n var ll = newLine.length;\n if (ll <= 150) {\n return newLine;\n }\n if (colno > ll) {\n colno = ll; // tslint:disable-line:no-parameter-reassignment\n }\n var start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n var end = Math.min(start + 140, ll);\n if (end > ll - 5) {\n end = ll;\n }\n if (end === ll) {\n start = Math.max(end - 140, 0);\n }\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = \"'{snip} \" + newLine;\n }\n if (end < ll) {\n newLine += ' {snip}';\n }\n return newLine;\n}\nexports.snipLine = snipLine;\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n var output = [];\n // tslint:disable-next-line\n for (var i = 0; i < input.length; i++) {\n var value = input[i];\n try {\n output.push(String(value));\n }\n catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n return output.join(delimiter);\n}\nexports.safeJoin = safeJoin;\n/**\n * Checks if given value is included in the target\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill\n * @param target source string\n * @param search string to be looked for\n * @returns An answer\n */\nfunction includes(target, search) {\n if (search.length > target.length) {\n return false;\n }\n else {\n return target.indexOf(search) !== -1;\n }\n}\nexports.includes = includes;\n//# sourceMappingURL=string.js.map","export function isNotNullOrWhitespace(param) {\r\n if (param !== null && param !== undefined && param !== '') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isNotNull(param) {\r\n if (param !== null && param !== undefined) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isNotNullOrEmptyArray(param) {\r\n if (param !== null && param !== undefined ) {\r\n if (param.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isNotEmptyObject(obj) {\r\n for(var prop in obj) {\r\n if(obj.hasOwnProperty(prop))\r\n return true;\r\n }\r\n return JSON.stringify(obj) !== JSON.stringify({});\r\n}\r\n\r\nexport function capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}","let singleton = Symbol();\r\nlet singletonEnforcer = Symbol();\r\n\r\n\r\nclass BlazyManager {\r\n\tstatic get instance() {\r\n\t\tif (!this[singleton]) {\r\n\t\t\tthis[singleton] = new BlazyManager(singletonEnforcer);\r\n\r\n\t\t\tthis[singleton].blazyInstance = new Blazy({loadInvisible: false});\r\n\t\t}\r\n\r\n\t\treturn this[singleton].blazyInstance;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tconstructor(enforcer) {\r\n\t\tif (enforcer != singletonEnforcer) throw new Error(\"Cannot construct singleton\");\r\n\t}\r\n}\r\n\r\nexport default BlazyManager.instance;\r\n","export function queryString() {\r\n let query_string = {};\r\n let query = window.location.search.substring(1);\r\n\r\n if (!query) return \"\";\r\n\r\n let lets = query.split(\"&\");\r\n\r\n for (let i = 0; i < lets.length ; i++) {\r\n let pair = lets[i].split(\"=\");\r\n\r\n // third party query params can feed in just the key,\r\n // this adds a default empty string to avoid breaking subsequent code.\r\n if (pair[1] === undefined) pair[1] = \"\";\r\n\r\n // If first entry with this name\r\n if (typeof query_string[pair[0]] === \"undefined\") {\r\n query_string[pair[0]] = pair[1].replace(/%20/g, \"+\");\r\n // If second entry with this name\r\n } else if (typeof query_string[pair[0]] === \"string\") {\r\n let arr = [ query_string[pair[0]], pair[1].replace(/%20/g, \"+\") ];\r\n query_string[pair[0]] = arr;\r\n // If third or later entry with this name\r\n } else {\r\n query_string[pair[0]].push(pair[1].replace(/%20/g, \"+\"));\r\n }\r\n\r\n }\r\n\r\n return query_string;\r\n\r\n};","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar types_1 = require(\"@sentry/types\");\n/** Noop transport */\nvar NoopTransport = /** @class */ (function () {\n function NoopTransport() {\n }\n /**\n * @inheritDoc\n */\n NoopTransport.prototype.sendEvent = function (_) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve({\n reason: \"NoopTransport: Event has been skipped because no Dsn is configured.\",\n status: types_1.Status.Skipped,\n })];\n });\n });\n };\n /**\n * @inheritDoc\n */\n NoopTransport.prototype.close = function (_) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(true)];\n });\n });\n };\n return NoopTransport;\n}());\nexports.NoopTransport = NoopTransport;\n//# sourceMappingURL=noop.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar error_1 = require(\"./error\");\n/** A simple queue that holds promises. */\nvar PromiseBuffer = /** @class */ (function () {\n function PromiseBuffer(limit) {\n this.limit = limit;\n /** Internal set of queued Promises */\n this.buffer = [];\n }\n /**\n * Says if the buffer is ready to take more requests\n */\n PromiseBuffer.prototype.isReady = function () {\n return this.limit === undefined || this.length() < this.limit;\n };\n /**\n * Add a promise to the queue.\n *\n * @param task Can be any Promise