{"version":3,"file":"chunks/599d2b31700a74.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/RecommendParameters/index.js","webpack:///./node_modules/algoliasearch-helper/src/RecommendResults/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/flat.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/utils/sortAndMergeRecommendations.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');\nvar RecommendParameters = require('./src/RecommendParameters');\nvar RecommendResults = require('./src/RecommendResults');\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 * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n * @return {AlgoliaSearchHelper} The helper instance\n */\nfunction algoliasearchHelper(client, index, opts, searchResultsOptions) {\n return new AlgoliaSearchHelper(client, index, opts, searchResultsOptions);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version');\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 all the parameters for Recommend.\n * @member module:algoliasearchHelper.RecommendParameters\n * @type {RecommendParameters}\n */\nalgoliasearchHelper.RecommendParameters = RecommendParameters;\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\n/**\n * Constructor for the object containing the results for Recommend.\n * @member module:algoliasearchHelper.RecommendResults\n * @type {RecommendResults}\n */\nalgoliasearchHelper.RecommendResults = RecommendResults;\n\nmodule.exports = algoliasearchHelper;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\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 * @param {AlgoliaSearchHelper} mainHelper the main helper\n * @param {function} fn the function to create the derived state for search\n * @param {function} recommendFn the function to create the derived state for recommendations\n */\nfunction DerivedHelper(mainHelper, fn, recommendFn) {\n this.main = mainHelper;\n this.fn = fn;\n this.recommendFn = recommendFn;\n this.lastResults = null;\n this.lastRecommendResults = 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\nDerivedHelper.prototype.getModifiedRecommendState = function (parameters) {\n return this.recommendFn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","'use strict';\n\n/**\n * RecommendParameters is the data structure that contains all the information\n * usable for getting recommendations from the Algolia API. It doesn't do the\n * search itself, 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\n * will be provided when needed.\n * @constructor\n * @classdesc contains all the parameters for recommendations\n * @param {RecommendParametersOptions} opts the options to create the object\n */\nfunction RecommendParameters(opts) {\n opts = opts || {};\n this.params = opts.params || [];\n}\n\nRecommendParameters.prototype = {\n constructor: RecommendParameters,\n\n addParams: function (params) {\n var newParams = this.params.slice();\n\n newParams.push(params);\n\n return new RecommendParameters({ params: newParams });\n },\n\n removeParams: function (id) {\n return new RecommendParameters({\n params: this.params.filter(function (param) {\n return param.$$id !== id;\n }),\n });\n },\n\n addFrequentlyBoughtTogether: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'bought-together' })\n );\n },\n\n addRelatedProducts: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'related-products' })\n );\n },\n\n addTrendingItems: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-items' })\n );\n },\n\n addTrendingFacets: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'trending-facets' })\n );\n },\n\n addLookingSimilar: function (params) {\n return this.addParams(\n Object.assign({}, params, { model: 'looking-similar' })\n );\n },\n\n _buildQueries: function (indexName, cache) {\n return this.params\n .filter(function (params) {\n return cache[params.$$id] === undefined;\n })\n .map(function (params) {\n var query = Object.assign({}, params, {\n indexName: indexName,\n // @TODO: remove this if it ever gets handled by the API\n threshold: params.threshold || 0,\n });\n delete query.$$id;\n\n return query;\n });\n },\n};\n\nmodule.exports = RecommendParameters;\n","'use strict';\n\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 {RecommendParameters} state state that led to the response\n * @param {Record} results the results from algolia client\n **/\nfunction RecommendResults(state, results) {\n this._state = state;\n this._rawResults = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n\n state.params.forEach(function (param) {\n var id = param.$$id;\n self[id] = results[id];\n self._rawResults[id] = results[id];\n });\n}\n\nRecommendResults.prototype = {\n constructor: RecommendResults,\n};\n\nmodule.exports = RecommendResults;\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 objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\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(\n refinementList,\n attribute,\n value\n ) {\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(\n refinementList,\n attribute,\n value\n ) {\n if (value === undefined)\n 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(\n refinementList,\n attribute,\n refinementType\n ) {\n if (attribute === undefined) {\n // return the same object if the list is already empty\n // this is mainly for tests, as it doesn't have much impact on performance\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 (\n memo,\n key\n ) {\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\n memo[key] = facetList;\n\n return memo;\n },\n {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\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} true if the attribute is refined, false otherwise\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements =\n Boolean(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 defaultsPure = require('../functions/defaultsPure');\nvar find = require('../functions/find');\nvar intersection = require('../functions/intersection');\nvar merge = require('../functions/merge');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\nvar valToNumber = require('../functions/valToNumber');\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 * @param {any} a numeric refinement value\n * @param {any} b numeric refinement value\n * @return {boolean} true if the values are equal\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\n ? SearchParameters._parseNumbers(newParameters)\n : {};\n\n if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n // eslint-disable-next-line no-console\n console.warn(\n '[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n - Format: [a-zA-Z0-9_-]{1,64}'\n );\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 =\n params.hierarchicalFacetsRefinements || {};\n\n // eslint-disable-next-line consistent-this\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 parse numbers again 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 (\n geoRect\n ) {\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 (\n currentRefinement.length > 0 &&\n currentRefinement[0].indexOf(facet.rootPath) !== 0\n ) {\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(\n facet.name,\n facet.rootPath\n );\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 (\n currentState.tagFilters &&\n params.tagRefinements &&\n params.tagRefinements.length > 0\n ) {\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\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\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\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} new instance with filters cleared\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 ===\n 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} new instance with tags cleared\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0)\n 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} new instance\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} new instance\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} new instance\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} new instance\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} new instance\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} new instance\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} new instance\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} new instance\n * @example\n * // for price = 50 or 40\n * state.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * state.addNumericRefinement('size', '=', 38);\n * state.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function (attribute, operator, value) {\n var val = valToNumber(value);\n\n if (this.isNumericRefined(attribute, operator, val)) 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(val);\n } else {\n mod[attribute][operator] = [val];\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} new instance\n */\n removeNumericRefinement: function (attribute, operator, number) {\n var paramValue = number;\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function (\n value,\n key\n ) {\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 (\n value,\n key\n ) {\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 (\n this.numericRefinements[attribute] &&\n this.numericRefinements[attribute][operator]\n );\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.} new numeric refinements\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(\n 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(\n { val: value, op: operator },\n key,\n 'numeric'\n );\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 );\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n\n // We return nothing if the attribute is not undefined, a string or a function,\n // as it is not a valid value for a refinement\n return undefined;\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} new instance\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} new instance\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} new instance\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: `' +\n hierarchicalFacet.name +\n '`'\n );\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} new instance\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\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} new instance\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\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} new instance\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n if (\n RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\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} new instance\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} new instance\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} new instance\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} new instance\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} new instance\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\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} new instance\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value))\n return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\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} new instance\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n if (\n !RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n )\n return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\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} new instance\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} new instance\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} new instance\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(\n 'Cannot refine the undeclared facet ' +\n facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets'\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} new instance\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(\n this.facetsRefinements,\n facet,\n value\n ),\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} new instance\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(\n facet,\n value\n ) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the facets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(\n this.facetsExcludes,\n facet,\n value\n ),\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} new instance\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(\n facet,\n value\n ) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n ),\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} new instance\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(\n facet,\n value\n ) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration'\n );\n }\n\n var separator = this._getHierarchicalFacetSeparator(\n this.getHierarchicalFacetByName(facet)\n );\n\n var mod = {};\n\n var upOneOrMultipleLevel =\n 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(\n value + separator\n ) === 0);\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(\n {},\n mod,\n this.hierarchicalFacetsRefinements\n ),\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(\n facet +\n ' is not defined in the hierarchicalFacets attribute of the helper configuration.'\n );\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure(\n {},\n mod,\n this.hierarchicalFacetsRefinements\n ),\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(\n {},\n mod,\n this.hierarchicalFacetsRefinements\n ),\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters} new instance\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} true if facet is a disjunctive facet\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} true if facetName is a hierarchical facet\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} true if facet is a conjunctive facet\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} true if the facet is refined\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(\n this.disjunctiveFacetsRefinements,\n facet,\n value\n );\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} true if the facet is refined\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(\n facet,\n value\n ) {\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 Boolean(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} true if tag is refined\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[]} returns the list of refinements\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n // eslint-disable-next-line consistent-this\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)\n .filter(function (facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets())\n .sort();\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[]} returns the list of refinements\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n // eslint-disable-next-line consistent-this\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) {\n return facet.name;\n }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function (facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n ).sort();\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]} returns the list of facets that are not refined\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\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n // eslint-disable-next-line consistent-this\n var self = this;\n Object.keys(this).forEach(function (paramName) {\n var paramValue = self[paramName];\n if (\n managedParameters.indexOf(paramName) === -1 &&\n paramValue !== undefined\n ) {\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 // eslint-disable-next-line consistent-this\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(function (\n previous,\n key\n ) {\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 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 the hierarchicalFacet object\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 the hierarchicalFacet object\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 the hierarchicalFacet object\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 the hierarchicalFacet object\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 the hierarchicalFacet name\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function (hierarchicalFacetName) {\n return find(this.hierarchicalFacets, function (f) {\n return f.name === hierarchicalFacetName;\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 fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\nvar orderBy = require('../functions/orderBy');\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 =\n state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var hierarchicalRootPath =\n state._getHierarchicalRootPath(hierarchicalFacet);\n var hierarchicalShowParentLevel =\n state._getHierarchicalShowParentLevel(hierarchicalFacet);\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\n// eslint-disable-next-line max-params\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 compact = require('../functions/compact');\nvar defaultsPure = require('../functions/defaultsPure');\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\nvar merge = require('../functions/merge');\nvar orderBy = require('../functions/orderBy');\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 * Turn an array of attributes in an object of attributes with their position in the array as value\n * @param {string[]} attributes the list of attributes in the record\n * @return {object} the list of attributes indexed by attribute name\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 All hierarchical facets\n * @param {string} hierarchicalAttributeName The name of the hierarchical attribute\n * @return {HierarchicalFacet} The hierarchical facet matching the attribute name\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(\n hierarchicalFacets,\n function facetKeyMatchesAttribute(hierarchicalFacet) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n }\n );\n}\n\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 * @param {object} options options to control results content\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 **/\nfunction SearchResults(state, results, options) {\n var mainSubResponse = results[0] || {};\n\n this._rawResults = results;\n\n // eslint-disable-next-line consistent-this\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 var opts = merge(\n {\n persistHierarchicalRootCount: false,\n },\n options\n );\n Object.keys(opts).forEach(function (key) {\n self[key] = opts[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 * @name processingTimeMS\n * @member {number}\n * @memberof SearchResults\n * @instance\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(\n function initFutureTree() {\n return [];\n }\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(\n self.disjunctiveFacets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\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(\n self.facets[position],\n mainSubResponse.facets_stats,\n facetKey\n );\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(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\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 =\n (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(\n self.disjunctiveFacets[position],\n result.facets_stats,\n dfacet\n );\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function (\n refinementValue\n ) {\n // add the disjunctive refinements if it is no more retrieved\n if (\n !self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(\n unescapeFacetValue(refinementValue)\n ) > -1\n ) {\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 (\n currentRefinement.length === 0 ||\n currentRefinement[0].split(separator).length < 2\n ) {\n return;\n }\n\n results.slice(nextDisjunctiveResult).forEach(function (result) {\n var facets = result && result.facets ? result.facets : {};\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(\n self.hierarchicalFacets[position],\n function (f) {\n return f.attribute === dfacet;\n }\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 // @MAJOR: remove this legacy behaviour in next major version\n var defaultData = {};\n\n if (\n currentRefinement.length > 0 &&\n !self.persistHierarchicalRootCount\n ) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] =\n 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: mainFacets[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(\n generateHierarchicalTree(state)\n );\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 (\n find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate)\n );\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 var hierarchicalFacetValues = find(results.hierarchicalFacets, predicate);\n if (!hierarchicalFacetValues) return hierarchicalFacetValues;\n\n var hierarchicalFacet =\n results._state.getHierarchicalFacetByName(attribute);\n var separator =\n results._state._getHierarchicalFacetSeparator(hierarchicalFacet);\n var currentRefinement = unescapeFacetValue(\n results._state.getHierarchicalRefinement(attribute)[0] || ''\n );\n\n if (currentRefinement.indexOf(hierarchicalFacet.rootPath) === 0) {\n currentRefinement = currentRefinement.replace(\n hierarchicalFacet.rootPath + separator,\n ''\n );\n }\n\n var currentRefinementSplit = currentRefinement.split(separator);\n currentRefinementSplit.unshift(attribute);\n\n setIsRefined(hierarchicalFacetValues, currentRefinementSplit, 0);\n\n return hierarchicalFacetValues;\n }\n\n return undefined;\n}\n\n/**\n * Set the isRefined of a hierarchical facet result based on the current state.\n * @param {SearchResults.HierarchicalFacet} item Hierarchical facet to fix\n * @param {string[]} currentRefinement array of parts of the current hierarchical refinement\n * @param {number} depth recursion depth in the currentRefinement\n * @return {undefined} function mutates the item\n */\nfunction setIsRefined(item, currentRefinement, depth) {\n item.isRefined =\n item.name === (currentRefinement[depth] && currentRefinement[depth].trim());\n if (item.data) {\n item.data.forEach(function (child) {\n setIsRefined(child, currentRefinement, depth + 1);\n });\n }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn sort function to apply\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 * @return {HierarchicalFacet|Array} sorted node\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} the sorted facet values\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n var orderedFacets = [];\n var remainingFacets = [];\n var hide = facetOrdering.hide || [];\n var order = facetOrdering.order || [];\n\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 var hidden = hide.indexOf(name) > -1;\n if (!hidden && reverseOrder[name] !== undefined) {\n orderedFacets[reverseOrder[name]] = item;\n } else if (!hidden) {\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 = [\n ['path', 'name'],\n ['asc', 'asc'],\n ];\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 | undefined} the facet ordering\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 // eslint-disable-next-line consistent-this\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(\n function (data, facetName) {\n if (options.facetOrdering) {\n var facetOrdering = getFacetOrdering(results, facetName);\n if (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 },\n facetValues,\n attributes\n );\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 The attribute to look for\n * @return {object|undefined} The stats of the facet\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 // eslint-disable-next-line consistent-this\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(\n getRefinement(state, 'facet', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function (attributeName) {\n state.facetsExcludes[attributeName].forEach(function (name) {\n res.push(\n getRefinement(state, 'exclude', attributeName, name, results.facets)\n );\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getRefinement(\n state,\n 'disjunctive',\n attributeName,\n name,\n results.disjunctiveFacets\n )\n );\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function (\n attributeName\n ) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function (name) {\n res.push(\n getHierarchicalRefinement(\n state,\n attributeName,\n name,\n results.hierarchicalFacets\n )\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 {SearchParameters} state the current state\n * @param {string} type the type of the refinement\n * @param {string} attributeName The attribute of the facet\n * @param {*} name The name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {Refinement} the refinement\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 {SearchParameters} state the current state\n * @param {string} attributeName the attribute of the hierarchical facet\n * @param {string} name the name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {HierarchicalFacet} the hierarchical facet\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 &&\n 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 EventEmitter = require('@algolia/events');\n\nvar DerivedHelper = require('./DerivedHelper');\nvar escapeFacetValue = require('./functions/escapeFacetValue').escapeFacetValue;\nvar inherits = require('./functions/inherits');\nvar merge = require('./functions/merge');\nvar objectHasKeys = require('./functions/objectHasKeys');\nvar omit = require('./functions/omit');\nvar RecommendParameters = require('./RecommendParameters');\nvar RecommendResults = require('./RecommendResults');\nvar requestBuilder = require('./requestBuilder');\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar sortAndMergeRecommendations = require('./utils/sortAndMergeRecommendations');\nvar version = require('./version');\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 * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n */\nfunction AlgoliaSearchHelper(client, index, options, searchResultsOptions) {\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.recommendState = new RecommendParameters({\n params: opts.recommendState,\n });\n this.lastResults = null;\n this.lastRecommendResults = null;\n this._queryId = 0;\n this._recommendQueryId = 0;\n this._lastQueryIdReceived = -1;\n this._lastRecommendQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n this._currentNbRecommendQueries = 0;\n this._searchResultsOptions = searchResultsOptions;\n this._recommendCache = {};\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} Method is chainable, it returns itself\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 * Sends the recommendation queries set in the state. When the method is\n * called, it triggers a `fetch` event. The results will be available through\n * the `result` event. If an error occurs, an `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires fetch\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.recommend = function () {\n this._recommend();\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} [cb] 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\n ? this.state\n : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\n // eslint-disable-next-line consistent-this\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(\n 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 },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\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 * @deprecated answers is deprecated and will be replaced with new initiatives\n */\nAlgoliaSearchHelper.prototype.findAnswers = function (options) {\n // eslint-disable-next-line no-console\n console.warn('[algoliasearch-helper] answers is no longer supported');\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',\n ]),\n }\n );\n\n var errorMessage =\n '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 (\n facet,\n query,\n maxFacetHits,\n userState\n) {\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(\n facet,\n query,\n maxFacetHits,\n state\n );\n\n this._currentNbQueries++;\n // eslint-disable-next-line consistent-this\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(\n 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 },\n function (e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n }\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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 (\n facet,\n path\n) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, path),\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} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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 * 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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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 * Adds a \"frequently bought together\" recommendation query.\n *\n * @param {FrequentlyBoughtTogetherQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFrequentlyBoughtTogether = function (params) {\n this._recommendChange({\n state: this.recommendState.addFrequentlyBoughtTogether(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"related products\" recommendation query.\n *\n * @param {RelatedProductsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addRelatedProducts = function (params) {\n this._recommendChange({\n state: this.recommendState.addRelatedProducts(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending items\" recommendation query.\n *\n * @param {TrendingItemsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingItems = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingItems(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"trending facets\" recommendation query.\n *\n * @param {TrendingFacetsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingFacets = function (params) {\n this._recommendChange({\n state: this.recommendState.addTrendingFacets(params),\n });\n\n return this;\n};\n\n/**\n * Adds a \"looking similar\" recommendation query.\n *\n * @param {LookingSimilarQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addLookingSimilar = function (params) {\n this._recommendChange({\n state: this.recommendState.addLookingSimilar(params),\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} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function (\n attribute,\n operator,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .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} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function (\n facet,\n value\n) {\n this._change({\n state: this.state\n .resetPage()\n .removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true,\n });\n\n return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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 (\n facet\n) {\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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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 * Removes a \"frequently bought together\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFrequentlyBoughtTogether = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"related products\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeRelatedProducts = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending items\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingItems = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"trending facets\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingFacets = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\n });\n\n return this;\n};\n\n/**\n * Removes a \"looking similar\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeLookingSimilar = function (id) {\n this._recommendChange({\n state: this.recommendState.removeParams(id),\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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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// eslint-disable-next-line valid-jsdoc\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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 * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @fires change\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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} Method is chainable, it returns itself\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 =\n 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// eslint-disable-next-line valid-jsdoc\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} true if the tag is currently refined\n */\nAlgoliaSearchHelper.prototype.hasTag = function (tag) {\n return this.state.isTagRefined(tag);\n};\n\n// eslint-disable-next-line valid-jsdoc\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 * Get the name of the currently used index.\n * @return {string} name of the index\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 disjunctiveRefinements =\n this.state.getDisjunctiveRefinements(facetName);\n\n disjunctiveRefinements.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 (\n attribute,\n operator\n) {\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 (\n facetName\n) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @param {object} options options for the query\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\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 = derivedState.index\n ? requestBuilder._getQueries(derivedState.index, derivedState)\n : [];\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\n var queryId = this._queryId++;\n this._currentNbQueries++;\n\n if (!queries.length) {\n return Promise.resolve({ results: [] }).then(\n this._dispatchAlgoliaResponse.bind(this, states, queryId)\n );\n }\n\n try {\n this.client\n .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 return undefined;\n};\n\nAlgoliaSearchHelper.prototype._recommend = function () {\n var searchState = this.state;\n var recommendState = this.recommendState;\n var index = this.getIndex();\n var states = [{ state: recommendState, index: index, helper: this }];\n var ids = recommendState.params.map(function (param) {\n return param.$$id;\n });\n\n this.emit('fetch', {\n recommend: {\n state: recommendState,\n results: this.lastRecommendResults,\n },\n });\n\n var cache = this._recommendCache;\n\n var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n var derivedIndex = derivedHelper.getModifiedState(searchState).index;\n if (!derivedIndex) {\n return [];\n }\n\n // Contrary to what is done when deriving the search state, we don't want to\n // provide the current recommend state to the derived helper, as it would\n // inherit unwanted queries. We instead provide an empty recommend state.\n var derivedState = derivedHelper.getModifiedRecommendState(\n new RecommendParameters()\n );\n states.push({\n state: derivedState,\n index: derivedIndex,\n helper: derivedHelper,\n });\n\n ids = Array.prototype.concat.apply(\n ids,\n derivedState.params.map(function (param) {\n return param.$$id;\n })\n );\n\n derivedHelper.emit('fetch', {\n recommend: {\n state: derivedState,\n results: derivedHelper.lastRecommendResults,\n },\n });\n\n return derivedState._buildQueries(derivedIndex, cache);\n });\n\n var queries = Array.prototype.concat.apply(\n this.recommendState._buildQueries(index, cache),\n derivedQueries\n );\n\n if (queries.length === 0) {\n return;\n }\n\n if (\n queries.length > 0 &&\n typeof this.client.getRecommendations === 'undefined'\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Please update algoliasearch/lite to the latest version in order to use recommend widgets.'\n );\n return;\n }\n\n var queryId = this._recommendQueryId++;\n this._currentNbRecommendQueries++;\n\n try {\n this.client\n .getRecommendations(queries)\n .then(this._dispatchRecommendResponse.bind(this, queryId, states, ids))\n .catch(this._dispatchRecommendError.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 return;\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}>} states state used 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 (\n states,\n queryId,\n content\n) {\n // eslint-disable-next-line consistent-this\n var self = this;\n\n // @TODO 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 if (!state.index) {\n helper.emit('result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastResults = new SearchResults(\n state,\n specificResults,\n self._searchResultsOptions\n );\n\n helper.emit('result', {\n results: helper.lastResults,\n state: state,\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendResponse = function (\n queryId,\n states,\n ids,\n content\n) {\n // @TODO remove the number of outdated queries discarded instead of just one\n\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n\n var cache = this._recommendCache;\n\n var idsMap = {};\n ids\n .filter(function (id) {\n return cache[id] === undefined;\n })\n .forEach(function (id, index) {\n if (!idsMap[id]) idsMap[id] = [];\n\n idsMap[id].push(index);\n });\n\n Object.keys(idsMap).forEach(function (id) {\n var indices = idsMap[id];\n var firstResult = content.results[indices[0]];\n if (indices.length === 1) {\n cache[id] = firstResult;\n return;\n }\n cache[id] = Object.assign({}, firstResult, {\n hits: sortAndMergeRecommendations(\n indices.map(function (idx) {\n return content.results[idx].hits;\n })\n ),\n });\n });\n\n var results = {};\n ids.forEach(function (id) {\n results[id] = cache[id];\n });\n\n states.forEach(function (s) {\n var state = s.state;\n var helper = s.helper;\n\n if (!s.index) {\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n results: null,\n state: state,\n });\n return;\n }\n\n helper.lastRecommendResults = new RecommendResults(state, results);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"result\" event when events for Recommend are implemented\n helper.emit('recommend:result', {\n recommend: {\n results: helper.lastRecommendResults,\n state: state,\n },\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function (\n queryId,\n error\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 this.emit('error', {\n error: error,\n });\n\n if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendError = function (\n queryId,\n error\n) {\n if (queryId < this._lastRecommendQueryIdReceived) {\n // Outdated answer\n return;\n }\n\n this._currentNbRecommendQueries -=\n queryId - this._lastRecommendQueryIdReceived;\n this._lastRecommendQueryIdReceived = queryId;\n\n this.emit('error', {\n error: error,\n });\n\n if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function (\n query,\n facetFilters,\n numericFilters,\n tagFilters\n) {\n return (\n query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0\n );\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} true if there are refinements on this attribute\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function (facet) {\n return (\n this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0\n );\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\nAlgoliaSearchHelper.prototype._recommendChange = function (event) {\n var state = event.state;\n\n if (state !== this.recommendState) {\n this.recommendState = state;\n\n // eslint-disable-next-line no-warning-comments\n // TODO: emit \"change\" event when events for Recommend are implemented\n this.emit('recommend:change', {\n search: {\n results: this.lastResults,\n state: this.state,\n },\n recommend: {\n results: this.lastRecommendResults,\n state: this.recommendState,\n },\n });\n }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.clearCache = function () {\n if (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} Method is chainable, it returns itself\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} the currently used client\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 * @param {function} recommendFn RecommendParameters -> RecommendParameters\n * @return {DerivedHelper} a new DerivedHelper\n */\nAlgoliaSearchHelper.prototype.derive = function (fn, recommendFn) {\n var derivedHelper = new DerivedHelper(this, fn, recommendFn);\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 * @param {DerivedHelper} derivedHelper the derived helper to detach\n * @return {undefined} nothing is returned\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} the escaped facet value or the value if it was not a string\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} the unescaped facet value or the value if it was not a string\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 return undefined;\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","// @MAJOR: remove this function and use Array.prototype.flat\nmodule.exports = function flat(arr) {\n return arr.reduce(function (acc, val) {\n return acc.concat(val);\n }, []);\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(\n defaultInstructions,\n function (defaultInstruction) {\n return defaultInstruction[0] === sortInstruction[0];\n }\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 // eslint-disable-next-line no-restricted-syntax\n for (var key in source) {\n if (\n !Object.prototype.hasOwnProperty.call(source, key) ||\n key === '__proto__' ||\n key === 'constructor'\n ) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n // eslint-disable-next-line no-continue\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} target The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\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 // eslint-disable-next-line no-continue\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 * @return {Array} sorted collection\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(\n 'The value should be a number, a parsable string or an array of those.'\n );\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()\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 * @param {string} index The name of the index\n * @param {SearchParameters} state The state from which to get the queries\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(\n state,\n refinedFacet\n ),\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 (\n currentRefinement.length > 0 &&\n currentRefinement[0].split(separator).length > 1\n ) {\n // We generate a map of the filters we will use for our facet values queries\n var filtersMap = currentRefinement[0]\n .split(separator)\n .slice(0, -1)\n .reduce(function createFiltersMap(map, segment, level) {\n return map.concat({\n attribute: hierarchicalFacet.attributes[level],\n value:\n level === 0\n ? segment\n : [map[map.length - 1].value, segment].join(separator),\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 // Keep facet filters unrelated to current hierarchical attributes\n function hasHierarchicalFacetFilter(value) {\n return hierarchicalFacet.attributes.some(function (attribute) {\n return attribute === value.split(':')[0];\n });\n }\n\n var filteredFacetFilters = (params.facetFilters || []).reduce(\n function (acc, facetFilter) {\n if (Array.isArray(facetFilter)) {\n var filtered = facetFilter.filter(function (filterValue) {\n return !hasHierarchicalFacetFilter(filterValue);\n });\n\n if (filtered.length > 0) {\n acc.push(filtered);\n }\n }\n\n if (\n typeof facetFilter === 'string' &&\n !hasHierarchicalFacetFilter(facetFilter)\n ) {\n acc.push(facetFilter);\n }\n\n return acc;\n },\n []\n );\n\n var parent = filtersMap[level - 1];\n if (level > 0) {\n params.facetFilters = filteredFacetFilters.concat(\n parent.attribute + ':' + parent.value\n );\n } else if (filteredFacetFilters.length > 0) {\n params.facetFilters = filteredFacetFilters;\n } else {\n delete params.facetFilters;\n }\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 * @param {SearchParameters} state The state from which to get the queries\n * @return {object.} The search parameters for hits\n */\n _getHitsSearchParams: function (state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n .sort();\n\n var facetFilters = requestBuilder._getFacetFilters(state);\n var numericFilters = requestBuilder._getNumericFilters(state);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {};\n\n if (facets.length > 0) {\n additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n }\n\n if (tagFilters.length > 0) {\n additionalParams.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 {SearchParameters} state The state from which to get the queries\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object} The search parameters for a disjunctive facet\n */\n _getDisjunctiveFacetSearchParams: function (\n state,\n facet,\n hierarchicalRootLevel\n ) {\n var facetFilters = requestBuilder._getFacetFilters(\n state,\n facet,\n hierarchicalRootLevel\n );\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 =\n 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 {SearchParameters} state the state from which to get the filters\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 on which format is used, either tagFilters or tagRefinements\n * @private\n * @param {SearchParameters} state the state from which to get the filters\n * @return {string} Tag filters in a single 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 * 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 {SearchParameters} state The state from which to get the queries\n * @param {string} [facet] if set, the current disjunctive facet\n * @param {boolean} [hierarchicalRootLevel] ?? FIXME\n * @return {array.} The facet filters in the algolia format\n */\n _getFacetFilters: function (state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues\n .slice()\n .sort()\n .forEach(function (facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes)\n .sort()\n .forEach(function (facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.sort().forEach(function (facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements)\n .sort()\n .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\n .slice()\n .sort()\n .forEach(function (facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements =\n state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements)\n .sort()\n .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 (\n facetValue.indexOf(separator) === -1 ||\n (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath &&\n rootPath.split(separator).length ===\n facetValue.split(separator).length)\n ) {\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(\n allAttributes,\n hierarchicalFacet\n ) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(\n hierarchicalFacet.name\n )[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 },\n out\n );\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function (\n state,\n hierarchicalFacet,\n rootLevel\n ) {\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 =\n 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(\n merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n )\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\nvar find = require('../functions/find');\nvar flat = require('../functions/flat');\n\nfunction getAverageIndices(indexTracker, nrOfObjs) {\n var avgIndices = [];\n\n Object.keys(indexTracker).forEach(function (key) {\n if (indexTracker[key].count < 2) {\n indexTracker[key].indexSum += 100;\n }\n avgIndices.push({\n objectID: key,\n avgOfIndices: indexTracker[key].indexSum / nrOfObjs,\n });\n });\n\n return avgIndices.sort(function (a, b) {\n return a.avgOfIndices > b.avgOfIndices ? 1 : -1;\n });\n}\n\nfunction sortAndMergeRecommendations(results) {\n var indexTracker = {};\n\n results.forEach(function (hits) {\n hits.forEach(function (hit, index) {\n if (!indexTracker[hit.objectID]) {\n indexTracker[hit.objectID] = { indexSum: index, count: 1 };\n } else {\n indexTracker[hit.objectID] = {\n indexSum: indexTracker[hit.objectID].indexSum + index,\n count: indexTracker[hit.objectID].count + 1,\n };\n }\n });\n });\n\n var sortedAverageIndices = getAverageIndices(indexTracker, results.length);\n\n var finalOrder = sortedAverageIndices.reduce(function (\n orderedHits,\n avgIndexRef\n ) {\n var result = find(flat(results), function (hit) {\n return hit.objectID === avgIndexRef.objectID;\n });\n return result ? orderedHits.concat(result) : orderedHits;\n },\n []);\n\n return finalOrder;\n}\n\nmodule.exports = sortAndMergeRecommendations;\n","'use strict';\n\nmodule.exports = '3.22.4';\n","/*! algoliasearch.umd.js | 4.24.0 | © 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(){u();var e=JSON.stringify(t);return o()[e]})).then((function(t){return Promise.all([t?t.value:e(),void 0!==t])})).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)]={timestamp:(new Date).getTime(),value: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 h(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function p(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 O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function w(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(O(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 w(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,h=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, please reach out to the Algolia Support team: https://alg.li/support .\",transporterStackTrace:E(i)};var h={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},p=function(t){var e={request:h,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=p(n);return n.isTimedOut&&l++,Promise.all([t.logger.info(\"Retryable failure\",A(a)),t.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw p(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,E(i))}};return t.requester.send(h).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 h(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 w(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=R(r),a=\"\".concat(t.protocol,\"://\").concat(t.url,\"/\").concat(\"/\"===e.charAt(0)?e.substr(1):e);return n.length&&(a+=\"?\".concat(n)),a}function R(t){return Object.keys(t).map((function(e){return p(\"%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 E(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:p(\"2/abtests/%s\",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"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:p(\"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 B(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 K=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()}))}))}))}},W=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)}},L=function(t){return function(e,r,n){return t.transporter.write({method:j,path:\"1/clusters/mapping/batch\",data:{users:e,cluster:r}},n)}},Q=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:{action:\"addEntry\",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},G=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"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 G(t)(e,n,r(r({},a),{},{scope:[he.Rules]}))}},_=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Settings]}))}},X=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.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:p(\"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:p(\"/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:p(\"1/keys/%s\",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"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:p(\"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 h(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:p(\"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)}))}},ht=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)})))}))}},pt=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:R(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:p(\"/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:p(\"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:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},Ot=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"/1/dictionaries/%s/search\",e),data:{query:r},cacheable:!0},n)}},wt=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:p(\"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){if(Array.isArray(t[e])&&Array.isArray(a[e])){var r=t[e];return r.length===a[e].length&&r.every((function(t,r){return t===a[e][r]}))}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:p(\"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 B(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/browse\",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return B(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()}))}()}},Kt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/%s\",t.indexName,e)},r)}},Wt=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 pe>=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.24.0\",\"-\").concat(t)}),s()]}),userAgent:T(\"4.24.0\").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 h({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 h({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:ht,multipleGetObjects:pt,multipleQueries:mt,copyIndex:G,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:K,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:W,assignUserIDs:L,getUserID:ot,searchUserIDs:wt,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:Q,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:Ot,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Kt,getObjects:Lt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Gt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Wt,findObject:Bt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Et,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Qt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Rt}})}},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 h({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)}},getRecommendations:ge,getFrequentlyBoughtTogether:ve,getLookingSimilar:we,getRecommendedForYou:Ie,getRelatedProducts:be,getTrendingFacets:Pe,getTrendingItems:Oe}}))}return xe.version=\"4.24.0\",xe}));\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, { 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 = (Environment.getEnvironment() === \"production\") ? \"www.atlassian.com.v2\": \"www.atlassian.com.v2_dev\";\nconst ALGOLIA_FACET_KEY = 'category';\nconst algoliaSearchClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_SEARCH_API_KEY);\nconst locale = Environment.getInternationalSubdirectory() || 'en';\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 = algoliasearchhelper(algoliaSearchClient, ALGOLIA_SEARCH_INDEX_NAME, {\n facetFilters: [`locale:${locale}`],\n facets: [ALGOLIA_FACET_KEY],\n clickAnalytics: true // enables click analytics\n });\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","RecommendParameters","RecommendResults","SearchParameters","SearchResults","algoliasearchHelper","client","index","opts","searchResultsOptions","version","DerivedHelper","mainHelper","fn","recommendFn","main","lastResults","lastRecommendResults","inherits","detach","detachDerivedHelper","getModifiedState","parameters","getModifiedRecommendState","params","constructor","addParams","newParams","removeParams","id","filter","param","$$id","addFrequentlyBoughtTogether","Object","assign","model","addRelatedProducts","addTrendingItems","addTrendingFacets","addLookingSimilar","_buildQueries","indexName","cache","map","query","threshold","state","results","_state","_rawResults","self","forEach","defaultsPure","objectHasKeys","omit","lib","addRefinement","refinementList","attribute","value","isRefined","valueAsString","facetRefinement","concat","mod","removeRefinement","clearRefinement","v","f","toggleRefinement","refinementType","hasChanged","newRefinementList","keys","reduce","memo","values","facetList","refinementValue","containsRefinements","Boolean","refinementValueAsString","indexOf","find","intersection","merge","valToNumber","isValidUserToken","RefinementList","isEqualNumericRefinement","a","b","isArray","every","el","newParameters","_parseNumbers","userToken","warn","facets","disjunctiveFacets","hierarchicalFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements","paramName","isKeyKnown","PARAMETERS","isValueDefined","partialState","numbers","k","parsedValue","parseFloat","insideBoundingBox","geoRect","operators","operator","parsedValues","vPrime","make","instance","facet","rootPath","currentRefinement","getHierarchicalRefinement","name","clearRefinements","toggleHierarchicalFacetRefinement","validate","currentState","tagFilters","numericFilters","patch","_clearNumericRefinements","setQueryParameters","clearTags","setIndex","setQuery","newQuery","setPage","newPage","page","setFacets","setDisjunctiveFacets","setHitsPerPage","hitsPerPage","setTypoTolerance","typoTolerance","addNumericRefinement","val","isNumericRefined","getConjunctiveRefinements","facetName","isConjunctiveFacet","getDisjunctiveRefinements","isDisjunctiveFacet","getExcludeRefinements","removeNumericRefinement","number","paramValue","op","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","sort","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","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","fv","compact","findIndex","formatSort","getIndices","attributes","indices","idx","assignFacetStats","dest","facetStats","stats","options","mainSubResponse","persistHierarchicalRootCount","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","extractNormalizedFacetValues","predicate","isExcluded","hierarchicalFacetValues","replace","currentRefinementSplit","unshift","setIsRefined","item","depth","child","recSort","sortFn","node","names","children","childNode","sortedChildren","getFacetStatsIfAvailable","getRefinement","attributeName","resultsFacets","getFacetByName","DEFAULT_SORT","getFacetValues","facetValues","facetOrdering","renderingContent","getFacetOrdering","orderedFacets","remainingFacets","hide","reverseOrder","order","hidden","ordering","sortRemainingBy","sortViaFacetOrdering","vanillaSortFn","getFacetStats","getRefinements","res","facetDeclaration","rootFacet","intermediateFacet","newFacet","numericValue","requestBuilder","sortAndMergeRecommendations","addAlgoliaAgent","setClient","recommendState","_queryId","_recommendQueryId","_lastQueryIdReceived","_lastRecommendQueryIdReceived","derivedHelpers","_currentNbQueries","_currentNbRecommendQueries","_searchResultsOptions","_recommendCache","setCurrentPage","_change","isPageReset","getCurrentPage","search","_search","onlyWithDerivedHelpers","searchOnlyWithDerivedHelpers","recommend","_recommend","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","response","facetHits","q","addDisjunctiveRefine","addRefine","addFacetExclusion","addExclude","addTag","_recommendChange","removeDisjunctiveRefine","removeRefine","removeFacetExclusion","removeExclude","removeTag","removeFrequentlyBoughtTogether","removeRelatedProducts","removeTrendingItems","removeTrendingFacets","removeLookingSimilar","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","searchState","ids","derivedIndex","getRecommendations","_dispatchRecommendResponse","_dispatchRecommendError","s","specificResults","idsMap","firstResult","hits","containsRefinement","facetFilters","_hasDisjunctiveRefinements","disjunctiveRefinements","event","clearCache","newClient","getClient","derive","pos","hasPendingRequests","reduceRight","source","String","comparator","arr","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","curr","_getDisjunctiveFacetSearchParams","filtersMap","segment","join","hasHierarchicalFacetFilter","some","filteredFacetFilters","facetFilter","filtered","filterValue","_getHitsHierarchicalFacetsAttributes","_getFacetFilters","_getNumericFilters","_getTagFilters","additionalParams","hierarchicalRootLevel","analytics","clickAnalytics","_getDisjunctiveHierarchicalFacetAttribute","vs","orFilters","attributeToRefine","attributesIndex","allAttributes","hierarchicalRefinement","newAttributes","rootLevel","parentLevel","stateForSearchForFacetValues","searchForFacetSearchParameters","facetQuery","test","flat","indexTracker","hit","objectID","indexSum","nrOfObjs","avgIndices","avgOfIndices","getAverageIndices","orderedHits","avgIndexRef","defineProperty","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","o","propertyIsEnumerable","Symbol","iterator","u","next","done","return","from","localStorage","window","parse","getItem","setItem","timeToLive","fromEntries","entries","timestamp","Date","getTime","get","miss","all","set","delete","clear","removeItem","caches","shift","serializable","c","headers","WithinHeaders","queryParameters","WithinQueryParameters","setTimeout","Math","min","d","wait","floor","random","h","p","encodeURIComponent","y","timeout","cacheable","Read","Write","Any","P","O","status","lastUpdate","now","w","protocol","url","accept","I","x","j","D","S","method","toLowerCase","userAgent","pop","message","transporterStackTrace","E","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","R","charAt","substr","C","U","z","J","F","H","M","B","batch","shouldStop","cursor","K","acl","tt","W","cluster","L","users","Q","clearExistingDictionaryEntries","requests","action","body","jt","taskID","G","operation","destination","ut","methods","waitTask","de","V","scope","he","Rules","_","Settings","X","Synonyms","Y","Z","$","et","rt","nt","at","ot","it","retrieveMappings","getClusters","appId","st","ct","ft","dt","lt","ht","pt","mt","yt","ue","gt","vt","bt","Pt","Ot","wt","It","xt","Dt","qt","St","se","_highlightResult","kt","ce","Tt","batchSize","taskIDs","objectIDs","Nt","Rt","forwardToReplicas","Et","At","Ct","Ut","zt","le","DeleteObject","Jt","Ft","Ht","Gt","Mt","Bt","paginate","ie","parseInt","nbPages","Kt","Wt","Lt","attributesToRetrieve","Qt","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","ve","fallbackParameters","be","Pe","Oe","we","Ie","xe","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","getFrequentlyBoughtTogether","getLookingSimilar","getRecommendedForYou","getRelatedProducts","getTrendingFacets","getTrendingItems","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","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","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","_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","locale","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","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","algoliasearchhelper","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","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":""}