{"version":3,"file":"chunks/138b530b14c4a9.js","mappings":"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","sources":["webpack:///./node_modules/@algolia/events/events.js","webpack:///./node_modules/algoliasearch-helper/index.js","webpack:///./node_modules/algoliasearch-helper/src/DerivedHelper/index.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/index.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/index.js","webpack:///./node_modules/algoliasearch-helper/src/algoliasearch.helper.js","webpack:///./node_modules/algoliasearch-helper/src/functions/compact.js","webpack:///./node_modules/algoliasearch-helper/src/functions/defaultsPure.js","webpack:///./node_modules/algoliasearch-helper/src/functions/escapeFacetValue.js","webpack:///./node_modules/algoliasearch-helper/src/functions/find.js","webpack:///./node_modules/algoliasearch-helper/src/functions/findIndex.js","webpack:///./node_modules/algoliasearch-helper/src/functions/formatSort.js","webpack:///./node_modules/algoliasearch-helper/src/functions/inherits.js","webpack:///./node_modules/algoliasearch-helper/src/functions/intersection.js","webpack:///./node_modules/algoliasearch-helper/src/functions/merge.js","webpack:///./node_modules/algoliasearch-helper/src/functions/objectHasKeys.js","webpack:///./node_modules/algoliasearch-helper/src/functions/omit.js","webpack:///./node_modules/algoliasearch-helper/src/functions/orderBy.js","webpack:///./node_modules/algoliasearch-helper/src/functions/valToNumber.js","webpack:///./node_modules/algoliasearch-helper/src/requestBuilder.js","webpack:///./node_modules/algoliasearch-helper/src/utils/isValidUserToken.js","webpack:///./node_modules/algoliasearch-helper/src/version.js","webpack:///./node_modules/algoliasearch/dist/algoliasearch.umd.js","webpack:///./node_modules/querystring/decode.js","webpack:///./node_modules/querystring/encode.js","webpack:///./node_modules/querystring/index.js","webpack:///./node_modules/search-insights/dist/search-insights-browser.cjs.min.js","webpack:///./node_modules/search-insights/index-browser.cjs.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/env.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/encoder.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/origin-tracer.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/util/base64url.js","webpack:///./resources/js/buyer-experience/common/base-paths.ts","webpack:///./resources/js/common/hamlet/hamlet-api.ts","webpack:///./resources/js/common/hamlet/hamlet-user.ts","webpack:///./resources/js/components/navigation/adg4-global-nav.ts","webpack:///./node_modules/url/node_modules/punycode/punycode.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v4.js"],"sourcesContent":["// 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\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\n// EventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\n\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n * facets: ['shipping'],\n * disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n * console.log(event.results);\n * });\n * helper\n * .toggleFacetRefinement('category', 'Movies & TV Shows')\n * .toggleFacetRefinement('shipping', 'Free shipping')\n * .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the name of the index to query\n * @param {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @return {AlgoliaSearchHelper}\n */\nfunction algoliasearchHelper(client, index, opts) {\n return new AlgoliaSearchHelper(client, index, opts);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version.js');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\nmodule.exports = algoliasearchHelper;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\nvar inherits = require('../functions/inherits');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n */\nfunction DerivedHelper(mainHelper, fn) {\n this.main = mainHelper;\n this.fn = fn;\n this.lastResults = null;\n}\n\ninherits(DerivedHelper, EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function() {\n this.removeAllListeners();\n this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function(parameters) {\n return this.fn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","'use strict';\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\n\nvar lib = {\n /**\n * Adds a refinement to a RefinementList\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement, if the value is not a string it will be converted\n * @return {RefinementList} a new and updated refinement list\n */\n addRefinement: function addRefinement(refinementList, attribute, value) {\n if (lib.isRefined(refinementList, attribute, value)) {\n return refinementList;\n }\n\n var valueAsString = '' + value;\n\n var facetRefinement = !refinementList[attribute] ?\n [valueAsString] :\n refinementList[attribute].concat(valueAsString);\n\n var mod = {};\n\n mod[attribute] = facetRefinement;\n\n return defaultsPure({}, mod, refinementList);\n },\n /**\n * Removes refinement(s) for an attribute:\n * - if the value is specified removes the refinement for the value on the attribute\n * - if no value is specified removes all the refinements for this attribute\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} [value] the value of the refinement\n * @return {RefinementList} a new and updated refinement lst\n */\n removeRefinement: function removeRefinement(refinementList, attribute, value) {\n if (value === undefined) {\n // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n // the form with a string will remove the attribute completely\n return lib.clearRefinement(refinementList, function(v, f) {\n return attribute === f;\n });\n }\n\n var valueAsString = '' + value;\n\n return lib.clearRefinement(refinementList, function(v, f) {\n return attribute === f && valueAsString === v;\n });\n },\n /**\n * Toggles the refinement value for an attribute.\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement\n * @return {RefinementList} a new and updated list\n */\n toggleRefinement: function toggleRefinement(refinementList, attribute, value) {\n if (value === undefined) throw new Error('toggleRefinement should be used with a value');\n\n if (lib.isRefined(refinementList, attribute, value)) {\n return lib.removeRefinement(refinementList, attribute, value);\n }\n\n return lib.addRefinement(refinementList, attribute, value);\n },\n /**\n * Clear all or parts of a RefinementList. Depending on the arguments, three\n * kinds of behavior can happen:\n * - if no attribute is provided: clears the whole list\n * - if an attribute is provided as a string: clears the list for the specific attribute\n * - if an attribute is provided as a function: discards the elements for which the function returns true\n * @param {RefinementList} refinementList the initial list\n * @param {string} [attribute] the attribute or function to discard\n * @param {string} [refinementType] optional parameter to give more context to the attribute function\n * @return {RefinementList} a new and updated refinement list\n */\n clearRefinement: function clearRefinement(refinementList, attribute, refinementType) {\n if (attribute === undefined) {\n if (!objectHasKeys(refinementList)) {\n return refinementList;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(refinementList, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n\n var newRefinementList = Object.keys(refinementList).reduce(function(memo, key) {\n var values = refinementList[key] || [];\n var facetList = values.filter(function(value) {\n return !attribute(value, key, refinementType);\n });\n\n if (facetList.length !== values.length) {\n hasChanged = true;\n }\n memo[key] = facetList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n },\n /**\n * Test if the refinement value is used for the attribute. If no refinement value\n * is provided, test if the refinementList contains any refinement for the\n * given attribute.\n * @param {RefinementList} refinementList the list of refinement\n * @param {string} attribute name of the attribute\n * @param {string} [refinementValue] value of the filter/refinement\n * @return {boolean}\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements = !!refinementList[attribute] &&\n refinementList[attribute].length > 0;\n\n if (refinementValue === undefined || !containsRefinements) {\n return containsRefinements;\n }\n\n var refinementValueAsString = '' + refinementValue;\n\n return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n }\n};\n\nmodule.exports = lib;\n","'use strict';\n\nvar merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar intersection = require('../functions/intersection');\nvar find = require('../functions/find');\nvar valToNumber = require('../functions/valToNumber');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar isValidUserToken = require('../utils/isValidUserToken');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n */\nfunction isEqualNumericRefinement(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(function(el, i) {\n return isEqualNumericRefinement(b[i], el);\n })\n );\n }\n return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n return find(array, function(currentValue) {\n return isEqualNumericRefinement(currentValue, searchedValue);\n });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example SearchParameters of the first query in\n * the instant search demo\n{\n \"query\": \"\",\n \"disjunctiveFacets\": [\n \"customerReviewCount\",\n \"category\",\n \"salePrice_range\",\n \"manufacturer\"\n ],\n \"maxValuesPerFacet\": 30,\n \"page\": 0,\n \"hitsPerPage\": 10,\n \"facets\": [\n \"type\",\n \"shipping\"\n ]\n}\n */\nfunction SearchParameters(newParameters) {\n var params = newParameters ? SearchParameters._parseNumbers(newParameters) : {};\n\n if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n console.warn('[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n - Format: [a-zA-Z0-9_-]{1,64}');\n }\n /**\n * This attribute contains the list of all the conjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.facets = params.facets || [];\n /**\n * This attribute contains the list of all the disjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.disjunctiveFacets = params.disjunctiveFacets || [];\n /**\n * This attribute contains the list of all the hierarchical facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * Hierarchical facets are a sub type of disjunctive facets that\n * let you filter faceted attributes hierarchically.\n * @member {string[]|object[]}\n */\n this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n // Refinements\n /**\n * This attribute contains all the filters that need to be\n * applied on the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsRefinements = params.facetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * excluded from the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters excluded for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsExcludes = params.facetsExcludes || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the disjunctive facets. Each facet must be properly\n * defined in the `disjunctiveFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the numeric attributes.\n *\n * The key is the name of the attribute, and the value is the\n * filters to apply to this attribute.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `numericFilters` attribute.\n * @member {Object.}\n */\n this.numericRefinements = params.numericRefinements || {};\n /**\n * This attribute contains all the tags used to refine the query.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `tagFilters` attribute.\n * @member {string[]}\n */\n this.tagRefinements = params.tagRefinements || [];\n /**\n * This attribute contains all the filters that need to be\n * applied on the hierarchical facets. Each facet must be properly\n * defined in the `hierarchicalFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name. The FacetList values\n * are structured as a string that contain the values for each level\n * separated by the configured separator.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.hierarchicalFacetsRefinements = params.hierarchicalFacetsRefinements || {};\n\n var self = this;\n Object.keys(params).forEach(function(paramName) {\n var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n var isValueDefined = params[paramName] !== undefined;\n\n if (!isKeyKnown && isValueDefined) {\n self[paramName] = params[paramName];\n }\n });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function(partialState) {\n // Do not reparse numbers in SearchParameters, they ought to be parsed already\n if (partialState instanceof SearchParameters) return partialState;\n\n var numbers = {};\n\n var numberKeys = [\n 'aroundPrecision',\n 'aroundRadius',\n 'getRankingInfo',\n 'minWordSizefor2Typos',\n 'minWordSizefor1Typo',\n 'page',\n 'maxValuesPerFacet',\n 'distinct',\n 'minimumAroundRadius',\n 'hitsPerPage',\n 'minProximity'\n ];\n\n numberKeys.forEach(function(k) {\n var value = partialState[k];\n if (typeof value === 'string') {\n var parsedValue = parseFloat(value);\n // global isNaN is ok to use here, value is only number or NaN\n numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n }\n });\n\n // there's two formats of insideBoundingBox, we need to parse\n // the one which is an array of float geo rectangles\n if (Array.isArray(partialState.insideBoundingBox)) {\n numbers.insideBoundingBox = partialState.insideBoundingBox.map(function(geoRect) {\n if (Array.isArray(geoRect)) {\n return geoRect.map(function(value) {\n return parseFloat(value);\n });\n }\n return geoRect;\n });\n }\n\n if (partialState.numericRefinements) {\n var numericRefinements = {};\n Object.keys(partialState.numericRefinements).forEach(function(attribute) {\n var operators = partialState.numericRefinements[attribute] || {};\n numericRefinements[attribute] = {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator];\n var parsedValues = values.map(function(v) {\n if (Array.isArray(v)) {\n return v.map(function(vPrime) {\n if (typeof vPrime === 'string') {\n return parseFloat(vPrime);\n }\n return vPrime;\n });\n } else if (typeof v === 'string') {\n return parseFloat(v);\n }\n return v;\n });\n numericRefinements[attribute][operator] = parsedValues;\n });\n });\n numbers.numericRefinements = numericRefinements;\n }\n\n return merge({}, partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n var instance = new SearchParameters(newParameters);\n\n var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n hierarchicalFacets.forEach(function(facet) {\n if (facet.rootPath) {\n var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n if (currentRefinement.length > 0 && currentRefinement[0].indexOf(facet.rootPath) !== 0) {\n instance = instance.clearRefinements(facet.name);\n }\n\n // get it again in case it has been cleared\n currentRefinement = instance.getHierarchicalRefinement(facet.name);\n if (currentRefinement.length === 0) {\n instance = instance.toggleHierarchicalFacetRefinement(facet.name, facet.rootPath);\n }\n }\n });\n\n return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function(currentState, parameters) {\n var params = parameters || {};\n\n if (currentState.tagFilters && params.tagRefinements && params.tagRefinements.length > 0) {\n return new Error(\n '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n 'an error, if it is really what you want, you should first clear the tags with clearTags method.');\n }\n\n if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n return new Error(\n '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n 'an error, if it is not, you should first clear the tags with clearTags method.');\n }\n\n if (\n currentState.numericFilters &&\n params.numericRefinements &&\n objectHasKeys(params.numericRefinements)\n ) {\n return new Error(\n \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.'\n );\n }\n\n if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n return new Error(\n \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.');\n }\n\n return null;\n};\n\nSearchParameters.prototype = {\n constructor: SearchParameters,\n\n /**\n * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n * @method\n * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {SearchParameters}\n */\n clearRefinements: function clearRefinements(attribute) {\n var patch = {\n numericRefinements: this._clearNumericRefinements(attribute),\n facetsRefinements: RefinementList.clearRefinement(\n this.facetsRefinements,\n attribute,\n 'conjunctiveFacet'\n ),\n facetsExcludes: RefinementList.clearRefinement(\n this.facetsExcludes,\n attribute,\n 'exclude'\n ),\n disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n this.disjunctiveFacetsRefinements,\n attribute,\n 'disjunctiveFacet'\n ),\n hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n this.hierarchicalFacetsRefinements,\n attribute,\n 'hierarchicalFacet'\n )\n };\n if (\n patch.numericRefinements === this.numericRefinements &&\n patch.facetsRefinements === this.facetsRefinements &&\n patch.facetsExcludes === this.facetsExcludes &&\n patch.disjunctiveFacetsRefinements === this.disjunctiveFacetsRefinements &&\n patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n ) {\n return this;\n }\n return this.setQueryParameters(patch);\n },\n /**\n * Remove all the refined tags from the SearchParameters\n * @method\n * @return {SearchParameters}\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0) return this;\n\n return this.setQueryParameters({\n tagFilters: undefined,\n tagRefinements: []\n });\n },\n /**\n * Set the index.\n * @method\n * @param {string} index the index name\n * @return {SearchParameters}\n */\n setIndex: function setIndex(index) {\n if (index === this.index) return this;\n\n return this.setQueryParameters({\n index: index\n });\n },\n /**\n * Query setter\n * @method\n * @param {string} newQuery value for the new query\n * @return {SearchParameters}\n */\n setQuery: function setQuery(newQuery) {\n if (newQuery === this.query) return this;\n\n return this.setQueryParameters({\n query: newQuery\n });\n },\n /**\n * Page setter\n * @method\n * @param {number} newPage new page number\n * @return {SearchParameters}\n */\n setPage: function setPage(newPage) {\n if (newPage === this.page) return this;\n\n return this.setQueryParameters({\n page: newPage\n });\n },\n /**\n * Facets setter\n * The facets are the simple facets, used for conjunctive (and) faceting.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n * @return {SearchParameters}\n */\n setFacets: function setFacets(facets) {\n return this.setQueryParameters({\n facets: facets\n });\n },\n /**\n * Disjunctive facets setter\n * Change the list of disjunctive (or) facets the helper chan handle.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n * @return {SearchParameters}\n */\n setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n return this.setQueryParameters({\n disjunctiveFacets: facets\n });\n },\n /**\n * HitsPerPage setter\n * Hits per page represents the number of hits retrieved for this query\n * @method\n * @param {number} n number of hits retrieved per page of results\n * @return {SearchParameters}\n */\n setHitsPerPage: function setHitsPerPage(n) {\n if (this.hitsPerPage === n) return this;\n\n return this.setQueryParameters({\n hitsPerPage: n\n });\n },\n /**\n * typoTolerance setter\n * Set the value of typoTolerance\n * @method\n * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n * @return {SearchParameters}\n */\n setTypoTolerance: function setTypoTolerance(typoTolerance) {\n if (this.typoTolerance === typoTolerance) return this;\n\n return this.setQueryParameters({\n typoTolerance: typoTolerance\n });\n },\n /**\n * Add a numeric filter for a given attribute\n * When value is an array, they are combined with OR\n * When value is a single value, it will combined with AND\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number | number[]} value value of the filter\n * @return {SearchParameters}\n * @example\n * // for price = 50 or 40\n * searchparameter.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * searchparameter.addNumericRefinement('size', '=', 38);\n * searchparameter.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function(attribute, operator, v) {\n var value = valToNumber(v);\n\n if (this.isNumericRefined(attribute, operator, value)) return this;\n\n var mod = merge({}, this.numericRefinements);\n\n mod[attribute] = merge({}, mod[attribute]);\n\n if (mod[attribute][operator]) {\n // Array copy\n mod[attribute][operator] = mod[attribute][operator].slice();\n // Add the element. Concat can't be used here because value can be an array.\n mod[attribute][operator].push(value);\n } else {\n mod[attribute][operator] = [value];\n }\n\n return this.setQueryParameters({\n numericRefinements: mod\n });\n },\n /**\n * Get the list of conjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getConjunctiveRefinements: function(facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsRefinements[facetName] || [];\n },\n /**\n * Get the list of disjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getDisjunctiveRefinements: function(facetName) {\n if (!this.isDisjunctiveFacet(facetName)) {\n return [];\n }\n return this.disjunctiveFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of hierarchical refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getHierarchicalRefinement: function(facetName) {\n // we send an array but we currently do not support multiple\n // hierarchicalRefinements for a hierarchicalFacet\n return this.hierarchicalFacetsRefinements[facetName] || [];\n },\n /**\n * Get the list of exclude refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getExcludeRefinements: function(facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n return [];\n }\n return this.facetsExcludes[facetName] || [];\n },\n\n /**\n * Remove all the numeric filter for a given (attribute, operator)\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number} [number] the value to be removed\n * @return {SearchParameters}\n */\n removeNumericRefinement: function(attribute, operator, paramValue) {\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return (\n key === attribute &&\n value.op === operator &&\n isEqualNumericRefinement(value.val, valToNumber(paramValue))\n );\n })\n });\n } else if (operator !== undefined) {\n if (!this.isNumericRefined(attribute, operator)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute && value.op === operator;\n })\n });\n }\n\n if (!this.isNumericRefined(attribute)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute;\n })\n });\n },\n /**\n * Get the list of numeric refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {SearchParameters.OperatorList} list of refinements\n */\n getNumericRefinements: function(facetName) {\n return this.numericRefinements[facetName] || {};\n },\n /**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\n getNumericRefinement: function(attribute, operator) {\n return this.numericRefinements[attribute] && this.numericRefinements[attribute][operator];\n },\n /**\n * Clear numeric filters.\n * @method\n * @private\n * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {Object.}\n */\n _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n if (attribute === undefined) {\n if (!objectHasKeys(this.numericRefinements)) {\n return this.numericRefinements;\n }\n return {};\n } else if (typeof attribute === 'string') {\n return omit(this.numericRefinements, [attribute]);\n } else if (typeof attribute === 'function') {\n var hasChanged = false;\n var numericRefinements = this.numericRefinements;\n var newNumericRefinements = Object.keys(numericRefinements).reduce(function(memo, key) {\n var operators = numericRefinements[key];\n var operatorList = {};\n\n operators = operators || {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator] || [];\n var outValues = [];\n values.forEach(function(value) {\n var predicateResult = attribute({val: value, op: operator}, key, 'numeric');\n if (!predicateResult) outValues.push(value);\n });\n if (outValues.length !== values.length) {\n hasChanged = true;\n }\n operatorList[operator] = outValues;\n });\n\n memo[key] = operatorList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n },\n /**\n * Add a facet to the facets attribute of the helper configuration, if it\n * isn't already present.\n * @method\n * @param {string} facet facet name to add\n * @return {SearchParameters}\n */\n addFacet: function addFacet(facet) {\n if (this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n facets: this.facets.concat([facet])\n });\n },\n /**\n * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n * configuration, if it isn't already present.\n * @method\n * @param {string} facet disjunctive facet name to add\n * @return {SearchParameters}\n */\n addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n if (this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.concat([facet])\n });\n },\n /**\n * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n * configuration.\n * @method\n * @param {object} hierarchicalFacet hierarchical facet to add\n * @return {SearchParameters}\n * @throws will throw an error if a hierarchical facet with the same name was already declared\n */\n addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n throw new Error(\n 'Cannot declare two hierarchical facets with the same name: `' + hierarchicalFacet.name + '`');\n }\n\n return this.setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet])\n });\n },\n /**\n * Add a refinement on a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Exclude a value from a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the exclusion on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Adds a refinement on a disjunctive facet.\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n if (RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * addTagRefinement adds a tag to the list used to filter the results\n * @param {string} tag tag to be added\n * @return {SearchParameters}\n */\n addTagRefinement: function addTagRefinement(tag) {\n if (this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.concat(tag)\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Remove a facet from the facets attribute of the helper configuration, if it\n * is present.\n * @method\n * @param {string} facet facet name to remove\n * @return {SearchParameters}\n */\n removeFacet: function removeFacet(facet) {\n if (!this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n facets: this.facets.filter(function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet disjunctive facet name to remove\n * @return {SearchParameters}\n */\n removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n if (!this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.filter(function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet hierarchical facet name to remove\n * @return {SearchParameters}\n */\n removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n if (!this.isHierarchicalFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.filter(function(f) {\n return f.name !== facet;\n })\n });\n },\n /**\n * Remove a refinement set on facet. If a value is provided, it will clear the\n * refinement for the given value, otherwise it will clear all the refinement\n * values for the faceted attribute.\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} [value] value used to filter\n * @return {SearchParameters}\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Remove a negative refinement on a facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Remove a refinement on a disjunctive facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Remove a tag from the list of tag refinements\n * @method\n * @param {string} tag the tag to remove\n * @return {SearchParameters}\n */\n removeTagRefinement: function removeTagRefinement(tag) {\n if (!this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.filter(function(t) {\n return t !== tag;\n })\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n */\n toggleRefinement: function toggleRefinement(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n */\n toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n if (this.isHierarchicalFacet(facet)) {\n return this.toggleHierarchicalFacetRefinement(facet, value);\n } else if (this.isConjunctiveFacet(facet)) {\n return this.toggleConjunctiveFacetRefinement(facet, value);\n } else if (this.isDisjunctiveFacet(facet)) {\n return this.toggleDisjunctiveFacetRefinement(facet, value);\n }\n\n throw new Error('Cannot refine the undeclared facet ' + facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets');\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration');\n }\n\n var separator = this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(facet));\n\n var mod = {};\n\n var upOneOrMultipleLevel = this.hierarchicalFacetsRefinements[facet] !== undefined &&\n this.hierarchicalFacetsRefinements[facet].length > 0 && (\n // remove current refinement:\n // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0] === value ||\n // remove a parent refinement of the current refinement:\n // - refinement was 'beer > IPA > Flying dog'\n // - call is toggleRefine('beer > IPA')\n // - refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0].indexOf(value + separator) === 0\n );\n\n if (upOneOrMultipleLevel) {\n if (value.indexOf(separator) === -1) {\n // go back to root level\n mod[facet] = [];\n } else {\n mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n }\n } else {\n mod[facet] = [value];\n }\n\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Adds a refinement on a hierarchical facet.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is refined\n */\n addHierarchicalFacetRefinement: function(facet, path) {\n if (this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is already refined.');\n }\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration.');\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is not refined\n */\n removeHierarchicalFacetRefinement: function(facet) {\n if (!this.isHierarchicalFacetRefined(facet)) {\n return this;\n }\n var mod = {};\n mod[facet] = [];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters}\n */\n toggleTagRefinement: function toggleTagRefinement(tag) {\n if (this.isTagRefined(tag)) {\n return this.removeTagRefinement(tag);\n }\n\n return this.addTagRefinement(tag);\n },\n /**\n * Test if the facet name is from one of the disjunctive facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isDisjunctiveFacet: function(facet) {\n return this.disjunctiveFacets.indexOf(facet) > -1;\n },\n /**\n * Test if the facet name is from one of the hierarchical facets\n * @method\n * @param {string} facetName facet name to test\n * @return {boolean}\n */\n isHierarchicalFacet: function(facetName) {\n return this.getHierarchicalFacetByName(facetName) !== undefined;\n },\n /**\n * Test if the facet name is from one of the conjunctive/normal facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isConjunctiveFacet: function(facet) {\n return this.facets.indexOf(facet) > -1;\n },\n /**\n * Returns true if the facet is refined, either for a specific value or in\n * general.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value, optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isFacetRefined: function isFacetRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains exclusions or if a specific value is\n * excluded.\n *\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} returns true if refined\n */\n isExcludeRefined: function isExcludeRefined(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.facetsExcludes, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n return false;\n }\n\n var refinements = this.getHierarchicalRefinement(facet);\n\n if (!value) {\n return refinements.length > 0;\n }\n\n return refinements.indexOf(value) !== -1;\n },\n /**\n * Test if the triple (attribute, operator, value) is already refined.\n * If only the attribute and the operator are provided, it tests if the\n * contains any refinement value.\n * @method\n * @param {string} attribute attribute for which the refinement is applied\n * @param {string} [operator] operator of the refinement\n * @param {string} [value] value of the refinement\n * @return {boolean} true if it is refined\n */\n isNumericRefined: function isNumericRefined(attribute, operator, value) {\n if (value === undefined && operator === undefined) {\n return !!this.numericRefinements[attribute];\n }\n\n var isOperatorDefined =\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator] !== undefined;\n\n if (value === undefined || !isOperatorDefined) {\n return isOperatorDefined;\n }\n\n var parsedValue = valToNumber(value);\n var isAttributeValueDefined =\n findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n undefined;\n\n return isOperatorDefined && isAttributeValueDefined;\n },\n /**\n * Returns true if the tag refined, false otherwise\n * @method\n * @param {string} tag the tag to check\n * @return {boolean}\n */\n isTagRefined: function isTagRefined(tag) {\n return this.tagRefinements.indexOf(tag) !== -1;\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n var self = this;\n\n // attributes used for numeric filter can also be disjunctive\n var disjunctiveNumericRefinedFacets = intersection(\n Object.keys(this.numericRefinements).filter(function(facet) {\n return Object.keys(self.numericRefinements[facet]).length > 0;\n }),\n this.disjunctiveFacets\n );\n\n return Object.keys(this.disjunctiveFacetsRefinements).filter(function(facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets());\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n var self = this;\n return intersection(\n // enforce the order between the two arrays,\n // so that refinement name index === hierarchical facet index\n this.hierarchicalFacets.map(function(facet) { return facet.name; }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function(facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n );\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]}\n */\n getUnrefinedDisjunctiveFacets: function() {\n var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n return this.disjunctiveFacets.filter(function(f) {\n return refinedFacets.indexOf(f) === -1;\n });\n },\n\n managedParameters: [\n 'index',\n\n 'facets',\n 'disjunctiveFacets',\n 'facetsRefinements',\n 'hierarchicalFacets',\n 'facetsExcludes',\n\n 'disjunctiveFacetsRefinements',\n 'numericRefinements',\n 'tagRefinements',\n 'hierarchicalFacetsRefinements'\n ],\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n var self = this;\n Object.keys(this).forEach(function(paramName) {\n var paramValue = self[paramName];\n if (managedParameters.indexOf(paramName) === -1 && paramValue !== undefined) {\n queryParams[paramName] = paramValue;\n }\n });\n\n return queryParams;\n },\n /**\n * Let the user set a specific value for a given parameter. Will return the\n * same instance if the parameter is invalid or if the value is the same as the\n * previous one.\n * @method\n * @param {string} parameter the parameter name\n * @param {any} value the value to be set, must be compliant with the definition\n * of the attribute on the object\n * @return {SearchParameters} the updated state\n */\n setQueryParameter: function setParameter(parameter, value) {\n if (this[parameter] === value) return this;\n\n var modification = {};\n\n modification[parameter] = value;\n\n return this.setQueryParameters(modification);\n },\n /**\n * Let the user set any of the parameters with a plain object.\n * @method\n * @param {object} params all the keys and the values to be updated\n * @return {SearchParameters} a new updated instance\n */\n setQueryParameters: function setQueryParameters(params) {\n if (!params) return this;\n\n var error = SearchParameters.validate(this, params);\n\n if (error) {\n throw error;\n }\n\n var self = this;\n var nextWithNumbers = SearchParameters._parseNumbers(params);\n var previousPlainObject = Object.keys(this).reduce(function(acc, key) {\n acc[key] = self[key];\n return acc;\n }, {});\n\n var nextPlainObject = Object.keys(nextWithNumbers).reduce(\n function(previous, key) {\n var isPreviousValueDefined = previous[key] !== undefined;\n var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n if (isPreviousValueDefined && !isNextValueDefined) {\n return omit(previous, [key]);\n }\n\n if (isNextValueDefined) {\n previous[key] = nextWithNumbers[key];\n }\n\n return previous;\n },\n previousPlainObject\n );\n\n return new this.constructor(nextPlainObject);\n },\n\n /**\n * Returns a new instance with the page reset. Two scenarios possible:\n * the page is omitted -> return the given instance\n * the page is set -> return a new instance with a page of 0\n * @return {SearchParameters} a new updated instance\n */\n resetPage: function() {\n if (this.page === undefined) {\n return this;\n }\n\n return this.setPage(0);\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSortBy: function(hierarchicalFacet) {\n return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSeparator: function(hierarchicalFacet) {\n return hierarchicalFacet.separator || ' > ';\n },\n\n /**\n * Helper function to get the hierarchicalFacet prefix path or null\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.rootPath or null as default\n */\n _getHierarchicalRootPath: function(hierarchicalFacet) {\n return hierarchicalFacet.rootPath || null;\n },\n\n /**\n * Helper function to check if we show the parent level of the hierarchicalFacet\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n */\n _getHierarchicalShowParentLevel: function(hierarchicalFacet) {\n if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n return hierarchicalFacet.showParentLevel;\n }\n return true;\n },\n\n /**\n * Helper function to get the hierarchicalFacet by it's name\n * @param {string} hierarchicalFacetName\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function(hierarchicalFacetName) {\n return find(\n this.hierarchicalFacets,\n function(f) {\n return f.name === hierarchicalFacetName;\n }\n );\n },\n\n /**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\n getHierarchicalFacetBreadcrumb: function(facetName) {\n if (!this.isHierarchicalFacet(facetName)) {\n return [];\n }\n\n var refinement = this.getHierarchicalRefinement(facetName)[0];\n if (!refinement) return [];\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facetName)\n );\n var path = refinement.split(separator);\n return path.map(function(part) {\n return part.trim();\n });\n },\n\n toString: function() {\n return JSON.stringify(this, null, 2);\n }\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n","'use strict';\n\nmodule.exports = generateTrees;\n\nvar orderBy = require('../functions/orderBy');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\nvar fv = require('../functions/escapeFacetValue');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nfunction generateTrees(state) {\n return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n var hierarchicalFacetRefinement =\n (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n '';\n var hierarchicalSeparator = state._getHierarchicalFacetSeparator(\n hierarchicalFacet\n );\n var hierarchicalRootPath = state._getHierarchicalRootPath(\n hierarchicalFacet\n );\n var hierarchicalShowParentLevel = state._getHierarchicalShowParentLevel(\n hierarchicalFacet\n );\n var sortBy = prepareHierarchicalFacetSortBy(\n state._getHierarchicalFacetSortBy(hierarchicalFacet)\n );\n\n var rootExhaustive = hierarchicalFacetResult.every(function(facetResult) {\n return facetResult.exhaustive;\n });\n\n var generateTreeFn = generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n hierarchicalFacetRefinement\n );\n\n var results = hierarchicalFacetResult;\n\n if (hierarchicalRootPath) {\n results = hierarchicalFacetResult.slice(\n hierarchicalRootPath.split(hierarchicalSeparator).length\n );\n }\n\n return results.reduce(generateTreeFn, {\n name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n count: null, // root level, no count\n isRefined: true, // root level, always refined\n path: null, // root level, no path\n escapedValue: null,\n exhaustive: rootExhaustive,\n data: null\n });\n };\n}\n\nfunction generateHierarchicalTree(\n sortBy,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel,\n currentRefinement\n) {\n return function generateTree(\n hierarchicalTree,\n hierarchicalFacetResult,\n currentHierarchicalLevel\n ) {\n var parent = hierarchicalTree;\n\n if (currentHierarchicalLevel > 0) {\n var level = 0;\n\n parent = hierarchicalTree;\n\n while (level < currentHierarchicalLevel) {\n /**\n * @type {object[]]} hierarchical data\n */\n var data = parent && Array.isArray(parent.data) ? parent.data : [];\n parent = find(data, function(subtree) {\n return subtree.isRefined;\n });\n level++;\n }\n }\n\n // we found a refined parent, let's add current level data under it\n if (parent) {\n // filter values in case an object has multiple categories:\n // {\n // categories: {\n // level0: ['beers', 'bières'],\n // level1: ['beers > IPA', 'bières > Belges']\n // }\n // }\n //\n // If parent refinement is `beers`, then we do not want to have `bières > Belges`\n // showing up\n\n var picked = Object.keys(hierarchicalFacetResult.data)\n .map(function(facetValue) {\n return [facetValue, hierarchicalFacetResult.data[facetValue]];\n })\n .filter(function(tuple) {\n var facetValue = tuple[0];\n return onlyMatchingTree(\n facetValue,\n parent.path || hierarchicalRootPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n );\n });\n\n parent.data = orderBy(\n picked.map(function(tuple) {\n var facetValue = tuple[0];\n var facetCount = tuple[1];\n\n return format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n unescapeFacetValue(currentRefinement),\n hierarchicalFacetResult.exhaustive\n );\n }),\n sortBy[0],\n sortBy[1]\n );\n }\n\n return hierarchicalTree;\n };\n}\n\nfunction onlyMatchingTree(\n facetValue,\n parentPath,\n currentRefinement,\n hierarchicalSeparator,\n hierarchicalRootPath,\n hierarchicalShowParentLevel\n) {\n // we want the facetValue is a child of hierarchicalRootPath\n if (\n hierarchicalRootPath &&\n (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n hierarchicalRootPath === facetValue)\n ) {\n return false;\n }\n\n // we always want root levels (only when there is no prefix path)\n return (\n (!hierarchicalRootPath &&\n facetValue.indexOf(hierarchicalSeparator) === -1) ||\n // if there is a rootPath, being root level mean 1 level under rootPath\n (hierarchicalRootPath &&\n facetValue.split(hierarchicalSeparator).length -\n hierarchicalRootPath.split(hierarchicalSeparator).length ===\n 1) ||\n // if current refinement is a root level and current facetValue is a root level,\n // keep the facetValue\n (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n // currentRefinement is a child of the facet value\n currentRefinement.indexOf(facetValue) === 0 ||\n // facetValue is a child of the current parent, add it\n (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n (hierarchicalShowParentLevel ||\n facetValue.indexOf(currentRefinement) === 0))\n );\n}\n\nfunction format(\n facetCount,\n facetValue,\n hierarchicalSeparator,\n currentRefinement,\n exhaustive\n) {\n var parts = facetValue.split(hierarchicalSeparator);\n return {\n name: parts[parts.length - 1].trim(),\n path: facetValue,\n escapedValue: escapeFacetValue(facetValue),\n count: facetCount,\n isRefined:\n currentRefinement === facetValue ||\n currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n exhaustive: exhaustive,\n data: null\n };\n}\n","'use strict';\n\nvar merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar orderBy = require('../functions/orderBy');\nvar compact = require('../functions/compact');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\nvar fv = require('../functions/escapeFacetValue');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nvar generateHierarchicalTree = require('./generate-hierarchical-tree');\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * @param {string[]} attributes\n */\nfunction getIndices(attributes) {\n var indices = {};\n\n attributes.forEach(function(val, idx) {\n indices[val] = idx;\n });\n\n return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n if (facetStats && facetStats[key]) {\n dest.stats = facetStats[key];\n }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets\n * @param {string} hierarchicalAttributeName\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(hierarchicalFacets, function facetKeyMatchesAttribute(\n hierarchicalFacet\n ) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n });\n}\n\n/*eslint-disable */\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.} results the results from algolia client\n * @example SearchResults of the first query in\n * the instant search demo\n{\n \"hitsPerPage\": 10,\n \"processingTimeMS\": 2,\n \"facets\": [\n {\n \"name\": \"type\",\n \"data\": {\n \"HardGood\": 6627,\n \"BlackTie\": 550,\n \"Music\": 665,\n \"Software\": 131,\n \"Game\": 456,\n \"Movie\": 1571\n },\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"Free shipping\": 5507\n },\n \"name\": \"shipping\"\n }\n ],\n \"hits\": [\n {\n \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n \"_highlightResult\": {\n \"shortDescription\": {\n \"matchLevel\": \"none\",\n \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"matchedWords\": []\n },\n \"category\": {\n \"matchLevel\": \"none\",\n \"value\": \"Computer Security Software\",\n \"matchedWords\": []\n },\n \"manufacturer\": {\n \"matchedWords\": [],\n \"value\": \"Webroot\",\n \"matchLevel\": \"none\"\n },\n \"name\": {\n \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"matchedWords\": [],\n \"matchLevel\": \"none\"\n }\n },\n \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n \"shipping\": \"Free shipping\",\n \"bestSellingRank\": 4,\n \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi…d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n \"category\": \"Computer Security Software\",\n \"salePrice_range\": \"1 - 50\",\n \"objectID\": \"1688832\",\n \"type\": \"Software\",\n \"customerReviewCount\": 5980,\n \"salePrice\": 49.99,\n \"manufacturer\": \"Webroot\"\n },\n ....\n ],\n \"nbHits\": 10000,\n \"disjunctiveFacets\": [\n {\n \"exhaustive\": false,\n \"data\": {\n \"5\": 183,\n \"12\": 112,\n \"7\": 149,\n ...\n },\n \"name\": \"customerReviewCount\",\n \"stats\": {\n \"max\": 7461,\n \"avg\": 157.939,\n \"min\": 1\n }\n },\n {\n \"data\": {\n \"Printer Ink\": 142,\n \"Wireless Speakers\": 60,\n \"Point & Shoot Cameras\": 48,\n ...\n },\n \"name\": \"category\",\n \"exhaustive\": false\n },\n {\n \"exhaustive\": false,\n \"data\": {\n \"> 5000\": 2,\n \"1 - 50\": 6524,\n \"501 - 2000\": 566,\n \"201 - 500\": 1501,\n \"101 - 200\": 1360,\n \"2001 - 5000\": 47\n },\n \"name\": \"salePrice_range\"\n },\n {\n \"data\": {\n \"Dynex™\": 202,\n \"Insignia™\": 230,\n \"PNY\": 72,\n ...\n },\n \"name\": \"manufacturer\",\n \"exhaustive\": false\n }\n ],\n \"query\": \"\",\n \"nbPages\": 100,\n \"page\": 0,\n \"index\": \"bestbuy\"\n}\n **/\n/*eslint-enable */\nfunction SearchResults(state, results, options) {\n var mainSubResponse = results[0];\n\n this._rawResults = results;\n\n var self = this;\n\n // https://www.algolia.com/doc/api-reference/api-methods/search/#response\n Object.keys(mainSubResponse).forEach(function(key) {\n self[key] = mainSubResponse[key];\n });\n\n // Make every key of the result options reachable from the instance\n Object.keys(options || {}).forEach(function(key) {\n self[key] = options[key];\n });\n\n /**\n * query used to generate the results\n * @name query\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The query as parsed by the engine given all the rules.\n * @name parsedQuery\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * all the records that match the search parameters. Each record is\n * augmented with a new attribute `_highlightResult`\n * which is an object keyed by attribute and with the following properties:\n * - `value` : the value of the facet highlighted (html)\n * - `matchLevel`: full, partial or none depending on how the query terms match\n * @name hits\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * index where the results come from\n * @name index\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n /**\n * number of hits per page requested\n * @name hitsPerPage\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of hits of this query on the index\n * @name nbHits\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * total number of pages with respect to the number of hits per page and the total number of hits\n * @name nbPages\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * current page\n * @name page\n * @member {number}\n * @memberof SearchResults\n * @instance\n */\n /**\n * The position if the position was guessed by IP.\n * @name aroundLatLng\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"48.8637,2.3615\",\n */\n /**\n * The radius computed by Algolia.\n * @name automaticRadius\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"126792922\",\n */\n /**\n * String identifying the server used to serve this request.\n *\n * getRankingInfo needs to be set to `true` for this to be returned\n *\n * @name serverUsed\n * @member {string}\n * @memberof SearchResults\n * @instance\n * @example \"c7-use-2.algolia.net\",\n */\n /**\n * Boolean that indicates if the computation of the counts did time out.\n * @deprecated\n * @name timeoutCounts\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Boolean that indicates if the computation of the hits did time out.\n * @deprecated\n * @name timeoutHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the counts of the facets is exhaustive\n * @name exhaustiveFacetsCount\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * True if the number of hits is exhaustive\n * @name exhaustiveNbHits\n * @member {boolean}\n * @memberof SearchResults\n * @instance\n */\n /**\n * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n * @name userData\n * @member {object[]}\n * @memberof SearchResults\n * @instance\n */\n /**\n * queryID is the unique identifier of the query used to generate the current search results.\n * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n * @name queryID\n * @member {string}\n * @memberof SearchResults\n * @instance\n */\n\n /**\n * sum of the processing time of all the queries\n * @member {number}\n */\n this.processingTimeMS = results.reduce(function(sum, result) {\n return result.processingTimeMS === undefined\n ? sum\n : sum + result.processingTimeMS;\n }, 0);\n\n /**\n * disjunctive facets results\n * @member {SearchResults.Facet[]}\n */\n this.disjunctiveFacets = [];\n /**\n * disjunctive facets results\n * @member {SearchResults.HierarchicalFacet[]}\n */\n this.hierarchicalFacets = state.hierarchicalFacets.map(function initFutureTree() {\n return [];\n });\n /**\n * other facets results\n * @member {SearchResults.Facet[]}\n */\n this.facets = [];\n\n var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n var facetsIndices = getIndices(state.facets);\n var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n var nextDisjunctiveResult = 1;\n\n // Since we send request only for disjunctive facets that have been refined,\n // we get the facets information from the first, general, response.\n\n var mainFacets = mainSubResponse.facets || {};\n\n Object.keys(mainFacets).forEach(function(facetKey) {\n var facetValueObject = mainFacets[facetKey];\n\n var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n state.hierarchicalFacets,\n facetKey\n );\n\n if (hierarchicalFacet) {\n // Place the hierarchicalFacet data at the correct index depending on\n // the attributes order that was defined at the helper initialization\n var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n var idxAttributeName = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n attribute: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n } else {\n var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n var position;\n\n if (isFacetDisjunctive) {\n position = disjunctiveFacetsIndices[facetKey];\n self.disjunctiveFacets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n assignFacetStats(self.disjunctiveFacets[position], mainSubResponse.facets_stats, facetKey);\n }\n if (isFacetConjunctive) {\n position = facetsIndices[facetKey];\n self.facets[position] = {\n name: facetKey,\n data: facetValueObject,\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n assignFacetStats(self.facets[position], mainSubResponse.facets_stats, facetKey);\n }\n }\n });\n\n // Make sure we do not keep holes within the hierarchical facets\n this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n // aggregate the refined disjunctive facets\n disjunctiveFacets.forEach(function(disjunctiveFacet) {\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets ? result.facets : {};\n var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n // There should be only item in facets.\n Object.keys(facets).forEach(function(dfacet) {\n var facetResults = facets[dfacet];\n\n var position;\n\n if (hierarchicalFacet) {\n position = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\n });\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = merge(\n {},\n self.hierarchicalFacets[position][attributeIndex].data,\n facetResults\n );\n } else {\n position = disjunctiveFacetsIndices[dfacet];\n\n var dataFromMainRequest = mainSubResponse.facets && mainSubResponse.facets[dfacet] || {};\n\n self.disjunctiveFacets[position] = {\n name: dfacet,\n data: defaultsPure({}, facetResults, dataFromMainRequest),\n exhaustive: result.exhaustiveFacetsCount\n };\n assignFacetStats(self.disjunctiveFacets[position], result.facets_stats, dfacet);\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function(refinementValue) {\n // add the disjunctive refinements if it is no more retrieved\n if (!self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(unescapeFacetValue(refinementValue)) > -1) {\n self.disjunctiveFacets[position].data[refinementValue] = 0;\n }\n });\n }\n }\n });\n nextDisjunctiveResult++;\n });\n\n // if we have some parent level values for hierarchical facets, merge them\n state.getRefinedHierarchicalFacets().forEach(function(refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are already at a root refinement (or no refinement at all), there is no\n // root level values request\n if (currentRefinement.length === 0 || currentRefinement[0].split(separator).length < 2) {\n return;\n }\n\n results.slice(nextDisjunctiveResult).forEach(function(result) {\n var facets = result && result.facets\n ? result.facets\n : {};\n\n Object.keys(facets).forEach(function(dfacet) {\n var facetResults = facets[dfacet];\n var position = findIndex(state.hierarchicalFacets, function(f) {\n return f.name === hierarchicalFacet.name;\n });\n var attributeIndex = findIndex(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\n });\n\n // previous refinements and no results so not able to find it\n if (attributeIndex === -1) {\n return;\n }\n\n // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n // then the disjunctive values will be `beers` (count: 100),\n // but we do not want to display\n // | beers (100)\n // > IPA (5)\n // We want\n // | beers (5)\n // > IPA (5)\n var defaultData = {};\n\n if (currentRefinement.length > 0) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] = self.hierarchicalFacets[position][attributeIndex].data[root];\n }\n\n self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n defaultData,\n facetResults,\n self.hierarchicalFacets[position][attributeIndex].data\n );\n });\n\n nextDisjunctiveResult++;\n });\n });\n\n // add the excludes\n Object.keys(state.facetsExcludes).forEach(function(facetName) {\n var excludes = state.facetsExcludes[facetName];\n var position = facetsIndices[facetName];\n\n self.facets[position] = {\n name: facetName,\n data: mainSubResponse.facets[facetName],\n exhaustive: mainSubResponse.exhaustiveFacetsCount\n };\n excludes.forEach(function(facetValue) {\n self.facets[position] = self.facets[position] || {name: facetName};\n self.facets[position].data = self.facets[position].data || {};\n self.facets[position].data[facetValue] = 0;\n });\n });\n\n /**\n * @type {Array}\n */\n this.hierarchicalFacets = this.hierarchicalFacets.map(generateHierarchicalTree(state));\n\n /**\n * @type {Array}\n */\n this.facets = compact(this.facets);\n /**\n * @type {Array}\n */\n this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function(name) {\n function predicate(facet) {\n return facet.name === name;\n }\n\n return find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate);\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n function predicate(facet) {\n return facet.name === attribute;\n }\n\n if (results._state.isConjunctiveFacet(attribute)) {\n var facet = find(results.facets, predicate);\n if (!facet) return [];\n\n return Object.keys(facet.data).map(function(name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: facet.data[name],\n isRefined: results._state.isFacetRefined(attribute, value),\n isExcluded: results._state.isExcludeRefined(attribute, name)\n };\n });\n } else if (results._state.isDisjunctiveFacet(attribute)) {\n var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n if (!disjunctiveFacet) return [];\n\n return Object.keys(disjunctiveFacet.data).map(function(name) {\n var value = escapeFacetValue(name);\n return {\n name: name,\n escapedValue: value,\n count: disjunctiveFacet.data[name],\n isRefined: results._state.isDisjunctiveFacetRefined(attribute, value)\n };\n });\n } else if (results._state.isHierarchicalFacet(attribute)) {\n return find(results.hierarchicalFacets, predicate);\n }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn\n * @param {HierarchicalFacet|Array} node node upon which we want to apply the sort\n * @param {string[]} names attribute names\n * @param {number} [level=0] current index in the names array\n */\nfunction recSort(sortFn, node, names, level) {\n level = level || 0;\n\n if (Array.isArray(node)) {\n return sortFn(node, names[level]);\n }\n\n if (!node.data || node.data.length === 0) {\n return node;\n }\n\n var children = node.data.map(function(childNode) {\n return recSort(sortFn, childNode, names, level + 1);\n });\n var sortedChildren = sortFn(children, names[level]);\n var newNode = defaultsPure({data: sortedChildren}, node);\n return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n return data.sort(order);\n}\n\n/**\n * @typedef FacetOrdering\n * @type {Object}\n * @property {string[]} [order]\n * @property {'count' | 'alpha' | 'hidden'} [sortRemainingBy]\n */\n\n/**\n * Sorts facet arrays via their facet ordering\n * @param {Array} facetValues the values\n * @param {FacetOrdering} facetOrdering the ordering\n * @returns {Array}\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n var orderedFacets = [];\n var remainingFacets = [];\n\n var order = facetOrdering.order || [];\n /**\n * an object with the keys being the values in order, the values their index:\n * ['one', 'two'] -> { one: 0, two: 1 }\n */\n var reverseOrder = order.reduce(function(acc, name, i) {\n acc[name] = i;\n return acc;\n }, {});\n\n facetValues.forEach(function(item) {\n // hierarchical facets get sorted using their raw name\n var name = item.path || item.name;\n if (reverseOrder[name] !== undefined) {\n orderedFacets[reverseOrder[name]] = item;\n } else {\n remainingFacets.push(item);\n }\n });\n\n orderedFacets = orderedFacets.filter(function(facet) {\n return facet;\n });\n\n var sortRemainingBy = facetOrdering.sortRemainingBy;\n var ordering;\n if (sortRemainingBy === 'hidden') {\n return orderedFacets;\n } else if (sortRemainingBy === 'alpha') {\n ordering = [['path', 'name'], ['asc', 'asc']];\n } else {\n ordering = [['count'], ['desc']];\n }\n\n return orderedFacets.concat(\n orderBy(remainingFacets, ordering[0], ordering[1])\n );\n}\n\n/**\n * @param {SearchResults} results the search results class\n * @param {string} attribute the attribute to retrieve ordering of\n * @returns {FacetOrdering=}\n */\nfunction getFacetOrdering(results, attribute) {\n return (\n results.renderingContent &&\n results.renderingContent.facetOrdering &&\n results.renderingContent.facetOrdering.values &&\n results.renderingContent.facetOrdering.values[attribute]\n );\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {boolean} [opts.facetOrdering]\n * Force the use of facetOrdering from the result if a sortBy is present. If\n * sortBy isn't present, facetOrdering will be used automatically.\n * @param {Array. | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending. This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n * //get values ordered only by name ascending using the string predicate\n * event.results.getFacetValues('city', {sortBy: ['name:asc']});\n * //get values ordered only by count ascending using a function\n * event.results.getFacetValues('city', {\n * // this is equivalent to ['count:asc']\n * sortBy: function(a, b) {\n * if (a.count === b.count) return 0;\n * if (a.count > b.count) return 1;\n * if (b.count > a.count) return -1;\n * }\n * });\n * });\n */\nSearchResults.prototype.getFacetValues = function(attribute, opts) {\n var facetValues = extractNormalizedFacetValues(this, attribute);\n if (!facetValues) {\n return undefined;\n }\n\n var options = defaultsPure({}, opts, {\n sortBy: SearchResults.DEFAULT_SORT,\n // if no sortBy is given, attempt to sort based on facetOrdering\n // if it is given, we still allow to sort via facet ordering first\n facetOrdering: !(opts && opts.sortBy)\n });\n\n var results = this;\n var attributes;\n if (Array.isArray(facetValues)) {\n attributes = [attribute];\n } else {\n var config = results._state.getHierarchicalFacetByName(facetValues.name);\n attributes = config.attributes;\n }\n\n return recSort(function(data, facetName) {\n if (options.facetOrdering) {\n var facetOrdering = getFacetOrdering(results, facetName);\n if (Boolean(facetOrdering)) {\n return sortViaFacetOrdering(data, facetOrdering);\n }\n }\n\n if (Array.isArray(options.sortBy)) {\n var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n return orderBy(data, order[0], order[1]);\n } else if (typeof options.sortBy === 'function') {\n return vanillaSortFn(options.sortBy, data);\n }\n throw new Error(\n 'options.sortBy is optional but if defined it must be ' +\n 'either an array of string (predicates) or a sorting function'\n );\n }, facetValues, attributes);\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function(attribute) {\n if (this._state.isConjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.facets, attribute);\n } else if (this._state.isDisjunctiveFacet(attribute)) {\n return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n }\n\n return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n var data = find(facetList, function(facet) {\n return facet.name === facetName;\n });\n return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.} all the refinements\n */\nSearchResults.prototype.getRefinements = function() {\n var state = this._state;\n var results = this;\n var res = [];\n\n Object.keys(state.facetsRefinements).forEach(function(attributeName) {\n state.facetsRefinements[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'facet', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function(attributeName) {\n state.facetsExcludes[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'exclude', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function(attributeName) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'disjunctive', attributeName, name, results.disjunctiveFacets));\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function(attributeName) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getHierarchicalRefinement(state, attributeName, name, results.hierarchicalFacets));\n });\n });\n\n\n Object.keys(state.numericRefinements).forEach(function(attributeName) {\n var operators = state.numericRefinements[attributeName];\n Object.keys(operators).forEach(function(operator) {\n operators[operator].forEach(function(value) {\n res.push({\n type: 'numeric',\n attributeName: attributeName,\n name: value,\n numericValue: value,\n operator: operator\n });\n });\n });\n });\n\n state.tagRefinements.forEach(function(name) {\n res.push({type: 'tag', attributeName: '_tags', name: name});\n });\n\n return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {*} state\n * @param {*} type\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n var facet = find(resultsFacets, function(f) {\n return f.name === attributeName;\n });\n var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n\n return {\n type: type,\n attributeName: attributeName,\n name: name,\n count: count,\n exhaustive: exhaustive\n };\n}\n\n/**\n * @param {*} state\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n var split = name.split(separator);\n var rootFacet = find(resultsFacets, function(facet) {\n return facet.name === attributeName;\n });\n\n var facet = split.reduce(function(intermediateFacet, part) {\n var newFacet =\n intermediateFacet && find(intermediateFacet.data, function(f) {\n return f.name === part;\n });\n return newFacet !== undefined ? newFacet : intermediateFacet;\n }, rootFacet);\n\n var count = (facet && facet.count) || 0;\n var exhaustive = (facet && facet.exhaustive) || false;\n var path = (facet && facet.path) || '';\n\n return {\n type: 'hierarchical',\n attributeName: attributeName,\n name: path,\n count: count,\n exhaustive: exhaustive\n };\n}\n\nmodule.exports = SearchResults;\n","'use strict';\n\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar DerivedHelper = require('./DerivedHelper');\nvar requestBuilder = require('./requestBuilder');\n\nvar EventEmitter = require('@algolia/events');\nvar inherits = require('./functions/inherits');\nvar objectHasKeys = require('./functions/objectHasKeys');\nvar omit = require('./functions/omit');\nvar merge = require('./functions/merge');\n\nvar version = require('./version');\nvar escapeFacetValue = require('./functions/escapeFacetValue').escapeFacetValue;\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n * console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n * console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n * console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n * console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n * console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n * console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n * console.log('No more search pending');\n * // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n * - change: when the internal search state is changed.\n * This event contains a {@link SearchParameters} object and the\n * {@link SearchResults} of the last result if any.\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n * - error: when the response is an error. This event contains the error returned by the server.\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the index name to query\n * @param {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n */\nfunction AlgoliaSearchHelper(client, index, options) {\n if (typeof client.addAlgoliaAgent === 'function') {\n client.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n\n this.setClient(client);\n var opts = options || {};\n opts.index = index;\n this.state = SearchParameters.make(opts);\n this.lastResults = null;\n this._queryId = 0;\n this._lastQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n}\n\ninherits(AlgoliaSearchHelper, EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper}\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function() {\n this._search({onlyWithDerivedHelpers: false});\n return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function() {\n this._search({onlyWithDerivedHelpers: true});\n return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function() {\n var state = this.state;\n return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [callback] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n * - content with a SearchResults\n * - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n * function(error, content, state) {\n * // if an error occurred it will be passed in error, otherwise its value is null\n * // content contains the results formatted as a SearchResults\n * // state is the instance of SearchParameters used for this search\n * });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n * .then(promiseHandler);\n *\n * function promiseHandler(res) {\n * // res contains\n * // {\n * // content : SearchResults\n * // state : SearchParameters (the one used for this specific search)\n * // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function(options, cb) {\n var tempState = !options ? this.state : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\n var self = this;\n\n this._currentNbQueries++;\n\n this.emit('searchOnce', {\n state: tempState\n });\n\n if (cb) {\n this.client\n .search(queries)\n .then(function(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(null, new SearchResults(tempState, content.results), tempState);\n })\n .catch(function(err) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) {\n self.emit('searchQueueEmpty');\n }\n\n cb(err, null, tempState);\n });\n\n return undefined;\n }\n\n return this.client.search(queries).then(function(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n return {\n content: new SearchResults(tempState, content.results),\n state: tempState,\n _originalResponse: content\n };\n }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n });\n};\n\n /**\n * Start the search for answers with the parameters set in the state.\n * This method returns a promise.\n * @param {Object} options - the options for answers API call\n * @param {string[]} options.attributesForPrediction - Attributes to use for predictions. If empty, `searchableAttributes` is used instead.\n * @param {string[]} options.queryLanguages - The languages in the query. Currently only supports ['en'].\n * @param {number} options.nbHits - Maximum number of answers to retrieve from the Answers Engine. Cannot be greater than 1000.\n *\n * @return {promise} the answer results\n */\nAlgoliaSearchHelper.prototype.findAnswers = function(options) {\n var state = this.state;\n var derivedHelper = this.derivedHelpers[0];\n if (!derivedHelper) {\n return Promise.resolve([]);\n }\n var derivedState = derivedHelper.getModifiedState(state);\n var data = merge(\n {\n attributesForPrediction: options.attributesForPrediction,\n nbHits: options.nbHits\n },\n {\n params: omit(requestBuilder._getHitsSearchParams(derivedState), [\n 'attributesToSnippet',\n 'hitsPerPage',\n 'restrictSearchableAttributes',\n 'snippetEllipsisText' // FIXME remove this line once the engine is fixed.\n ])\n }\n );\n\n var errorMessage = 'search for answers was called, but this client does not have a function client.initIndex(index).findAnswers';\n if (typeof this.client.initIndex !== 'function') {\n throw new Error(errorMessage);\n }\n var index = this.client.initIndex(derivedState.index);\n if (typeof index.findAnswers !== 'function') {\n throw new Error(errorMessage);\n }\n return index.findAnswers(derivedState.query, options.queryLanguages, data);\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function(facet, query, maxFacetHits, userState) {\n var clientHasSFFV = typeof this.client.searchForFacetValues === 'function';\n var clientHasInitIndex = typeof this.client.initIndex === 'function';\n if (\n !clientHasSFFV &&\n !clientHasInitIndex &&\n typeof this.client.search !== 'function'\n ) {\n throw new Error(\n 'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n );\n }\n\n var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n var algoliaQuery = requestBuilder.getSearchForFacetQuery(facet, query, maxFacetHits, state);\n\n this._currentNbQueries++;\n var self = this;\n var searchForFacetValuesPromise;\n // newer algoliasearch ^3.27.1 - ~4.0.0\n if (clientHasSFFV) {\n searchForFacetValuesPromise = this.client.searchForFacetValues([\n {indexName: state.index, params: algoliaQuery}\n ]);\n // algoliasearch < 3.27.1\n } else if (clientHasInitIndex) {\n searchForFacetValuesPromise = this.client\n .initIndex(state.index)\n .searchForFacetValues(algoliaQuery);\n // algoliasearch ~5.0.0\n } else {\n // @MAJOR only use client.search\n delete algoliaQuery.facetName;\n searchForFacetValuesPromise = this.client\n .search([\n {\n type: 'facet',\n facet: facet,\n indexName: state.index,\n params: algoliaQuery\n }\n ])\n .then(function processResponse(response) {\n return response.results[0];\n });\n }\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query\n });\n\n return searchForFacetValuesPromise.then(function addIsRefined(content) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n content = Array.isArray(content) ? content[0] : content;\n\n content.facetHits.forEach(function(f) {\n f.escapedValue = escapeFacetValue(f.value);\n f.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n : state.isFacetRefined(facet, f.escapedValue);\n });\n\n return content;\n }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n });\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param {string} q the user query\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function(q) {\n this._change({\n state: this.state.resetPage().setQuery(q),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n * return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function(name) {\n this._change({\n state: this.state.resetPage().clearRefinements(name),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function() {\n this._change({\n state: this.state.resetPage().clearTags(),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function() {\n return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper}\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} operator the operator of the filter\n * @param {number} value the value of the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().addNumericRefinement(attribute, operator, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function() {\n return this.addFacetRefinement.apply(this, arguments);\n};\n\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().addExcludeRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function() {\n return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function(tag) {\n this._change({\n state: this.state.resetPage().addTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n * - if the value is not provided, then all the numeric value will be removed for the\n * specified attribute/operator couple.\n * - if the operator is not provided either, then all the numeric filter on this attribute\n * will be removed.\n *\n * This method resets the current page to 0.\n * @param {string} attribute the attribute on which the numeric filter applies\n * @param {string} [operator] the operator of the filter\n * @param {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().removeNumericRefinement(attribute, operator, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function() {\n return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper}\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function(facet) {\n this._change({\n state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function() {\n return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} [value] the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeExcludeRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function() {\n return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function(tag) {\n this._change({\n state: this.state.resetPage().removeTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function(facet, value) {\n this._change({\n state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function() {\n return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {AlgoliaSearchHelper}\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().toggleFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function() {\n return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function(tag) {\n this._change({\n state: this.state.resetPage().toggleTagRefinement(tag),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function() {\n var page = this.state.page || 0;\n return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper}\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function() {\n var page = this.state.page || 0;\n return this.setPage(page - 1);\n};\n\n/**\n * @private\n */\nfunction setCurrentPage(page) {\n if (page < 0) throw new Error('Page requested below 0.');\n\n this._change({\n state: this.state.setPage(page),\n isPageReset: false\n });\n\n return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function(name) {\n this._change({\n state: this.state.resetPage().setIndex(name),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function(parameter, value) {\n this._change({\n state: this.state.resetPage().setQueryParameter(parameter, value),\n isPageReset: true\n });\n\n return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function(newState) {\n this._change({\n state: SearchParameters.make(newState),\n isPageReset: false\n });\n\n return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper}\n * @example\n * helper.on('change', function(state){\n * // In this function you might want to find a way to store the state in the url/history\n * updateYourURL(state)\n * })\n * window.onpopstate = function(event){\n * // This is naive though as you should check if the state is really defined etc.\n * helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n * }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent = function(newState) {\n this.state = new SearchParameters(newState);\n return this;\n};\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function(attribute) {\n if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n return true;\n } else if (this.state.isConjunctiveFacet(attribute)) {\n return this.state.isFacetRefined(attribute);\n } else if (this.state.isDisjunctiveFacet(attribute)) {\n return this.state.isDisjunctiveFacetRefined(attribute);\n } else if (this.state.isHierarchicalFacet(attribute)) {\n return this.state.isHierarchicalFacetRefined(attribute);\n }\n\n // there's currently no way to know that the user did call `addNumericRefinement` at some point\n // thus we cannot distinguish if there once was a numeric refinement that was cleared\n // so we will return false in every other situations to be consistent\n // while what we should do here is throw because we did not find the attribute in any type\n // of refinement\n return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function(facet, value) {\n return this.state.isExcludeRefined(facet, value);\n};\n\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function(facet, value) {\n return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean}\n */\nAlgoliaSearchHelper.prototype.hasTag = function(tag) {\n return this.state.isTagRefined(tag);\n};\n\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function() {\n return this.hasTagRefinements.apply(this, arguments);\n};\n\n\n/**\n * Get the name of the currently used index.\n * @return {string}\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function() {\n return this.state.index;\n};\n\nfunction getCurrentPage() {\n return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function() {\n return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * // {\n * // \"value\": [\n * // 100\n * // ],\n * // \"operator\": \">\",\n * // \"type\": \"numeric\"\n * // }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * // {\n * // \"value\": \"blue\",\n * // \"type\": \"conjunctive\"\n * // },\n * // {\n * // \"value\": \"red\",\n * // \"type\": \"exclude\"\n * // }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * // {\n * // \"value\": \"plastic\",\n * // \"type\": \"disjunctive\"\n * // }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function(facetName) {\n var refinements = [];\n\n if (this.state.isConjunctiveFacet(facetName)) {\n var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n conjRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'conjunctive'\n });\n });\n\n var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n excludeRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'exclude'\n });\n });\n } else if (this.state.isDisjunctiveFacet(facetName)) {\n var disjRefinements = this.state.getDisjunctiveRefinements(facetName);\n\n disjRefinements.forEach(function(r) {\n refinements.push({\n value: r,\n type: 'disjunctive'\n });\n });\n }\n\n var numericRefinements = this.state.getNumericRefinements(facetName);\n\n Object.keys(numericRefinements).forEach(function(operator) {\n var value = numericRefinements[operator];\n\n refinements.push({\n value: value,\n operator: operator,\n type: 'numeric'\n });\n });\n\n return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function(attribute, operator) {\n return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param {string} facetName Hierarchical facet name\n * @return {array.} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function(facetName) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @return {undefined}\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function(options) {\n var state = this.state;\n var states = [];\n var mainQueries = [];\n\n if (!options.onlyWithDerivedHelpers) {\n mainQueries = requestBuilder._getQueries(state.index, state);\n\n states.push({\n state: state,\n queriesCount: mainQueries.length,\n helper: this\n });\n\n this.emit('search', {\n state: state,\n results: this.lastResults\n });\n }\n\n var derivedQueries = this.derivedHelpers.map(function(derivedHelper) {\n var derivedState = derivedHelper.getModifiedState(state);\n var derivedStateQueries = requestBuilder._getQueries(derivedState.index, derivedState);\n\n states.push({\n state: derivedState,\n queriesCount: derivedStateQueries.length,\n helper: derivedHelper\n });\n\n derivedHelper.emit('search', {\n state: derivedState,\n results: derivedHelper.lastResults\n });\n\n return derivedStateQueries;\n });\n\n var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n var queryId = this._queryId++;\n\n this._currentNbQueries++;\n\n try {\n this.client.search(queries)\n .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n .catch(this._dispatchAlgoliaError.bind(this, queryId));\n } catch (error) {\n // If we reach this part, we're in an internal error state\n this.emit('error', {\n error: error\n });\n }\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>}\n * state state used for to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function(states, queryId, content) {\n // FIXME remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= (queryId - this._lastQueryIdReceived);\n this._lastQueryIdReceived = queryId;\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n var results = content.results.slice();\n\n states.forEach(function(s) {\n var state = s.state;\n var queriesCount = s.queriesCount;\n var helper = s.helper;\n var specificResults = results.splice(0, queriesCount);\n\n var formattedResponse = helper.lastResults = new SearchResults(state, specificResults);\n\n helper.emit('result', {\n results: formattedResponse,\n state: state\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function(queryId, error) {\n if (queryId < this._lastQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n this._lastQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error\n });\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function(query, facetFilters, numericFilters, tagFilters) {\n return query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0;\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean}\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function(facet) {\n return this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0;\n};\n\nAlgoliaSearchHelper.prototype._change = function(event) {\n var state = event.state;\n var isPageReset = event.isPageReset;\n\n if (state !== this.state) {\n this.state = state;\n\n this.emit('change', {\n state: this.state,\n results: this.lastResults,\n isPageReset: isPageReset\n });\n }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper}\n */\nAlgoliaSearchHelper.prototype.clearCache = function() {\n this.client.clearCache && this.client.clearCache();\n return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper}\n */\nAlgoliaSearchHelper.prototype.setClient = function(newClient) {\n if (this.client === newClient) return this;\n\n if (typeof newClient.addAlgoliaAgent === 'function') {\n newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n }\n this.client = newClient;\n\n return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch}\n */\nAlgoliaSearchHelper.prototype.getClient = function() {\n return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @return {DerivedHelper}\n */\nAlgoliaSearchHelper.prototype.derive = function(fn) {\n var derivedHelper = new DerivedHelper(this, fn);\n this.derivedHelpers.push(derivedHelper);\n return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @return {undefined}\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function(derivedHelper) {\n var pos = this.derivedHelpers.indexOf(derivedHelper);\n if (pos === -1) throw new Error('Derived helper already detached');\n this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function() {\n return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n","'use strict';\n\nmodule.exports = function compact(array) {\n if (!Array.isArray(array)) {\n return [];\n }\n\n return array.filter(Boolean);\n};\n","'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order\nmodule.exports = function defaultsPure() {\n var sources = Array.prototype.slice.call(arguments);\n\n return sources.reduceRight(function(acc, source) {\n Object.keys(Object(source)).forEach(function(key) {\n if (source[key] === undefined) {\n return;\n }\n if (acc[key] !== undefined) {\n // remove if already added, so that we can add it in correct order\n delete acc[key];\n }\n acc[key] = source[key];\n });\n return acc;\n }, {});\n};\n","'use strict';\n\n/**\n * Replaces a leading - with \\-\n * @private\n * @param {any} value the facet value to replace\n * @returns any\n */\nfunction escapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return String(value).replace(/^-/, '\\\\-');\n}\n\n/**\n * Replaces a leading \\- with -\n * @private\n * @param {any} value the escaped facet value\n * @returns any\n */\nfunction unescapeFacetValue(value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/^\\\\-/, '-');\n}\n\nmodule.exports = {\n escapeFacetValue: escapeFacetValue,\n unescapeFacetValue: unescapeFacetValue\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return undefined;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return array[i];\n }\n }\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n if (!Array.isArray(array)) {\n return -1;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (comparator(array[i])) {\n return i;\n }\n }\n return -1;\n};\n","'use strict';\n\nvar find = require('./find');\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n var defaultInstructions = (defaults || []).map(function(sort) {\n return sort.split(':');\n });\n\n return sortBy.reduce(\n function preparePredicate(out, sort) {\n var sortInstruction = sort.split(':');\n\n var matchingDefault = find(defaultInstructions, function(\n defaultInstruction\n ) {\n return defaultInstruction[0] === sortInstruction[0];\n });\n\n if (sortInstruction.length > 1 || !matchingDefault) {\n out[0].push(sortInstruction[0]);\n out[1].push(sortInstruction[1]);\n return out;\n }\n\n out[0].push(matchingDefault[0]);\n out[1].push(matchingDefault[1]);\n return out;\n },\n [[], []]\n );\n};\n","'use strict';\n\nfunction inherits(ctor, superCtor) {\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\n\nmodule.exports = inherits;\n","'use strict';\n\nfunction intersection(arr1, arr2) {\n return arr1.filter(function(value, index) {\n return (\n arr2.indexOf(value) > -1 &&\n arr1.indexOf(value) === index /* skips duplicates */\n );\n });\n}\n\nmodule.exports = intersection;\n","'use strict';\n\nfunction clone(value) {\n if (typeof value === 'object' && value !== null) {\n return _merge(Array.isArray(value) ? [] : {}, value);\n }\n return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n return (\n typeof value === 'function' ||\n Array.isArray(value) ||\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\nfunction _merge(target, source) {\n if (target === source) {\n return target;\n }\n\n for (var key in source) {\n if (\n !Object.prototype.hasOwnProperty.call(source, key) ||\n key === '__proto__'\n ) {\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n continue;\n }\n\n if (\n isObjectOrArrayOrFunction(targetVal) &&\n isObjectOrArrayOrFunction(sourceVal)\n ) {\n target[key] = _merge(targetVal, sourceVal);\n } else {\n target[key] = clone(sourceVal);\n }\n }\n return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\n\nfunction merge(target) {\n if (!isObjectOrArrayOrFunction(target)) {\n target = {};\n }\n\n for (var i = 1, l = arguments.length; i < l; i++) {\n var source = arguments[i];\n\n if (isObjectOrArrayOrFunction(source)) {\n _merge(target, source);\n }\n }\n return target;\n}\n\nmodule.exports = merge;\n","'use strict';\n\nfunction objectHasKeys(obj) {\n return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n","'use strict';\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source === null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key;\n var i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n","'use strict';\n\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined;\n var valIsNull = value === null;\n\n var othIsDefined = other !== undefined;\n var othIsNull = other === null;\n\n if (\n (!othIsNull && value > other) ||\n (valIsNull && othIsDefined) ||\n !valIsDefined\n ) {\n return 1;\n }\n if (\n (!valIsNull && value < other) ||\n (othIsNull && valIsDefined) ||\n !othIsDefined\n ) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * @param {Array} collection object with keys in attributes\n * @param {Array} iteratees attributes\n * @param {Array} orders asc | desc\n */\nfunction orderBy(collection, iteratees, orders) {\n if (!Array.isArray(collection)) {\n return [];\n }\n\n if (!Array.isArray(orders)) {\n orders = [];\n }\n\n var result = collection.map(function(value, index) {\n return {\n criteria: iteratees.map(function(iteratee) {\n return value[iteratee];\n }),\n index: index,\n value: value\n };\n });\n\n result.sort(function comparer(object, other) {\n var index = -1;\n\n while (++index < object.criteria.length) {\n var res = compareAscending(object.criteria[index], other.criteria[index]);\n if (res) {\n if (index >= orders.length) {\n return res;\n }\n if (orders[index] === 'desc') {\n return -res;\n }\n return res;\n }\n }\n\n // This ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n });\n\n return result.map(function(res) {\n return res.value;\n });\n}\n\nmodule.exports = orderBy;\n","'use strict';\n\nfunction valToNumber(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n return parseFloat(v);\n } else if (Array.isArray(v)) {\n return v.map(valToNumber);\n }\n\n throw new Error('The value should be a number, a parsable string or an array of those.');\n}\n\nmodule.exports = valToNumber;\n","'use strict';\n\nvar merge = require('./functions/merge');\n\nfunction sortObject(obj) {\n return Object.keys(obj)\n .sort(function(a, b) {\n return a.localeCompare(b);\n })\n .reduce(function(acc, curr) {\n acc[curr] = obj[curr];\n return acc;\n }, {});\n}\n\nvar requestBuilder = {\n /**\n * Get all the queries to send to the client, those queries can used directly\n * with the Algolia client.\n * @private\n * @return {object[]} The queries\n */\n _getQueries: function getQueries(index, state) {\n var queries = [];\n\n // One query for the hits\n queries.push({\n indexName: index,\n params: requestBuilder._getHitsSearchParams(state)\n });\n\n // One for each disjunctive facets\n state.getRefinedDisjunctiveFacets().forEach(function(refinedFacet) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(state, refinedFacet)\n });\n });\n\n // More to get the parent levels of the hierarchical facets when refined\n state.getRefinedHierarchicalFacets().forEach(function(refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n // If we are deeper than level 0 (starting from `beer > IPA`)\n // we want to get all parent values\n if (currentRefinement.length > 0 && currentRefinement[0].split(separator).length > 1) {\n // We generate a map of the filters we will use for our facet values queries\n var filtersMap = currentRefinement[0].split(separator).slice(0, -1).reduce(\n function createFiltersMap(map, segment, level) {\n return map.concat({\n attribute: hierarchicalFacet.attributes[level],\n value: level === 0\n ? segment\n : [map[map.length - 1].value, segment].join(separator)\n });\n }\n , []);\n\n filtersMap.forEach(function(filter, level) {\n var params = requestBuilder._getDisjunctiveFacetSearchParams(\n state,\n filter.attribute,\n level === 0\n );\n\n var parent = filtersMap[level - 1];\n params.facetFilters = level > 0 ? [parent.attribute + ':' + parent.value] : undefined;\n\n queries.push({indexName: index, params: params});\n });\n }\n });\n\n return queries;\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @return {object.}\n */\n _getHitsSearchParams: function(state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state));\n\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n facets: facets.indexOf('*') > -1 ? ['*'] : facets,\n tagFilters: tagFilters\n };\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Build search parameters used to fetch a disjunctive facet\n * @private\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object}\n */\n _getDisjunctiveFacetSearchParams: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = requestBuilder._getFacetFilters(state, facet, hierarchicalRootLevel);\n var numericFilters = requestBuilder._getNumericFilters(state, facet);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n hitsPerPage: 0,\n page: 0,\n analytics: false,\n clickAnalytics: false\n };\n\n if (tagFilters.length > 0) {\n additionalParams.tagFilters = tagFilters;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n if (hierarchicalFacet) {\n additionalParams.facets = requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n state,\n hierarchicalFacet,\n hierarchicalRootLevel\n );\n } else {\n additionalParams.facets = facet;\n }\n\n if (numericFilters.length > 0) {\n additionalParams.numericFilters = numericFilters;\n }\n\n if (facetFilters.length > 0) {\n additionalParams.facetFilters = facetFilters;\n }\n\n return sortObject(merge({}, state.getQueryParams(), additionalParams));\n },\n\n /**\n * Return the numeric filters in an algolia request fashion\n * @private\n * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n * @return {string[]} the numeric filters in the algolia format\n */\n _getNumericFilters: function(state, facetName) {\n if (state.numericFilters) {\n return state.numericFilters;\n }\n\n var numericFilters = [];\n\n Object.keys(state.numericRefinements).forEach(function(attribute) {\n var operators = state.numericRefinements[attribute] || {};\n Object.keys(operators).forEach(function(operator) {\n var values = operators[operator] || [];\n if (facetName !== attribute) {\n values.forEach(function(value) {\n if (Array.isArray(value)) {\n var vs = value.map(function(v) {\n return attribute + operator + v;\n });\n numericFilters.push(vs);\n } else {\n numericFilters.push(attribute + operator + value);\n }\n });\n }\n });\n });\n\n return numericFilters;\n },\n\n /**\n * Return the tags filters depending\n * @private\n * @return {string}\n */\n _getTagFilters: function(state) {\n if (state.tagFilters) {\n return state.tagFilters;\n }\n\n return state.tagRefinements.join(',');\n },\n\n\n /**\n * Build facetFilters parameter based on current refinements. The array returned\n * contains strings representing the facet filters in the algolia format.\n * @private\n * @param {string} [facet] if set, the current disjunctive facet\n * @return {array.}\n */\n _getFacetFilters: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements).forEach(function(facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes).forEach(function(facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements).forEach(function(facetName) {\n var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n if (facetName === facet || !facetValues || facetValues.length === 0) {\n return;\n }\n var orFilters = [];\n\n facetValues.forEach(function(facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements = state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements).forEach(function(facetName) {\n var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n var facetValue = facetValues[0];\n\n if (facetValue === undefined) {\n return;\n }\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeToRefine;\n var attributesIndex;\n\n // we ask for parent facet values only when the `facet` is the current hierarchical facet\n if (facet === facetName) {\n // if we are at the root level already, no need to ask for facet values, we get them from\n // the hits query\n if (facetValue.indexOf(separator) === -1 || (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath && rootPath.split(separator).length === facetValue.split(separator).length)) {\n return;\n }\n\n if (!rootPath) {\n attributesIndex = facetValue.split(separator).length - 2;\n facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n } else {\n attributesIndex = rootPath.split(separator).length - 1;\n facetValue = rootPath;\n }\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n } else {\n attributesIndex = facetValue.split(separator).length - 1;\n\n attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n }\n\n if (attributeToRefine) {\n facetFilters.push([attributeToRefine + ':' + facetValue]);\n }\n });\n\n return facetFilters;\n },\n\n _getHitsHierarchicalFacetsAttributes: function(state) {\n var out = [];\n\n return state.hierarchicalFacets.reduce(\n // ask for as much levels as there's hierarchical refinements\n function getHitsAttributesForHierarchicalFacet(allAttributes, hierarchicalFacet) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(hierarchicalFacet.name)[0];\n\n // if no refinement, ask for root level\n if (!hierarchicalRefinement) {\n allAttributes.push(hierarchicalFacet.attributes[0]);\n return allAttributes;\n }\n\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var level = hierarchicalRefinement.split(separator).length;\n var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n return allAttributes.concat(newAttributes);\n }, out);\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function(state, hierarchicalFacet, rootLevel) {\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (rootLevel === true) {\n var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n var attributeIndex = 0;\n\n if (rootPath) {\n attributeIndex = rootPath.split(separator).length;\n }\n return [hierarchicalFacet.attributes[attributeIndex]];\n }\n\n var hierarchicalRefinement = state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n // if refinement is 'beers > IPA > Flying dog',\n // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n },\n\n getSearchForFacetQuery: function(facetName, query, maxFacetHits, state) {\n var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName) ?\n state.clearRefinements(facetName) :\n state;\n var searchForFacetSearchParameters = {\n facetQuery: query,\n facetName: facetName\n };\n if (typeof maxFacetHits === 'number') {\n searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n }\n return sortObject(merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n ));\n }\n};\n\nmodule.exports = requestBuilder;\n","'use strict';\n\nmodule.exports = function isValidUserToken(userToken) {\n if (userToken === null) {\n return false;\n }\n return /^[a-zA-Z0-9_-]{1,64}$/.test(userToken);\n};\n","'use strict';\n\nmodule.exports = '3.10.0';\n","/*! algoliasearch.umd.js | 4.13.1 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=t||self).algoliasearch=e()}(this,(function(){\"use strict\";function t(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(t),n=o()[r];return Promise.all([n||e(),void 0!==n])})).then((function(t){var e=a(t,2),n=e[0],o=e[1];return Promise.all([n,o||r.miss(n)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(t)]=e,n().setItem(r,JSON.stringify(a)),e}))},delete:function(t){return Promise.resolve().then((function(){var e=o();delete e[JSON.stringify(t)],n().setItem(r,JSON.stringify(e))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function u(t){var e=o(t.caches),r=e.shift();return void 0===r?{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=e();return n.then((function(t){return Promise.all([t,r.miss(t)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve(e)},delete:function(t){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(t,n,a).catch((function(){return u({caches:e}).get(t,n,a)}))},set:function(t,n){return r.set(t,n).catch((function(){return u({caches:e}).set(t,n)}))},delete:function(t){return r.delete(t).catch((function(){return u({caches:e}).delete(t)}))},clear:function(){return r.clear().catch((function(){return u({caches:e}).clear()}))}}}function s(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},e={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in e)return Promise.resolve(t.serializable?JSON.parse(e[o]):e[o]);var i=n(),u=a&&a.miss||function(){return Promise.resolve()};return i.then((function(t){return u(t)})).then((function(){return i}))},set:function(r,n){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(t){return delete e[JSON.stringify(t)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function c(t,e,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":e};return{headers:function(){return t===m.WithinHeaders?n:{}},queryParameters:function(){return t===m.WithinQueryParameters?n:{}}}}function f(t){var e=0;return t((function r(){return e++,new Promise((function(n){setTimeout((function(){n(t(r))}),Math.min(100*e,1e3))}))}))}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t,e){return Promise.resolve()};return Object.assign(t,{wait:function(r){return d(t.then((function(t){return Promise.all([e(t,r),t])})).then((function(t){return t[1]})))}})}function l(t){for(var e=t.length-1;e>0;e--){var r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}return t}function p(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function h(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n0?n:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function w(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function O(t){return\"string\"==typeof t?{protocol:\"https\",url:t,accept:g.Any}:{protocol:t.protocol||\"https\",url:t.url,accept:t.accept||g.Any}}var I=\"DELETE\",x=\"GET\",j=\"POST\",D=\"PUT\";function q(t,e){return Promise.all(e.map((function(e){return t.get(e,(function(){return Promise.resolve(w(e))}))}))).then((function(t){var r=t.filter((function(t){return function(t){return t.status===v||Date.now()-t.lastUpdate>12e4}(t)})),n=t.filter((function(t){return function(t){return t.status===P&&Date.now()-t.lastUpdate<=12e4}(t)})),a=[].concat(o(r),o(n));return{getTimeout:function(t,e){return(0===n.length&&0===t?1:n.length+3+t)*e},statelessHosts:a.length>0?a.map((function(t){return O(t)})):e}}))}function S(t,e,n,a){var i=[],u=function(t,e){if(t.method===x||void 0===t.data&&void 0===e.data)return;var n=Array.isArray(t.data)?t.data:r(r({},t.data),e.data);return JSON.stringify(n)}(n,a),s=function(t,e){var n=r(r({},t.headers),e.headers),a={};return Object.keys(n).forEach((function(t){var e=n[t];a[t.toLowerCase()]=e})),a}(t,a),c=n.method,f=n.method!==x?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":t.userAgent.value},t.queryParameters),f),a.queryParameters),l=0,p=function e(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.\",transporterStackTrace:R(i)};var p={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},h=function(t){var e={request:p,response:t,host:f,triesLeft:r.length};return i.push(e),e},m={onSuccess:function(t){return function(t){try{return JSON.parse(t.content)}catch(e){throw function(t,e){return{name:\"DeserializationError\",message:t,response:e}}(e.message,t)}}(t)},onRetry:function(n){var a=h(n);return n.isTimedOut&&l++,Promise.all([t.logger.info(\"Retryable failure\",A(a)),t.hostsCache.set(f,w(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw h(t),function(t,e){var r=t.content,n=t.status,a=r;try{a=JSON.parse(r).message}catch(t){}return function(t,e,r){return{name:\"ApiError\",message:t,status:e,transporterStackTrace:r}}(a,n,e)}(t,R(i))}};return t.requester.send(p).then((function(t){return function(t,e){return function(t){var e=t.status;return t.isTimedOut||function(t){var e=t.isTimedOut,r=t.status;return!e&&0==~~r}(t)||2!=~~(e/100)&&4!=~~(e/100)}(t)?e.onRetry(t):2==~~(t.status/100)?e.onSuccess(t):e.onFail(t)}(t,m)}))};return q(t.hostsCache,e).then((function(t){return p(o(t.statelessHosts).reverse(),t.getTimeout)}))}function k(t){var e=t.hostsCache,r=t.logger,n=t.requester,o=t.requestsCache,i=t.responsesCache,u=t.timeouts,s=t.userAgent,c=t.hosts,f=t.queryParameters,d={hostsCache:e,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:u,userAgent:s,headers:t.headers,queryParameters:f,hosts:c.map((function(t){return O(t)})),read:function(t,e){var r=y(e,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Read)})),t,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:t.cacheable))return n();var o={request:t,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(t){return Promise.all([d.requestsCache.delete(o),t])}),(function(t){return Promise.all([d.requestsCache.delete(o),Promise.reject(t)])})).then((function(t){var e=a(t,2);e[0];return e[1]}))}))}),{miss:function(t){return d.responsesCache.set(o,t)}})},write:function(t,e){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Write)})),t,y(e,d.timeouts.write))}};return d}function T(t){var e={value:\"Algolia for JavaScript (\".concat(t,\")\"),add:function(t){var r=\"; \".concat(t.segment).concat(void 0!==t.version?\" (\".concat(t.version,\")\"):\"\");return-1===e.value.indexOf(r)&&(e.value=\"\".concat(e.value).concat(r)),e}};return e}function N(t,e,r){var n=E(r),a=\"\".concat(t.protocol,\"://\").concat(t.url,\"/\").concat(\"/\"===e.charAt(0)?e.substr(1):e);return n.length&&(a+=\"?\".concat(n)),a}function E(t){return Object.keys(t).map((function(e){return h(\"%s=%s\",e,(r=t[e],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(t[e]):t[e]));var r})).join(\"&\")}function R(t){return t.map((function(t){return A(t)}))}function A(t){var e=t.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},t),{},{request:r(r({},t.request),{},{headers:r(r({},t.request.headers),e)})})}var C=function(t){return function(e,r){return t.transporter.write({method:j,path:\"2/abtests\",data:e},r)}},U=function(t){return function(e,r){return t.transporter.write({method:I,path:h(\"2/abtests/%s\",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:h(\"2/abtests/%s\",e)},r)}},J=function(t){return function(e){return t.transporter.read({method:x,path:\"2/abtests\"},e)}},F=function(t){return function(e,r){return t.transporter.write({method:j,path:h(\"2/abtests/%s/stop\",e)},r)}},H=function(t){return function(e){return t.transporter.read({method:x,path:\"1/strategies/personalization\"},e)}},M=function(t){return function(e,r){return t.transporter.write({method:j,path:\"1/strategies/personalization\",data:e},r)}};function K(t){return function e(r){return t.request(r).then((function(n){if(void 0!==t.batch&&t.batch(n.hits),!t.shouldStop(n))return n.cursor?e({cursor:n.cursor}):e({page:(r.page||0)+1})}))}({})}var W=function(t){return function(e,a){var o=a||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=r({acl:e},void 0!==i?{queryParameters:i}:{});return d(t.transporter.write({method:j,path:\"1/keys\",data:s},u),(function(e,r){return f((function(n){return tt(t)(e.key,r).catch((function(t){if(404!==t.status)throw t;return n()}))}))}))}},B=function(t){return function(e,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:j,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},Q=function(t){return function(e,r,n){return t.transporter.write({method:j,path:\"1/clusters/mapping/batch\",data:{users:e,cluster:r}},n)}},G=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:{action:\"addEntry\",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},L=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:h(\"1/indexes/%s/operation\",e),data:{operation:\"copy\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},V=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Rules]}))}},_=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Settings]}))}},X=function(t){return function(e,n,a){return L(t)(e,n,r(r({},a),{},{scope:[pe.Synonyms]}))}},Y=function(t){return function(e,r){return e.method===x?t.transporter.read(e,r):t.transporter.write(e,r)}},Z=function(t){return function(e,r){return d(t.transporter.write({method:I,path:h(\"1/keys/%s\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).then(r).catch((function(t){if(404!==t.status)throw t}))}))}))}},$=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"deleteEntry\",body:{objectID:t}}}));return d(t.transporter.write({method:j,path:h(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},tt=function(t){return function(e,r){return t.transporter.read({method:x,path:h(\"1/keys/%s\",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:h(\"1/task/%s\",e.toString())},r)}},rt=function(t){return function(e){return t.transporter.read({method:x,path:\"/1/dictionaries/*/settings\"},e)}},nt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/logs\"},e)}},at=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping/top\"},e)}},ot=function(t){return function(e,r){return t.transporter.read({method:x,path:h(\"1/clusters/mapping/%s\",e)},r)}},it=function(t){return function(e){var r=e||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),t.transporter.read({method:x,path:\"1/clusters/mapping/pending\"},o)}},ut=function(t){return function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:t.transporter,appId:t.appId,indexName:e};return p(n,r.methods)}},st=function(t){return function(e){return t.transporter.read({method:x,path:\"1/keys\"},e)}},ct=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters\"},e)}},ft=function(t){return function(e){return t.transporter.read({method:x,path:\"1/indexes\"},e)}},dt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping\"},e)}},lt=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:h(\"1/indexes/%s/operation\",e),data:{operation:\"move\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},pt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:\"1/indexes/*/batch\",data:{requests:e}},r),(function(e,r){return Promise.all(Object.keys(e.taskID).map((function(n){return ut(t)(n,{methods:{waitTask:de}}).waitTask(e.taskID[n],r)})))}))}},ht=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/indexes/*/objects\",data:{requests:e}},r)}},mt=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{params:E(t.params||{})})}));return t.transporter.read({method:j,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},yt=function(t){return function(e,a){return Promise.all(e.map((function(e){var o=e.params,i=o.facetName,u=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return ut(t)(e.indexName,{methods:{searchForFacetValues:ue}}).searchForFacetValues(i,u,r(r({},a),s))})))}},gt=function(t){return function(e,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:I,path:\"1/clusters/mapping\"},n)}},vt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:h(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},bt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h(\"1/keys/%s/restore\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).catch((function(t){if(404!==t.status)throw t;return r()}))}))}))}},Pt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:h(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},wt=function(t){return function(e,r,n){return t.transporter.read({method:j,path:h(\"/1/dictionaries/%s/search\",e),data:{query:r},cacheable:!0},n)}},Ot=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/clusters/mapping/search\",data:{query:e}},r)}},It=function(t){return function(e,r){return d(t.transporter.write({method:D,path:\"/1/dictionaries/*/settings\",data:e},r),(function(e,r){return jt(t)(e.taskID,r)}))}},xt=function(t){return function(e,r){var a=Object.assign({},r),o=r||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=i?{queryParameters:i}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(t.transporter.write({method:D,path:h(\"1/keys/%s\",e),data:s},u),(function(r,n){return f((function(r){return tt(t)(e,n).then((function(t){return function(t){return Object.keys(a).filter((function(t){return-1!==c.indexOf(t)})).every((function(e){return t[e]===a[e]}))}(t)?Promise.resolve():r()}))}))}))}},jt=function(t){return function(e,r){return f((function(n){return et(t)(e,r).then((function(t){return\"published\"!==t.status?n():void 0}))}))}},Dt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:h(\"1/indexes/%s/batch\",t.indexName),data:{requests:e}},r),(function(e,r){return de(t)(e.taskID,r)}))}},qt=function(t){return function(e){return K(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:h(\"1/indexes/%s/browse\",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return K(r(r({shouldStop:function(t){return t.hits.length0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a=t.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Wt=function(t){return function(e,r){return t.transporter.read({method:x,path:h(\"1/indexes/%s/%s\",t.indexName,e)},r)}},Bt=function(){return function(t,e){for(var r=0,n=Object.entries(t.hits);rr.OPENED&&void 0===n&&(clearTimeout(o),n=a(t.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),e({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),e({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(t.data)}))}},logger:(a=ye,{debug:function(t,e){return he>=a&&console.debug(t,e),Promise.resolve()},info:function(t,e){return me>=a&&console.info(t,e),Promise.resolve()},error:function(t,e){return console.error(t,e),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:u({caches:[i({key:\"\".concat(\"4.13.1\",\"-\").concat(t)}),s()]}),userAgent:T(\"4.13.1\").add({segment:\"Browser\"})},f=r(r({},o),n),d=function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"personalization.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}};return function(t){var e=t.appId,n=c(void 0!==t.authMode?t.authMode:m.WithinHeaders,e,t.apiKey),a=k(r(r({hosts:[{url:\"\".concat(e,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(e,\".algolia.net\"),accept:g.Write}].concat(l([{url:\"\".concat(e,\"-1.algolianet.com\")},{url:\"\".concat(e,\"-2.algolianet.com\")},{url:\"\".concat(e,\"-3.algolianet.com\")}]))},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({transporter:a,appId:e,addAlgoliaAgent:function(t,e){a.userAgent.add({segment:t,version:e})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},t.methods)}(r(r({},f),{},{methods:{search:mt,searchForFacetValues:yt,multipleBatch:pt,multipleGetObjects:ht,multipleQueries:mt,copyIndex:L,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:W,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:B,assignUserIDs:Q,getUserID:ot,searchUserIDs:Ot,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:G,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:wt,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Wt,getObjects:Qt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Lt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Bt,findObject:Kt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Rt,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Gt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Et}})}},initAnalytics:function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return p({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{addABTest:C,getABTest:z,getABTests:J,stopABTest:F,deleteABTest:U}}))}},initPersonalization:d,initRecommendation:function(){return function(t){return f.logger.info(\"The `initRecommendation` method is deprecated. Use `initPersonalization` instead.\"),d()(t)}}}}))}return ge.version=\"4.13.1\",ge}));\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\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\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\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var version=\"2.14.0\";function extractAdditionalParams(e){return e.reduce(function(e,t){var n=e.events,e=e.additionalParams;return\"index\"in t?{additionalParams:e,events:n.concat([t])}:{events:n,additionalParams:t}},{events:[],additionalParams:void 0})}var supportsCookies=function(){try{return Boolean(navigator.cookieEnabled)}catch(e){return!1}},supportsSendBeacon=function(){try{return Boolean(navigator.sendBeacon)}catch(e){return!1}},supportsXMLHttpRequest=function(){try{return Boolean(XMLHttpRequest)}catch(e){return!1}},supportsNativeFetch=function(){try{return void 0!==fetch}catch(e){return!1}},isUndefined=function(e){return void 0===e},isNumber=function(e){return\"number\"==typeof e},isFunction=function(e){return\"function\"==typeof e};function getFunctionalInterface(i){return function(e){for(var t=[],n=arguments.length-1;0 {\n if (key !== \"default\") {\n module.exports[key] = aa[key];\n }\n});\n","export const getEnvGlobals = () => ({\n atob: // atob/btoa need to be bound because they throw an illegal invocation error when called as a method (obj.atob())\n typeof atob === 'function' && atob.bind(undefined) || typeof Buffer !== 'undefined' && (encoded => Buffer.from(encoded, 'base64').toString()),\n btoa: typeof btoa === 'function' && btoa.bind(undefined) || typeof Buffer !== 'undefined' && (str => Buffer.from(str).toString('base64')),\n URLSearchParams: typeof URLSearchParams === 'function' && URLSearchParams || typeof require === 'function' && require('url').URLSearchParams\n});\nlet env;\nexport const getEnv = () => env || (env = validateEnv(getEnvGlobals()));\n\nconst validateEnv = env => {\n if (!(env.atob && env.btoa && env.URLSearchParams)) {\n throw new TypeError(`Origin-Tracing: missing environment APIs. Required: btoa(), atob(), URLSearchParams() (or in Node: Buffer, require('url').URLSearchParams).`);\n }\n\n return env;\n};","import { base64ToBase64Url, base64UrlToBase64 } from './util/base64url';\nimport { getEnv } from './env';\nconst productShorthands = {\n confluence: 'c',\n jira: 'j',\n stride: 's',\n bitbucket: 'b',\n trello: 't'\n};\nexport function encode(originData) {\n const json = JSON.stringify(toJSONObject(originData));\n const base64 = getEnv().btoa(json);\n return base64ToBase64Url(base64);\n}\nexport function decode(encodedOriginString) {\n const base64 = base64UrlToBase64(encodedOriginString);\n const json = getEnv().atob(base64);\n return fromJSONObject(JSON.parse(json));\n}\nexport function toJSONObject({\n id,\n product\n}) {\n return {\n i: id,\n p: product && product in productShorthands ? productShorthands[product] : product\n };\n}\nexport function fromJSONObject(originJSONObject) {\n const originData = {};\n\n if (originJSONObject.i) {\n originData.id = originJSONObject.i;\n }\n\n if (originJSONObject.p) {\n originData.product = expandProductShorthand(originJSONObject.p);\n }\n\n return originData;\n}\n\nfunction expandProductShorthand(maybeShorthand) {\n const products = Object.keys(productShorthands);\n\n for (let i = 0; i < products.length; i++) {\n const product = products[i];\n const shorthand = productShorthands[product];\n\n if (maybeShorthand === shorthand) {\n return product;\n }\n }\n\n return maybeShorthand;\n}","import uuid from 'uuid/v4';\nimport { encode, decode } from './encoder';\nimport { getEnv } from './env';\nconst packageVersion = \"6.0.7\";\nconst originParamName = 'atlOrigin';\nconst originVersioningAttributes = {\n originLibrary: `origin-tracing.js@${packageVersion}`\n};\nexport default class OriginTracer {\n constructor({\n id = OriginTracer.generateId(),\n product,\n dangerouslySkipValidation = false\n }) {\n this.id = id;\n this.product = product;\n\n if (!dangerouslySkipValidation) {\n this.validate();\n }\n }\n\n static isValidId(value) {\n return typeof value === 'string' && /^[-_a-zA-Z0-9]{1,36}$/.test(value);\n }\n\n static isValidProduct(value) {\n return typeof value === 'string' && /^[-_a-zA-Z0-9]{1,20}$/.test(value);\n }\n\n static generateId() {\n const id = uuid(); // Dash positions are fixed so they don't add to uniqueness.\n // Remove them to save space in the encoded form.\n\n return id.replace(/-/g, '');\n }\n\n static createEmpty() {\n return new EmptyOriginTracer();\n }\n\n static createMalformed() {\n return new MalformedOriginTracer();\n }\n\n static fromUrl(url) {\n let params = new (getEnv().URLSearchParams)();\n replaceQuery(url, queryString => {\n params = new (getEnv().URLSearchParams)(queryString);\n });\n return OriginTracer.fromEncoded(params.get(originParamName));\n }\n\n static fromEncoded(encoded) {\n if (!encoded) {\n return OriginTracer.createEmpty();\n }\n\n try {\n return OriginTracer.decode(encoded);\n } catch (e) {\n return OriginTracer.createMalformed();\n }\n }\n\n static removeFromUrl(url) {\n return replaceQuery(url, queryString => {\n const params = new (getEnv().URLSearchParams)(queryString);\n params.delete(originParamName);\n return params.toString();\n });\n }\n\n static decode(encodedOrigin) {\n const originData = decode(encodedOrigin);\n return new OriginTracer(originData);\n }\n\n encode() {\n return encode({\n id: this.id,\n product: this.product\n });\n }\n\n addToUrl(url) {\n return replaceQuery(url, originalQueryString => {\n const params = new (getEnv().URLSearchParams)(originalQueryString);\n params.set(originParamName, this.encode());\n return params.toString();\n });\n }\n\n isEmpty() {\n return false;\n }\n\n isMalformed() {\n return !this.isEmpty() && !this.isValid();\n }\n\n isValid() {\n return true;\n }\n\n toAnalyticsAttributes({\n transformValue = v => v === null ? undefined : v,\n hasGeneratedId = false\n } = {}) {\n // `originIdGenerated` should be used in analytic events that generated this originId.\n // Subsequent events should use `originId`.\n // No two events should have the same value of originIdGenerated.\n const originIdProp = hasGeneratedId ? 'originIdGenerated' : 'originId';\n return {\n [originIdProp]: transformValue(this.id),\n originProduct: transformValue(this.product),\n ...originVersioningAttributes\n };\n }\n\n validate() {\n if (!OriginTracer.isValidId(this.id)) {\n throw new TypeError('Invalid Origin id');\n }\n\n if (!OriginTracer.isValidProduct(this.product)) {\n throw new TypeError('Missing/invalid Origin product');\n }\n }\n\n}\n\nclass EmptyOriginTracer extends OriginTracer {\n constructor() {\n super({\n id: null,\n product: null,\n dangerouslySkipValidation: true\n });\n }\n\n isValid() {\n return false;\n }\n\n isEmpty() {\n return true;\n }\n\n toAnalyticsAttributes() {\n return { ...originVersioningAttributes\n };\n }\n\n}\n\nclass MalformedOriginTracer extends OriginTracer {\n constructor() {\n super({\n id: null,\n product: null,\n dangerouslySkipValidation: true\n });\n }\n\n isValid() {\n return false;\n }\n\n isEmpty() {\n return false;\n }\n\n toAnalyticsAttributes() {\n return {\n originMalformed: true,\n ...originVersioningAttributes\n };\n }\n\n}\n\nfunction replaceQuery(url, replacer) {\n const urlWithQueryStringRegex = /(^[^?#]*)(?:\\?)?([^#]*?)(#.*|$)$/; // If we get passed window.location, we don't want to call window.location.replace()\n\n const urlString = String(url);\n return urlString.replace(urlWithQueryStringRegex, (wholeMatch, beforeQuery, queryString, afterQuery) => {\n let newQueryString = replacer(queryString);\n\n if (newQueryString) {\n newQueryString = `?${newQueryString}`;\n }\n\n return `${beforeQuery}${newQueryString}${afterQuery}`;\n });\n}","/**\n * This file converts between Base64 and Base 64 Encoding with URL and Filename Safe Alphabet,\n * the latter of which has URL-safe characters only (drops =, + and /).\n *\n * Why not use a library? The popular libs use Buffer to be able to\n * encode any data to base64. We don't need this capability, and it causes\n * Webpack to include 30KB of a Buffer polyfill.\n * Webpack's/UglifyJS's Tree Shaking seems to be unable to drop it.\n *\n * See: RFC 4648 section 5 (https://tools.ietf.org/html/rfc4648#section-5)\n */\nexport function base64ToBase64Url(base64) {\n if (base64 == null) {\n return '';\n }\n\n return String(base64).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\nexport function base64UrlToBase64(base64url) {\n if (base64url == null) {\n return '';\n }\n\n const base64 = String(base64url).replace(/-/g, '+').replace(/_/g, '/');\n const padLength = (4 - base64url.length % 4) % 4;\n const pad = '==='.slice(0, padLength);\n return base64 + pad;\n}","import Environment from './environment';\nimport stgConfig from \"../../../../config\";\n\nexport default class BasePaths {\n ENV_DEV = 'dev';\n ENV_STAGING = 'staging';\n ENV_PRODUCTION = 'production';\n env: string;\n localizedPrefix: string | boolean;\n\n constructor(env?: string) {\n this.env = env || Environment.getEnvironment();\n this.localizedPrefix = this.getLocalizedPrefix();\n }\n\n getLocalizedPrefix() {\n let languagePrefix = window.location.hostname.split('.')[0];\n if (languagePrefix === 'www' || languagePrefix === 'wac' || languagePrefix === 'qa-wac' || languagePrefix === 'localhost') {\n return false;\n }\n return languagePrefix;\n }\n\n wrapForI18n(url: string) {\n if(!this.localizedPrefix) {\n return url;\n }\n return url.replace('//www.', `//${this.localizedPrefix}.`);\n }\n\n // WAC\n wacBasePath() {\n let base = {\n production: this.wrapForI18n('https://www.atlassian.com'),\n staging: `${window.location.hostname.indexOf('qa-wac') > -1 ? 'https://qa-wac.internal.atlassian.com' : stgConfig.stgWacInternalUrl}`,\n dev: 'http://localhost:8090/wac'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n // Identity\n idBasePath() {\n let base = {\n production: 'https://id.atlassian.com',\n staging: 'https://id.stg.internal.atlassian.com',\n dev: 'http://auth.bizbox.atlassian.com:8888'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n idLoginUrl(url?: string, skipEncoding?: boolean) {\n let continueParam = this.getReturnUrl(url, skipEncoding);\n return `${this.idBasePath()}/login?continue=${continueParam}`;\n }\n\n idLogoutUrl(url: string) {\n let continueParam = this.getReturnUrl(url);\n return `${this.idBasePath()}/logout?continue=${continueParam}`;\n }\n\n idLogoutLoginUrl(url?: string) {\n let skipInitialEncoding = true;\n return this.idLogoutUrl( this.idLoginUrl(url, skipInitialEncoding) );\n }\n\n // MAC\n macBasePath() {\n let base = {\n production: 'https://my.atlassian.com',\n staging: 'https://my.stg.internal.atlassian.com',\n dev: 'http://my.bizbox.atlassian.com:8888'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n macConfigUrl() {\n return `${this.macBasePath()}/ondemand/config`;\n }\n\n // Stargate\n atlProxyBasePath() {\n let base = {\n production: '/gateway/api',\n staging: 'https://wac.stg.atlassian.com/gateway/api',\n dev: 'https://wac.stg.atlassian.com/gateway/api'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n // COFS WAC\n wacCofsBasePath() {\n let base = {\n production: '/apis/prod/cofs',\n staging: '/apis/stg/cofs',\n dev: '/apis/stg/cofs'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n // COFS WAC\n wacHamletBasePath() {\n let base = {\n production: '/hamlet/1.0',\n staging: '/apis/stg/hamlet/1.0',\n dev: '/apis/stg/hamlet/1.0'\n };\n\n let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n return result;\n }\n\n getReturnUrl(url?: string, skipEncoding?: boolean) {\n url = url || window.location.href;\n\n if (!skipEncoding) {\n url = encodeURIComponent(url);\n }\n return url;\n }\n\n}\n","import _ from 'underscore';\nimport axios from 'axios';\nimport Environment from '../environment';\nimport stgConfig from \"../../../../config\";\nimport { hamletUser } from './hamlet-user';\n\nexport class HamletApi {\n baseDomain: string;\n\n constructor() {\n this.baseDomain = this.getBaseDomain();\n }\n\n getBaseDomain() {\n if (!Environment.isProduction()) {\n return `${window.location.hostname.indexOf('qa-wac') > -1 ? 'https://qa-wac.internal.atlassian.com' : stgConfig.stgWacInternalUrl}`;\n }\n\n return 'https://www.atlassian.com';\n }\n\n getHamletPath() {\n if (!Environment.isProduction()) {\n return `${this.baseDomain}/apis/stg/hamlet`;\n }\n\n return `${this.baseDomain}/hamlet`;\n }\n\n getCofsPath() {\n if (!Environment.isProduction()) {\n return `${this.baseDomain}/apis/stg/cofs`;\n }\n\n return `${this.baseDomain}/apis/prod/cofs`;\n }\n\n getCnasPath() {\n if (!Environment.isProduction()) {\n return `${this.baseDomain}/apis/stg/cnas`;\n }\n\n return `${this.baseDomain}/apis/prod/cnas`;\n }\n\n getBxpPath() {\n return `${this.baseDomain}/endpoint`;\n }\n\n hamletRequest(params, useCofsPath) {\n\n let basePath = useCofsPath ? this.getCofsPath() : this.getHamletPath();\n\n let request = {\n url: `${basePath}${params.url}`,\n method: params.method || 'GET',\n headers: params.headers || {},\n params: params.params\n };\n\n if (request.method === 'GET') {\n request.params = {cacheBuster: new Date().getTime(), ...params.params };\n }\n\n if (request.method === 'POST') {\n request.headers['Content-Type'] = 'application/json';\n request.data = params.data || '';\n }\n\n if (params.authenticated && hamletUser.getToken()) {\n request.headers['ATL-XSRF-Token'] = hamletUser.getToken();\n request.withCredentials = true;\n }\n\n return axios(request);\n }\n\n bxpRequest(params) {\n\n let request = {\n url: `${params.url.startsWith('http') ? '' : this.getBxpPath()}${params.url}`,\n method: params.method || 'GET',\n headers: params.headers || {},\n params: params.params\n };\n\n if (request.method === 'GET') {\n request.params = { cacheBuster: new Date().getTime(), ...params.params };\n }\n\n if (request.method === 'POST') {\n request.headers['Content-Type'] = 'application/json';\n request.data = params.data || '';\n }\n\n if (params.authenticated && hamletUser.getToken()) {\n request.withCredentials = true;\n }\n\n return axios(request);\n }\n\n get(data) {\n let options = { method: 'GET' };\n\n if (_.isString(data)) {\n options.url = data;\n } else if (_.isObject(data)) {\n Object.assign(options, data);\n }\n\n return this.hamletRequest(options);\n }\n\n post(data) {\n let options = { method: 'POST' };\n\n if (_.isString(data)) {\n options.url = data;\n } else {\n Object.assign(options, data);\n }\n\n return this.hamletRequest(options);\n }\n\n /**\n * Generic request wrapper\n */\n request(options) {\n return axios(options);\n }\n\n}\n\nexport let hamletApi = new HamletApi();\n","import Environment from '../environment';\nimport { hamletApi } from './hamlet-api';\n\nconst ProductKeys = {\n CONFLUENCE: \"confluence.ondemand\",\n JIRA_CORE: \"jira-core.ondemand\",\n JIRA_BUSINESS: \"jira-core.ondemand\",\n JIRA_SOFTWARE: \"jira-software.ondemand\",\n JIRA_SERVICE_DESK: \"jira-servicedesk.ondemand\",\n BITBUCKET: \"com.atlassian.bitbucket\",\n OPSGENIE: \"opsgenie\",\n STATUSPAGE: \"statuspage\",\n TRELLO: \"trello\",\n};\n\nexport const transformAvailableProductsIntoAvailableSites = (availableProductsSites) => {\n return availableProductsSites.map(site => {\n return {\n adminAccess: site.adminAccess,\n products: site.products ?? site.availableProducts.map(availableProduct => ProductKeys[availableProduct.productType]),\n cloudId: site.cloudId,\n displayName: site.displayName,\n avatarUrl: site.avatar,\n url: site.url,\n };\n });\n}\n\nexport class HamletUser {\n token: null;\n initialized: boolean;\n user: any;\n sites: any[];\n performanceBoostExperiment: boolean;\n extendedTrialAvailability: any;\n organisationDetails: any;\n\n availableProductsData: { cached: any | null; request: Promise | null } = { cached: null, request: null };\n meData: { cached: any | null; request: Promise | null } = {cached: null, request: null};\n\n constructor() {\n\n this.token = null;\n this.initialized = false;\n\n this.user = {\n contactDetails: {\n firstName: '',\n lastName: '',\n email: ''\n },\n organisationDetails: {\n address1: '',\n address2: '',\n city: '',\n state: '',\n postcode: '',\n isoCountryCode: '',\n organisationName: '',\n organisationType: null,\n payOnAccount: false,\n taxId: ''\n },\n lassoDetails: {\n firstName: '',\n lastName: '',\n username: '',\n displayName: ''\n },\n myDetails: {\n aaid: null,\n avatar: null,\n email: '',\n name: '',\n firstName: '',\n lastName: ''\n },\n isLoggedIn: false\n };\n\n this.sites = [];\n this.performanceBoostExperiment = false;\n\n }\n\n initUser(performanceBoostExperiment: boolean, enableAisAvailableProducts) {\n\n if (this.initialized) {\n return Promise.resolve(this.user);\n }\n this.initialized = true;\n\n return Promise.all([\n this.retrieveXsrfToken(),\n this.getStargateProfile(performanceBoostExperiment, false, enableAisAvailableProducts)\n ])\n .then(() => {\n return Promise.resolve(this.user);\n })\n .catch(() => {\n return Promise.resolve(this.user);\n });\n }\n\n retrieveXsrfToken() {\n\n const options = {\n url: `${hamletApi.getHamletPath()}/1.0/auth/xsrf/plain`,\n method: 'GET',\n withCredentials: true\n };\n\n return hamletApi.request(options)\n .then((response) => {\n\n if (response.data && response.data !== '') {\n\n this.setToken(response.data);\n this.user.isLoggedIn = true;\n\n return Promise.resolve();\n }\n\n this.user.isLoggedIn = false;\n return Promise.reject();\n })\n .catch(() => {\n\n this.user.isLoggedIn = false;\n return Promise.reject();\n });\n }\n\n getStargateProfile(performanceBoostExperiment: boolean, debugAllSites?: boolean) {\n\n if (performanceBoostExperiment) {\n this.performanceBoostExperiment = true;\n }\n\n return Promise.all([\n this.retrieveMe(),\n this.retrieveSitesData(debugAllSites)\n ])\n .then(([identityData, sitesData]) => {\n if (identityData && sitesData) {\n Object.assign(this.user.myDetails, identityData);\n this.setSites(sitesData);\n this.user.isLoggedIn = true;\n }\n\n return Promise.resolve();\n })\n .catch(() => {\n\n this.user.isLoggedIn = false;\n return Promise.resolve();\n });\n }\n\n retrieveCurrentUser(params) {\n params.url = '/1.0/public/contact/currentUser';\n\n return hamletApi.hamletRequest(params);\n }\n\n retrieveUserDetails(params) {\n params.url = '/1.0/public/auth/user/details'\n\n return hamletApi.hamletRequest(params);\n }\n\n retrieveMe() {\n const hostname = Environment.getAPIPrivateURL();\n const url = `${hostname}/me`;\n\n const options = {\n url: url,\n method: 'GET',\n withCredentials: true\n };\n\n\n let request;\n if (this.meData.cached) {\n // response available\n request = Promise.resolve(this.meData.cached);\n } else if (this.meData.request) {\n // pending request\n request = this.meData.request;\n } else {\n // first request\n this.meData.request = hamletApi.request(options);\n request = this.meData.request;\n }\n return request\n .then(result => {\n\n if (!result.data) {\n return Promise.reject();\n }\n\n this.meData.cached = result;\n this.meData.request = null;\n\n // clean up any names that are emails here\n let name = result.data.name;\n if (name.indexOf('@') > -1) {\n name = name.split('@')[0];\n }\n\n const stargateData = {\n aaid: (result.data.account_id),\n avatar: (result.data.picture),\n email: (result.data.email),\n name: (name),\n firstName: (this.getFirstName(name)),\n lastName: (this.getLastName(name))\n };\n\n return Promise.resolve(stargateData);\n })\n .catch(() => {\n\n this.user.isLoggedIn = false;\n return Promise.reject();\n });\n }\n\n retrieveSitesData(debugAllSites?: boolean) {\n return this.retrieveAvailableProductsData(debugAllSites).then(availableProductsSites => {\n const sitesData = transformAvailableProductsIntoAvailableSites(availableProductsSites);\n return sitesData;\n }).catch(() => {\n this.user.isLoggedIn = false;\n });\n }\n\n retrieveAvailableProductsData(debugAllSites?: boolean) {\n let url = `${Environment.getAPIPrivateURL()}/ais/available-products`;\n const options = {\n url: url,\n method: 'GET',\n withCredentials: true\n };\n\n let request;\n if (this.availableProductsData.cached) {\n // response available\n request = Promise.resolve(this.availableProductsData.cached);\n } else if (this.availableProductsData.request) {\n // pending request\n request = this.availableProductsData.request;\n } else {\n // first request\n this.availableProductsData.request = hamletApi.request(options);\n request = this.availableProductsData.request;\n }\n return request.then(result => {\n\n if (!result.data) {\n return [];\n }\n\n this.availableProductsData.cached = result;\n this.availableProductsData.request = null;\n\n const sitesResult = result.data.sites || [];\n const availableProductsSites = debugAllSites ? sitesResult : sitesResult.filter((site) => this.isValidSite(site));\n return Promise.resolve(availableProductsSites);\n }).catch(() => {\n this.user.isLoggedIn = false;\n return Promise.reject();\n });\n }\n\n checkExtendedTrialAvailability(migrationSourceUuid, productKey, cloudIds) {\n const options = {\n url: `${hamletApi.getHamletPath()}/1.0/public/account/${migrationSourceUuid}/extendedTrial/availability`,\n method: 'POST',\n data: {\n productKey,\n cloudIds,\n },\n withCredentials: true\n };\n\n return hamletApi.request(options)\n .then((response) => {\n if (response.data && response.data !== '') {\n this.setExtendedTrialAvailability(response.data);\n return Promise.resolve(response.data);\n }\n\n return Promise.resolve();\n })\n .catch(() => {\n return Promise.resolve();\n });\n }\n\n getExtendedTrialAvailability() {\n return this.extendedTrialAvailability;\n }\n\n setExtendedTrialAvailability(extendedTrialAvailability) {\n this.extendedTrialAvailability = extendedTrialAvailability;\n }\n\n setToken(token) {\n this.token = token;\n }\n\n getToken() {\n return this.token;\n }\n\n setUser(options) {\n Object.assign(this.user, options);\n }\n\n getUser() {\n return this.user;\n }\n\n setSites(sites) {\n this.sites = sites;\n }\n\n getSites() {\n return this.sites;\n }\n\n getSitesByProduct(availableProducts) {\n\n let groupSitesByProduct = {};\n\n this.sites.forEach((site) => {\n site.products.forEach((product) => {\n (groupSitesByProduct[product] = groupSitesByProduct[product] || []).push({\n cloudId: site.cloudId,\n displayName: site.displayName,\n url: site.url,\n avatarUrl: site.avatarUrl || '',\n isVertigo: site.isVertigo || false,\n })\n })\n });\n\n let result = [];\n for (var product in groupSitesByProduct) {\n\n if (product.length) {\n result.push({\n name: availableProducts[product].name,\n icon: availableProducts[product].login_logo_url || '',\n sites: groupSitesByProduct[product].map((site) => site.url)\n });\n }\n }\n return result;\n }\n\n getDisplayName() {\n return this.user.myDetails.name;\n }\n\n getFirstName(fullName = '') {\n return fullName.trim().split(' ')[0];\n }\n\n getLastName(fullName = '') {\n let lastName = '';\n let names = fullName.trim().split(' ');\n\n if (names.length > 1) {\n names.shift();\n lastName = names.join(' ');\n }\n\n return lastName;\n }\n\n getUserEmail() {\n return this.user.myDetails.email || '';\n }\n\n getUserAaid() {\n return this.user.myDetails.aaid || '';\n }\n\n getAvatar() {\n return this.user.myDetails.avatar;\n }\n\n isLoggedIn() {\n return this.user.isLoggedIn && this.user.myDetails.email.length > 0;\n }\n\n isExpert() {\n return this.organisationDetails.organisationType === 'EXPERT';\n }\n\n isReseller() {\n return this.organisationDetails.organisationType === 'RESELLER';\n }\n\n isPlatinumExpert() {\n return this.organisationDetails.organisationType === 'EXPERT' && this.organisationDetails.payOnAccount;\n }\n\n isValidSite(site) {\n\n const ignoreSiteNames = [\n 'servicedog',\n 'ecosystem',\n 'atlassiantraining',\n 'Atlassian Stride',\n 'volunteerhub',\n 'atlassiantraining',\n 'hello-staging',\n 'ecosystem',\n 'riskmanagement',\n 'hello-staging3',\n 'hello-staging6',\n 'hello-staging9',\n 'jdog',\n 'sre-ehlo',\n 'trello',\n 'Trello',\n 'bitbucket',\n 'Bitbucket'\n ];\n\n if (ignoreSiteNames.indexOf(site.displayName) > -1) {\n return false;\n }\n\n if (site.cloudId.startsWith('DUMMY')) {\n return false;\n }\n\n if (site.displayName.toUpperCase().match(\".*-SANDBOX-\\\\d{3}$\")) {\n return false\n }\n\n return true;\n }\n\n}\n\nexport let hamletUser = new HamletUser();\n","import tracking from '../../utils/tracking';\nimport OriginTracing from \"@atlassiansox/origin-tracing\";\nimport { hamletUser } from \"../../common/hamlet/hamlet-user\";\nimport BasePaths from \"../../buyer-experience/common/base-paths\";\nimport Environment from \"../../common/environment\";\nimport storage from \"../../utils/storage\";\n\nimport algoliasearch from 'algoliasearch';\nimport { AlgoliaSearchHelper } from 'algoliasearch-helper';\nimport insights from 'search-insights';\n\nimport { trackEvent } from \"../../common/analytics\";\n\nconst ALGOLIA_APP_ID = 'CU5KFWE75C';\nconst ALGOLIA_SEARCH_API_KEY = '8cb0497a0549da256319b1b8178e5421';\nconst ALGOLIA_SEARCH_INDEX_NAME = 'www.atlassian.com.v1';\nconst ALGOLIA_FACET_KEY = 'category';\nconst algoliaSearchClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_SEARCH_API_KEY);\n// Initialize Algolia Insights\ninsights('init', {\n appId: ALGOLIA_APP_ID,\n apiKey: ALGOLIA_SEARCH_API_KEY\n});\n\nfunction sendClickEvent(queryId: string, objectId: string, position: number) {\n insights('clickedObjectIDsAfterSearch', {\n eventName: 'Result Clicked (global nav)',\n objectIDs: [objectId],\n positions: [Number(position)],\n queryID: queryId,\n index: ALGOLIA_SEARCH_INDEX_NAME\n });\n}\n\n\nconst AVATAR_IMG_URL =\n \"http://wac-cdn.atlassian.com/dam/wac/icons/ADG3-Icons-36px-N700/object-avatar-man.svg\";\n \nexport default class ADG4GlobalNav {\n domRoot: HTMLElement;\n params: any;\n userInfo: any;\n isLoading: boolean;\n basePaths: any;\n origin: any;\n labels: any;\n navType: string;\n defaultTrackProperties: any;\n CloseAll: HTMLElement;\n AccountSignIn: HTMLElement;\n AccountAvatar: HTMLElement;\n AccountInfo: HTMLElement;\n OutlineElement: HTMLElement;\n OverlayColor: HTMLElement;\n OverlayClickable: HTMLElement;\n GenericNavLinks: HTMLElement[];\n DropdownNavLinks: HTMLElement[];\n DropdownNavLinkButtons: HTMLElement[];\n NavLinkButtons: HTMLElement[];\n DropdownContents: HTMLElement[];\n TabButtons: HTMLElement[];\n NavContainingElement: HTMLElement;\n MobileToggle: HTMLElement;\n MobileBackButtons: HTMLElement[];\n MenuMore: HTMLElement;\n MenuLess: HTMLElement;\n SearchOpen: HTMLElement;\n SearchClose: HTMLElement;\n SearchForm: HTMLElement;\n SearchInput: HTMLInputElement;\n SearchInputSVG: HTMLElement;\n SearchResultsContainer: HTMLElement;\n searchHelper: AlgoliaSearchHelper;\n SearchHits: any;\n SearchQuery: string;\n QueryId: string;\n WrappedElementIndex: number;\n WindowWidth: number;\n ButtonMenuMore: HTMLElement;\n ButtonMenuLess: HTMLElement;\n\n constructor(domRoot: HTMLElement, params: any) {\n this.domRoot = domRoot;\n this.params = { ...params };\n this.userInfo = {};\n this.isLoading = false;\n this.basePaths = new BasePaths();\n this.origin = new OriginTracing({ product: \"wac-globaldropdown\" });\n this.labels = params.labels;\n this.navType = params.navType;\n this.defaultTrackProperties = {};\n this.CloseAll = domRoot.querySelector(\".close-all\");\n this.AccountSignIn = domRoot.querySelector(\".adg4-nav-account-sign-in\");\n this.AccountAvatar = domRoot.querySelector(\".adg4-nav-account-logged-in\");\n this.AccountInfo = domRoot.querySelector(\".adg4-nav-account-info\");\n this.OutlineElement = domRoot.querySelector(\".outline-element\");\n this.OverlayColor = domRoot.querySelector(\".overlay-color\");\n this.OverlayClickable = domRoot.querySelector(\".overlay-clickable\");\n this.GenericNavLinks = domRoot.querySelectorAll(\".nav-link\");\n this.DropdownNavLinks = domRoot.querySelectorAll(\".nav-link.has-dropdown\");\n this.NavLinkButtons = domRoot.querySelectorAll(\".nav-link-button\");\n this.TabButtons = domRoot.querySelectorAll(\".tab-button\");\n this.DropdownContents = domRoot.querySelectorAll(\".dropdown-content\");\n this.MobileToggle = domRoot.querySelector(\".mobile-toggle\");\n this.NavContainingElement = domRoot.querySelector(\".nav-right-space\");\n this.MobileBackButtons = domRoot.querySelectorAll(\".mobile-back-button\");\n this.MenuMore = domRoot.querySelector(\".menu-more\");\n this.MenuLess = domRoot.querySelector(\".menu-less\");\n this.SearchOpen = domRoot.querySelector(\".search-open\");\n this.SearchClose = domRoot.querySelector(\".search-close\");\n this.SearchForm = domRoot.querySelector(\".search-form\");\n this.SearchResultsContainer = domRoot.querySelector(\".adg4-search-results\");\n this.SearchInput = domRoot.querySelector(\".adg4-search-input\");\n this.SearchInputSVG = domRoot.querySelector(\".input-container svg\");\n this.SearchHits = [];\n this.SearchQuery = '';\n this.QueryId = '';\n this.searchHelper = new AlgoliaSearchHelper(algoliaSearchClient, ALGOLIA_SEARCH_INDEX_NAME, {\n facets: [ALGOLIA_FACET_KEY],\n clickAnalytics: true // enables click analytics\n });\n this.WindowWidth = 0;\n this.WrappedElementIndex = '';\n this.ButtonMenuMore = domRoot.querySelector(\".button-menu-more\");\n this.ButtonMenuLess = domRoot.querySelector(\".button-menu-less\");\n this.init();\n }\n\n init() {\n\n this.bindEvents();\n\n if (this.navType !== \"subNav\" && storage.getCookie(\"login_user_detected\") === \"true\") {\n this.getUser()\n .then(user => {\n this.isLoading = false;\n this.userInfo = user;\n if (user.isLoggedIn && this.userInfo.displayName.length) {\n tracking.trackEvent(\"bxp.globalnavdropdown.user.loggedin\");\n this.populateLoggedInUser();\n } else {\n this.populateLoggedOutUser();\n }\n })\n .catch(() => {\n tracking.trackEvent(\n \"bxp.globalnavdropdown.user.getusererror\"\n );\n });\n } else if (this.navType !== \"subNav\") {\n this.isLoading = false;\n this.populateLoggedOutUser();\n }\n\n this.addAvatarOutsideClickEventListener();\n }\n\n bindEvents = () => {\n if (this.navType! == \"subNav\") {\n document.body.classList.add('compound-nav');\n this.scrollPositioning();\n document.addEventListener(\"scroll\", () => {\n this.scrollPositioning();\n });\n }\n this.resizeMenus();\n\n window.addEventListener(\"resize\", () => {\n this.resizeMenus();\n this.scrollPositioning();\n });\n\n [...this.DropdownNavLinks].forEach(dropdownNavLink => {\n dropdownNavLink.addEventListener(\"mouseenter\", () => {\n if (document.documentElement.clientWidth > 1024) {\n this.unFocusNavs();\n dropdownNavLink.classList.remove(\"clicked-hide\");\n this.AccountAvatar?.classList.remove(\"show-menu\");\n let navDropdownContent: HTMLElement = dropdownNavLink.querySelector(\".dropdown-content\");\n let navDropdownContentSizer: HTMLElement = dropdownNavLink.querySelector(\".dropdown-content-inner\");\n this.outlineElementSizer(navDropdownContentSizer, navDropdownContent);\n }\n\n });\n });\n\n [...this.NavLinkButtons].forEach(navLinkButton => {\n navLinkButton.addEventListener(\"click\", () => {\n this.domRoot.classList.add(\"secondary-show\");\n const navLinkId = navLinkButton.dataset.navlinkid;\n let navDropdownContent = this.domRoot.querySelector(\"#\" + navLinkId);\n\n let tabId;\n if (navLinkButton.dataset.tabid) {\n tabId = navLinkButton.dataset.tabid;\n const matchingTab: HTMLElement = navDropdownContent?.querySelector('#' + tabId);\n const tabs : HTMLElement[] = navDropdownContent?.querySelectorAll('.singular-tab-content');\n [...tabs].forEach(tab => {\n tab.classList.remove(\"active\")\n });\n matchingTab?.classList.add(\"active\");\n }\n\n [...this.DropdownContents].forEach(dropdownContent => {\n dropdownContent.classList.remove(\"mobile-show\");\n });\n navDropdownContent?.classList.add(\"mobile-show\");\n navLinkButton.parentNode.classList.toggle(\"clicked-hide\");\n });\n\n // keyboard navigation\n navLinkButton.addEventListener(\"keyup\", (e: any) => {\n const buttonLi = navLinkButton.parentNode;\n if (e.key == \"Tab\" && document.documentElement.clientWidth > 1024) {\n this.unFocusNavs();\n buttonLi.classList.add(\"key-focus\");\n\n this.AccountAvatar?.classList.remove(\"show-menu\");\n if (buttonLi.classList.contains(\"has-dropdown\")) {\n let navDropdownContent: HTMLElement = buttonLi.querySelector(\".dropdown-content\");\n let navDropdownContentSizer: HTMLElement = buttonLi.querySelector(\".dropdown-content-inner\");\n this.outlineElementSizer(navDropdownContentSizer, navDropdownContent);\n }\n } else if (e.key == \"Enter\") {\n let finder = buttonLi;\n let tabId = navLinkButton.getAttribute(\"data-tabid\");\n if (tabId && document.getElementById(tabId)) {\n finder = document.getElementById(tabId);\n }\n const firstLink: HTMLElement = finder.querySelector(\".tab-content-area a\");\n firstLink.focus({ focusVisible: true });\n } else if (e.key == \"Escape\") {\n this.closeEverything();\n }\n\n });\n });\n\n [...this.TabButtons].forEach(tabButton => {\n\n tabButton.addEventListener(\"click\", () => {\n const tabsParent: HTMLElement = tabButton.closest(\".dropdown-content\");\n const tabsParentInner: HTMLElement = tabsParent.querySelector(\".dropdown-content-inner\");\n\n const thisTabID = tabButton.dataset.tabid;\n const multiTabContents: HTMLElement[] = tabsParent.querySelectorAll(\".singular-tab-content\");\n const multiTabButtons: HTMLElement[] = tabsParent.querySelectorAll(\".tab-button\");\n \n [...multiTabButtons].forEach(tabButton => {\n tabButton.classList.remove(\"active\");\n });\n\n [...multiTabContents].forEach(tabContent => {\n if (tabContent.id == thisTabID) {\n tabContent.classList.add(\"active\")\n } else {\n tabContent.classList.remove(\"active\");\n }\n });\n tabButton.classList.add(\"active\");\n this.outlineElementSizer(tabsParentInner, tabsParent);\n\n })\n });\n\n this.ButtonMenuMore.addEventListener(\"click\", () => {\n this.domRoot.classList.add(\"menu-expanded\");\n });\n\n this.ButtonMenuLess.addEventListener(\"click\", () => {\n this.domRoot.classList.remove(\"menu-expanded\");\n });\n\n this.CloseAll.addEventListener(\"click\", () => {\n this.closeEverything();\n });\n\n this.MobileToggle.addEventListener(\"click\", () => {\n this.AccountAvatar?.classList.remove(\"show-menu\");\n this.domRoot.classList.remove(\"secondary-show\");\n if (this.domRoot.classList.contains(\"mobile-show\")) {\n this.domRoot.classList.remove(\"mobile-show\");\n this.hideClickableOverlay();\n } else {\n this.domRoot.classList.add(\"mobile-show\");\n this.showClickableOverlay();\n }\n\n });\n\n [...this.MobileBackButtons].forEach(mobileBackButton => {\n mobileBackButton.addEventListener(\"click\", () => {\n this.domRoot.classList.remove(\"secondary-show\");\n this.SearchForm?.classList.remove(\"active\");\n setTimeout(() => {\n mobileBackButton.parentNode.classList.remove(\"mobile-show\");\n }, 250);\n });\n });\n\n if (this.navType !== \"subNav\") {\n this.SearchOpen.addEventListener(\"click\", () => {\n this.showClickableOverlay();\n this.SearchForm.classList.add(\"active\");\n this.domRoot.classList.add(\"secondary-show\");\n\n trackEvent(\"button clicked searchButtonDesktop\", {\n eventComponent: \"button\",\n action: \"clicked\",\n component: \"button\",\n source: \"globalNav\",\n actionSubjectId: \"searchButtonDesktop\"\n });\n });\n \n this.SearchClose.addEventListener(\"click\", () => {\n this.closeSearch();\n this.domRoot.classList.remove(\"secondary-show\");\n\n trackEvent(\"button clicked searchCloseButtonDesktop\", {\n eventComponent: \"button\",\n action: \"clicked\",\n component: \"button\",\n source: \"globalNav\",\n actionSubjectId: \"searchCloseButtonDesktop\"\n });\n });\n \n \n this.searchHelper.on('result', ({ results, state }) => {\n if (results && results.hits) {\n this.SearchHits = results.hits;\n this.SearchQuery = results.query;\n this.QueryId = results.queryID as string;\n }\n });\n \n this.SearchInput.addEventListener(\"keyup\", (e) => {\n this.searchHelper.setQuery(e.target.value);\n this.searchHelper.search();\n \n this.populateSearchResults();\n });\n\n this.SearchInput.addEventListener(\"keypress\", (e) => {\n if (e.key === 'Enter') {\n trackEvent(\"search submitted\", {\n eventComponent: \"search\",\n action: \"submitted\",\n component: \"searchInput\",\n source: \"globalNav\",\n actionSubjectId: \"globalNavSearchBar\"\n });\n\n window.location.href = `/search?q=${e.target.value}`;\n }\n });\n\n this.SearchInputSVG.addEventListener('click', function () {\n var searchInput = document.querySelector(\".adg4-search-input\") as HTMLInputElement;\n window.location.href = `/search?q=${searchInput?.value}`;\n });\n }\n }\n\n closeEverything = () => {\n this.hideClickableOverlay();\n this.unFocusNavs();\n this.AccountAvatar?.classList.remove(\"show-menu\");\n this.closeSearch();\n }\n\n resizeMenus = () => {\n if (document.documentElement.clientWidth > 1024 && !this.domRoot.classList.contains(\"menu-expanded\")) {\n let hasWrapped = false;\n let firstWrapped = 0;\n for (let i = 0; i < [...this.GenericNavLinks].length; i++) {\n const navLink = [...this.GenericNavLinks][i];\n if (navLink.offsetTop > 0 || (navLink.nextElementSibling.offsetTop > 0)) {\n navLink.classList.add(\"wrapped\");\n if (!hasWrapped) {\n hasWrapped = true;\n firstWrapped = i;\n }\n } else if (\n (this.WindowWidth > document.documentElement.clientWidth && this.WrappedElementIndex > i)\n ||\n (this.WindowWidth < document.documentElement.clientWidth && this.WrappedElementIndex < i)\n ) {\n navLink.classList.remove(\"wrapped\");\n }\n };\n \n this.WrappedElementIndex = firstWrapped;\n this.WindowWidth = document.documentElement.clientWidth; \n\n if (hasWrapped) {\n this.domRoot.classList.add(\"menu-wrapped\");\n\n } else {\n this.domRoot.classList.remove(\"menu-wrapped\");\n\n }\n }\n }\n\n scrollPositioning = () => {\n if (document.documentElement.clientWidth > 1024 && window.scrollY > 68) {\n document.body.classList.add(\"compound-stuck\");\n } else {\n document.body.classList.remove(\"compound-stuck\");\n }\n }\n\n outlineElementSizer = (comparisonElement: HTMLElement, comparisonParent: HTMLElement) => {\n this.OutlineElement.style.width = (comparisonElement.offsetWidth) + \"px\";\n this.OutlineElement.style.height = (comparisonElement.offsetHeight) + \"px\";\n this.OutlineElement.style.left = (comparisonParent.offsetLeft) + \"px\";\n }\n\n showClickableOverlay = () => {\n this.OverlayClickable.classList.add(\"mobile-show\");\n this.OverlayColor.classList.add(\"mobile-show\");\n }\n\n hideClickableOverlay = () => {\n this.domRoot.classList.remove(\"mobile-show\");\n this.domRoot.classList.remove(\"secondary-show\");\n this.OverlayColor.classList.remove(\"mobile-show\")\n this.OverlayClickable.classList.remove(\"mobile-show\");\n }\n\n unFocusNavs = () => {\n [...this.NavLinkButtons].forEach(otherDropdownLink => {\n otherDropdownLink.parentNode.classList.remove(\"key-focus\", \"clicked-hide\");\n });\n }\n\n closeSearch = () => {\n this.hideClickableOverlay();\n if (this.navType !== \"subNav\") {\n this.SearchForm.style.left = \"100%\";\n this.SearchResultsContainer.innerHTML = '';\n this.SearchInput.value = '';\n setTimeout(() => {\n this.SearchForm.classList.remove(\"active\");\n this.SearchForm.style.left = '';\n }, 250);\n }\n\n }\n\n hideUserMenu = () => {\n this.hideClickableOverlay();\n this.AccountAvatar?.classList.remove(\"show-menu\");\n }\n\n showUserMenu = () => {\n this.showClickableOverlay();\n this.AccountAvatar?.classList.add(\"show-menu\");\n }\n\n createEl = (info: any) => {\n const newEl = document.createElement(info.tag);\n newEl.innerHTML = info.label;\n newEl.onclick = info.clicker;\n newEl.className = info.classes ? info.classes : '';\n return newEl;\n }\n\n populateLoggedInUser =() => {\n document.querySelector(\"#adg4-app-switcher\")?.classList.add(\"loaded\");\n const userProfileMenu = this.createEl({\n tag: \"div\",\n classes: \"user-profile-info\",\n label: `${this.userInfo.email}`\n });\n \n const ProfileButtons = [\n this.createEl({tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.switchAccount\"], clicker: () => { this.onSwitchAccountClick() }}),\n this.createEl({tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.profile\"], clicker: () => { this.onManageProfileClick() } }),\n this.createEl({tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.licenses\"], clicker: () => { this.onManageLicensesClick() } }),\n this.createEl({tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.logOut\"], clicker: () => { this.onLogOutClick() } })\n ];\n ProfileButtons.forEach(btn => {\n userProfileMenu.appendChild(btn);\n })\n\n const userButton = this.createEl({\n tag: \"button\",\n classes: \"account\",\n label: `${this.userInfo.displayName.slice(0,15)}${this.userInfo.displayName.length > 14 ? \"...\" : \"\"}`,\n clicker: () => {\n if (this.AccountAvatar?.classList.contains(\"show-menu\")) {\n this.hideUserMenu();\n } else {\n this.showUserMenu();\n }\n }\n });\n\n this.AccountAvatar?.appendChild(userButton);\n this.AccountAvatar?.appendChild(userProfileMenu);\n this.resizeMenus();\n }\n\n handelOffElementDropdownClickEvent = (event: MouseEvent) => {\n if (!(event.target as HTMLElement).closest(\".user-profile-info\") \n && this.AccountAvatar?.classList.contains(\"show-menu\")) {\n this.hideUserMenu();\n }\n }\n\n handelOffElementDropdownEscKeyEvent = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" \n && this.AccountAvatar?.classList.contains(\"show-menu\")) {\n this.hideUserMenu();\n }\n }\n\n addAvatarOutsideClickEventListener = () => {\n this.domRoot.addEventListener(\"mousedown\", this.handelOffElementDropdownClickEvent);\n this.domRoot.addEventListener(\"keydown\", this.handelOffElementDropdownEscKeyEvent, false);\n }\n\n populateLoggedOutUser = () => {\n const loginInButton = this.createEl({\n tag: \"button\",\n clicker: this.onLogInClick,\n label: this.labels[\"JoinSiteUserDropdown.logIn\"]\n });\n this.AccountSignIn.appendChild(loginInButton);\n this.resizeMenus();\n }\n\n populateSearchResults = () => {\n this.SearchResultsContainer.innerHTML = '';\n const searchArray = this.SearchHits;\n const query = this.SearchQuery;\n const filteredSearchArray = searchArray.filter((hit: any) => hit.hasOwnProperty(\"description\") && hit.hasOwnProperty(\"url\")).slice(0, 7);\n const ulResults = document.createElement(\"ul\");\n const resultsFragment = document.createDocumentFragment();\n\n if (query.length > 0 && filteredSearchArray.length > 0) {\n filteredSearchArray.forEach((hit, index)=> {\n const hitLi = document.createElement(\"li\");\n const hitA = document.createElement(\"a\");\n hitA.href = hit.url;\n hitA.onclick = () => {\n tracking.trackEvent(\"bxp.globalnavdropdown.click.search-result\");\n\n // Send click event to Algolia\n const position = index + 1;\n sendClickEvent(this.QueryId, hit.objectID, position);\n\n trackEvent(\"linkButton clicked\", {\n eventComponent: \"linkButton\",\n action: \"clicked\",\n component: \"searchResult\",\n source: \"globalNav\",\n actionSubjectId: \"globalNavSearchResults\"\n });\n };\n const searchHitTitle = hit.title;\n const lowCaseSearch = query.toLowerCase();\n const lowCaseTitle = searchHitTitle.toLowerCase();\n const splitter = new RegExp(`${lowCaseSearch}(.*)`, \"s\");\n const [split1, split2] =\n lowCaseTitle.split(splitter) as [\n string,\n string\n ];\n const displayTitle = `${searchHitTitle.slice(0, split1.length)}${lowCaseTitle.includes(query) ? query : ''}${searchHitTitle.slice(split1.length + lowCaseSearch.length, split1.length + lowCaseSearch.length + (split2 ? split2.length: searchHitTitle.length))}`;\n hitA.innerHTML = displayTitle;\n hitLi.appendChild(hitA);\n resultsFragment.appendChild(hitLi);\n });\n\n ulResults.appendChild(resultsFragment);\n this.SearchResultsContainer.appendChild(ulResults);\n } else if (query.length > 0 && filteredSearchArray.length == 0) {\n ulResults.innerHTML = \"No results found\";\n\n ulResults.appendChild(resultsFragment);\n this.SearchResultsContainer.appendChild(ulResults);\n } else if (query.length < 1) {\n this.SearchResultsContainer.innerHTML = \"\";\n }\n }\n\n sendTracking(eventName: string, linkName: string) {\n var properties = {\n originUrl: window.location.href,\n linkText: linkName,\n };\n tracking.trackEvent(eventName, properties);\n }\n\n /* account */\n\n onSwitchAccountClick = () => {\n tracking.trackEvent(\"bxp.globalnavdropdown.click.switchAccount\");\n window.location.href = Environment.getSwitchAccountURL();\n }\n\n onManageProfileClick = () => {\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.profile\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.manage.profile\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href = Environment.getManageProfileUrl(this.userInfo.email);\n }\n\n onManageLicensesClick = () => {\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.licenses\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.manage.licenses\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href = Environment.getMacUrl();\n }\n\n onLogOutClick = () => {\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.logOut\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.logout\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href = Environment.getLogoutUrl();\n }\n\n onLogInClick = () => {\n const baseUrl = Environment.getIdentityBaseUrl();\n const stargateBaseUrl = Environment.getAPIPrivateURL();\n const continueUrl = this.origin.addToUrl(stargateBaseUrl + \"/start/authredirect\");\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.logIn\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.login\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href = `${baseUrl}/login?continue=${encodeURIComponent(\n continueUrl\n )}`;\n }\n\n onJoinYourTeamClick = () => {\n const baseUrl = Environment.getIdentityBaseUrl();\n const stargateBaseUrl = Environment.getAPIPrivateURL();\n const continueUrl = this.origin.addToUrl(stargateBaseUrl + \"/start/authredirect\");\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.joinTeam\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.join.team\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href = `${baseUrl}/login?continue=${encodeURIComponent(\n continueUrl\n )}`;\n }\n\n onCreateAcountClick = () => {\n const loginUrl = `${Environment.getIdentityBaseUrl()}/signup?`;\n const startUrl = Environment.getStartUrl();\n const additionalTracking = {\n label: this.labels[\"JoinSiteUserDropdown.createAccount\"]\n };\n tracking.trackEvent(\n \"bxp.globalnavdropdown.click.create.account\",\n Object.assign(this.defaultTrackProperties, {\n ...additionalTracking,\n ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n })\n );\n window.location.href =\n loginUrl + `&continue=${encodeURIComponent(startUrl)}`;\n }\n\n async getUser() {\n const isDebugMode = window.location.search.includes(\"debug=true\");\n\n await hamletUser.getStargateProfile(true, isDebugMode, true);\n const email = hamletUser.getUserEmail() || \"\";\n return {\n sites: hamletUser.getSites(),\n displayName: hamletUser.getDisplayName(),\n avatar: hamletUser.getAvatar(),\n email,\n isLoggedIn: hamletUser.isLoggedIn()\n };\n }\n}\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\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\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n"],"names":["EventEmitter","this","_events","_maxListeners","undefined","isFunction","arg","isObject","isUndefined","module","exports","prototype","defaultMaxListeners","setMaxListeners","n","isNaN","TypeError","emit","type","er","handler","len","args","i","listeners","error","length","arguments","Error","err","context","call","Array","slice","apply","addListener","listener","m","newListener","push","warned","console","trace","on","once","fired","g","removeListener","list","position","splice","removeAllListeners","key","listenerCount","evlistener","emitter","AlgoliaSearchHelper","SearchParameters","SearchResults","algoliasearchHelper","client","index","opts","version","DerivedHelper","mainHelper","fn","main","lastResults","inherits","detach","detachDerivedHelper","getModifiedState","parameters","defaultsPure","omit","objectHasKeys","lib","addRefinement","refinementList","attribute","value","isRefined","valueAsString","facetRefinement","concat","mod","removeRefinement","clearRefinement","v","f","toggleRefinement","refinementType","hasChanged","newRefinementList","Object","keys","reduce","memo","values","facetList","filter","refinementValue","containsRefinements","refinementValueAsString","indexOf","merge","intersection","find","valToNumber","isValidUserToken","RefinementList","isEqualNumericRefinement","a","b","isArray","every","el","newParameters","params","_parseNumbers","userToken","warn","facets","disjunctiveFacets","hierarchicalFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements","self","forEach","paramName","isKeyKnown","PARAMETERS","isValueDefined","partialState","numbers","k","parsedValue","parseFloat","insideBoundingBox","map","geoRect","operators","operator","parsedValues","vPrime","make","instance","facet","rootPath","currentRefinement","getHierarchicalRefinement","name","clearRefinements","toggleHierarchicalFacetRefinement","validate","currentState","tagFilters","numericFilters","constructor","patch","_clearNumericRefinements","setQueryParameters","clearTags","setIndex","setQuery","newQuery","query","setPage","newPage","page","setFacets","setDisjunctiveFacets","setHitsPerPage","hitsPerPage","setTypoTolerance","typoTolerance","addNumericRefinement","isNumericRefined","getConjunctiveRefinements","facetName","isConjunctiveFacet","getDisjunctiveRefinements","isDisjunctiveFacet","getExcludeRefinements","removeNumericRefinement","paramValue","op","val","getNumericRefinements","getNumericRefinement","newNumericRefinements","operatorList","outValues","addFacet","addDisjunctiveFacet","addHierarchicalFacet","hierarchicalFacet","isHierarchicalFacet","addFacetRefinement","addExcludeRefinement","addDisjunctiveFacetRefinement","addTagRefinement","tag","isTagRefined","modification","removeFacet","removeDisjunctiveFacet","removeHierarchicalFacet","removeFacetRefinement","removeExcludeRefinement","removeDisjunctiveFacetRefinement","removeTagRefinement","t","toggleFacetRefinement","toggleConjunctiveFacetRefinement","toggleDisjunctiveFacetRefinement","toggleExcludeFacetRefinement","separator","_getHierarchicalFacetSeparator","getHierarchicalFacetByName","lastIndexOf","addHierarchicalFacetRefinement","path","isHierarchicalFacetRefined","removeHierarchicalFacetRefinement","toggleTagRefinement","isFacetRefined","isExcludeRefined","isDisjunctiveFacetRefined","refinements","isOperatorDefined","array","searchedValue","isAttributeValueDefined","currentValue","getRefinedDisjunctiveFacets","disjunctiveNumericRefinedFacets","getRefinedHierarchicalFacets","getUnrefinedDisjunctiveFacets","refinedFacets","managedParameters","getQueryParams","queryParams","setQueryParameter","parameter","nextWithNumbers","previousPlainObject","acc","nextPlainObject","previous","isPreviousValueDefined","isNextValueDefined","resetPage","_getHierarchicalFacetSortBy","sortBy","_getHierarchicalRootPath","_getHierarchicalShowParentLevel","showParentLevel","hierarchicalFacetName","getHierarchicalFacetBreadcrumb","refinement","split","part","trim","toString","JSON","stringify","state","hierarchicalFacetResult","hierarchicalFacetIndex","hierarchicalFacetRefinement","hierarchicalSeparator","hierarchicalRootPath","hierarchicalShowParentLevel","prepareHierarchicalFacetSortBy","rootExhaustive","facetResult","exhaustive","generateTreeFn","hierarchicalTree","currentHierarchicalLevel","parent","level","data","subtree","picked","facetValue","tuple","parentPath","onlyMatchingTree","orderBy","facetCount","parts","escapedValue","escapeFacetValue","count","format","unescapeFacetValue","generateHierarchicalTree","results","fv","compact","findIndex","formatSort","getIndices","attributes","indices","idx","assignFacetStats","dest","facetStats","stats","options","mainSubResponse","_rawResults","processingTimeMS","sum","result","facetsIndices","disjunctiveFacetsIndices","nextDisjunctiveResult","mainFacets","facetKey","hierarchicalAttributeName","facetValueObject","facetIndex","idxAttributeName","exhaustiveFacetsCount","isFacetDisjunctive","isFacetConjunctive","facets_stats","disjunctiveFacet","dfacet","facetResults","attributeIndex","dataFromMainRequest","refinedFacet","defaultData","root","excludes","_state","recSort","sortFn","node","names","children","childNode","sortedChildren","getFacetStatsIfAvailable","getRefinement","attributeName","resultsFacets","getFacetByName","predicate","DEFAULT_SORT","getFacetValues","facetValues","isExcluded","extractNormalizedFacetValues","facetOrdering","renderingContent","getFacetOrdering","Boolean","orderedFacets","remainingFacets","reverseOrder","order","item","ordering","sortRemainingBy","sortViaFacetOrdering","sort","vanillaSortFn","getFacetStats","getRefinements","res","facetDeclaration","rootFacet","intermediateFacet","newFacet","numericValue","requestBuilder","addAlgoliaAgent","setClient","_queryId","_lastQueryIdReceived","derivedHelpers","_currentNbQueries","setCurrentPage","_change","isPageReset","getCurrentPage","search","_search","onlyWithDerivedHelpers","searchOnlyWithDerivedHelpers","getQuery","_getHitsSearchParams","searchOnce","cb","tempState","queries","_getQueries","then","content","_originalResponse","e","catch","findAnswers","derivedHelper","Promise","resolve","derivedState","attributesForPrediction","nbHits","errorMessage","initIndex","queryLanguages","searchForFacetValues","maxFacetHits","userState","clientHasSFFV","clientHasInitIndex","isDisjunctive","algoliaQuery","getSearchForFacetQuery","searchForFacetValuesPromise","indexName","response","facetHits","q","addDisjunctiveRefine","addRefine","addFacetExclusion","addExclude","addTag","removeDisjunctiveRefine","removeRefine","removeFacetExclusion","removeExclude","removeTag","toggleFacetExclusion","toggleExclude","toggleRefine","toggleTag","nextPage","previousPage","setState","newState","overrideStateWithoutTriggeringChangeEvent","hasRefinements","isDisjunctiveRefined","hasTag","hasTagRefinements","getIndex","getPage","getTags","r","states","mainQueries","queriesCount","helper","derivedQueries","derivedStateQueries","queryId","_dispatchAlgoliaResponse","bind","_dispatchAlgoliaError","s","specificResults","formattedResponse","containsRefinement","facetFilters","_hasDisjunctiveRefinements","disjunctiveRefinements","event","clearCache","newClient","getClient","derive","pos","hasPendingRequests","reduceRight","source","String","replace","comparator","defaults","defaultInstructions","out","sortInstruction","matchingDefault","defaultInstruction","ctor","superCtor","create","enumerable","writable","configurable","arr1","arr2","isObjectOrArrayOrFunction","_merge","target","hasOwnProperty","sourceVal","targetVal","l","obj","excluded","sourceKeys","compareAscending","other","valIsDefined","valIsNull","othIsDefined","othIsNull","collection","iteratees","orders","criteria","iteratee","object","sortObject","localeCompare","curr","_getDisjunctiveFacetSearchParams","filtersMap","segment","join","_getHitsHierarchicalFacetsAttributes","_getFacetFilters","_getNumericFilters","_getTagFilters","additionalParams","hierarchicalRootLevel","analytics","clickAnalytics","_getDisjunctiveHierarchicalFacetAttribute","vs","orFilters","attributeToRefine","attributesIndex","allAttributes","hierarchicalRefinement","newAttributes","rootLevel","parentLevel","stateForSearchForFacetValues","searchForFacetSearchParameters","facetQuery","test","defineProperty","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","o","propertyIsEnumerable","Symbol","iterator","u","next","done","return","from","localStorage","window","parse","getItem","get","miss","all","set","setItem","delete","clear","removeItem","caches","shift","serializable","c","headers","WithinHeaders","queryParameters","WithinQueryParameters","setTimeout","Math","min","d","assign","wait","floor","random","p","h","encodeURIComponent","y","entries","timeout","cacheable","Read","Write","Any","P","w","status","lastUpdate","Date","now","O","protocol","url","accept","I","x","j","D","S","method","toLowerCase","userAgent","pop","message","transporterStackTrace","R","N","connectTimeout","timeouts","connect","responseTimeout","request","host","triesLeft","onSuccess","onRetry","isTimedOut","logger","info","A","hostsCache","onFail","requester","send","getTimeout","statelessHosts","reverse","requestsCache","responsesCache","hosts","read","mappedRequestOptions","transporter","reject","write","T","add","E","charAt","substr","C","U","z","J","F","H","M","K","batch","hits","shouldStop","cursor","W","acl","tt","B","cluster","Q","users","G","clearExistingDictionaryEntries","requests","action","body","jt","taskID","L","operation","destination","ut","methods","waitTask","de","V","scope","pe","Rules","_","Settings","X","Synonyms","Y","Z","$","objectID","et","rt","nt","at","ot","it","retrieveMappings","getClusters","appId","st","ct","ft","dt","lt","pt","ht","mt","yt","ue","gt","vt","bt","Pt","wt","Ot","It","xt","Dt","qt","St","se","_highlightResult","kt","ce","Tt","batchSize","taskIDs","objectIDs","Nt","Et","forwardToReplicas","Rt","At","Ct","Ut","zt","le","DeleteObject","Jt","Ft","Ht","Lt","Mt","Kt","paginate","ie","parseInt","nbPages","Wt","Bt","Qt","attributesToRetrieve","Gt","getVersion","Vt","_t","Xt","createIfNotExists","PartialUpdateObject","PartialUpdateObjectNoCreate","Yt","safe","autoGenerateObjectIDIfNotExist","substring","ee","Zt","ne","clearExistingRules","$t","oe","clearExistingSynonyms","te","AddObject","UpdateObject","re","ae","replaceExistingSynonyms","fe","DeleteIndex","ClearIndex","ge","apiKey","XMLHttpRequest","open","setRequestHeader","abort","onreadystatechange","readyState","OPENED","clearTimeout","onerror","responseText","onload","debug","region","getPersonalizationStrategy","setPersonalizationStrategy","authMode","multipleBatch","multipleGetObjects","multipleQueries","copyIndex","copySettings","copySynonyms","copyRules","moveIndex","listIndices","getLogs","listClusters","multipleSearchForFacetValues","getApiKey","addApiKey","listApiKeys","updateApiKey","deleteApiKey","restoreApiKey","assignUserID","assignUserIDs","getUserID","searchUserIDs","listUserIDs","getTopUserIDs","removeUserID","hasPendingMappings","clearDictionaryEntries","deleteDictionaryEntries","getDictionarySettings","getAppTask","replaceDictionaryEntries","saveDictionaryEntries","searchDictionaryEntries","setDictionarySettings","waitAppTask","customRequest","getObject","getObjects","saveObject","saveObjects","setSettings","getSettings","partialUpdateObject","partialUpdateObjects","deleteObject","deleteObjects","deleteBy","clearObjects","browseObjects","getObjectPosition","findObject","exists","saveSynonym","saveSynonyms","getSynonym","searchSynonyms","browseSynonyms","deleteSynonym","clearSynonyms","replaceAllObjects","replaceAllSynonyms","searchRules","getRule","deleteRule","saveRule","saveRules","replaceAllRules","browseRules","clearRules","initAnalytics","addABTest","getABTest","getABTests","stopABTest","deleteABTest","initPersonalization","initRecommendation","prop","qs","sep","eq","regexp","maxKeys","kstr","vstr","decodeURIComponent","stringifyPrimitive","isFinite","ks","decode","encode","extractAdditionalParams","events","getFunctionalInterface","DEFAULT_ALGOLIA_AGENTS","_ua","__rest","createUUID","COOKIE_KEY","MONTH","setAnonymousUserToken","setUserToken","navigator","cookieEnabled","supportsCookies","document","cookie","getCookie","setTime","getTime","toUTCString","setCookie","_cookieDuration","_userToken","_onUserTokenChangeCallback","getUserToken","onUserTokenChange","immediate","setAuthenticatedUserToken","_authenticatedUserToken","_onAuthenticatedUserTokenChangeCallback","getAuthenticatedUserToken","onAuthenticatedUserTokenChange","addEventType","eventType","addEventTypeAndSubtype","eventSubtype","clickedObjectIDsAfterSearch","sendEvents","clickedObjectIDs","clickedFilters","convertedObjectIDsAfterSearch","addedToCartObjectIDsAfterSearch","purchasedObjectIDsAfterSearch","convertedObjectIDs","addedToCartObjectIDs","purchasedObjectIDs","convertedFilters","SUPPORTED_REGIONS","init","cookieDuration","isNumber","partial","setOptions","_userHasOptedOut","userHasOptedOut","_region","_host","_anonymousUserToken","anonymousUserToken","_useCookie","useCookie","_endpointOrigin","authenticatedUserToken","viewedObjectIDs","viewedFilters","AlgoliaAnalytics","requestFn","_apiKey","_appId","filters","sendRequest","requestWithXMLHttpRequest","addEventListener","requestWithSendBeacon","sendBeacon","requestWithNativeFetch","fetch","getRequesterForBrowser","supportsSendBeacon","supportsXMLHttpRequest","supportsNativeFetch","entryBrowserCjs","AlgoliaAnalyticsObject","createInsightsClient","processQueue","queue","aa","default","env","getEnv","validateEnv","atob","Buffer","encoded","btoa","str","URLSearchParams","productShorthands","confluence","jira","stride","bitbucket","trello","originParamName","originVersioningAttributes","originLibrary","OriginTracer","id","generateId","product","dangerouslySkipValidation","static","EmptyOriginTracer","MalformedOriginTracer","replaceQuery","queryString","fromEncoded","createEmpty","createMalformed","encodedOrigin","originData","encodedOriginString","base64","base64url","padLength","base64UrlToBase64","json","originJSONObject","maybeShorthand","products","expandProductShorthand","fromJSONObject","toJSONObject","addToUrl","originalQueryString","isEmpty","isMalformed","isValid","toAnalyticsAttributes","transformValue","hasGeneratedId","originProduct","isValidId","isValidProduct","super","originMalformed","replacer","wholeMatch","beforeQuery","afterQuery","newQueryString","BasePaths","_classCallCheck","_defineProperty","Environment","localizedPrefix","getLocalizedPrefix","languagePrefix","location","hostname","base","production","wrapForI18n","staging","stgConfig","dev","skipEncoding","continueParam","getReturnUrl","idBasePath","idLogoutUrl","idLoginUrl","macBasePath","href","hamletApi","HamletApi","baseDomain","getBaseDomain","useCofsPath","basePath","getCofsPath","getHamletPath","_objectSpread","cacheBuster","authenticated","hamletUser","withCredentials","axios","startsWith","getBxpPath","hamletRequest","ProductKeys","CONFLUENCE","JIRA_CORE","JIRA_BUSINESS","JIRA_SOFTWARE","JIRA_SERVICE_DESK","BITBUCKET","OPSGENIE","STATUSPAGE","TRELLO","HamletUser","cached","token","initialized","user","contactDetails","firstName","lastName","email","organisationDetails","address1","address2","city","postcode","isoCountryCode","organisationName","organisationType","payOnAccount","taxId","lassoDetails","username","displayName","myDetails","aaid","avatar","isLoggedIn","sites","performanceBoostExperiment","enableAisAvailableProducts","_this","retrieveXsrfToken","getStargateProfile","_this2","setToken","debugAllSites","_this3","retrieveMe","retrieveSitesData","_ref","_ref2","identityData","sitesData","setSites","_this4","meData","stargateData","account_id","picture","getFirstName","getLastName","_this5","retrieveAvailableProductsData","availableProductsSites","site","_site$products","adminAccess","availableProducts","availableProduct","productType","cloudId","avatarUrl","transformAvailableProductsIntoAvailableSites","_this6","availableProductsData","sitesResult","isValidSite","migrationSourceUuid","productKey","cloudIds","_this7","setExtendedTrialAvailability","extendedTrialAvailability","groupSitesByProduct","isVertigo","icon","login_logo_url","toUpperCase","match","_regeneratorRuntime","Op","hasOwn","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","record","_typeof","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","doneResult","isGeneratorFunction","genFun","mark","setPrototypeOf","__proto__","awrap","async","iter","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","ownKeys","enumerableOnly","symbols","sym","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","minLen","_defineProperties","props","descriptor","_toPropertyKey","input","hint","prim","toPrimitive","_toPrimitive","ALGOLIA_APP_ID","ALGOLIA_SEARCH_API_KEY","ALGOLIA_SEARCH_INDEX_NAME","algoliaSearchClient","algoliasearch","insights","ADG4GlobalNav","domRoot","Constructor","navType","classList","scrollPositioning","resizeMenus","DropdownNavLinks","dropdownNavLink","documentElement","clientWidth","_this$AccountAvatar","unFocusNavs","remove","AccountAvatar","navDropdownContent","querySelector","navDropdownContentSizer","outlineElementSizer","NavLinkButtons","navLinkButton","tabId","navLinkId","dataset","navlinkid","tabid","matchingTab","querySelectorAll","tab","DropdownContents","dropdownContent","parentNode","toggle","_this$AccountAvatar2","buttonLi","contains","finder","getAttribute","getElementById","focus","focusVisible","closeEverything","TabButtons","tabButton","tabsParent","closest","tabsParentInner","thisTabID","multiTabContents","tabContent","ButtonMenuMore","ButtonMenuLess","CloseAll","MobileToggle","_this$AccountAvatar3","hideClickableOverlay","showClickableOverlay","MobileBackButtons","mobileBackButton","_this$SearchForm","SearchForm","SearchOpen","trackEvent","eventComponent","component","actionSubjectId","SearchClose","closeSearch","searchHelper","SearchHits","SearchQuery","QueryId","queryID","SearchInput","populateSearchResults","SearchInputSVG","searchInput","_this$AccountAvatar4","hasWrapped","firstWrapped","GenericNavLinks","navLink","offsetTop","nextElementSibling","WindowWidth","WrappedElementIndex","scrollY","comparisonElement","comparisonParent","OutlineElement","style","width","offsetWidth","height","offsetHeight","left","offsetLeft","OverlayClickable","OverlayColor","otherDropdownLink","SearchResultsContainer","innerHTML","_this$AccountAvatar5","_this$AccountAvatar6","newEl","createElement","label","onclick","clicker","className","classes","_document$querySelect","_this$AccountAvatar8","_this$AccountAvatar9","userProfileMenu","createEl","userInfo","labels","onSwitchAccountClick","onManageProfileClick","onManageLicensesClick","onLogOutClick","btn","appendChild","userButton","_this$AccountAvatar7","hideUserMenu","showUserMenu","_this$AccountAvatar10","_this$AccountAvatar11","handelOffElementDropdownClickEvent","handelOffElementDropdownEscKeyEvent","loginInButton","onLogInClick","AccountSignIn","searchArray","filteredSearchArray","hit","ulResults","resultsFragment","createDocumentFragment","hitLi","hitA","tracking","objectId","eventName","positions","Number","sendClickEvent","searchHitTitle","title","lowCaseSearch","lowCaseTitle","splitter","RegExp","_ref3","_arrayWithHoles","_i","_s","_e","_x","_r","_arr","_n","_d","_iterableToArrayLimit","_nonIterableRest","split1","split2","displayTitle","includes","additionalTracking","defaultTrackProperties","origin","baseUrl","stargateBaseUrl","continueUrl","loginUrl","startUrl","isLoading","basePaths","OriginTracing","AccountInfo","NavContainingElement","MenuMore","MenuLess","protoProps","_getUser","bindEvents","storage","getUser","populateLoggedInUser","populateLoggedOutUser","addAvatarOutsideClickEventListener","linkName","properties","originUrl","linkText","_callee","isDebugMode","_context","nodeType","freeGlobal","global","punycode","maxInt","tMax","skew","damp","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","stringFromCharCode","fromCharCode","RangeError","mapDomain","string","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","basic","oldi","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","util","Url","slashes","auth","port","hash","pathname","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","isString","queryIndex","uSplit","rest","simplePath","exec","proto","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","unshift","toASCII","esc","escape","qm","relative","resolveObject","urlParse","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","isAbsolute","byteToHex","buf","offset","bth","getRandomValues","crypto","msCrypto","rnds8","Uint8Array","rnds","rng","bytesToUuid","ii"],"sourceRoot":""}