{"version":3,"sources":["webpack://CoveoForSitecore/./src/utils/TabUtils.ts","webpack://CoveoForSitecore/./src/ui/scopes/CoveoForSitecoreFilterExpression.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/QueryFilterNodeExpressionResolver.ts"],"names":["selected","searchInterface","queryStateModel","get","QueryStateModel","attributesEnum","t","parseQueryFilterNode","rawValue","JSON","parse","this","unescapeAttributeValue","value","replace","QueryFilterNodeOptions","element","options","bindings","queryFilterNodeFactory","QueryFilterNodeExpressionResolverFactory","CoveoForSitecoreFilterExpression","ID","ComponentOptions","initComponentOptions","bind","onRootElement","QueryEvents","buildingQuery","onBuildingQuery","shouldAddFilterExpression","scAdvancedFilter","queryBuilder","advancedExpression","add","trim","scFilterScopeNode","resultingBuilder","getQueryFilterNodeExpressionResolver","fromExpressionBuilder","exception","logger","error","queryFilterNodeResolver","createQueryFilterNodeExpression","isTabCurrentlySelected","scScopeToTab","buildStringOption","buildCustomOption","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","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","queryFilterNode","Assert","isNotNull","QueryBuilder","advanced","QueryFilterNodeExpressionResolver"],"mappings":"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","file":"CoveoForSitecoreFilterExpression.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 IBuildingQueryEventArgs,\r\n} from 'coveo-search-ui';\r\n\r\nimport { isTabCurrentlySelected } from '../../utils/TabUtils';\r\nimport {\r\n IQueryFilterNode,\r\n IQueryFilterNodeExpressionResolver,\r\n QueryFilterNodeExpressionResolverFactory,\r\n IQueryFilterNodeExpressionResolverFactory,\r\n} from '../../resolvers/nodes/QueryFilterNodeExpressionResolver';\r\n\r\nexport interface ICoveoForSitecoreFilterExpressionOptions {\r\n scScopeToTab: string;\r\n scAdvancedFilter: string;\r\n scFilterScopeNode: IQueryFilterNode;\r\n}\r\n\r\nexport class QueryFilterNodeOptions {\r\n public static parseQueryFilterNode(rawValue: string): IQueryFilterNode {\r\n return JSON.parse(this.unescapeAttributeValue(rawValue));\r\n }\r\n\r\n private static unescapeAttributeValue(value: string): string {\r\n return value\r\n .replace(/</g, '<')\r\n .replace(/&g‌​t;/g, '>')\r\n .replace(/"/g, '\"')\r\n .replace(/&/g, '&');\r\n }\r\n}\r\n\r\nexport class CoveoForSitecoreFilterExpression extends Component {\r\n private queryFilterNodeResolver: IQueryFilterNodeExpressionResolver;\r\n\r\n static ID = 'ForSitecoreFilterExpression';\r\n\r\n static options: ICoveoForSitecoreFilterExpressionOptions = {\r\n scScopeToTab: ComponentOptions.buildStringOption(),\r\n scAdvancedFilter: ComponentOptions.buildStringOption(),\r\n scFilterScopeNode: ComponentOptions.buildCustomOption((value) => {\r\n return QueryFilterNodeOptions.parseQueryFilterNode(value);\r\n }),\r\n };\r\n\r\n constructor(\r\n public element: HTMLElement,\r\n public options: ICoveoForSitecoreFilterExpressionOptions,\r\n public bindings: IComponentBindings,\r\n private queryFilterNodeFactory: IQueryFilterNodeExpressionResolverFactory = new QueryFilterNodeExpressionResolverFactory()\r\n ) {\r\n super(element, CoveoForSitecoreFilterExpression.ID, bindings);\r\n\r\n this.options = ComponentOptions.initComponentOptions(element, CoveoForSitecoreFilterExpression, 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.shouldAddFilterExpression()) {\r\n if (!!this.options.scAdvancedFilter) {\r\n buildingQuery.queryBuilder.advancedExpression.add(this.options.scAdvancedFilter.trim());\r\n }\r\n if (!!this.options.scFilterScopeNode) {\r\n try {\r\n const resolver = this.getQueryFilterNodeExpressionResolver();\r\n const resultingBuilder = resolver.parseQueryFilterNode(this.options.scFilterScopeNode);\r\n buildingQuery.queryBuilder.advancedExpression.fromExpressionBuilder(\r\n resultingBuilder.advancedExpression\r\n );\r\n } catch (exception) {\r\n this.logger.error('Could not parse the query filter node.', exception);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getQueryFilterNodeExpressionResolver(): IQueryFilterNodeExpressionResolver {\r\n return (\r\n this.queryFilterNodeResolver ||\r\n (this.queryFilterNodeResolver = this.queryFilterNodeFactory.createQueryFilterNodeExpression(this.logger))\r\n );\r\n }\r\n\r\n private shouldAddFilterExpression(): boolean {\r\n return isTabCurrentlySelected(this.options.scScopeToTab, this.searchInterface);\r\n }\r\n}\r\n\r\nInitialization.registerAutoCreateComponent(CoveoForSitecoreFilterExpression);\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\n\r\nimport { QueryBuilder, Logger, Assert } from 'coveo-search-ui';\r\n\r\nexport interface IQueryFilterNode {\r\n advanced: IQueryNode;\r\n}\r\n\r\nexport class QueryFilterNodeExpressionResolver implements IQueryFilterNodeExpressionResolver {\r\n constructor(private parser: IQueryNodeParser) {}\r\n\r\n parseQueryFilterNode(queryFilterNode: IQueryFilterNode): QueryBuilder {\r\n Assert.isNotNull(queryFilterNode);\r\n const queryBuilder = new QueryBuilder();\r\n queryBuilder.advancedExpression.add(this.parser.parse(queryFilterNode.advanced));\r\n return queryBuilder;\r\n }\r\n}\r\n\r\nexport interface IQueryFilterNodeExpressionResolver {\r\n parseQueryFilterNode(queryFilterNode: IQueryFilterNode): QueryBuilder;\r\n}\r\n\r\nexport interface IQueryFilterNodeExpressionResolverFactory {\r\n createQueryFilterNodeExpression(logger: Logger): IQueryFilterNodeExpressionResolver;\r\n}\r\n\r\nexport class QueryFilterNodeExpressionResolverFactory implements IQueryFilterNodeExpressionResolverFactory {\r\n createQueryFilterNodeExpression(logger: Logger): IQueryFilterNodeExpressionResolver {\r\n const parserFactory = new QueryNodeTreeParserFactory();\r\n const parser = parserFactory.createParser(logger);\r\n return new QueryFilterNodeExpressionResolver(parser);\r\n }\r\n}\r\n"],"sourceRoot":""}