{"version":3,"sources":["webpack://CoveoForSitecore/./src/utils/TabUtils.ts","webpack://CoveoForSitecore/./src/ui/scopes/CoveoForSitecoreRankingExpression.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/QueryNodeTreeParserFactory.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/AndNodeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/FalseNodeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/FieldNodeParser.ts","webpack://CoveoForSitecore/./node_modules/dateformat/lib/dateformat.js","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/NotNodeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/OrNodeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/parsers/TrueNodeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/queryNodes/QueryNodeTreeParser.ts","webpack://CoveoForSitecore/./src/resolvers/nodes/QueryRankingNodeExpressionResolver.ts"],"names":["selected","searchInterface","queryStateModel","get","QueryStateModel","attributesEnum","t","element","options","bindings","CoveoForSitecoreRankingExpression","ID","ComponentOptions","initComponentOptions","bind","onRootElement","QueryEvents","buildingQuery","onBuildingQuery","this","shouldAddRankingExpression","scRankingExpression","queryBuilder","advancedExpression","add","trim","scRankingScopeNode","builder","getNodeResolver","parseQueryRankingNode","rankingFunctions","forEach","rankingFunction","push","copyQueryBuilderAttributes","from","to","fromExpressionBuilder","nodeResolver","QueryRankingNodeExpressionResolverFactory","createQueryFilterNodeExpression","logger","isTabCurrentlySelected","scScopeToTab","buildStringOption","buildCustomOption","value","JSON","parse","Component","Initialization","registerAutoCreateComponent","createParser","parser","QueryNodeTreeParser","registerParser","AndNodeParser","FalseNodeParser","FieldNodeParser","Context","fields","NotNodeParser","OrNodeParser","TrueNodeParser","QueryNodeTreeParserFactory","nodeParser","type","node","left","right","fieldHandler","indexDateFormat","fieldValueType","name","parseString","toCoveo","fieldName","operator","fieldValues","QueryUtils","buildFieldExpression","parseFieldValuesFromType","values","map","parseBoolean","parseDate","parseNumber","date","Date","parseInt","replace","dateformat","toString","some","filter","parseEmptyField","global","token","timezone","timezoneClip","dateFormat","mask","utc","gmt","arguments","length","kindOf","test","undefined","isNaN","TypeError","maskSlice","String","masks","slice","_","d","D","m","y","H","M","s","L","o","getTimezoneOffset","W","getWeek","N","getDayOfWeek","flags","dd","pad","ddd","i18n","dayNames","dddd","mm","mmm","monthNames","mmmm","yy","yyyy","h","hh","HH","MM","ss","l","Math","round","tt","T","TT","Z","match","pop","floor","abs","S","val","len","targetThursday","getFullYear","getMonth","getDate","setDate","getDay","firstThursday","ds","setHours","getHours","weekDiff","dow","Array","isArray","call","toLowerCase","operand","parsers","queryNodeParser","exception","error","rankingExpressionFieldsRegex","fieldsHandler","queryRankingNode","QueryBuilder","rankingExpressions","ranking","parsedExpression","expression","modifier","translateRankingExpressionFieldNames","textualRankingExpressions","rankingExpression","matchingExpression","matchingGroup","QueryRankingNodeExpressionResolver"],"mappings":"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","file":"CoveoForSitecoreRankingExpression.min.js","sourcesContent":["import { SearchInterface, QueryStateModel } from 'coveo-search-ui';\r\n\r\nexport function isTabCurrentlySelected(selected: string, searchInterface: SearchInterface): boolean {\r\n return !(!!selected && selected !== searchInterface.queryStateModel.get(QueryStateModel.attributesEnum.t));\r\n}\r\n","import {\r\n Component,\r\n ComponentOptions,\r\n IComponentBindings,\r\n Initialization,\r\n QueryEvents,\r\n QueryBuilder,\r\n IBuildingQueryEventArgs,\r\n} from 'coveo-search-ui';\r\n\r\nimport { isTabCurrentlySelected } from '../../utils/TabUtils';\r\nimport {\r\n IQueryRankingNode,\r\n IQueryRankingNodeExpressionResolver,\r\n QueryRankingNodeExpressionResolverFactory,\r\n} from '../../resolvers/nodes/QueryRankingNodeExpressionResolver';\r\n\r\nexport interface ICoveoForSitecoreRankingExpressionOptions {\r\n scScopeToTab: string;\r\n scRankingExpression: string;\r\n scRankingScopeNode: IQueryRankingNode;\r\n}\r\n\r\nexport class CoveoForSitecoreRankingExpression extends Component {\r\n private nodeResolver: IQueryRankingNodeExpressionResolver;\r\n\r\n static ID = 'ForSitecoreRankingExpression';\r\n\r\n static options: ICoveoForSitecoreRankingExpressionOptions = {\r\n scScopeToTab: ComponentOptions.buildStringOption(),\r\n scRankingExpression: ComponentOptions.buildStringOption(),\r\n scRankingScopeNode: ComponentOptions.buildCustomOption((value) => {\r\n return JSON.parse(value);\r\n }),\r\n };\r\n\r\n constructor(\r\n public element: HTMLElement,\r\n public options: ICoveoForSitecoreRankingExpressionOptions,\r\n public bindings: IComponentBindings\r\n ) {\r\n super(element, CoveoForSitecoreRankingExpression.ID, bindings);\r\n\r\n this.options = ComponentOptions.initComponentOptions(element, CoveoForSitecoreRankingExpression, options);\r\n this.bind.onRootElement(QueryEvents.buildingQuery, this.onBuildingQuery);\r\n }\r\n\r\n private onBuildingQuery(buildingQuery: IBuildingQueryEventArgs): void {\r\n if (this.shouldAddRankingExpression()) {\r\n if (!!this.options.scRankingExpression) {\r\n buildingQuery.queryBuilder.advancedExpression.add(this.options.scRankingExpression.trim());\r\n }\r\n if (!!this.options.scRankingScopeNode) {\r\n const resolver = this.getNodeResolver();\r\n const builder = resolver.parseQueryRankingNode(this.options.scRankingScopeNode);\r\n builder.rankingFunctions.forEach((rankingFunction) =>\r\n buildingQuery.queryBuilder.rankingFunctions.push(rankingFunction)\r\n );\r\n this.copyQueryBuilderAttributes(builder, buildingQuery.queryBuilder);\r\n }\r\n }\r\n }\r\n\r\n private copyQueryBuilderAttributes(from: QueryBuilder, to: QueryBuilder): void {\r\n from.rankingFunctions.forEach((rankingFunction) => to.rankingFunctions.push(rankingFunction));\r\n to.advancedExpression.fromExpressionBuilder(from.advancedExpression);\r\n }\r\n\r\n private getNodeResolver(): IQueryRankingNodeExpressionResolver {\r\n return (\r\n this.nodeResolver ||\r\n (this.nodeResolver = new QueryRankingNodeExpressionResolverFactory().createQueryFilterNodeExpression(\r\n this.logger\r\n ))\r\n );\r\n }\r\n\r\n private shouldAddRankingExpression(): boolean {\r\n return isTabCurrentlySelected(this.options.scScopeToTab, this.searchInterface);\r\n }\r\n}\r\n\r\nInitialization.registerAutoCreateComponent(CoveoForSitecoreRankingExpression);\r\n","import { AndNodeParser } from './parsers/AndNodeParser';\r\nimport { FalseNodeParser } from './parsers/FalseNodeParser';\r\nimport { FieldNodeParser } from './parsers/FieldNodeParser';\r\nimport { NotNodeParser } from './parsers/NotNodeParser';\r\nimport { OrNodeParser } from './parsers/OrNodeParser';\r\nimport { TrueNodeParser } from './parsers/TrueNodeParser';\r\nimport { IQueryNodeTreeParser, QueryNodeTreeParser } from './QueryNodeTreeParser';\r\nimport { Context } from '../../../base/Context';\r\n\r\nimport { Logger } from 'coveo-search-ui';\r\n\r\nexport class QueryNodeTreeParserFactory implements IQueryNodeTreeParserFactory {\r\n createParser(logger: Logger): IQueryNodeTreeParser {\r\n const parser: IQueryNodeTreeParser = new QueryNodeTreeParser(logger);\r\n\r\n parser.registerParser(new AndNodeParser(parser));\r\n parser.registerParser(new FalseNodeParser());\r\n parser.registerParser(new FieldNodeParser(Context.fields));\r\n parser.registerParser(new NotNodeParser(parser));\r\n parser.registerParser(new OrNodeParser(parser));\r\n parser.registerParser(new TrueNodeParser());\r\n\r\n return parser;\r\n }\r\n}\r\n\r\nexport interface IQueryNodeTreeParserFactory {\r\n createParser(logger: Logger): IQueryNodeTreeParser;\r\n}\r\n","import { IRegisterableQueryNodeParser, IQueryNodeParser } from '../QueryNodeParser';\r\nimport { IAndNode } from '../QueryNodeTypes';\r\nexport class AndNodeParser implements IRegisterableQueryNodeParser {\r\n type: string = 'and';\r\n\r\n constructor(private nodeParser: IQueryNodeParser) {}\r\n\r\n parse(node: IAndNode): string {\r\n return `(${this.nodeParser.parse(node.left)} ${this.nodeParser.parse(node.right)})`;\r\n }\r\n}\r\n","import { IFalseNode } from '../QueryNodeTypes';\r\nimport { IRegisterableQueryNodeParser } from '../QueryNodeParser';\r\nexport class FalseNodeParser implements IRegisterableQueryNodeParser {\r\n type: string = 'false';\r\n\r\n parse(node: IFalseNode): string {\r\n return `(NOT @uri)`;\r\n }\r\n}\r\n","import { IRegisterableQueryNodeParser } from '../QueryNodeParser';\r\nimport { ICoveoFieldHandler } from '../../../../handlers/CoveoFieldsHandler';\r\nimport { IFieldNode } from '../QueryNodeTypes';\r\nimport { QueryUtils } from 'coveo-search-ui';\r\n\r\nimport * as dateformat from 'dateformat';\r\n\r\nexport class FieldNodeParser implements IRegisterableQueryNodeParser {\r\n private indexDateFormat = 'yyyy/mm/dd@HH:MM:ss';\r\n type: string = 'field';\r\n\r\n constructor(private fieldHandler: ICoveoFieldHandler) {}\r\n\r\n parse(node: IFieldNode): string {\r\n if (node.fieldValueType.name === 'string') {\r\n return this.parseString(\r\n this.fieldHandler.toCoveo(`@${node.fieldName}`),\r\n node.operator.name,\r\n node.fieldValues\r\n );\r\n } else {\r\n return QueryUtils.buildFieldExpression(\r\n this.fieldHandler.toCoveo(`@${node.fieldName}`),\r\n node.operator.name,\r\n this.parseFieldValuesFromType(node.fieldValueType.name, node.fieldValues)\r\n );\r\n }\r\n }\r\n\r\n parseFieldValuesFromType(type: string, values: any[]): string[] {\r\n switch (type) {\r\n case 'boolean':\r\n return values.map((value) => this.parseBoolean(value));\r\n case 'date':\r\n return values.map((value) => this.parseDate(value));\r\n case 'number':\r\n return values.map((value) => this.parseNumber(value));\r\n default:\r\n return values;\r\n }\r\n }\r\n\r\n parseBoolean(value: any): string {\r\n return !!value ? '1' : '0';\r\n }\r\n\r\n parseDate(value: any): string {\r\n const date = new Date(parseInt(value.replace('/Date(', '')));\r\n return dateformat(date, this.indexDateFormat);\r\n }\r\n\r\n parseNumber(value: any): string {\r\n return value.toString();\r\n }\r\n\r\n parseString(fieldName: any, operator: string, values: string[]): string {\r\n if (values.some((value) => value !== '')) {\r\n return QueryUtils.buildFieldExpression(\r\n `${fieldName}`,\r\n operator,\r\n values.filter((value) => value !== '')\r\n );\r\n } else {\r\n return this.parseEmptyField(fieldName, operator);\r\n }\r\n }\r\n\r\n parseEmptyField(fieldName: string, operator: string): string {\r\n switch (operator) {\r\n case '=':\r\n case '==':\r\n return fieldName;\r\n case '!=':\r\n case '<>':\r\n return `(NOT ${fieldName})`;\r\n default:\r\n throw `Operator \"${operator}\" for field \"${fieldName}\" requires a non-empty value.`;\r\n }\r\n }\r\n}\r\n","/*\r\n * Date Format 1.2.3\r\n * (c) 2007-2009 Steven Levithan \r\n * MIT license\r\n *\r\n * Includes enhancements by Scott Trenda \r\n * and Kris Kowal \r\n *\r\n * Accepts a date, a mask, or a date and a mask.\r\n * Returns a formatted version of the given date.\r\n * The date defaults to the current date/time.\r\n * The mask defaults to dateFormat.masks.default.\r\n */\r\n\r\n(function(global) {\r\n 'use strict';\r\n\r\n var dateFormat = (function() {\r\n var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZWN]|'[^']*'|'[^']*'/g;\r\n var timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\r\n var timezoneClip = /[^-+\\dA-Z]/g;\r\n \r\n // Regexes and supporting functions are cached through closure\r\n return function (date, mask, utc, gmt) {\r\n \r\n // You can't provide utc if you skip other args (use the 'UTC:' mask prefix)\r\n if (arguments.length === 1 && kindOf(date) === 'string' && !/\\d/.test(date)) {\r\n mask = date;\r\n date = undefined;\r\n }\r\n \r\n date = date || new Date;\r\n \r\n if(!(date instanceof Date)) {\r\n date = new Date(date);\r\n }\r\n \r\n if (isNaN(date)) {\r\n throw TypeError('Invalid date');\r\n }\r\n \r\n mask = String(dateFormat.masks[mask] || mask || dateFormat.masks['default']);\r\n \r\n // Allow setting the utc/gmt argument via the mask\r\n var maskSlice = mask.slice(0, 4);\r\n if (maskSlice === 'UTC:' || maskSlice === 'GMT:') {\r\n mask = mask.slice(4);\r\n utc = true;\r\n if (maskSlice === 'GMT:') {\r\n gmt = true;\r\n }\r\n }\r\n \r\n var _ = utc ? 'getUTC' : 'get';\r\n var d = date[_ + 'Date']();\r\n var D = date[_ + 'Day']();\r\n var m = date[_ + 'Month']();\r\n var y = date[_ + 'FullYear']();\r\n var H = date[_ + 'Hours']();\r\n var M = date[_ + 'Minutes']();\r\n var s = date[_ + 'Seconds']();\r\n var L = date[_ + 'Milliseconds']();\r\n var o = utc ? 0 : date.getTimezoneOffset();\r\n var W = getWeek(date);\r\n var N = getDayOfWeek(date);\r\n var flags = {\r\n d: d,\r\n dd: pad(d),\r\n ddd: dateFormat.i18n.dayNames[D],\r\n dddd: dateFormat.i18n.dayNames[D + 7],\r\n m: m + 1,\r\n mm: pad(m + 1),\r\n mmm: dateFormat.i18n.monthNames[m],\r\n mmmm: dateFormat.i18n.monthNames[m + 12],\r\n yy: String(y).slice(2),\r\n yyyy: y,\r\n h: H % 12 || 12,\r\n hh: pad(H % 12 || 12),\r\n H: H,\r\n HH: pad(H),\r\n M: M,\r\n MM: pad(M),\r\n s: s,\r\n ss: pad(s),\r\n l: pad(L, 3),\r\n L: pad(Math.round(L / 10)),\r\n t: H < 12 ? 'a' : 'p',\r\n tt: H < 12 ? 'am' : 'pm',\r\n T: H < 12 ? 'A' : 'P',\r\n TT: H < 12 ? 'AM' : 'PM',\r\n Z: gmt ? 'GMT' : utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''),\r\n o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\r\n S: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10],\r\n W: W,\r\n N: N\r\n };\r\n \r\n return mask.replace(token, function (match) {\r\n if (match in flags) {\r\n return flags[match];\r\n }\r\n return match.slice(1, match.length - 1);\r\n });\r\n };\r\n })();\r\n\r\n dateFormat.masks = {\r\n 'default': 'ddd mmm dd yyyy HH:MM:ss',\r\n 'shortDate': 'm/d/yy',\r\n 'mediumDate': 'mmm d, yyyy',\r\n 'longDate': 'mmmm d, yyyy',\r\n 'fullDate': 'dddd, mmmm d, yyyy',\r\n 'shortTime': 'h:MM TT',\r\n 'mediumTime': 'h:MM:ss TT',\r\n 'longTime': 'h:MM:ss TT Z',\r\n 'isoDate': 'yyyy-mm-dd',\r\n 'isoTime': 'HH:MM:ss',\r\n 'isoDateTime': 'yyyy-mm-dd\\'T\\'HH:MM:sso',\r\n 'isoUtcDateTime': 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'',\r\n 'expiresHeaderFormat': 'ddd, dd mmm yyyy HH:MM:ss Z'\r\n };\r\n\r\n // Internationalization strings\r\n dateFormat.i18n = {\r\n dayNames: [\r\n 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n ],\r\n monthNames: [\r\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'\r\n ]\r\n };\r\n\r\nfunction pad(val, len) {\r\n val = String(val);\r\n len = len || 2;\r\n while (val.length < len) {\r\n val = '0' + val;\r\n }\r\n return val;\r\n}\r\n\r\n/**\r\n * Get the ISO 8601 week number\r\n * Based on comments from\r\n * http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html\r\n *\r\n * @param {Object} `date`\r\n * @return {Number}\r\n */\r\nfunction getWeek(date) {\r\n // Remove time components of date\r\n var targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n\r\n // Change date to Thursday same week\r\n targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3);\r\n\r\n // Take January 4th as it is always in week 1 (see ISO 8601)\r\n var firstThursday = new Date(targetThursday.getFullYear(), 0, 4);\r\n\r\n // Change date to Thursday same week\r\n firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3);\r\n\r\n // Check if daylight-saving-time-switch occurred and correct for it\r\n var ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset();\r\n targetThursday.setHours(targetThursday.getHours() - ds);\r\n\r\n // Number of weeks between target Thursday and first Thursday\r\n var weekDiff = (targetThursday - firstThursday) / (86400000*7);\r\n return 1 + Math.floor(weekDiff);\r\n}\r\n\r\n/**\r\n * Get ISO-8601 numeric representation of the day of the week\r\n * 1 (for Monday) through 7 (for Sunday)\r\n * \r\n * @param {Object} `date`\r\n * @return {Number}\r\n */\r\nfunction getDayOfWeek(date) {\r\n var dow = date.getDay();\r\n if(dow === 0) {\r\n dow = 7;\r\n }\r\n return dow;\r\n}\r\n\r\n/**\r\n * kind-of shortcut\r\n * @param {*} val\r\n * @return {String}\r\n */\r\nfunction kindOf(val) {\r\n if (val === null) {\r\n return 'null';\r\n }\r\n\r\n if (val === undefined) {\r\n return 'undefined';\r\n }\r\n\r\n if (typeof val !== 'object') {\r\n return typeof val;\r\n }\r\n\r\n if (Array.isArray(val)) {\r\n return 'array';\r\n }\r\n\r\n return {}.toString.call(val)\r\n .slice(8, -1).toLowerCase();\r\n};\r\n\r\n\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define(function () {\r\n return dateFormat;\r\n });\r\n } else if (typeof exports === 'object') {\r\n module.exports = dateFormat;\r\n } else {\r\n global.dateFormat = dateFormat;\r\n }\r\n})(this);\r\n","import { IRegisterableQueryNodeParser, IQueryNodeParser } from '../QueryNodeParser';\r\nimport { INotNode } from '../QueryNodeTypes';\r\n\r\nexport class NotNodeParser implements IRegisterableQueryNodeParser {\r\n type: string = 'not';\r\n\r\n constructor(private nodeParser: IQueryNodeParser) {}\r\n\r\n parse(node: INotNode): string {\r\n return `NOT ${this.nodeParser.parse(node.operand)}`;\r\n }\r\n}\r\n","import { IRegisterableQueryNodeParser, IQueryNodeParser } from '../QueryNodeParser';\r\nimport { IOrNode } from '../QueryNodeTypes';\r\n\r\nexport class OrNodeParser implements IRegisterableQueryNodeParser {\r\n type: string = 'or';\r\n\r\n constructor(private nodeParser: IQueryNodeParser) {}\r\n\r\n parse(node: IOrNode): string {\r\n return `(${this.nodeParser.parse(node.left)} OR ${this.nodeParser.parse(node.right)})`;\r\n }\r\n}\r\n","import { IRegisterableQueryNodeParser } from '../QueryNodeParser';\r\nimport { ITrueNode } from '../QueryNodeTypes';\r\n\r\nexport class TrueNodeParser implements IRegisterableQueryNodeParser {\r\n type: string = 'true';\r\n\r\n parse(node: ITrueNode): string {\r\n return '@uri';\r\n }\r\n}\r\n","import { IQueryNode } from './QueryNodeTypes';\r\nimport { IQueryNodeParser, IRegisterableQueryNodeParser } from './QueryNodeParser';\r\nimport { Logger } from 'coveo-search-ui';\r\n\r\nexport class QueryNodeTreeParser implements IQueryNodeTreeParser {\r\n private parsers: { [key: string]: (node: IQueryNode) => string } = {};\r\n\r\n constructor(private logger: Logger) {}\r\n\r\n registerParser(queryNodeParser: IRegisterableQueryNodeParser): void {\r\n this.parsers[queryNodeParser.type] = (node: IQueryNode) => queryNodeParser.parse(node as T);\r\n }\r\n\r\n parse(node: IQueryNode): string {\r\n try {\r\n return this.parsers[node.type](node);\r\n } catch (exception) {\r\n this.logger.error('Error when parsing a query node:', node, exception);\r\n return '';\r\n }\r\n }\r\n}\r\n\r\nexport interface IQueryNodeTreeParser extends IQueryNodeParser {\r\n registerParser(queryNodeParser: IRegisterableQueryNodeParser): void;\r\n}\r\n","import { IQueryNode } from './queryNodes/QueryNodeTypes';\r\nimport { IQueryNodeParser } from './queryNodes/QueryNodeParser';\r\nimport { QueryNodeTreeParserFactory } from './queryNodes/QueryNodeTreeParserFactory';\r\nimport { ICoveoFieldHandler } from '../../handlers/CoveoFieldsHandler';\r\nimport { Context } from '../../base/Context';\r\n\r\nimport { QueryBuilder, IRankingFunction, Logger } from 'coveo-search-ui';\r\n\r\nexport interface IQueryRankingNode {\r\n rankingExpressions: IRankingExpressionNode[];\r\n rankingFunctions: IRankingFunction[];\r\n textualRankingExpressions: ITextualRankingExpression[];\r\n}\r\n\r\nexport interface IRankingExpressionNode {\r\n expression: IQueryNode;\r\n modifier: number;\r\n}\r\n\r\nexport interface ITextualRankingExpression {\r\n expression: string;\r\n}\r\n\r\n/*\r\n Matches \"@[x]\"\" and return x as matching group.\r\n Examples:\r\n * @[blublu] gives \"blublu\".\r\n * @[[blublu]] gives \"[blublu]\"\r\n * @[blublu]] gives \"blublu]\"\r\n*/\r\nconst rankingExpressionFieldsRegex: RegExp = /@\\[(.*?\\]*)\\]/g;\r\n\r\nexport class QueryRankingNodeExpressionResolver implements IQueryRankingNodeExpressionResolver {\r\n constructor(private parser: IQueryNodeParser, private fieldsHandler: ICoveoFieldHandler) {}\r\n\r\n parseQueryRankingNode(queryRankingNode: IQueryRankingNode): QueryBuilder {\r\n const queryBuilder = new QueryBuilder();\r\n queryRankingNode.rankingExpressions.map((ranking) => {\r\n const parsedExpression = this.parser.parse(ranking.expression);\r\n if (parsedExpression !== '') {\r\n queryBuilder.advancedExpression.add(\r\n `$qre(expression:'${parsedExpression}', modifier:${ranking.modifier})`\r\n );\r\n }\r\n });\r\n queryRankingNode.rankingFunctions.forEach((rankingFunction) => {\r\n rankingFunction.expression = this.translateRankingExpressionFieldNames(rankingFunction.expression);\r\n queryBuilder.rankingFunctions.push(rankingFunction);\r\n });\r\n queryRankingNode.textualRankingExpressions\r\n .filter((rankingExpression) => rankingExpression.expression !== '')\r\n .forEach((rankingExpression) => {\r\n queryBuilder.advancedExpression.add(rankingExpression.expression);\r\n });\r\n return queryBuilder;\r\n }\r\n\r\n private translateRankingExpressionFieldNames(expression: string): string {\r\n expression.replace(rankingExpressionFieldsRegex, (matchingExpression, matchingGroup) => {\r\n return this.fieldsHandler.toCoveo(matchingGroup);\r\n });\r\n return expression;\r\n }\r\n}\r\n\r\nexport interface IQueryRankingNodeExpressionResolver {\r\n parseQueryRankingNode(queryRankingNode: IQueryRankingNode): QueryBuilder;\r\n}\r\n\r\nexport class QueryRankingNodeExpressionResolverFactory {\r\n createQueryFilterNodeExpression(logger: Logger): IQueryRankingNodeExpressionResolver {\r\n const parserFactory = new QueryNodeTreeParserFactory();\r\n const parser = parserFactory.createParser(logger);\r\n return new QueryRankingNodeExpressionResolver(parser, Context.fields);\r\n }\r\n}\r\n"],"sourceRoot":""}