{"version":3,"sources":["webpack:///./node_modules/algoliasearch-helper/src/functions/formatSort.js","webpack:///./node_modules/algoliasearch/src/version.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/shortener.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js","webpack:///./node_modules/algoliasearch/src/deprecatedMessage.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/filterState.js","webpack:///./node_modules/algoliasearch-helper/src/DerivedHelper/index.js","webpack:///./node_modules/algoliasearch/src/merge.js","webpack:///./node_modules/algoliasearch/src/omit.js","webpack:///./node_modules/algoliasearch/src/browser/createAlgoliasearch.js","webpack:///./node_modules/algoliasearch-helper/index.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/index.js","webpack:///./node_modules/algoliasearch/src/errors.js","webpack:///./node_modules/algoliasearch/src/browser/inline-headers.js","webpack:///./node_modules/algoliasearch/src/exitPromise.js","webpack:///./node_modules/algoliasearch/node_modules/debug/src/debug.js","webpack:///./node_modules/algoliasearch/src/store.js","webpack:///./node_modules/algoliasearch/src/IndexCore.js","webpack:///./node_modules/algoliasearch-helper/src/url.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js","webpack:///./node_modules/algoliasearch/src/deprecate.js","webpack:///./node_modules/algoliasearch-helper/src/functions/valToNumber.js","webpack:///./node_modules/algoliasearch/src/clone.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/index.js","webpack:///./node_modules/algoliasearch/src/browser/builds/algoliasearchLite.js","webpack:///./node_modules/algoliasearch/src/AlgoliaSearchCore.js","webpack:///./node_modules/algoliasearch-helper/src/requestBuilder.js","webpack:///./node_modules/algoliasearch/src/places.js","webpack:///./node_modules/algoliasearch-helper/src/version.js","webpack:///./node_modules/algoliasearch-helper/src/algoliasearch.helper.js","webpack:///./node_modules/algoliasearch/src/map.js","webpack:///./node_modules/algoliasearch/node_modules/debug/src/browser.js","webpack:///./node_modules/algoliasearch/src/buildSearchMethod.js","webpack:///./node_modules/algoliasearch/src/browser/jsonp-request.js"],"names":["reduce","find","startsWith","module","exports","sortBy","defaults","out","sortInstruction","sortInstructions","split","length","similarDefault","predicate","push","invert","keys","keys2Short","advancedSyntax","allowTyposOnNumericTokens","analyticsTags","analytics","aroundLatLngViaIP","aroundLatLng","aroundPrecision","aroundRadius","attributesToHighlight","attributesToRetrieve","attributesToSnippet","disjunctiveFacetsRefinements","disjunctiveFacets","distinct","facetsExcludes","facetsRefinements","facets","getRankingInfo","hierarchicalFacetsRefinements","hierarchicalFacets","highlightPostTag","highlightPreTag","hitsPerPage","ignorePlurals","index","insideBoundingBox","insidePolygon","maxValuesPerFacet","minimumAroundRadius","minProximity","minWordSizefor1Typo","minWordSizefor2Typos","numericFilters","numericRefinements","offset","optionalWords","page","queryType","query","removeWordsIfNoResults","replaceSynonymsInHighlight","restrictSearchableAttributes","synonyms","tagFilters","tagRefinements","typoTolerance","optionalTagFilters","optionalFacetFilters","snippetEllipsisText","disableExactOnAttributes","enableExactOnSingleWordQuery","short2Keys","ENCODED_PARAMETERS","decode","shortKey","encode","key","isUndefined","isString","isFunction","isEmpty","filter","omit","lib","addRefinement","refinementList","attribute","value","isRefined","valueAsString","facetRefinement","concat","mod","removeRefinement","clearRefinement","v","f","toggleRefinement","Error","refinementType","hasChanged","newRefinementList","memo","values","facetList","refinementValue","indexOf","containsRefinements","refinementValueAsString","previousUsage","newUsage","githubAnchorLink","toLowerCase","replace","forEach","map","filterState","state","filters","partialState","attributeFilters","attributes","aF","attr","isConjunctiveFacet","isFacetRefined","isDisjunctiveFacet","isDisjunctiveFacetRefined","isHierarchicalFacet","isHierarchicalFacetRefined","getNumericRefinements","searchParameters","parameterKey","util","events","DerivedHelper","mainHelper","fn","this","main","lastResults","inherits","EventEmitter","prototype","detach","removeAllListeners","detachDerivedHelper","getModifiedState","parameters","foreach","merge","destination","sources","Array","slice","call","arguments","source","keyName","hasOwnProperty","undefined","obj","test","filtered","global","Promise","AlgoliaSearch","uaSuffix","errors","inlineHeaders","jsonpRequest","places","algoliasearch","applicationID","apiKey","opts","cloneDeep","_ua","ua","AlgoliaSearchBrowser","version","initPlaces","__algolia","debug","support","hasXMLHttpRequest","hasXDomainRequest","apply","cors","XMLHttpRequest","_request","url","resolve","reject","headers","reqTimeout","timedOut","body","req","XDomainRequest","connected","setTimeout","onTimeout","timeouts","connect","onprogress","onProgress","onreadystatechange","onReadyStateChange","onload","onLoad","onerror","onError","open","method","forceAuthHeaders","setRequestHeader","send","Network","clearTimeout","JSON","parse","responseText","statusCode","status","getAllResponseHeaders","e","UnparsableJSON","more","event","abort","RequestTimeout","onConnect","complete","readyState","fallback","err","content","_promise","val","delay","ms","all","promises","AlgoliaSearchHelper","SearchParameters","SearchResults","algoliasearchHelper","client","intersection","forOwn","isNaN","isEqual","trim","valToNumber","RefinementList","findArray","array","searchedValue","currentValue","newParameters","params","_parseNumbers","self","paramValue","paramName","PARAMETERS","numbers","numberKeys","k","parsedValue","parseFloat","isArray","geoRect","operators","operator","parsedValues","vPrime","make","instance","facet","rootPath","currentRefinement","getHierarchicalRefinement","name","clearRefinements","toggleHierarchicalFacetRefinement","validate","currentState","constructor","clear","patch","_clearNumericRefinements","setQueryParameters","clearTags","setIndex","setQuery","newQuery","setPage","newPage","setFacets","setDisjunctiveFacets","setHitsPerPage","n","setTypoTolerance","addNumericRefinement","isNumericRefined","getConjunctiveRefinements","facetName","getDisjunctiveRefinements","getExcludeRefinements","removeNumericRefinement","paramValueAsNumber","op","getNumericRefinement","newNumericRefinements","operatorList","outValues","predicateResult","addFacet","addDisjunctiveFacet","addHierarchicalFacet","hierarchicalFacet","addFacetRefinement","addExcludeRefinement","addDisjunctiveFacetRefinement","addTagRefinement","tag","isTagRefined","modification","removeFacet","removeDisjunctiveFacet","removeHierarchicalFacet","removeFacetRefinement","removeExcludeRefinement","removeDisjunctiveFacetRefinement","removeTagRefinement","t","toggleFacetRefinement","toggleConjunctiveFacetRefinement","toggleDisjunctiveFacetRefinement","toggleExcludeFacetRefinement","separator","_getHierarchicalFacetSeparator","getHierarchicalFacetByName","upOneOrMultipleLevel","lastIndexOf","addHierarchicalFacetRefinement","path","removeHierarchicalFacetRefinement","toggleTagRefinement","isExcludeRefined","refinements","isOperatorDefined","isAttributeValueDefined","getRefinedDisjunctiveFacets","disjunctiveNumericRefinedFacets","getRefinedHierarchicalFacets","getUnrefinedDisjunctiveFacets","refinedFacets","managedParameters","getQueryParams","queryParams","getQueryParameter","setQueryParameter","parameter","error","parsedParams","mutateMe","newInstance","ks","newState","_getHierarchicalFacetSortBy","_getHierarchicalRootPath","_getHierarchicalShowParentLevel","showParentLevel","hierarchicalFacetName","getHierarchicalFacetBreadcrumb","refinement","toString","stringify","AlgoliaSearchError","message","extraProperties","captureStackTrace","stack","createCustomError","AlgoliaSearchCustomError","args","unshift","JSONPScriptFail","JSONPScriptError","Unknown","_setTimeout","prevTime","selectColor","namespace","i","hash","charCodeAt","colors","Math","abs","createDebug","enabled","curr","Date","diff","prev","coerce","match","format","formatter","formatters","splice","formatArgs","logFn","log","console","bind","useColors","color","init","enable","namespaces","save","names","skips","len","RegExp","substr","disable","humanize","store","localStorageNamespace","moduleStore","set","data","get","localStorageStore","localStorage","localStorageFailure","cleanup","getOrSet","supportsLocalStorage","setItem","_","removeItem","buildSearchMethod","deprecate","deprecatedMessage","IndexCore","indexName","as","typeAheadArgs","typeAheadValueOption","cache","clearCache","search","similarSearch","browse","queryParameters","callback","indexObj","_getSearchParams","_jsonRequest","encodeURIComponent","hostType","browseFrom","cursor","searchForFacetValues","clone","usage","facetQuery","filteredParams","searchFacet","_search","additionalUA","getObject","objectID","attrs","getObjects","objectIDs","requests","request","join","shortener","qs","pick","mapKeys","mapValues","isPlainObject","recursiveEncode","input","refinementsParameters","stateKeys","sortQueryStringValues","prefixRegexp","invertedMapping","a","b","isARefinements","isBRefinements","localeCompare","getStateFromQueryString","queryString","options","prefixForParameters","prefix","mapping","partialStateWithPrefix","hasPrefix","unprefixedKey","decodedKey","partialStateWithParsedNumbers","getUnrecognizedParametersInQueryString","foreignConfig","config","getQueryStringFromState","moreAttributes","safe","stateForUrl","encodedState","shortK","sort","stateQs","moreQs","generateTrees","last","orderBy","pickBy","prepareHierarchicalFacetSortBy","hierarchicalFacetResult","hierarchicalFacetIndex","hierarchicalFacetRefinement","hierarchicalSeparator","hierarchicalRootPath","hierarchicalShowParentLevel","generateTreeFn","generateHierarchicalTree","results","count","hierarchicalTree","currentHierarchicalLevel","parent","level","onlyMatchingValuesFn","filterFacetValues","formatHierarchicalFacetValue","parentPath","facetCount","facetValue","warned","deprecated","warn","isNumber","compact","findIndex","sumBy","includes","partial","partialRight","formatSort","getIndices","indices","idx","assignFacetStats","dest","facetStats","stats","findMatchingHierarchicalFacetFromAttributeName","hierarchicalAttributeName","mainSubResponse","_rawResults","parsedQuery","hits","nbHits","nbPages","processingTimeMS","automaticRadius","serverUsed","timeoutCounts","timeoutHits","exhaustiveFacetsCount","exhaustiveNbHits","userData","queryID","facetsIndices","disjunctiveFacetsIndices","nextDisjunctiveResult","facetValueObject","facetKey","facetIndex","idxAttributeName","exhaustive","position","isFacetDisjunctive","isFacetConjunctive","facets_stats","disjunctiveFacet","result","facetResults","dfacet","attributeIndex","dataFromMainRequest","refinedFacet","defaultData","root","excludes","_state","extractNormalizedFacetValues","isExcluded","recSort","sortFn","node","children","sortedChildren","newNode","vanillaSortFn","order","getFacetStatsIfAvailable","getRefinement","type","attributeName","resultsFacets","facetDeclaration","splitted","configuredName","getFacetByName","DEFAULT_SORT","getFacetValues","facetValues","getFacetStats","getRefinements","res","numericValue","AlgoliaSearchCore","createAlgoliasearch","exitPromise","MAX_API_KEY_LENGTH","RESET_APP_DATA_TIMER","parseInt","_allowEmptyCredentials","hosts","read","write","_timeouts","timeout","protocol","_checkAppIdData","defaultHosts","_shuffleResult","hostNumber","mainSuffix","dsn","prepareHost","extraHeaders","_cache","_useCache","_useRequestCache","_useFallback","useFallback","host","safeJSONStringify","toJSON","shuffle","temporaryValue","randomIndex","currentIndex","floor","random","removeCredentials","newHeaders","headerName","Object","initIndex","setExtraHeader","getExtraHeader","unsetExtraHeader","addAlgoliaAgent","algoliaAgent","initialOpts","cacheID","requestDebug","tries","usingFallback","hasFallback","_computeRequestHeaders","withApiKey","debugData","doRequest","requester","reqOpts","startTime","isCacheValidWithCurrentID","jsonBody","_getTimeoutsForRequest","_setHostIndexByType","currentHost","_getHostByType","then","success","tryFallback","httpResponse","httpResponseOk","endTime","contentLength","duration","shouldRetry","retryRequest","unrecoverableError","retryRequestWithHigherTimeout","_incrementHostIndex","_incrementTimeoutMultipler","useRequestCache","currentCache","currentCacheID","interopCallbackReturn","catch","maybePromiseForCache","promiseForCache","requestHeaders","userToken","securityTags","queries","postObj","JSONPParams","requestId","strategy","setSecurityTags","tags","strTags","oredTags","j","setUserToken","setRequestTimeout","milliseconds","setTimeouts","getTimeouts","_getAppIdData","_cacheAppIdData","_setAppIdData","lastChange","getTime","now","_resetInitialAppIdData","newData","hostIndexes","timeoutMultiplier","shuffleResult","_hostIndexes","_timeoutMultiplier","_partialAppIdDataUpdate","currentData","_getHostIndexByType","_getTimeoutMultiplier","hostIndex","newHostIndexes","max","requestBuilder","_getQueries","_getHitsSearchParams","_getDisjunctiveFacetSearchParams","_getHitsHierarchicalFacetsAttributes","facetFilters","_getFacetFilters","_getNumericFilters","_getTagFilters","additionalParams","hierarchicalRootLevel","clickAnalytics","_getDisjunctiveHierarchicalFacetAttribute","vs","orFilters","attributeToRefine","attributesIndex","allAttributes","hierarchicalRefinement","newAttributes","rootLevel","parentLevel","getSearchForFacetQuery","maxFacetHits","stateForSearchForFacetValues","searchForFacetSearchParameters","createPlacesClient","qs3","appID","reverse","encoded","flatten","doesClientAgentContainsHelper","setClient","_queryId","_lastQueryIdReceived","derivedHelpers","_currentNbQueries","setCurrentPage","_change","getCurrentPage","currentAgent","getQuery","searchOnce","cb","tempState","emit","_originalResponse","userState","isDisjunctive","algoliaQuery","searchForFacetValuesPromise","facetHits","q","addDisjunctiveRefine","addRefine","addFacetExclusion","addExclude","addTag","removeDisjunctiveRefine","removeRefine","removeFacetExclusion","removeExclude","removeTag","toggleFacetExclusion","toggleExclude","toggleRefine","toggleTag","nextPage","previousPage","setState","getState","getStateAsQueryString","getConfigurationFromQueryString","getForeignConfigurationInQueryString","setStateFromQueryString","triggerChange","configuration","updatedState","overrideStateWithoutTriggeringChangeEvent","hasRefinements","isDisjunctiveRefined","hasTag","hasTagRefinements","getIndex","getPage","getTags","parameterName","conjRefinements","r","excludeRefinements","disjRefinements","mainQueries","states","queriesCount","helper","derivedQueries","derivedHelper","derivedState","queryId","_dispatchAlgoliaResponse","_dispatchAlgoliaError","s","specificResults","formattedResponse","containsRefinement","_hasDisjunctiveRefinements","disjunctiveRefinements","newClient","getClient","derive","pos","hasPendingRequests","arr","newArr","item","itemIndex","window","process","document","documentElement","style","WebkitAppearance","firebug","exception","table","navigator","userAgent","$1","c","lastC","Function","storage","load","DEBUG","localstorage","chrome","local","queryParam","JSONPCounter","cbCalled","head","getElementsByTagName","script","createElement","cbName","done","removeGlobals","clean","ontimeout","readystatechange","async","defer","src","appendChild","removeChild"],"mappings":"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","file":"js/chunk-vendors~047ce45f.8b3ec9b8.js","sourcesContent":["'use strict';\n\nvar reduce = require('lodash/reduce');\nvar find = require('lodash/find');\nvar startsWith = require('lodash/startsWith');\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 * @return {array.} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n return reduce(sortBy, function preparePredicate(out, sortInstruction) {\n var sortInstructions = sortInstruction.split(':');\n if (defaults && sortInstructions.length === 1) {\n var similarDefault = find(defaults, function(predicate) {\n return startsWith(predicate, sortInstruction[0]);\n });\n if (similarDefault) {\n sortInstructions = similarDefault.split(':');\n }\n }\n out[0].push(sortInstructions[0]);\n out[1].push(sortInstructions[1]);\n return out;\n }, [[], []]);\n};\n","'use strict';\n\nmodule.exports = '3.32.0';\n","'use strict';\n\nvar invert = require('lodash/invert');\nvar keys = require('lodash/keys');\n\nvar keys2Short = {\n advancedSyntax: 'aS',\n allowTyposOnNumericTokens: 'aTONT',\n analyticsTags: 'aT',\n analytics: 'a',\n aroundLatLngViaIP: 'aLLVIP',\n aroundLatLng: 'aLL',\n aroundPrecision: 'aP',\n aroundRadius: 'aR',\n attributesToHighlight: 'aTH',\n attributesToRetrieve: 'aTR',\n attributesToSnippet: 'aTS',\n disjunctiveFacetsRefinements: 'dFR',\n disjunctiveFacets: 'dF',\n distinct: 'd',\n facetsExcludes: 'fE',\n facetsRefinements: 'fR',\n facets: 'f',\n getRankingInfo: 'gRI',\n hierarchicalFacetsRefinements: 'hFR',\n hierarchicalFacets: 'hF',\n highlightPostTag: 'hPoT',\n highlightPreTag: 'hPrT',\n hitsPerPage: 'hPP',\n ignorePlurals: 'iP',\n index: 'idx',\n insideBoundingBox: 'iBB',\n insidePolygon: 'iPg',\n length: 'l',\n maxValuesPerFacet: 'mVPF',\n minimumAroundRadius: 'mAR',\n minProximity: 'mP',\n minWordSizefor1Typo: 'mWS1T',\n minWordSizefor2Typos: 'mWS2T',\n numericFilters: 'nF',\n numericRefinements: 'nR',\n offset: 'o',\n optionalWords: 'oW',\n page: 'p',\n queryType: 'qT',\n query: 'q',\n removeWordsIfNoResults: 'rWINR',\n replaceSynonymsInHighlight: 'rSIH',\n restrictSearchableAttributes: 'rSA',\n synonyms: 's',\n tagFilters: 'tF',\n tagRefinements: 'tR',\n typoTolerance: 'tT',\n optionalTagFilters: 'oTF',\n optionalFacetFilters: 'oFF',\n snippetEllipsisText: 'sET',\n disableExactOnAttributes: 'dEOA',\n enableExactOnSingleWordQuery: 'eEOSWQ'\n};\n\nvar short2Keys = invert(keys2Short);\n\nmodule.exports = {\n /**\n * All the keys of the state, encoded.\n * @const\n */\n ENCODED_PARAMETERS: keys(short2Keys),\n /**\n * Decode a shorten attribute\n * @param {string} shortKey the shorten attribute\n * @return {string} the decoded attribute, undefined otherwise\n */\n decode: function(shortKey) {\n return short2Keys[shortKey];\n },\n /**\n * Encode an attribute into a short version\n * @param {string} key the attribute\n * @return {string} the shorten attribute\n */\n encode: function(key) {\n return keys2Short[key];\n }\n};\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 isUndefined = require('lodash/isUndefined');\nvar isString = require('lodash/isString');\nvar isFunction = require('lodash/isFunction');\nvar isEmpty = require('lodash/isEmpty');\nvar defaults = require('lodash/defaults');\n\nvar reduce = require('lodash/reduce');\nvar filter = require('lodash/filter');\nvar omit = require('lodash/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 defaults({}, mod, refinementList);\n },\n /**\n * Removes refinement(s) for an attribute:\n * - if the value is specified removes the refinement for the value on the attribute\n * - if no value is specified removes all the refinements for this attribute\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} [value] the value of the refinement\n * @return {RefinementList} a new and updated refinement lst\n */\n removeRefinement: function removeRefinement(refinementList, attribute, value) {\n if (isUndefined(value)) {\n return lib.clearRefinement(refinementList, attribute);\n }\n\n var valueAsString = '' + value;\n\n return lib.clearRefinement(refinementList, function(v, f) {\n return attribute === f && valueAsString === v;\n });\n },\n /**\n * Toggles the refinement value for an attribute.\n * @param {RefinementList} refinementList the initial list\n * @param {string} attribute the attribute to refine\n * @param {string} value the value of the refinement\n * @return {RefinementList} a new and updated list\n */\n toggleRefinement: function toggleRefinement(refinementList, attribute, value) {\n if (isUndefined(value)) throw new Error('toggleRefinement should be used with a value');\n\n if (lib.isRefined(refinementList, attribute, value)) {\n return lib.removeRefinement(refinementList, attribute, value);\n }\n\n return lib.addRefinement(refinementList, attribute, value);\n },\n /**\n * Clear all or parts of a RefinementList. Depending on the arguments, three\n * kinds of behavior can happen:\n * - if no attribute is provided: clears the whole list\n * - if an attribute is provided as a string: clears the list for the specific attribute\n * - if an attribute is provided as a function: discards the elements for which the function returns true\n * @param {RefinementList} refinementList the initial list\n * @param {string} [attribute] the attribute or function to discard\n * @param {string} [refinementType] optional parameter to give more context to the attribute function\n * @return {RefinementList} a new and updated refinement list\n */\n clearRefinement: function clearRefinement(refinementList, attribute, refinementType) {\n if (isUndefined(attribute)) {\n if (isEmpty(refinementList)) return refinementList;\n return {};\n } else if (isString(attribute)) {\n if (isEmpty(refinementList[attribute])) return refinementList;\n return omit(refinementList, attribute);\n } else if (isFunction(attribute)) {\n var hasChanged = false;\n\n var newRefinementList = reduce(refinementList, function(memo, values, key) {\n var facetList = filter(values, function(value) {\n return !attribute(value, key, refinementType);\n });\n\n if (!isEmpty(facetList)) {\n if (facetList.length !== values.length) hasChanged = true;\n memo[key] = facetList;\n }\n else hasChanged = true;\n\n return memo;\n }, {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\n },\n /**\n * Test if the refinement value is used for the attribute. If no refinement value\n * is provided, test if the refinementList contains any refinement for the\n * given attribute.\n * @param {RefinementList} refinementList the list of refinement\n * @param {string} attribute name of the attribute\n * @param {string} [refinementValue] value of the filter/refinement\n * @return {boolean}\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var indexOf = require('lodash/indexOf');\n\n var containsRefinements = !!refinementList[attribute] &&\n refinementList[attribute].length > 0;\n\n if (isUndefined(refinementValue) || !containsRefinements) {\n return containsRefinements;\n }\n\n var refinementValueAsString = '' + refinementValue;\n\n return indexOf(refinementList[attribute], refinementValueAsString) !== -1;\n }\n};\n\nmodule.exports = lib;\n","module.exports = function deprecatedMessage(previousUsage, newUsage) {\n var githubAnchorLink = previousUsage.toLowerCase()\n .replace(/[\\.\\(\\)]/g, '');\n\n return 'algoliasearch: `' + previousUsage + '` was replaced by `' + newUsage +\n '`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#' + githubAnchorLink;\n};\n","'use strict';\n\nvar forEach = require('lodash/forEach');\nvar filter = require('lodash/filter');\nvar map = require('lodash/map');\nvar isEmpty = require('lodash/isEmpty');\nvar indexOf = require('lodash/indexOf');\n\nfunction filterState(state, filters) {\n var partialState = {};\n var attributeFilters = filter(filters, function(f) { return f.indexOf('attribute:') !== -1; });\n var attributes = map(attributeFilters, function(aF) { return aF.split(':')[1]; });\n\n if (indexOf(attributes, '*') === -1) {\n forEach(attributes, function(attr) {\n if (state.isConjunctiveFacet(attr) && state.isFacetRefined(attr)) {\n if (!partialState.facetsRefinements) partialState.facetsRefinements = {};\n partialState.facetsRefinements[attr] = state.facetsRefinements[attr];\n }\n\n if (state.isDisjunctiveFacet(attr) && state.isDisjunctiveFacetRefined(attr)) {\n if (!partialState.disjunctiveFacetsRefinements) partialState.disjunctiveFacetsRefinements = {};\n partialState.disjunctiveFacetsRefinements[attr] = state.disjunctiveFacetsRefinements[attr];\n }\n\n if (state.isHierarchicalFacet(attr) && state.isHierarchicalFacetRefined(attr)) {\n if (!partialState.hierarchicalFacetsRefinements) partialState.hierarchicalFacetsRefinements = {};\n partialState.hierarchicalFacetsRefinements[attr] = state.hierarchicalFacetsRefinements[attr];\n }\n\n var numericRefinements = state.getNumericRefinements(attr);\n if (!isEmpty(numericRefinements)) {\n if (!partialState.numericRefinements) partialState.numericRefinements = {};\n partialState.numericRefinements[attr] = state.numericRefinements[attr];\n }\n });\n } else {\n if (!isEmpty(state.numericRefinements)) {\n partialState.numericRefinements = state.numericRefinements;\n }\n if (!isEmpty(state.facetsRefinements)) partialState.facetsRefinements = state.facetsRefinements;\n if (!isEmpty(state.disjunctiveFacetsRefinements)) {\n partialState.disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements;\n }\n if (!isEmpty(state.hierarchicalFacetsRefinements)) {\n partialState.hierarchicalFacetsRefinements = state.hierarchicalFacetsRefinements;\n }\n }\n\n var searchParameters = filter(\n filters,\n function(f) {\n return f.indexOf('attribute:') === -1;\n }\n );\n\n forEach(\n searchParameters,\n function(parameterKey) {\n partialState[parameterKey] = state[parameterKey];\n }\n );\n\n return partialState;\n}\n\nmodule.exports = filterState;\n","'use strict';\nvar util = require('util');\nvar events = require('events');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n * - search: when a search is triggered using the `search()` method.\n * - result: when the response is retrieved from Algolia and is processed.\n * This event contains a {@link SearchResults} object and the\n * {@link SearchParameters} corresponding to this answer.\n */\nfunction DerivedHelper(mainHelper, fn) {\n this.main = mainHelper;\n this.fn = fn;\n this.lastResults = null;\n}\n\nutil.inherits(DerivedHelper, events.EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function() {\n this.removeAllListeners();\n this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function(parameters) {\n return this.fn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","var foreach = require('foreach');\n\nmodule.exports = function merge(destination/* , sources */) {\n var sources = Array.prototype.slice.call(arguments);\n\n foreach(sources, function(source) {\n for (var keyName in source) {\n if (source.hasOwnProperty(keyName)) {\n if (typeof destination[keyName] === 'object' && typeof source[keyName] === 'object') {\n destination[keyName] = merge({}, destination[keyName], source[keyName]);\n } else if (source[keyName] !== undefined) {\n destination[keyName] = source[keyName];\n }\n }\n }\n });\n\n return destination;\n};\n","module.exports = function omit(obj, test) {\n var keys = require('object-keys');\n var foreach = require('foreach');\n\n var filtered = {};\n\n foreach(keys(obj), function doFilter(keyName) {\n if (test(keyName) !== true) {\n filtered[keyName] = obj[keyName];\n }\n });\n\n return filtered;\n};\n","'use strict';\n\nvar global = require('global');\nvar Promise = global.Promise || require('es6-promise').Promise;\n\n// This is the standalone browser build entry point\n// Browser implementation of the Algolia Search JavaScript client,\n// using XMLHttpRequest, XDomainRequest and JSONP as fallback\nmodule.exports = function createAlgoliasearch(AlgoliaSearch, uaSuffix) {\n var inherits = require('inherits');\n var errors = require('../errors');\n var inlineHeaders = require('./inline-headers');\n var jsonpRequest = require('./jsonp-request');\n var places = require('../places.js');\n uaSuffix = uaSuffix || '';\n\n if (process.env.NODE_ENV === 'debug') {\n require('debug').enable('algoliasearch*');\n }\n\n function algoliasearch(applicationID, apiKey, opts) {\n var cloneDeep = require('../clone.js');\n\n opts = cloneDeep(opts || {});\n\n opts._ua = opts._ua || algoliasearch.ua;\n\n return new AlgoliaSearchBrowser(applicationID, apiKey, opts);\n }\n\n algoliasearch.version = require('../version.js');\n algoliasearch.ua = 'Algolia for vanilla JavaScript ' + uaSuffix + algoliasearch.version;\n algoliasearch.initPlaces = places(algoliasearch);\n\n // we expose into window no matter how we are used, this will allow\n // us to easily debug any website running algolia\n global.__algolia = {\n debug: require('debug'),\n algoliasearch: algoliasearch\n };\n\n var support = {\n hasXMLHttpRequest: 'XMLHttpRequest' in global,\n hasXDomainRequest: 'XDomainRequest' in global\n };\n\n if (support.hasXMLHttpRequest) {\n support.cors = 'withCredentials' in new XMLHttpRequest();\n }\n\n function AlgoliaSearchBrowser() {\n // call AlgoliaSearch constructor\n AlgoliaSearch.apply(this, arguments);\n }\n\n inherits(AlgoliaSearchBrowser, AlgoliaSearch);\n\n AlgoliaSearchBrowser.prototype._request = function request(url, opts) {\n return new Promise(function wrapRequest(resolve, reject) {\n // no cors or XDomainRequest, no request\n if (!support.cors && !support.hasXDomainRequest) {\n // very old browser, not supported\n reject(new errors.Network('CORS not supported'));\n return;\n }\n\n url = inlineHeaders(url, opts.headers);\n\n var body = opts.body;\n var req = support.cors ? new XMLHttpRequest() : new XDomainRequest();\n var reqTimeout;\n var timedOut;\n var connected = false;\n\n reqTimeout = setTimeout(onTimeout, opts.timeouts.connect);\n // we set an empty onprogress listener\n // so that XDomainRequest on IE9 is not aborted\n // refs:\n // - https://github.com/algolia/algoliasearch-client-js/issues/76\n // - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment\n req.onprogress = onProgress;\n if ('onreadystatechange' in req) req.onreadystatechange = onReadyStateChange;\n req.onload = onLoad;\n req.onerror = onError;\n\n // do not rely on default XHR async flag, as some analytics code like hotjar\n // breaks it and set it to false by default\n if (req instanceof XMLHttpRequest) {\n req.open(opts.method, url, true);\n\n // The Analytics API never accepts Auth headers as query string\n // this option exists specifically for them.\n if (opts.forceAuthHeaders) {\n req.setRequestHeader(\n 'x-algolia-application-id',\n opts.headers['x-algolia-application-id']\n );\n req.setRequestHeader(\n 'x-algolia-api-key',\n opts.headers['x-algolia-api-key']\n );\n }\n } else {\n req.open(opts.method, url);\n }\n\n // headers are meant to be sent after open\n if (support.cors) {\n if (body) {\n if (opts.method === 'POST') {\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Simple_requests\n req.setRequestHeader('content-type', 'application/x-www-form-urlencoded');\n } else {\n req.setRequestHeader('content-type', 'application/json');\n }\n }\n req.setRequestHeader('accept', 'application/json');\n }\n\n if (body) {\n req.send(body);\n } else {\n req.send();\n }\n\n // event object not received in IE8, at least\n // but we do not use it, still important to note\n function onLoad(/* event */) {\n // When browser does not supports req.timeout, we can\n // have both a load and timeout event, since handled by a dumb setTimeout\n if (timedOut) {\n return;\n }\n\n clearTimeout(reqTimeout);\n\n var out;\n\n try {\n out = {\n body: JSON.parse(req.responseText),\n responseText: req.responseText,\n statusCode: req.status,\n // XDomainRequest does not have any response headers\n headers: req.getAllResponseHeaders && req.getAllResponseHeaders() || {}\n };\n } catch (e) {\n out = new errors.UnparsableJSON({\n more: req.responseText\n });\n }\n\n if (out instanceof errors.UnparsableJSON) {\n reject(out);\n } else {\n resolve(out);\n }\n }\n\n function onError(event) {\n if (timedOut) {\n return;\n }\n\n clearTimeout(reqTimeout);\n\n // error event is trigerred both with XDR/XHR on:\n // - DNS error\n // - unallowed cross domain request\n reject(\n new errors.Network({\n more: event\n })\n );\n }\n\n function onTimeout() {\n timedOut = true;\n req.abort();\n\n reject(new errors.RequestTimeout());\n }\n\n function onConnect() {\n connected = true;\n clearTimeout(reqTimeout);\n reqTimeout = setTimeout(onTimeout, opts.timeouts.complete);\n }\n\n function onProgress() {\n if (!connected) onConnect();\n }\n\n function onReadyStateChange() {\n if (!connected && req.readyState > 1) onConnect();\n }\n });\n };\n\n AlgoliaSearchBrowser.prototype._request.fallback = function requestFallback(url, opts) {\n url = inlineHeaders(url, opts.headers);\n\n return new Promise(function wrapJsonpRequest(resolve, reject) {\n jsonpRequest(url, opts, function jsonpRequestDone(err, content) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(content);\n });\n });\n };\n\n AlgoliaSearchBrowser.prototype._promise = {\n reject: function rejectPromise(val) {\n return Promise.reject(val);\n },\n resolve: function resolvePromise(val) {\n return Promise.resolve(val);\n },\n delay: function delayPromise(ms) {\n return new Promise(function resolveOnTimeout(resolve/* , reject*/) {\n setTimeout(resolve, ms);\n });\n },\n all: function all(promises) {\n return Promise.all(promises);\n }\n };\n\n return algoliasearch;\n};\n","'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\n\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n * facets: ['shipping'],\n * disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(result) {\n * console.log(result);\n * });\n * helper.toggleRefine('Movies & TV Shows')\n * .toggleRefine('Free shipping')\n * .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param {AlgoliaSearch} client an AlgoliaSearch client\n * @param {string} index the name of the index to query\n * @param {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @return {AlgoliaSearchHelper}\n */\nfunction algoliasearchHelper(client, index, opts) {\n return new AlgoliaSearchHelper(client, index, opts);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version.js');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\n/**\n * URL tools to generate query string and parse them from/into\n * SearchParameters\n * @member module:algoliasearchHelper.url\n * @type {object} {@link url}\n *\n */\nalgoliasearchHelper.url = require('./src/url');\n\nmodule.exports = algoliasearchHelper;\n","'use strict';\n\nvar keys = require('lodash/keys');\nvar intersection = require('lodash/intersection');\nvar forOwn = require('lodash/forOwn');\nvar forEach = require('lodash/forEach');\nvar filter = require('lodash/filter');\nvar map = require('lodash/map');\nvar reduce = require('lodash/reduce');\nvar omit = require('lodash/omit');\nvar indexOf = require('lodash/indexOf');\nvar isNaN = require('lodash/isNaN');\nvar isEmpty = require('lodash/isEmpty');\nvar isEqual = require('lodash/isEqual');\nvar isUndefined = require('lodash/isUndefined');\nvar isString = require('lodash/isString');\nvar isFunction = require('lodash/isFunction');\nvar find = require('lodash/find');\nvar trim = require('lodash/trim');\n\nvar defaults = require('lodash/defaults');\nvar merge = require('lodash/merge');\n\nvar valToNumber = require('../functions/valToNumber');\n\nvar filterState = require('./filterState');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * like _.find but using _.isEqual to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into\n * @param {any} searchedValue the value we're looking for\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n return find(array, function(currentValue) {\n return isEqual(currentValue, searchedValue);\n });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example SearchParameters of the first query in\n * the instant search demo\n{\n \"query\": \"\",\n \"disjunctiveFacets\": [\n \"customerReviewCount\",\n \"category\",\n \"salePrice_range\",\n \"manufacturer\"\n ],\n \"maxValuesPerFacet\": 30,\n \"page\": 0,\n \"hitsPerPage\": 10,\n \"facets\": [\n \"type\",\n \"shipping\"\n ]\n}\n */\nfunction SearchParameters(newParameters) {\n var params = newParameters ? SearchParameters._parseNumbers(newParameters) : {};\n\n /**\n * Targeted index. This parameter is mandatory.\n * @member {string}\n */\n this.index = params.index || '';\n\n // Query\n /**\n * Query string of the instant search. The empty string is a valid query.\n * @member {string}\n * @see https://www.algolia.com/doc/rest#param-query\n */\n this.query = params.query || '';\n\n // Facets\n /**\n * This attribute contains the list of all the conjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.facets = params.facets || [];\n /**\n * This attribute contains the list of all the disjunctive facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * @member {string[]}\n */\n this.disjunctiveFacets = params.disjunctiveFacets || [];\n /**\n * This attribute contains the list of all the hierarchical facets\n * used. This list will be added to requested facets in the\n * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n * Hierarchical facets are a sub type of disjunctive facets that\n * let you filter faceted attributes hierarchically.\n * @member {string[]|object[]}\n */\n this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n // Refinements\n /**\n * This attribute contains all the filters that need to be\n * applied on the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsRefinements = params.facetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * excluded from the conjunctive facets. Each facet must be properly\n * defined in the `facets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters excluded for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.facetsExcludes = params.facetsExcludes || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the disjunctive facets. Each facet must be properly\n * defined in the `disjunctiveFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n /**\n * This attribute contains all the filters that need to be\n * applied on the numeric attributes.\n *\n * The key is the name of the attribute, and the value is the\n * filters to apply to this attribute.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `numericFilters` attribute.\n * @member {Object.}\n */\n this.numericRefinements = params.numericRefinements || {};\n /**\n * This attribute contains all the tags used to refine the query.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `tagFilters` attribute.\n * @member {string[]}\n */\n this.tagRefinements = params.tagRefinements || [];\n /**\n * This attribute contains all the filters that need to be\n * applied on the hierarchical facets. Each facet must be properly\n * defined in the `hierarchicalFacets` attribute.\n *\n * The key is the name of the facet, and the `FacetList` contains all\n * filters selected for the associated facet name. The FacetList values\n * are structured as a string that contain the values for each level\n * separated by the configured separator.\n *\n * When querying algolia, the values stored in this attribute will\n * be translated into the `facetFilters` attribute.\n * @member {Object.}\n */\n this.hierarchicalFacetsRefinements = params.hierarchicalFacetsRefinements || {};\n\n /**\n * Contains the numeric filters in the raw format of the Algolia API. Setting\n * this parameter is not compatible with the usage of numeric filters methods.\n * @see https://www.algolia.com/doc/javascript#numericFilters\n * @member {string}\n */\n this.numericFilters = params.numericFilters;\n\n /**\n * Contains the tag filters in the raw format of the Algolia API. Setting this\n * parameter is not compatible with the of the add/remove/toggle methods of the\n * tag api.\n * @see https://www.algolia.com/doc/rest#param-tagFilters\n * @member {string}\n */\n this.tagFilters = params.tagFilters;\n\n /**\n * Contains the optional tag filters in the raw format of the Algolia API.\n * @see https://www.algolia.com/doc/rest#param-tagFilters\n * @member {string}\n */\n this.optionalTagFilters = params.optionalTagFilters;\n\n /**\n * Contains the optional facet filters in the raw format of the Algolia API.\n * @see https://www.algolia.com/doc/rest#param-tagFilters\n * @member {string}\n */\n this.optionalFacetFilters = params.optionalFacetFilters;\n\n\n // Misc. parameters\n /**\n * Number of hits to be returned by the search API\n * @member {number}\n * @see https://www.algolia.com/doc/rest#param-hitsPerPage\n */\n this.hitsPerPage = params.hitsPerPage;\n /**\n * Number of values for each faceted attribute\n * @member {number}\n * @see https://www.algolia.com/doc/rest#param-maxValuesPerFacet\n */\n this.maxValuesPerFacet = params.maxValuesPerFacet;\n /**\n * The current page number\n * @member {number}\n * @see https://www.algolia.com/doc/rest#param-page\n */\n this.page = params.page || 0;\n /**\n * How the query should be treated by the search engine.\n * Possible values: prefixAll, prefixLast, prefixNone\n * @see https://www.algolia.com/doc/rest#param-queryType\n * @member {string}\n */\n this.queryType = params.queryType;\n /**\n * How the typo tolerance behave in the search engine.\n * Possible values: true, false, min, strict\n * @see https://www.algolia.com/doc/rest#param-typoTolerance\n * @member {string}\n */\n this.typoTolerance = params.typoTolerance;\n\n /**\n * Number of characters to wait before doing one character replacement.\n * @see https://www.algolia.com/doc/rest#param-minWordSizefor1Typo\n * @member {number}\n */\n this.minWordSizefor1Typo = params.minWordSizefor1Typo;\n /**\n * Number of characters to wait before doing a second character replacement.\n * @see https://www.algolia.com/doc/rest#param-minWordSizefor2Typos\n * @member {number}\n */\n this.minWordSizefor2Typos = params.minWordSizefor2Typos;\n /**\n * Configure the precision of the proximity ranking criterion\n * @see https://www.algolia.com/doc/rest#param-minProximity\n */\n this.minProximity = params.minProximity;\n /**\n * Should the engine allow typos on numerics.\n * @see https://www.algolia.com/doc/rest#param-allowTyposOnNumericTokens\n * @member {boolean}\n */\n this.allowTyposOnNumericTokens = params.allowTyposOnNumericTokens;\n /**\n * Should the plurals be ignored\n * @see https://www.algolia.com/doc/rest#param-ignorePlurals\n * @member {boolean}\n */\n this.ignorePlurals = params.ignorePlurals;\n /**\n * Restrict which attribute is searched.\n * @see https://www.algolia.com/doc/rest#param-restrictSearchableAttributes\n * @member {string}\n */\n this.restrictSearchableAttributes = params.restrictSearchableAttributes;\n /**\n * Enable the advanced syntax.\n * @see https://www.algolia.com/doc/rest#param-advancedSyntax\n * @member {boolean}\n */\n this.advancedSyntax = params.advancedSyntax;\n /**\n * Enable the analytics\n * @see https://www.algolia.com/doc/rest#param-analytics\n * @member {boolean}\n */\n this.analytics = params.analytics;\n /**\n * Tag of the query in the analytics.\n * @see https://www.algolia.com/doc/rest#param-analyticsTags\n * @member {string}\n */\n this.analyticsTags = params.analyticsTags;\n /**\n * Enable the synonyms\n * @see https://www.algolia.com/doc/rest#param-synonyms\n * @member {boolean}\n */\n this.synonyms = params.synonyms;\n /**\n * Should the engine replace the synonyms in the highlighted results.\n * @see https://www.algolia.com/doc/rest#param-replaceSynonymsInHighlight\n * @member {boolean}\n */\n this.replaceSynonymsInHighlight = params.replaceSynonymsInHighlight;\n /**\n * Add some optional words to those defined in the dashboard\n * @see https://www.algolia.com/doc/rest#param-optionalWords\n * @member {string}\n */\n this.optionalWords = params.optionalWords;\n /**\n * Possible values are \"lastWords\" \"firstWords\" \"allOptional\" \"none\" (default)\n * @see https://www.algolia.com/doc/rest#param-removeWordsIfNoResults\n * @member {string}\n */\n this.removeWordsIfNoResults = params.removeWordsIfNoResults;\n /**\n * List of attributes to retrieve\n * @see https://www.algolia.com/doc/rest#param-attributesToRetrieve\n * @member {string}\n */\n this.attributesToRetrieve = params.attributesToRetrieve;\n /**\n * List of attributes to highlight\n * @see https://www.algolia.com/doc/rest#param-attributesToHighlight\n * @member {string}\n */\n this.attributesToHighlight = params.attributesToHighlight;\n /**\n * Code to be embedded on the left part of the highlighted results\n * @see https://www.algolia.com/doc/rest#param-highlightPreTag\n * @member {string}\n */\n this.highlightPreTag = params.highlightPreTag;\n /**\n * Code to be embedded on the right part of the highlighted results\n * @see https://www.algolia.com/doc/rest#param-highlightPostTag\n * @member {string}\n */\n this.highlightPostTag = params.highlightPostTag;\n /**\n * List of attributes to snippet\n * @see https://www.algolia.com/doc/rest#param-attributesToSnippet\n * @member {string}\n */\n this.attributesToSnippet = params.attributesToSnippet;\n /**\n * Enable the ranking informations in the response, set to 1 to activate\n * @see https://www.algolia.com/doc/rest#param-getRankingInfo\n * @member {number}\n */\n this.getRankingInfo = params.getRankingInfo;\n /**\n * Remove duplicates based on the index setting attributeForDistinct\n * @see https://www.algolia.com/doc/rest#param-distinct\n * @member {boolean|number}\n */\n this.distinct = params.distinct;\n /**\n * Center of the geo search.\n * @see https://www.algolia.com/doc/rest#param-aroundLatLng\n * @member {string}\n */\n this.aroundLatLng = params.aroundLatLng;\n /**\n * Center of the search, retrieve from the user IP.\n * @see https://www.algolia.com/doc/rest#param-aroundLatLngViaIP\n * @member {boolean}\n */\n this.aroundLatLngViaIP = params.aroundLatLngViaIP;\n /**\n * Radius of the geo search.\n * @see https://www.algolia.com/doc/rest#param-aroundRadius\n * @member {number}\n */\n this.aroundRadius = params.aroundRadius;\n /**\n * Precision of the geo search.\n * @see https://www.algolia.com/doc/rest#param-aroundPrecision\n * @member {number}\n */\n this.minimumAroundRadius = params.minimumAroundRadius;\n /**\n * Precision of the geo search.\n * @see https://www.algolia.com/doc/rest#param-minimumAroundRadius\n * @member {number}\n */\n this.aroundPrecision = params.aroundPrecision;\n /**\n * Geo search inside a box.\n * @see https://www.algolia.com/doc/rest#param-insideBoundingBox\n * @member {string}\n */\n this.insideBoundingBox = params.insideBoundingBox;\n /**\n * Geo search inside a polygon.\n * @see https://www.algolia.com/doc/rest#param-insidePolygon\n * @member {string}\n */\n this.insidePolygon = params.insidePolygon;\n /**\n * Allows to specify an ellipsis character for the snippet when we truncate the text\n * (added before and after if truncated).\n * The default value is an empty string and we recommend to set it to \"…\"\n * @see https://www.algolia.com/doc/rest#param-insidePolygon\n * @member {string}\n */\n this.snippetEllipsisText = params.snippetEllipsisText;\n /**\n * Allows to specify some attributes name on which exact won't be applied.\n * Attributes are separated with a comma (for example \"name,address\" ), you can also use a\n * JSON string array encoding (for example encodeURIComponent('[\"name\",\"address\"]') ).\n * By default the list is empty.\n * @see https://www.algolia.com/doc/rest#param-disableExactOnAttributes\n * @member {string|string[]}\n */\n this.disableExactOnAttributes = params.disableExactOnAttributes;\n /**\n * Applies 'exact' on single word queries if the word contains at least 3 characters\n * and is not a stop word.\n * Can take two values: true or false.\n * By default, its set to false.\n * @see https://www.algolia.com/doc/rest#param-enableExactOnSingleWordQuery\n * @member {boolean}\n */\n this.enableExactOnSingleWordQuery = params.enableExactOnSingleWordQuery;\n\n // Undocumented parameters, still needed otherwise we fail\n this.offset = params.offset;\n this.length = params.length;\n\n var self = this;\n forOwn(params, function checkForUnknownParameter(paramValue, paramName) {\n if (SearchParameters.PARAMETERS.indexOf(paramName) === -1) {\n self[paramName] = paramValue;\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 = keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function(partialState) {\n // Do not reparse numbers in SearchParameters, they ought to be parsed already\n if (partialState instanceof SearchParameters) return partialState;\n\n var numbers = {};\n\n var numberKeys = [\n 'aroundPrecision',\n 'aroundRadius',\n 'getRankingInfo',\n 'minWordSizefor2Typos',\n 'minWordSizefor1Typo',\n 'page',\n 'maxValuesPerFacet',\n 'distinct',\n 'minimumAroundRadius',\n 'hitsPerPage',\n 'minProximity'\n ];\n\n forEach(numberKeys, function(k) {\n var value = partialState[k];\n if (isString(value)) {\n var parsedValue = parseFloat(value);\n numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n }\n });\n\n // there's two formats of insideBoundingBox, we need to parse\n // the one which is an array of float geo rectangles\n if (Array.isArray(partialState.insideBoundingBox)) {\n numbers.insideBoundingBox = partialState.insideBoundingBox.map(function(geoRect) {\n return geoRect.map(function(value) {\n return parseFloat(value);\n });\n });\n }\n\n if (partialState.numericRefinements) {\n var numericRefinements = {};\n forEach(partialState.numericRefinements, function(operators, attribute) {\n numericRefinements[attribute] = {};\n forEach(operators, function(values, operator) {\n var parsedValues = map(values, function(v) {\n if (Array.isArray(v)) {\n return map(v, function(vPrime) {\n if (isString(vPrime)) {\n return parseFloat(vPrime);\n }\n return vPrime;\n });\n } else if (isString(v)) {\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 forEach(newParameters.hierarchicalFacets, function(facet) {\n if (facet.rootPath) {\n var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n if (currentRefinement.length > 0 && currentRefinement[0].indexOf(facet.rootPath) !== 0) {\n instance = instance.clearRefinements(facet.name);\n }\n\n // get it again in case it has been cleared\n currentRefinement = instance.getHierarchicalRefinement(facet.name);\n if (currentRefinement.length === 0) {\n instance = instance.toggleHierarchicalFacetRefinement(facet.name, facet.rootPath);\n }\n }\n });\n\n return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function(currentState, parameters) {\n var params = parameters || {};\n\n if (currentState.tagFilters && params.tagRefinements && params.tagRefinements.length > 0) {\n return new Error(\n '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n 'an error, if it is really what you want, you should first clear the tags with clearTags method.');\n }\n\n if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n return new Error(\n '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n 'an error, if it is not, you should first clear the tags with clearTags method.');\n }\n\n if (currentState.numericFilters && params.numericRefinements && !isEmpty(params.numericRefinements)) {\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 if (!isEmpty(currentState.numericRefinements) && params.numericFilters) {\n return new Error(\n \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n ' is probably an error, if this is really what you want, you have to first' +\n ' clear the numeric filters.');\n }\n\n return null;\n};\n\nSearchParameters.prototype = {\n constructor: SearchParameters,\n\n /**\n * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n * @method\n * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {SearchParameters}\n */\n clearRefinements: function clearRefinements(attribute) {\n var clear = RefinementList.clearRefinement;\n var patch = {\n numericRefinements: this._clearNumericRefinements(attribute),\n facetsRefinements: clear(this.facetsRefinements, attribute, 'conjunctiveFacet'),\n facetsExcludes: clear(this.facetsExcludes, attribute, 'exclude'),\n disjunctiveFacetsRefinements: clear(this.disjunctiveFacetsRefinements, attribute, 'disjunctiveFacet'),\n hierarchicalFacetsRefinements: clear(this.hierarchicalFacetsRefinements, attribute, 'hierarchicalFacet')\n };\n if (patch.numericRefinements === this.numericRefinements &&\n patch.facetsRefinements === this.facetsRefinements &&\n patch.facetsExcludes === this.facetsExcludes &&\n patch.disjunctiveFacetsRefinements === this.disjunctiveFacetsRefinements &&\n patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements) {\n return this;\n }\n return this.setQueryParameters(patch);\n },\n /**\n * Remove all the refined tags from the SearchParameters\n * @method\n * @return {SearchParameters}\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0) return this;\n\n return this.setQueryParameters({\n tagFilters: undefined,\n tagRefinements: []\n });\n },\n /**\n * Set the index.\n * @method\n * @param {string} index the index name\n * @return {SearchParameters}\n */\n setIndex: function setIndex(index) {\n if (index === this.index) return this;\n\n return this.setQueryParameters({\n index: index\n });\n },\n /**\n * Query setter\n * @method\n * @param {string} newQuery value for the new query\n * @return {SearchParameters}\n */\n setQuery: function setQuery(newQuery) {\n if (newQuery === this.query) return this;\n\n return this.setQueryParameters({\n query: newQuery\n });\n },\n /**\n * Page setter\n * @method\n * @param {number} newPage new page number\n * @return {SearchParameters}\n */\n setPage: function setPage(newPage) {\n if (newPage === this.page) return this;\n\n return this.setQueryParameters({\n page: newPage\n });\n },\n /**\n * Facets setter\n * The facets are the simple facets, used for conjunctive (and) faceting.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n * @return {SearchParameters}\n */\n setFacets: function setFacets(facets) {\n return this.setQueryParameters({\n facets: facets\n });\n },\n /**\n * Disjunctive facets setter\n * Change the list of disjunctive (or) facets the helper chan handle.\n * @method\n * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n * @return {SearchParameters}\n */\n setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n return this.setQueryParameters({\n disjunctiveFacets: facets\n });\n },\n /**\n * HitsPerPage setter\n * Hits per page represents the number of hits retrieved for this query\n * @method\n * @param {number} n number of hits retrieved per page of results\n * @return {SearchParameters}\n */\n setHitsPerPage: function setHitsPerPage(n) {\n if (this.hitsPerPage === n) return this;\n\n return this.setQueryParameters({\n hitsPerPage: n\n });\n },\n /**\n * typoTolerance setter\n * Set the value of typoTolerance\n * @method\n * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n * @return {SearchParameters}\n */\n setTypoTolerance: function setTypoTolerance(typoTolerance) {\n if (this.typoTolerance === typoTolerance) return this;\n\n return this.setQueryParameters({\n typoTolerance: typoTolerance\n });\n },\n /**\n * Add a numeric filter for a given attribute\n * When value is an array, they are combined with OR\n * When value is a single value, it will combined with AND\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number | number[]} value value of the filter\n * @return {SearchParameters}\n * @example\n * // for price = 50 or 40\n * searchparameter.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * searchparameter.addNumericRefinement('size', '=', 38);\n * searchparameter.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function(attribute, operator, v) {\n var value = valToNumber(v);\n\n if (this.isNumericRefined(attribute, operator, value)) return this;\n\n var mod = merge({}, this.numericRefinements);\n\n mod[attribute] = merge({}, mod[attribute]);\n\n if (mod[attribute][operator]) {\n // Array copy\n mod[attribute][operator] = mod[attribute][operator].slice();\n // Add the element. Concat can't be used here because value can be an array.\n mod[attribute][operator].push(value);\n } else {\n mod[attribute][operator] = [value];\n }\n\n return this.setQueryParameters({\n numericRefinements: mod\n });\n },\n /**\n * Get the list of conjunctive refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {string[]} list of refinements\n */\n getConjunctiveRefinements: function(facetName) {\n if (!this.isConjunctiveFacet(facetName)) {\n throw new Error(facetName + ' is not defined in the facets attribute of the helper configuration');\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 throw new Error(\n facetName + ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n );\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 throw new Error(facetName + ' is not defined in the facets attribute of the helper configuration');\n }\n return this.facetsExcludes[facetName] || [];\n },\n\n /**\n * Remove all the numeric filter for a given (attribute, operator)\n * @method\n * @param {string} attribute attribute to set the filter on\n * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n * @param {number} [number] the value to be removed\n * @return {SearchParameters}\n */\n removeNumericRefinement: function(attribute, operator, paramValue) {\n if (paramValue !== undefined) {\n var paramValueAsNumber = valToNumber(paramValue);\n if (!this.isNumericRefined(attribute, operator, paramValueAsNumber)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute && value.op === operator && isEqual(value.val, paramValueAsNumber);\n })\n });\n } else if (operator !== undefined) {\n if (!this.isNumericRefined(attribute, operator)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute && value.op === operator;\n })\n });\n }\n\n if (!this.isNumericRefined(attribute)) return this;\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\n return key === attribute;\n })\n });\n },\n /**\n * Get the list of numeric refinements for a single facet\n * @param {string} facetName name of the attribute used for faceting\n * @return {SearchParameters.OperatorList[]} list of refinements\n */\n getNumericRefinements: function(facetName) {\n return this.numericRefinements[facetName] || {};\n },\n /**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.} refined values\n */\n getNumericRefinement: function(attribute, operator) {\n return this.numericRefinements[attribute] && this.numericRefinements[attribute][operator];\n },\n /**\n * Clear numeric filters.\n * @method\n * @private\n * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n * - If not given, means to clear all the filters.\n * - If `string`, means to clear all refinements for the `attribute` named filter.\n * - If `function`, means to clear all the refinements that return truthy values.\n * @return {Object.}\n */\n _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n if (isUndefined(attribute)) {\n if (isEmpty(this.numericRefinements)) return this.numericRefinements;\n return {};\n } else if (isString(attribute)) {\n if (isEmpty(this.numericRefinements[attribute])) return this.numericRefinements;\n return omit(this.numericRefinements, attribute);\n } else if (isFunction(attribute)) {\n var hasChanged = false;\n var newNumericRefinements = reduce(this.numericRefinements, function(memo, operators, key) {\n var operatorList = {};\n\n forEach(operators, function(values, operator) {\n var outValues = [];\n forEach(values, function(value) {\n var predicateResult = attribute({val: value, op: operator}, key, 'numeric');\n if (!predicateResult) outValues.push(value);\n });\n if (!isEmpty(outValues)) {\n if (outValues.length !== values.length) hasChanged = true;\n operatorList[operator] = outValues;\n }\n else hasChanged = true;\n });\n\n if (!isEmpty(operatorList)) memo[key] = operatorList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\n },\n /**\n * Add a facet to the facets attribute of the helper configuration, if it\n * isn't already present.\n * @method\n * @param {string} facet facet name to add\n * @return {SearchParameters}\n */\n addFacet: function addFacet(facet) {\n if (this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n facets: this.facets.concat([facet])\n });\n },\n /**\n * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n * configuration, if it isn't already present.\n * @method\n * @param {string} facet disjunctive facet name to add\n * @return {SearchParameters}\n */\n addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n if (this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.setQueryParameters({\n disjunctiveFacets: this.disjunctiveFacets.concat([facet])\n });\n },\n /**\n * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n * configuration.\n * @method\n * @param {object} hierarchicalFacet hierarchical facet to add\n * @return {SearchParameters}\n * @throws will throw an error if a hierarchical facet with the same name was already declared\n */\n addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n throw new Error(\n 'Cannot declare two hierarchical facets with the same name: `' + hierarchicalFacet.name + '`');\n }\n\n return this.setQueryParameters({\n hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet])\n });\n },\n /**\n * Add a refinement on a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Exclude a value from a \"normal\" facet\n * @method\n * @param {string} facet attribute to apply the exclusion on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Adds a refinement on a disjunctive facet.\n * @method\n * @param {string} facet attribute to apply the faceting on\n * @param {string} value value of the attribute (will be converted to string)\n * @return {SearchParameters}\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n if (RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * addTagRefinement adds a tag to the list used to filter the results\n * @param {string} tag tag to be added\n * @return {SearchParameters}\n */\n addTagRefinement: function addTagRefinement(tag) {\n if (this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: this.tagRefinements.concat(tag)\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Remove a facet from the facets attribute of the helper configuration, if it\n * is present.\n * @method\n * @param {string} facet facet name to remove\n * @return {SearchParameters}\n */\n removeFacet: function removeFacet(facet) {\n if (!this.isConjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n facets: filter(this.facets, function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet disjunctive facet name to remove\n * @return {SearchParameters}\n */\n removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n if (!this.isDisjunctiveFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n disjunctiveFacets: filter(this.disjunctiveFacets, function(f) {\n return f !== facet;\n })\n });\n },\n /**\n * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n * helper configuration, if it is present.\n * @method\n * @param {string} facet hierarchical facet name to remove\n * @return {SearchParameters}\n */\n removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n if (!this.isHierarchicalFacet(facet)) {\n return this;\n }\n\n return this.clearRefinements(facet).setQueryParameters({\n hierarchicalFacets: filter(this.hierarchicalFacets, function(f) {\n return f.name !== facet;\n })\n });\n },\n /**\n * Remove a refinement set on facet. If a value is provided, it will clear the\n * refinement for the given value, otherwise it will clear all the refinement\n * values for the faceted attribute.\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} [value] value used to filter\n * @return {SearchParameters}\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Remove a negative refinement on a facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Remove a refinement on a disjunctive facet\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {string} value value used to filter\n * @return {SearchParameters}\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Remove a tag from the list of tag refinements\n * @method\n * @param {string} tag the tag to remove\n * @return {SearchParameters}\n */\n removeTagRefinement: function removeTagRefinement(tag) {\n if (!this.isTagRefined(tag)) return this;\n\n var modification = {\n tagRefinements: filter(this.tagRefinements, function(t) { return t !== tag; })\n };\n\n return this.setQueryParameters(modification);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n */\n toggleRefinement: function toggleRefinement(facet, value) {\n return this.toggleFacetRefinement(facet, value);\n },\n /**\n * Generic toggle refinement method to use with facet, disjunctive facets\n * and hierarchical facets\n * @param {string} facet the facet to refine\n * @param {string} value the associated value\n * @return {SearchParameters}\n * @throws will throw an error if the facet is not declared in the settings of the helper\n */\n toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n if (this.isHierarchicalFacet(facet)) {\n return this.toggleHierarchicalFacetRefinement(facet, value);\n } else if (this.isConjunctiveFacet(facet)) {\n return this.toggleConjunctiveFacetRefinement(facet, value);\n } else if (this.isDisjunctiveFacet(facet)) {\n return this.toggleDisjunctiveFacetRefinement(facet, value);\n }\n\n throw new Error('Cannot refine the undeclared facet ' + facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets');\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(this.facetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(this.facetsExcludes, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\n });\n },\n /**\n * Switch the refinement applied over a facet/value\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {SearchParameters}\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration');\n }\n\n var separator = this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(facet));\n\n var mod = {};\n\n var upOneOrMultipleLevel = this.hierarchicalFacetsRefinements[facet] !== undefined &&\n this.hierarchicalFacetsRefinements[facet].length > 0 && (\n // remove current refinement:\n // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0] === value ||\n // remove a parent refinement of the current refinement:\n // - refinement was 'beer > IPA > Flying dog'\n // - call is toggleRefine('beer > IPA')\n // - refinement should be `beer`\n this.hierarchicalFacetsRefinements[facet][0].indexOf(value + separator) === 0\n );\n\n if (upOneOrMultipleLevel) {\n if (value.indexOf(separator) === -1) {\n // go back to root level\n mod[facet] = [];\n } else {\n mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n }\n } else {\n mod[facet] = [value];\n }\n\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaults({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Adds a refinement on a hierarchical facet.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is refined\n */\n addHierarchicalFacetRefinement: function(facet, path) {\n if (this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is already refined.');\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaults({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n\n /**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {SearchParameter} the new state\n * @throws Error if the facet is not defined or if the facet is not refined\n */\n removeHierarchicalFacetRefinement: function(facet) {\n if (!this.isHierarchicalFacetRefined(facet)) {\n throw new Error(facet + ' is not refined.');\n }\n var mod = {};\n mod[facet] = [];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaults({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters}\n */\n toggleTagRefinement: function toggleTagRefinement(tag) {\n if (this.isTagRefined(tag)) {\n return this.removeTagRefinement(tag);\n }\n\n return this.addTagRefinement(tag);\n },\n /**\n * Test if the facet name is from one of the disjunctive facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isDisjunctiveFacet: function(facet) {\n return indexOf(this.disjunctiveFacets, facet) > -1;\n },\n /**\n * Test if the facet name is from one of the hierarchical facets\n * @method\n * @param {string} facetName facet name to test\n * @return {boolean}\n */\n isHierarchicalFacet: function(facetName) {\n return this.getHierarchicalFacetByName(facetName) !== undefined;\n },\n /**\n * Test if the facet name is from one of the conjunctive/normal facets\n * @method\n * @param {string} facet facet name to test\n * @return {boolean}\n */\n isConjunctiveFacet: function(facet) {\n return indexOf(this.facets, 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 throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\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 throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n return RefinementList.isRefined(this.facetsExcludes, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n return RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value);\n },\n /**\n * Returns true if the facet contains a refinement, or if a value passed is a\n * refinement for the facet.\n * @method\n * @param {string} facet name of the attribute for used for faceting\n * @param {string} value optional, will test if the value is used for refinement\n * if there is one, otherwise will test if the facet contains any refinement\n * @return {boolean}\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration');\n }\n\n var refinements = this.getHierarchicalRefinement(facet);\n\n if (!value) {\n return refinements.length > 0;\n }\n\n return indexOf(refinements, 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 (isUndefined(value) && isUndefined(operator)) {\n return !!this.numericRefinements[attribute];\n }\n\n var isOperatorDefined = this.numericRefinements[attribute] &&\n !isUndefined(this.numericRefinements[attribute][operator]);\n\n if (isUndefined(value) || !isOperatorDefined) {\n return isOperatorDefined;\n }\n\n var parsedValue = valToNumber(value);\n var isAttributeValueDefined = !isUndefined(\n findArray(this.numericRefinements[attribute][operator], parsedValue)\n );\n\n return isOperatorDefined && isAttributeValueDefined;\n },\n /**\n * Returns true if the tag refined, false otherwise\n * @method\n * @param {string} tag the tag to check\n * @return {boolean}\n */\n isTagRefined: function isTagRefined(tag) {\n return indexOf(this.tagRefinements, tag) !== -1;\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n // attributes used for numeric filter can also be disjunctive\n var disjunctiveNumericRefinedFacets = intersection(\n keys(this.numericRefinements),\n this.disjunctiveFacets\n );\n\n return keys(this.disjunctiveFacetsRefinements)\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets());\n },\n /**\n * Returns the list of all disjunctive facets refined\n * @method\n * @param {string} facet name of the attribute used for faceting\n * @param {value} value value used for filtering\n * @return {string[]}\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n return intersection(\n // enforce the order between the two arrays,\n // so that refinement name index === hierarchical facet index\n map(this.hierarchicalFacets, 'name'),\n keys(this.hierarchicalFacetsRefinements)\n );\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]}\n */\n getUnrefinedDisjunctiveFacets: function() {\n var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n return filter(this.disjunctiveFacets, function(f) {\n return indexOf(refinedFacets, f) === -1;\n });\n },\n\n managedParameters: [\n 'index',\n 'facets', 'disjunctiveFacets', 'facetsRefinements',\n 'facetsExcludes', 'disjunctiveFacetsRefinements',\n 'numericRefinements', 'tagRefinements', 'hierarchicalFacets', 'hierarchicalFacetsRefinements'\n ],\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n forOwn(this, function(paramValue, paramName) {\n if (indexOf(managedParameters, paramName) === -1 && paramValue !== undefined) {\n queryParams[paramName] = paramValue;\n }\n });\n\n return queryParams;\n },\n /**\n * Let the user retrieve any parameter value from the SearchParameters\n * @param {string} paramName name of the parameter\n * @return {any} the value of the parameter\n */\n getQueryParameter: function getQueryParameter(paramName) {\n if (!this.hasOwnProperty(paramName)) {\n throw new Error(\n \"Parameter '\" + paramName + \"' is not an attribute of SearchParameters \" +\n '(http://algolia.github.io/algoliasearch-helper-js/docs/SearchParameters.html)');\n }\n\n return this[paramName];\n },\n /**\n * Let the user set a specific value for a given parameter. Will return the\n * same instance if the parameter is invalid or if the value is the same as the\n * previous one.\n * @method\n * @param {string} parameter the parameter name\n * @param {any} value the value to be set, must be compliant with the definition\n * of the attribute on the object\n * @return {SearchParameters} the updated state\n */\n setQueryParameter: function setParameter(parameter, value) {\n if (this[parameter] === value) return this;\n\n var modification = {};\n\n modification[parameter] = value;\n\n return this.setQueryParameters(modification);\n },\n /**\n * Let the user set any of the parameters with a plain object.\n * @method\n * @param {object} params all the keys and the values to be updated\n * @return {SearchParameters} a new updated instance\n */\n setQueryParameters: function setQueryParameters(params) {\n if (!params) return this;\n\n var error = SearchParameters.validate(this, params);\n\n if (error) {\n throw error;\n }\n\n var parsedParams = SearchParameters._parseNumbers(params);\n\n return this.mutateMe(function mergeWith(newInstance) {\n var ks = keys(params);\n\n forEach(ks, function(k) {\n newInstance[k] = parsedParams[k];\n });\n\n return newInstance;\n });\n },\n\n /**\n * Returns an object with only the selected attributes.\n * @param {string[]} filters filters to retrieve only a subset of the state. It\n * accepts strings that can be either attributes of the SearchParameters (e.g. hitsPerPage)\n * or attributes of the index with the notation 'attribute:nameOfMyAttribute'\n * @return {object}\n */\n filter: function(filters) {\n return filterState(this, filters);\n },\n /**\n * Helper function to make it easier to build new instances from a mutating\n * function\n * @private\n * @param {function} fn newMutableState -> previousState -> () function that will\n * change the value of the newMutable to the desired state\n * @return {SearchParameters} a new instance with the specified modifications applied\n */\n mutateMe: function mutateMe(fn) {\n var newState = new this.constructor(this);\n\n fn(newState, this);\n return newState;\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSortBy: function(hierarchicalFacet) {\n return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n },\n\n /**\n * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.separator or `>` as default\n */\n _getHierarchicalFacetSeparator: function(hierarchicalFacet) {\n return hierarchicalFacet.separator || ' > ';\n },\n\n /**\n * Helper function to get the hierarchicalFacet prefix path or null\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.rootPath or null as default\n */\n _getHierarchicalRootPath: function(hierarchicalFacet) {\n return hierarchicalFacet.rootPath || null;\n },\n\n /**\n * Helper function to check if we show the parent level of the hierarchicalFacet\n * @private\n * @param {object} hierarchicalFacet\n * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n */\n _getHierarchicalShowParentLevel: function(hierarchicalFacet) {\n if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n return hierarchicalFacet.showParentLevel;\n }\n return true;\n },\n\n /**\n * Helper function to get the hierarchicalFacet by it's name\n * @param {string} hierarchicalFacetName\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function(hierarchicalFacetName) {\n return find(\n this.hierarchicalFacets,\n {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 throw new Error(\n 'Cannot get the breadcrumb of an unknown hierarchical facet: `' + facetName + '`');\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 map(path, trim);\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\n// This file hosts our error definitions\n// We use custom error \"types\" so that we can act on them when we need it\n// e.g.: if error instanceof errors.UnparsableJSON then..\n\nvar inherits = require('inherits');\n\nfunction AlgoliaSearchError(message, extraProperties) {\n var forEach = require('foreach');\n\n var error = this;\n\n // try to get a stacktrace\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else {\n error.stack = (new Error()).stack || 'Cannot get a stacktrace, browser is too old';\n }\n\n this.name = 'AlgoliaSearchError';\n this.message = message || 'Unknown error';\n\n if (extraProperties) {\n forEach(extraProperties, function addToErrorObject(value, key) {\n error[key] = value;\n });\n }\n}\n\ninherits(AlgoliaSearchError, Error);\n\nfunction createCustomError(name, message) {\n function AlgoliaSearchCustomError() {\n var args = Array.prototype.slice.call(arguments, 0);\n\n // custom message not set, use default\n if (typeof args[0] !== 'string') {\n args.unshift(message);\n }\n\n AlgoliaSearchError.apply(this, args);\n this.name = 'AlgoliaSearch' + name + 'Error';\n }\n\n inherits(AlgoliaSearchCustomError, AlgoliaSearchError);\n\n return AlgoliaSearchCustomError;\n}\n\n// late exports to let various fn defs and inherits take place\nmodule.exports = {\n AlgoliaSearchError: AlgoliaSearchError,\n UnparsableJSON: createCustomError(\n 'UnparsableJSON',\n 'Could not parse the incoming response as JSON, see err.more for details'\n ),\n RequestTimeout: createCustomError(\n 'RequestTimeout',\n 'Request timedout before getting a response'\n ),\n Network: createCustomError(\n 'Network',\n 'Network issue, see err.more for details'\n ),\n JSONPScriptFail: createCustomError(\n 'JSONPScriptFail',\n '