react-querybuilder
Version:
React Query Builder component for constructing queries and filters, with utilities for executing them in various database and evaluation contexts
1 lines • 331 kB
Source Map (JSON)
{"version":3,"sources":["../src/context/QueryBuilderContext.ts","../src/components/ActionElement.tsx","../src/components/DragHandle.tsx","../src/defaults.ts","../src/components/InlineCombinator.tsx","../src/utils/clsx.ts","../src/components/NotToggle.tsx","../src/messages.ts","../src/redux/QueryBuilderStateContext.ts","../src/redux/_internal.ts","../src/redux/queriesSlice.ts","../src/redux/warningsSlice.ts","../src/hooks/useDeprecatedProps.ts","../src/hooks/useReactDndWarning.ts","../../../utils/react-compiler/react-compiler-runtime.ts","../src/hooks/useStopEventPropagation.ts","../src/utils/arrayUtils.ts","../src/utils/misc.ts","../src/utils/isRuleGroup.ts","../src/utils/convertQuery.ts","../src/utils/defaultValidator.ts","../src/utils/optGroupUtils.ts","../src/utils/filterFieldsByComparator.ts","../src/utils/parseNumber.ts","../src/utils/getParseNumberMethod.ts","../src/utils/formatQuery/utils.ts","../src/utils/formatQuery/defaultRuleProcessorCEL.ts","../src/utils/formatQuery/defaultRuleProcessorMongoDBQuery.ts","../src/utils/formatQuery/defaultRuleProcessorMongoDB.ts","../src/utils/formatQuery/defaultRuleProcessorSpEL.ts","../src/utils/formatQuery/defaultValueProcessorByRule.ts","../src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts","../src/utils/formatQuery/defaultRuleProcessorJSONata.ts","../src/utils/formatQuery/defaultRuleProcessorJsonLogic.ts","../src/utils/formatQuery/defaultRuleProcessorSQL.ts","../src/utils/formatQuery/defaultRuleProcessorParameterized.ts","../src/utils/isRuleOrGroupValid.ts","../src/utils/formatQuery/formatQuery.ts","../src/utils/formatQuery/defaultValueProcessorNL.ts","../src/utils/formatQuery/defaultRuleProcessorNL.ts","../src/utils/formatQuery/index.ts","../src/utils/pathUtils.ts","../src/utils/generateAccessibleDescription.ts","../src/utils/generateID.ts","../src/hooks/usePreferProp.ts","../src/hooks/useMergedContext.ts","../src/components/Rule.tsx","../src/utils/getCompatContextProvider.tsx","../src/utils/getValidationClassNames.ts","../src/utils/getValueSourcesUtil.ts","../src/utils/mergeClassnames.ts","../src/utils/mergeTranslations.ts","../src/utils/objectUtils.ts","../src/utils/prepareQueryObjects.ts","../src/utils/queryTools.ts","../src/utils/regenerateIDs.ts","../src/utils/toOptions.tsx","../src/utils/transformQuery.ts","../src/components/RuleGroup.tsx","../src/components/ShiftActions.tsx","../src/components/ValueEditor.tsx","../src/components/ValueSelector.tsx","../src/hooks/useSelectElementChangeHandler.ts","../src/defaultControlElements.ts","../src/hooks/usePrevious.ts","../src/hooks/useControlledOrUncontrolled.ts","../src/redux/selectors.ts","../src/redux/hooks.ts","../src/components/QueryBuilder.useQueryBuilderSchema.ts","../src/components/QueryBuilder.useQueryBuilderSetup.ts","../src/components/QueryBuilder.useQueryBuilder.ts","../src/components/QueryBuilderInternal.tsx"],"sourcesContent":["import{createContext}from\"react\";export const QueryBuilderContext=/*#__PURE__*/createContext({});","import{jsx}from\"react/jsx-runtime\";export const ActionElement=props=>/* @__PURE__ */jsx(\"button\",{type:\"button\",\"data-testid\":props.testID,disabled:props.disabled&&!props.disabledTranslation,className:props.className,title:props.disabledTranslation&&props.disabled?props.disabledTranslation.title:props.title,onClick:e=>props.handleOnClick(e),children:props.disabledTranslation&&props.disabled?props.disabledTranslation.label:props.label});","import{jsx}from\"react/jsx-runtime\";import{forwardRef}from\"react\";export const DragHandle=/*#__PURE__*/forwardRef((props,dragRef)=>/* @__PURE__ */jsx(\"span\",{\"data-testid\":props.testID,ref:dragRef,className:props.className,title:props.title,children:props.label}));","export const defaultPlaceholderName=\"~\";export const defaultPlaceholderLabel=\"------\";export const defaultPlaceholderFieldName=defaultPlaceholderName;export const defaultPlaceholderFieldLabel=defaultPlaceholderLabel;export const defaultPlaceholderFieldGroupLabel=defaultPlaceholderLabel;export const defaultPlaceholderOperatorName=defaultPlaceholderName;export const defaultPlaceholderOperatorLabel=defaultPlaceholderLabel;export const defaultPlaceholderOperatorGroupLabel=defaultPlaceholderLabel;export const defaultJoinChar=\",\";export const defaultTranslations={fields:{title:\"Fields\",placeholderName:defaultPlaceholderFieldName,placeholderLabel:defaultPlaceholderFieldLabel,placeholderGroupLabel:defaultPlaceholderFieldGroupLabel},operators:{title:\"Operators\",placeholderName:defaultPlaceholderOperatorName,placeholderLabel:defaultPlaceholderOperatorLabel,placeholderGroupLabel:defaultPlaceholderOperatorGroupLabel},value:{title:\"Value\"},removeRule:{label:\"\\u2A2F\",title:\"Remove rule\"},removeGroup:{label:\"\\u2A2F\",title:\"Remove group\"},addRule:{label:\"+ Rule\",title:\"Add rule\"},addGroup:{label:\"+ Group\",title:\"Add group\"},combinators:{title:\"Combinators\"},notToggle:{label:\"Not\",title:\"Invert this group\"},cloneRule:{label:\"\\u29C9\",title:\"Clone rule\"},cloneRuleGroup:{label:\"\\u29C9\",title:\"Clone group\"},shiftActionUp:{label:\"\\u02C4\",title:\"Shift up\"},shiftActionDown:{label:\"\\u02C5\",title:\"Shift down\"},dragHandle:{label:\"\\u205E\\u205E\",title:\"Drag handle\"},lockRule:{label:\"\\u{1F513}\",title:\"Lock rule\"},lockGroup:{label:\"\\u{1F513}\",title:\"Lock group\"},lockRuleDisabled:{label:\"\\u{1F512}\",title:\"Unlock rule\"},lockGroupDisabled:{label:\"\\u{1F512}\",title:\"Unlock group\"},valueSourceSelector:{title:\"Value source\"}};export const defaultOperators=[{name:\"=\",value:\"=\",label:\"=\"},{name:\"!=\",value:\"!=\",label:\"!=\"},{name:\"<\",value:\"<\",label:\"<\"},{name:\">\",value:\">\",label:\">\"},{name:\"<=\",value:\"<=\",label:\"<=\"},{name:\">=\",value:\">=\",label:\">=\"},{name:\"contains\",value:\"contains\",label:\"contains\"},{name:\"beginsWith\",value:\"beginsWith\",label:\"begins with\"},{name:\"endsWith\",value:\"endsWith\",label:\"ends with\"},{name:\"doesNotContain\",value:\"doesNotContain\",label:\"does not contain\"},{name:\"doesNotBeginWith\",value:\"doesNotBeginWith\",label:\"does not begin with\"},{name:\"doesNotEndWith\",value:\"doesNotEndWith\",label:\"does not end with\"},{name:\"null\",value:\"null\",label:\"is null\"},{name:\"notNull\",value:\"notNull\",label:\"is not null\"},{name:\"in\",value:\"in\",label:\"in\"},{name:\"notIn\",value:\"notIn\",label:\"not in\"},{name:\"between\",value:\"between\",label:\"between\"},{name:\"notBetween\",value:\"notBetween\",label:\"not between\"}];export const defaultOperatorNegationMap={\"=\":\"!=\",\"!=\":\"=\",\"<\":\">=\",\"<=\":\">\",\">\":\"<=\",\">=\":\"<\",beginsWith:\"doesNotBeginWith\",doesNotBeginWith:\"beginsWith\",endsWith:\"doesNotEndWith\",doesNotEndWith:\"endsWith\",contains:\"doesNotContain\",doesNotContain:\"contains\",between:\"notBetween\",notBetween:\"between\",in:\"notIn\",notIn:\"in\",notNull:\"null\",null:\"notNull\"};export const defaultCombinators=[{name:\"and\",value:\"and\",label:\"AND\"},{name:\"or\",value:\"or\",label:\"OR\"}];export const defaultCombinatorsExtended=[...defaultCombinators,{name:\"xor\",value:\"xor\",label:\"XOR\"}];export const standardClassnames={queryBuilder:\"queryBuilder\",ruleGroup:\"ruleGroup\",header:\"ruleGroup-header\",body:\"ruleGroup-body\",combinators:\"ruleGroup-combinators\",addRule:\"ruleGroup-addRule\",addGroup:\"ruleGroup-addGroup\",cloneRule:\"rule-cloneRule\",cloneGroup:\"ruleGroup-cloneGroup\",removeGroup:\"ruleGroup-remove\",notToggle:\"ruleGroup-notToggle\",rule:\"rule\",fields:\"rule-fields\",operators:\"rule-operators\",value:\"rule-value\",removeRule:\"rule-remove\",betweenRules:\"betweenRules\",valid:\"queryBuilder-valid\",invalid:\"queryBuilder-invalid\",shiftActions:\"shiftActions\",dndDragging:\"dndDragging\",dndOver:\"dndOver\",dndCopy:\"dndCopy\",dragHandle:\"queryBuilder-dragHandle\",disabled:\"queryBuilder-disabled\",lockRule:\"rule-lock\",lockGroup:\"ruleGroup-lock\",valueSource:\"rule-valueSource\",valueListItem:\"rule-value-list-item\",branches:\"queryBuilder-branches\"};export const defaultControlClassnames={queryBuilder:\"\",ruleGroup:\"\",header:\"\",body:\"\",combinators:\"\",addRule:\"\",addGroup:\"\",cloneRule:\"\",cloneGroup:\"\",removeGroup:\"\",notToggle:\"\",rule:\"\",fields:\"\",operators:\"\",value:\"\",removeRule:\"\",shiftActions:\"\",dragHandle:\"\",lockRule:\"\",lockGroup:\"\",valueSource:\"\",actionElement:\"\",valueSelector:\"\",betweenRules:\"\",valid:\"\",invalid:\"\",dndDragging:\"\",dndOver:\"\",dndCopy:\"\",disabled:\"\",valueListItem:\"\",branches:\"\"};export const groupInvalidReasons={empty:\"empty\",invalidCombinator:\"invalid combinator\",invalidIndependentCombinators:\"invalid independent combinators\"};export const TestID={rule:\"rule\",ruleGroup:\"rule-group\",inlineCombinator:\"inline-combinator\",addGroup:\"add-group\",removeGroup:\"remove-group\",cloneGroup:\"clone-group\",cloneRule:\"clone-rule\",addRule:\"add-rule\",removeRule:\"remove-rule\",combinators:\"combinators\",fields:\"fields\",operators:\"operators\",valueEditor:\"value-editor\",notToggle:\"not-toggle\",shiftActions:\"shift-actions\",dragHandle:\"drag-handle\",lockRule:\"lock-rule\",lockGroup:\"lock-group\",valueSourceSelector:\"value-source-selector\"};export const LogType={parentPathDisabled:\"action aborted: parent path disabled\",pathDisabled:\"action aborted: path is disabled\",queryUpdate:\"query updated\",onAddRuleFalse:\"onAddRule callback returned false\",onAddGroupFalse:\"onAddGroup callback returned false\",onMoveRuleFalse:\"onMoveRule callback returned false\",onMoveGroupFalse:\"onMoveGroup callback returned false\",onRemoveFalse:\"onRemove callback returned false\",add:\"rule or group added\",remove:\"rule or group removed\",update:\"rule or group updated\",move:\"rule or group moved\"};export const rootPath=[];","import{jsx}from\"react/jsx-runtime\";import{standardClassnames,TestID}from\"../defaults\";import{clsx}from\"../utils/clsx\";export const InlineCombinator=allProps=>{const{component:CombinatorSelectorComponent,...props}=allProps;const className=clsx(props.schema.suppressStandardClassnames||standardClassnames.betweenRules,props.schema.classNames.betweenRules);return/* @__PURE__ */jsx(\"div\",{className,\"data-testid\":TestID.inlineCombinator,children:/* @__PURE__ */jsx(CombinatorSelectorComponent,{...props,testID:TestID.combinators})});};","function toVal(mix){let k;let y;let str=\"\";if(typeof mix===\"string\"||typeof mix===\"number\"){str+=mix;}else if(typeof mix===\"object\"){if(Array.isArray(mix)){const len=mix.length;for(k=0;k<len;k++){if(mix[k]&&(y=toVal(mix[k]))){str&&(str+=\" \");str+=y;}}}else{for(y in mix){if(mix[y]){str&&(str+=\" \");str+=y;}}}}return str;}export function clsx(){let i=0;let tmp;let x;let str=\"\";const len=arguments.length;for(;i<len;i++){if((tmp=i<0||arguments.length<=i?undefined:arguments[i])&&(x=toVal(tmp))){str&&(str+=\" \");str+=x;}}return str;}export default clsx;","import{jsx,jsxs}from\"react/jsx-runtime\";export const NotToggle=props=>/* @__PURE__ */jsxs(\"label\",{\"data-testid\":props.testID,className:props.className,title:props.title,children:[/* @__PURE__ */jsx(\"input\",{type:\"checkbox\",onChange:e=>props.handleOnChange(e.target.checked),checked:!!props.checked,disabled:props.disabled}),props.label]});","export const messages={errorInvalidIndependentCombinatorsProp:\"QueryBuilder was rendered with a truthy independentCombinators prop. This prop is deprecated and unnecessary. Furthermore, the initial query/defaultQuery prop was of type RuleGroupType instead of type RuleGroupIC. More info: https://react-querybuilder.js.org/docs/components/querybuilder#independent-combinators\",errorUnnecessaryIndependentCombinatorsProp:\"QueryBuilder was rendered with the deprecated and unnecessary independentCombinators prop. To use independent combinators, make sure the query/defaultQuery prop is of type RuleGroupIC when the component mounts. More info: https://react-querybuilder.js.org/docs/components/querybuilder#independent-combinators\",errorDeprecatedRuleGroupProps:\"A custom RuleGroup component has rendered a standard RuleGroup component with deprecated props. The combinator, not, and rules props should not be used. Instead, the full group object should be passed as the ruleGroup prop.\",errorDeprecatedRuleProps:\"A custom RuleGroup component has rendered a standard Rule component with deprecated props. The field, operator, value, and valueSource props should not be used. Instead, the full rule object should be passed as the rule prop.\",errorBothQueryDefaultQuery:\"QueryBuilder was rendered with both query and defaultQuery props. QueryBuilder must be either controlled or uncontrolled (specify either the query prop, or the defaultQuery prop, but not both). Decide between using a controlled or uncontrolled query builder and remove one of these props. More info: https://reactjs.org/link/controlled-components\",errorUncontrolledToControlled:\"QueryBuilder is changing from an uncontrolled component to be controlled. This is likely caused by the query changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled query builder for the lifetime of the component. More info: https://reactjs.org/link/controlled-components\",errorControlledToUncontrolled:\"QueryBuilder is changing from a controlled component to be uncontrolled. This is likely caused by the query changing from defined to undefined, which should not happen. Decide between using a controlled or uncontrolled query builder for the lifetime of the component. More info: https://reactjs.org/link/controlled-components\",errorEnabledDndWithoutReactDnD:\"QueryBuilder was rendered with the enableDragAndDrop prop set to true, but either react-dnd or react-dnd-html5-backend (or both) was not installed. To enable drag-and-drop functionality, install both packages and wrap QueryBuilder in QueryBuilderDnD from @react-querybuilder/dnd.\"};","import*as React from\"react\";export const QueryBuilderStateContext=/*#__PURE__*/React.createContext(null);","import{createDispatchHook,createStoreHook}from\"react-redux\";import{queriesSlice}from\"./queriesSlice\";import{QueryBuilderStateContext}from\"./QueryBuilderStateContext\";import{warningsSlice}from\"./warningsSlice\";export const _RQB_INTERNAL_dispatchThunk=_ref=>{let{payload,onQueryChange}=_ref;return dispatch=>{dispatch(queriesSlice.actions.setQueryState(payload));if(typeof onQueryChange===\"function\"){onQueryChange(payload.query/* ??? */);}};};export const useRQB_INTERNAL_QueryBuilderDispatch=createDispatchHook(QueryBuilderStateContext);export const useRQB_INTERNAL_QueryBuilderStore=createStoreHook(QueryBuilderStateContext);const{rqbWarn:_SYNC_rqbWarn}=warningsSlice.actions;export const rqbWarn=msg=>dispatch=>{setTimeout(()=>dispatch(_SYNC_rqbWarn(msg)));};const preloadedState={queries:queriesSlice.getInitialState(),warnings:warningsSlice.getInitialState()};export const storeCommon={reducer:{queries:queriesSlice.reducer,warnings:warningsSlice.reducer},preloadedState,middleware:getDefaultMiddleware=>getDefaultMiddleware({// Ignore non-serializable values in setQueryState actions and rule `value`s\n// https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data\nserializableCheck:{ignoredActions:[queriesSlice.actions.setQueryState.type],ignoredPaths:[/^queries\\b.*\\.rules\\.\\d+\\.value$/]}})};","import{createSlice}from\"@reduxjs/toolkit\";export const initialState={};export const queriesSlice=createSlice({name:\"queries\",initialState,reducers:{setQueryState:(state,_ref)=>{let{payload:{qbId,query}}=_ref;state[qbId]=query;}},selectors:{getQuerySelectorById:(state,qbId)=>state[qbId]}});","import{createSlice}from\"@reduxjs/toolkit\";import{messages}from\"../messages\";export const initialState={[messages.errorInvalidIndependentCombinatorsProp]:false,[messages.errorUnnecessaryIndependentCombinatorsProp]:false,[messages.errorDeprecatedRuleGroupProps]:false,[messages.errorDeprecatedRuleProps]:false,[messages.errorBothQueryDefaultQuery]:false,[messages.errorUncontrolledToControlled]:false,[messages.errorControlledToUncontrolled]:false,[messages.errorEnabledDndWithoutReactDnD]:false};export const warningsSlice=createSlice({name:\"warnings\",initialState,reducers:{rqbWarn:(state,_ref)=>{let{payload}=_ref;if(!state[payload]){console.error(payload);state[payload]=true;}}}});","import{messages}from\"../messages\";import{rqbWarn,useRQB_INTERNAL_QueryBuilderDispatch}from\"../redux/_internal\";function useDeprecatedProps(type,logWarning,otherParams){const dispatch=useRQB_INTERNAL_QueryBuilderDispatch();if(process.env.NODE_ENV!==\"production\"&&logWarning){if(type===\"independentCombinators\"){if(otherParams===\"invalid\"){dispatch(rqbWarn(messages.errorInvalidIndependentCombinatorsProp));}if(otherParams===\"unnecessary\"){dispatch(rqbWarn(messages.errorUnnecessaryIndependentCombinatorsProp));}}if(type===\"rule\"){dispatch(rqbWarn(messages.errorDeprecatedRuleProps));}if(type===\"ruleGroup\"){dispatch(rqbWarn(messages.errorDeprecatedRuleGroupProps));}}}export{useDeprecatedProps};","import{messages}from\"../messages\";let didWarnEnabledDndWithoutReactDnD=false;export const useReactDndWarning=(enableDragAndDrop,dndRefs)=>{if(process.env.NODE_ENV!==\"production\"&&!didWarnEnabledDndWithoutReactDnD&&enableDragAndDrop&&!dndRefs){console.error(messages.errorEnabledDndWithoutReactDnD);didWarnEnabledDndWithoutReactDnD=true;}};","import*as React from\"react\";const $empty=Symbol.for(\"react.memo_cache_sentinel\");export function c(size){return React.useMemo(()=>{const $=Array.from({length:size});for(let ii=0;ii<size;ii++){$[ii]=$empty;}$[$empty]=true;return $;},// eslint-disable-next-line react-hooks/exhaustive-deps\n[]);}","import{c as _c}from\"react-compiler-runtime\";import{useCallback}from\"react\";export const useStopEventPropagation=method=>{const $=_c(2);let t0;if($[0]!==method){t0=(event,context)=>{event?.preventDefault();event?.stopPropagation();method(event,context);};$[0]=method;$[1]=t0;}else{t0=$[1];}return t0;};","import{defaultJoinChar}from\"../defaults\";export const splitBy=function(str){let splitChar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:defaultJoinChar;return typeof str===\"string\"?str.split(`\\\\${splitChar}`).map(c=>c.split(splitChar)).reduce((prev,curr,idx)=>{if(idx===0){return curr;}return[...prev.slice(0,-1),`${prev.at(-1)}${splitChar}${curr[0]}`,...curr.slice(1)];},[]):[];};export const joinWith=function(strArr){let joinChar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:defaultJoinChar;return strArr.map(str=>`${str??\"\"}`.replaceAll(joinChar[0],`\\\\${joinChar[0]}`)).join(joinChar);};export const trimIfString=val=>typeof val===\"string\"?val.trim():val;export const toArray=function(v){let{retainEmptyStrings}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return Array.isArray(v)?v.map(v2=>trimIfString(v2)):typeof v===\"string\"?splitBy(v,defaultJoinChar).filter(retainEmptyStrings?()=>true:s=>!/^\\s*$/.test(s)).map(s=>s.trim()):typeof v===\"number\"?[v]:[];};export const nullFreeArray=arr=>arr.every(el=>el===false||(el??false)!==false);","import{numericRegex as numericQuantityRegex}from\"numeric-quantity\";export const numericRegex=new RegExp(numericQuantityRegex.source.replace(/^\\^/,String.raw`^\\s*`).replace(/\\$$/,String.raw`\\s*$`));export const isPojo=obj=>obj===null||typeof obj!==\"object\"?false:Object.getPrototypeOf(obj)===Object.prototype;","import{isPojo}from\"./misc\";export const isRuleGroup=rg=>isPojo(rg)&&Array.isArray(rg.rules);export const isRuleGroupType=rg=>isRuleGroup(rg)&&typeof rg.combinator===\"string\";export const isRuleGroupTypeIC=rg=>isRuleGroup(rg)&&rg.combinator===void 0;","import{produce}from\"immer\";import{isRuleGroup,isRuleGroupType,isRuleGroupTypeIC}from\"./isRuleGroup\";const combinatorLevels=[\"or\",\"xor\",\"and\"];const isSameString=(a,b)=>typeof a===\"string\"&&a.toLowerCase()===b;const generateRuleGroupICWithConsistentCombinators=function(rg){let baseCombinatorLevel=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;const baseCombinator=combinatorLevels[baseCombinatorLevel];if(!rg.rules.includes(baseCombinator)){return baseCombinatorLevel<combinatorLevels.length-2?generateRuleGroupICWithConsistentCombinators(rg,baseCombinatorLevel+1):rg;}return produce(rg,draft=>{let cursor=0;while(cursor<draft.rules.length-2){if(isSameString(draft.rules[cursor+1],baseCombinator)){cursor+=2;continue;}const nextBaseCombinatorIndex=draft.rules.findIndex((r,i)=>i>cursor&&typeof r===\"string\"&&r.toLowerCase()===baseCombinator);if(nextBaseCombinatorIndex===-1){draft.rules.splice(cursor,draft.rules.length,generateRuleGroupICWithConsistentCombinators(// eslint-disable-next-line @typescript-eslint/no-explicit-any\n{rules:draft.rules.slice(cursor)},baseCombinatorLevel+1));break;}else{draft.rules.splice(cursor,nextBaseCombinatorIndex-cursor,generateRuleGroupICWithConsistentCombinators(// eslint-disable-next-line @typescript-eslint/no-explicit-any\n{rules:draft.rules.slice(cursor,nextBaseCombinatorIndex)},baseCombinatorLevel+1));}}});};export const convertFromIC=rg=>{if(isRuleGroupType(rg)){return rg;}const processedRG=generateRuleGroupICWithConsistentCombinators(rg);const rulesAsMixedList=processedRG.rules.map(r=>typeof r===\"string\"||!isRuleGroup(r)?r:convertFromIC(r));const combinator=rulesAsMixedList.length<2?\"and\":rulesAsMixedList[1];const rules=rulesAsMixedList.filter(r=>typeof r!==\"string\");return{...processedRG,combinator,rules};};export const convertToIC=rg=>{if(isRuleGroupTypeIC(rg)){return rg;}const{combinator,...queryWithoutCombinator}=rg;const rules=[];const{length}=rg.rules;for(const[idx,r]of rg.rules.entries()){if(isRuleGroup(r)){rules.push(convertToIC(r));}else{rules.push(r);}if(combinator&&idx<length-1){rules.push(combinator);}}return{...queryWithoutCombinator,rules};};function convertQuery(query){return isRuleGroupTypeIC(query)?convertFromIC(query):convertToIC(query);}export{convertQuery};","import{defaultCombinators,groupInvalidReasons}from\"../defaults\";import{isRuleGroup,isRuleGroupType}from\"./isRuleGroup\";export const defaultValidator=query=>{const result={};const validateRule=_rule=>{};const validateGroup=rg=>{const reasons=[];if(rg.rules.length===0){reasons.push(groupInvalidReasons.empty);}else if(!isRuleGroupType(rg)){let invalidICs=false;for(let i=0;i<rg.rules.length&&!invalidICs;i++){if(i%2===0&&typeof rg.rules[i]===\"string\"||i%2===1&&typeof rg.rules[i]!==\"string\"||i%2===1&&typeof rg.rules[i]===\"string\"&&!defaultCombinators.map(c=>c.name).includes(rg.rules[i])){invalidICs=true;}}if(invalidICs){reasons.push(groupInvalidReasons.invalidIndependentCombinators);}}if(isRuleGroupType(rg)&&!defaultCombinators.map(c=>c.name).includes(rg.combinator)&&rg.rules.length>1){reasons.push(groupInvalidReasons.invalidCombinator);}if(rg.id){result[rg.id]=reasons.length>0?{valid:false,reasons}:true;}for(const r of rg.rules){if(typeof r===\"string\"){}else if(isRuleGroup(r)){validateGroup(r);}else{validateRule(r);}}};validateGroup(query);return result;};","import{produce}from\"immer\";import{isPojo}from\"./misc\";const isOptionWithName=opt=>isPojo(opt)&&\"name\"in opt&&typeof opt.name===\"string\";const isOptionWithValue=opt=>isPojo(opt)&&\"value\"in opt&&typeof opt.value===\"string\";export function toFullOption(opt,baseProperties){const recipe=produce(draft=>{const idObj={};let needsUpdating=!!baseProperties;if(isOptionWithName(draft)&&!isOptionWithValue(draft)){idObj.value=draft.name;needsUpdating=true;}else if(!isOptionWithName(draft)&&isOptionWithValue(draft)){idObj.name=draft.value;needsUpdating=true;}if(needsUpdating){return Object.assign({},baseProperties,draft,idObj);}});return recipe(opt);}export function toFullOptionList(optList,baseProperties){if(!Array.isArray(optList)){return[];}const recipe=produce(draft=>{if(isFlexibleOptionGroupArray(draft)){for(const optGroup of draft){for(const[idx,opt]of optGroup.options.entries())optGroup.options[idx]=toFullOption(opt,baseProperties);}}else{for(const[idx,opt]of draft.entries())draft[idx]=toFullOption(opt,baseProperties);}});return recipe(optList);}export function toFullOptionMap(optMap,baseProperties){return Object.fromEntries(Object.entries(optMap).map(_ref=>{let[k,v]=_ref;return[k,toFullOption(v,baseProperties)];}));}export const uniqByName=originalArray=>uniqByIdentifier(originalArray);export const uniqByIdentifier=originalArray=>{const names=/* @__PURE__ */new Set();const newArray=[];for(const el of originalArray){if(!names.has(el.value??el.name)){names.add(el.value??el.name);newArray.push(el);}}return originalArray.length===newArray.length?originalArray:newArray;};export const isOptionGroupArray=arr=>Array.isArray(arr)&&arr.length>0&&isPojo(arr[0])&&\"options\"in arr[0]&&Array.isArray(arr[0].options);export const isFlexibleOptionArray=arr=>{let isFOA=false;if(Array.isArray(arr)){for(const o of arr){if(isOptionWithName(o)||isOptionWithValue(o)){isFOA=true;}else{return false;}}}return isFOA;};export const isFullOptionArray=arr=>{let isFOA=false;if(Array.isArray(arr)){for(const o of arr){if(isOptionWithName(o)&&isOptionWithValue(o)){isFOA=true;}else{return false;}}}return isFOA;};export const isFlexibleOptionGroupArray=function(arr){let{allowEmpty=false}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let isFOGA=false;if(Array.isArray(arr)){for(const og of arr){if(isPojo(og)&&\"options\"in og&&(isFlexibleOptionArray(og.options)||allowEmpty&&Array.isArray(og.options)&&og.options.length===0)){isFOGA=true;}else{return false;}}}return isFOGA;};export const isFullOptionGroupArray=function(arr){let{allowEmpty=false}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let isFOGA=false;if(Array.isArray(arr)){for(const og of arr){if(isPojo(og)&&\"options\"in og&&(isFullOptionArray(og.options)||allowEmpty&&Array.isArray(og.options)&&og.options.length===0)){isFOGA=true;}else{return false;}}}return isFOGA;};export const getOption=(arr,name)=>(isFlexibleOptionGroupArray(arr,{allowEmpty:true})?arr.flatMap(og=>og.options):arr).find(op=>op.value===name||op.name===name);export const getFirstOption=arr=>{if(!Array.isArray(arr)||arr.length===0){return null;}else if(isFlexibleOptionGroupArray(arr,{allowEmpty:true})){for(const og of arr){if(og.options.length>0){return og.options[0].value??og.options[0].name;}}return null;}return arr[0].value??arr[0].name;};export const toFlatOptionArray=arr=>uniqByIdentifier(isOptionGroupArray(arr)?arr.flatMap(og=>og.options):arr);export const uniqOptGroups=originalArray=>{const labels=/* @__PURE__ */new Set();const names=/* @__PURE__ */new Set();const newArray=[];for(const el of originalArray){if(!labels.has(el.label)){labels.add(el.label);const optionsForThisGroup=[];for(const opt of el.options){if(!names.has(opt.value??opt.name)){names.add(opt.value??opt.name);optionsForThisGroup.push(toFullOption(opt));}}newArray.push({...el,options:optionsForThisGroup});}}return newArray;};export const uniqOptList=originalArray=>{if(isFlexibleOptionGroupArray(originalArray)){return uniqOptGroups(originalArray);}return uniqByIdentifier(originalArray.map(o=>toFullOption(o)));};","import{isFlexibleOptionGroupArray,toFullOption}from\"./optGroupUtils\";const filterByComparator=(field,operator,fieldToCompare)=>{const fullField=toFullOption(field);const fullFieldToCompare=toFullOption(fieldToCompare);if(fullField.value===fullFieldToCompare.value){return false;}if(typeof fullField.comparator===\"string\"){return fullField[fullField.comparator]===fullFieldToCompare[fullField.comparator];}return fullField.comparator?.(fullFieldToCompare,operator)??/* istanbul ignore next */false;};export const filterFieldsByComparator=(field,fields,operator)=>{if(!field.comparator){const filterOutSameField=f=>(f.value??/* istanbul ignore next */f.name)!==(field.value??/* istanbul ignore next */field.name);if(isFlexibleOptionGroupArray(fields)){return fields.map(og=>({...og,options:og.options.filter(v=>filterOutSameField(v))}));}return fields.filter(v=>filterOutSameField(v));}if(isFlexibleOptionGroupArray(fields)){return fields.map(og=>({...og,options:og.options.filter(f=>filterByComparator(field,operator,f))})).filter(og=>og.options.length>0);}return fields.filter(f=>filterByComparator(field,operator,f));};","import{numericQuantity}from\"numeric-quantity\";export const parseNumber=function(val){let{parseNumbers}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!parseNumbers||typeof val===\"bigint\"||typeof val===\"number\"){return val;}if(parseNumbers===\"native\"){return parseFloat(val);}const valAsNum=// TODO: Should these options be configurable?\nnumericQuantity(val,{allowTrailingInvalid:parseNumbers===\"enhanced\",romanNumerals:false,round:false});return isNaN(valAsNum)?val:valAsNum;};","export const getParseNumberMethod=_ref=>{let{parseNumbers,inputType}=_ref;if(typeof parseNumbers===\"string\"){const[method,level]=parseNumbers.split(\"-\");if(level===\"limited\"){return inputType===\"number\"?method:false;}return method;}return parseNumbers?\"strict\":false;};","import{joinWith,splitBy,toArray}from\"../arrayUtils\";import{getParseNumberMethod}from\"../getParseNumberMethod\";import{isRuleGroup}from\"../isRuleGroup\";import{numericRegex}from\"../misc\";import{getOption}from\"../optGroupUtils\";import{parseNumber}from\"../parseNumber\";export const mapSQLOperator=rqbOperator=>{switch(rqbOperator.toLowerCase()){case\"null\":return\"is null\";case\"notnull\":return\"is not null\";case\"notin\":return\"not in\";case\"notbetween\":return\"not between\";case\"contains\":case\"beginswith\":case\"endswith\":return\"like\";case\"doesnotcontain\":case\"doesnotbeginwith\":case\"doesnotendwith\":return\"not like\";default:return rqbOperator;}};export const mongoOperators={\"=\":\"$eq\",\"!=\":\"$ne\",\"<\":\"$lt\",\"<=\":\"$lte\",\">\":\"$gt\",\">=\":\"$gte\",in:\"$in\",notin:\"$nin\",notIn:\"$nin\"// only here for backwards compatibility\n};export const celCombinatorMap={and:\"&&\",or:\"||\"};export const jsonLogicAdditionalOperators={startsWith:(a,b)=>typeof a===\"string\"&&a.startsWith(b),endsWith:(a,b)=>typeof a===\"string\"&&a.endsWith(b)};export const numerifyValues=(rg,options)=>({...rg,// @ts-expect-error TS doesn't keep track of odd/even indexes here\nrules:rg.rules.map(r=>{if(typeof r===\"string\"){return r;}if(isRuleGroup(r)){return numerifyValues(r,options);}const fieldData=getOption(options.fields,r.field);const parseNumbers=getParseNumberMethod({parseNumbers:options.parseNumbers,inputType:fieldData?.inputType});if(Array.isArray(r.value)){return{...r,value:r.value.map(v=>parseNumber(v,{parseNumbers}))};}const valAsArray=toArray(r.value,{retainEmptyStrings:true}).map(v=>parseNumber(v,{parseNumbers}));if(valAsArray.every(v=>typeof v===\"number\")){if(valAsArray.length>1){return{...r,value:valAsArray};}else if(valAsArray.length===1){return{...r,value:valAsArray[0]};}}return r;})});export const isValidValue=value=>typeof value===\"string\"&&value.length>0||typeof value===\"number\"&&!isNaN(value)||typeof value!==\"string\"&&typeof value!==\"number\";export const shouldRenderAsNumber=(value,parseNumbers)=>!!parseNumbers&&(typeof value===\"number\"||typeof value===\"bigint\"||typeof value===\"string\"&&numericRegex.test(value));export const isValueProcessorLegacy=valueProcessor=>valueProcessor.length>=3;export const getQuoteFieldNamesWithArray=function(){let quoteFieldNamesWith=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[\"\",\"\"];return Array.isArray(quoteFieldNamesWith)?quoteFieldNamesWith:typeof quoteFieldNamesWith===\"string\"?[quoteFieldNamesWith,quoteFieldNamesWith]:quoteFieldNamesWith??[\"\",\"\"];};export const getQuotedFieldName=(fieldName,_ref)=>{let{quoteFieldNamesWith,fieldIdentifierSeparator}=_ref;const[qPre,qPost]=getQuoteFieldNamesWithArray(quoteFieldNamesWith);return typeof fieldIdentifierSeparator===\"string\"&&fieldIdentifierSeparator.length>0?joinWith(splitBy(fieldName,fieldIdentifierSeparator).map(part=>`${qPre}${part}${qPost}`),fieldIdentifierSeparator):`${qPre}${fieldName}${qPost}`;};export const nullOrUndefinedOrEmpty=value=>value===null||value===void 0||value===\"\";","import{toArray,trimIfString}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{nullOrUndefinedOrEmpty,shouldRenderAsNumber}from\"./utils\";const shouldNegate=op=>op.startsWith(\"not\")||op.startsWith(\"doesnot\");const escapeDoubleQuotes=(v,escapeQuotes)=>typeof v!==\"string\"||!escapeQuotes?v:v.replaceAll(`\"`,`\\\\\"`);export const defaultRuleProcessorCEL=function(_ref){let{field,operator,value,valueSource}=_ref;let{escapeQuotes,parseNumbers,preserveValueOrder}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};const valueIsField=valueSource===\"field\";const operatorTL=(operator===\"=\"?\"==\":operator).toLowerCase();const useBareValue=typeof value===\"number\"||typeof value===\"boolean\"||typeof value===\"bigint\"||shouldRenderAsNumber(value,parseNumbers);switch(operatorTL){case\"<\":case\"<=\":case\"==\":case\"!=\":case\">\":case\">=\":return`${field} ${operatorTL} ${valueIsField||useBareValue?trimIfString(value):`\"${escapeDoubleQuotes(value,escapeQuotes)}\"`}`;case\"contains\":case\"doesnotcontain\":{const negate=shouldNegate(operatorTL)?\"!\":\"\";return`${negate}${field}.contains(${valueIsField?trimIfString(value):`\"${escapeDoubleQuotes(value,escapeQuotes)}\"`})`;}case\"beginswith\":case\"doesnotbeginwith\":{const negate=shouldNegate(operatorTL)?\"!\":\"\";return`${negate}${field}.startsWith(${valueIsField?trimIfString(value):`\"${escapeDoubleQuotes(value,escapeQuotes)}\"`})`;}case\"endswith\":case\"doesnotendwith\":{const negate=shouldNegate(operatorTL)?\"!\":\"\";return`${negate}${field}.endsWith(${valueIsField?trimIfString(value):`\"${escapeDoubleQuotes(value,escapeQuotes)}\"`})`;}case\"null\":return`${field} == null`;case\"notnull\":return`${field} != null`;case\"in\":case\"notin\":{const[prefix,suffix]=shouldNegate(operatorTL)?[\"!(\",\")\"]:[\"\",\"\"];const valueAsArray=toArray(value);return`${prefix}${field} in [${valueAsArray.map(val=>valueIsField||shouldRenderAsNumber(val,parseNumbers)?`${trimIfString(val)}`:`\"${escapeDoubleQuotes(val,escapeQuotes)}\"`).join(\", \")}]${suffix}`;}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value);if(valueAsArray.length>=2&&!nullOrUndefinedOrEmpty(valueAsArray[0])&&!nullOrUndefinedOrEmpty(valueAsArray[1])){const[first,second]=valueAsArray;const firstNum=shouldRenderAsNumber(first,true)?parseNumber(first,{parseNumbers:true}):NaN;const secondNum=shouldRenderAsNumber(second,true)?parseNumber(second,{parseNumbers:true}):NaN;let firstValue=isNaN(firstNum)?valueIsField?`${first}`:`\"${escapeDoubleQuotes(first,escapeQuotes)}\"`:firstNum;let secondValue=isNaN(secondNum)?valueIsField?`${second}`:`\"${escapeDoubleQuotes(second,escapeQuotes)}\"`:secondNum;if(!preserveValueOrder&&firstValue===firstNum&&secondValue===secondNum&&secondNum<firstNum){const tempNum=secondNum;secondValue=firstNum;firstValue=tempNum;}return operatorTL===\"between\"?`(${field} >= ${firstValue} && ${field} <= ${secondValue})`:`(${field} < ${firstValue} || ${field} > ${secondValue})`;}else{return\"\";}}}return\"\";};","import{toArray}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{isValidValue,mongoOperators,shouldRenderAsNumber}from\"./utils\";export const defaultRuleProcessorMongoDBQuery=function(_ref){let{field,operator,value,valueSource}=_ref;let{parseNumbers,preserveValueOrder}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};const valueIsField=valueSource===\"field\";if(operator===\"=\"&&!valueIsField){return{[field]:shouldRenderAsNumber(value,parseNumbers)?parseNumber(value,{parseNumbers:\"strict\"}):value};}const operatorLC=operator.toLowerCase();switch(operatorLC){case\"<\":case\"<=\":case\"=\":case\"!=\":case\">\":case\">=\":{const mongoOperator=mongoOperators[operatorLC];return valueIsField?{$expr:{[mongoOperator]:[`$${field}`,`$${value}`]}}:{[field]:{[mongoOperator]:shouldRenderAsNumber(value,parseNumbers)?parseNumber(value,{parseNumbers:\"strict\"}):value}};}case\"contains\":return valueIsField?{$where:`this.${field}.includes(this.${value})`}:{[field]:{$regex:value}};case\"beginswith\":return valueIsField?{$where:`this.${field}.startsWith(this.${value})`}:{[field]:{$regex:`^${value}`}};case\"endswith\":return valueIsField?{$where:`this.${field}.endsWith(this.${value})`}:{[field]:{$regex:`${value}$`}};case\"doesnotcontain\":return valueIsField?{$where:`!this.${field}.includes(this.${value})`}:{[field]:{$not:{$regex:value}}};case\"doesnotbeginwith\":return valueIsField?{$where:`!this.${field}.startsWith(this.${value})`}:{[field]:{$not:{$regex:`^${value}`}}};case\"doesnotendwith\":return valueIsField?{$where:`!this.${field}.endsWith(this.${value})`}:{[field]:{$not:{$regex:`${value}$`}}};case\"null\":return{[field]:null};case\"notnull\":return{[field]:{$ne:null}};case\"in\":case\"notin\":{const valueAsArray=toArray(value);return valueIsField?{$where:`${operatorLC===\"notin\"?\"!\":\"\"}[${valueAsArray.map(val=>`this.${val}`).join(\",\")}].includes(this.${field})`}:{[field]:{[mongoOperators[operatorLC]]:valueAsArray.map(val=>shouldRenderAsNumber(val,parseNumbers)?parseNumber(val,{parseNumbers:\"strict\"}):val)}};}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value);if(valueAsArray.length>=2&&isValidValue(valueAsArray[0])&&isValidValue(valueAsArray[1])){const[first,second]=valueAsArray;const firstNum=shouldRenderAsNumber(first,true)?parseNumber(first,{parseNumbers:\"strict\"}):NaN;const secondNum=shouldRenderAsNumber(second,true)?parseNumber(second,{parseNumbers:\"strict\"}):NaN;let firstValue=valueIsField?first:isNaN(firstNum)?first:firstNum;let secondValue=valueIsField?second:isNaN(secondNum)?second:secondNum;if(!preserveValueOrder&&firstValue===firstNum&&secondValue===secondNum&&secondNum<firstNum){const tempNum=secondNum;secondValue=firstNum;firstValue=tempNum;}if(operatorLC===\"between\"){return valueIsField?{$and:[{$expr:{$gte:[`$${field}`,`$${firstValue}`]}},{$expr:{$lte:[`$${field}`,`$${secondValue}`]}}]}:{[field]:{$gte:firstValue,$lte:secondValue}};}else{return valueIsField?{$or:[{$expr:{$lt:[`$${field}`,`$${firstValue}`]}},{$expr:{$gt:[`$${field}`,`$${secondValue}`]}}]}:{$or:[{[field]:{$lt:firstValue}},{[field]:{$gt:secondValue}}]};}}else{return\"\";}}}return\"\";};","import{defaultRuleProcessorMongoDBQuery}from\"./defaultRuleProcessorMongoDBQuery\";export const defaultRuleProcessorMongoDB=(rule,options)=>{const queryObj=defaultRuleProcessorMongoDBQuery(rule,options);return queryObj?JSON.stringify(queryObj):\"\";};","import{toArray,trimIfString}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{nullOrUndefinedOrEmpty,shouldRenderAsNumber}from\"./utils\";const shouldNegate=op=>op.startsWith(\"not\")||op.startsWith(\"doesnot\");const wrapInNegation=(clause,negate)=>negate?`!(${clause})`:`${clause}`;const escapeSingleQuotes=(v,escapeQuotes)=>typeof v!==\"string\"||!escapeQuotes?v:v.replaceAll(`'`,`\\\\'`);export const defaultRuleProcessorSpEL=function(_ref){let{field,operator,value,valueSource}=_ref;let{escapeQuotes,parseNumbers,preserveValueOrder}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};const valueIsField=valueSource===\"field\";const operatorTL=(operator===\"=\"?\"==\":operator).toLowerCase();const useBareValue=typeof value===\"number\"||typeof value===\"boolean\"||typeof value===\"bigint\"||shouldRenderAsNumber(value,parseNumbers);switch(operatorTL){case\"<\":case\"<=\":case\"==\":case\"!=\":case\">\":case\">=\":return`${field} ${operatorTL} ${valueIsField||useBareValue?trimIfString(value):`'${escapeSingleQuotes(value,escapeQuotes)}'`}`;case\"contains\":case\"doesnotcontain\":return wrapInNegation(`${field} matches ${valueIsField||useBareValue?trimIfString(value):`'${escapeSingleQuotes(value,escapeQuotes)}'`}`,shouldNegate(operatorTL));case\"beginswith\":case\"doesnotbeginwith\":{const valueTL=valueIsField?`'^'.concat(${trimIfString(value)})`:`'${typeof value===\"string\"&&!value.startsWith(\"^\")||useBareValue?\"^\":\"\"}${escapeSingleQuotes(value,escapeQuotes)}'`;return wrapInNegation(`${field} matches ${valueTL}`,shouldNegate(operatorTL));}case\"endswith\":case\"doesnotendwith\":{const valueTL=valueIsField?`${trimIfString(value)}.concat('$')`:`'${escapeSingleQuotes(value,escapeQuotes)}${typeof value===\"string\"&&!value.endsWith(\"$\")||useBareValue?\"$\":\"\"}'`;return wrapInNegation(`${field} matches ${valueTL}`,shouldNegate(operatorTL));}case\"null\":return`${field} == null`;case\"notnull\":return`${field} != null`;case\"in\":case\"notin\":{const negate=shouldNegate(operatorTL)?\"!\":\"\";const valueAsArray=toArray(value);return valueAsArray.length>0?`${negate}(${valueAsArray.map(val=>`${field} == ${valueIsField||shouldRenderAsNumber(val,parseNumbers)?`${trimIfString(val)}`:`'${escapeSingleQuotes(val,escapeQuotes)}'`}`).join(\" or \")})`:\"\";}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value);if(valueAsArray.length>=2&&!nullOrUndefinedOrEmpty(valueAsArray[0])&&!nullOrUndefinedOrEmpty(valueAsArray[1])){const[first,second]=valueAsArray;const firstNum=shouldRenderAsNumber(first,true)?parseNumber(first,{parseNumbers:true}):NaN;const secondNum=shouldRenderAsNumber(second,true)?parseNumber(second,{parseNumbers:true}):NaN;let firstValue=isNaN(firstNum)?valueIsField?`${first}`:`'${escapeSingleQuotes(first,escapeQuotes)}'`:firstNum;let secondValue=isNaN(secondNum)?valueIsField?`${second}`:`'${escapeSingleQuotes(second,escapeQuotes)}'`:secondNum;if(!preserveValueOrder&&firstValue===firstNum&&secondValue===secondNum&&secondNum<firstNum){const tempNum=secondNum;secondValue=firstNum;firstValue=tempNum;}return operatorTL===\"between\"?`(${field} >= ${firstValue} and ${field} <= ${secondValue})`:`(${field} < ${firstValue} or ${field} > ${secondValue})`;}else{return\"\";}}}return\"\";};","import{toArray,trimIfString}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{isValidValue,getQuotedFieldName,shouldRenderAsNumber}from\"./utils\";const escapeStringValueQuotes=(v,quoteChar,escapeQuotes)=>escapeQuotes&&typeof v===\"string\"?v.replaceAll(`${quoteChar}`,`${quoteChar}${quoteChar}`):v;export const defaultValueProcessorByRule=function(_ref){let{operator,value,valueSource}=_ref;let{escapeQuotes,parseNumbers,preserveValueOrder,quoteFieldNamesWith,quoteValuesWith,concatOperator=\"||\",fieldIdentifierSeparator,wrapValueWith=[\"\",\"\"]}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};const valueIsField=valueSource===\"field\";const operatorLowerCase=operator.toLowerCase();const quoteChar=quoteValuesWith||\"'\";const quoteValue=v=>`${wrapValueWith[0]}${quoteChar}${v}${quoteChar}${wrapValueWith[1]}`;const escapeValue=v=>escapeStringValueQuotes(v,quoteChar,escapeQuotes);const wrapAndEscape=v=>quoteValue(escapeValue(v));const wrapFieldName=v=>getQuotedFieldName(v,{quoteFieldNamesWith,fieldIdentifierSeparator});const concat=function(){for(var _len=arguments.length,values=new Array(_len),_key=0;_key<_len;_key++){values[_key]=arguments[_key];}return concatOperator.toUpperCase()===\"CONCAT\"?`CONCAT(${values.join(\", \")})`:values.join(` ${concatOperator} `);};switch(operatorLowerCase){case\"null\":case\"notnull\":{return\"\";}case\"in\":case\"notin\":{const valueAsArray=toArray(value);if(valueAsArray.length>0){return`(${valueAsArray.map(v=>valueIsField?wrapFieldName(v):shouldRenderAsNumber(v,parseNumbers)?`${trimIfString(v)}`:`${wrapAndEscape(v)}`).join(\", \")})`;}return\"\";}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value,{retainEmptyStrings:true});if(valueAsArray.length>=2&&isValidValue(valueAsArray[0])&&isValidValue(valueAsArray[1])){const[first,second]=valueAsArray;const firstNum=shouldRenderAsNumber(first,parseNumbers)?parseNumber(first,{parseNumbers:\"strict\"}):NaN;const secondNum=shouldRenderAsNumber(second,parseNumbers)?parseNumber(second,{parseNumbers:\"strict\"}):NaN;const firstValue=isNaN(firstNum)?valueIsField?`${first}`:first:firstNum;const secondValue=isNaN(secondNum)?valueIsField?`${second}`:second:secondNum;const valsOneAndTwoOnly=[firstValue,secondValue];if(!preserveValueOrder&&firstValue===firstNum&&secondValue===secondNum&&secondNum<firstNum){valsOneAndTwoOnly[0]=secondNum;valsOneAndTwoOnly[1]=firstNum;}return(valueIsField?valsOneAndTwoOnly.map(v=>wrapFieldName(v)):valsOneAndTwoOnly.every(v=>shouldRenderAsNumber(v,parseNumbers))?valsOneAndTwoOnly.map(v=>parseNumber(v,{parseNumbers:\"strict\"})):valsOneAndTwoOnly.map(v=>wrapAndEscape(v))).join(` and `);}return\"\";}case\"contains\":case\"doesnotcontain\":return valueIsField?concat(quoteValue(\"%\"),wrapFieldName(value),quoteValue(\"%\")):quoteValue(`%${escapeValue(value)}%`);case\"beginswith\":case\"doesnotbeginwith\":return valueIsField?concat(wrapFieldName(value),quoteValue(\"%\")):quoteValue(`${escapeValue(value)}%`);case\"endswith\":case\"doesnotendwith\":return valueIsField?concat(quoteValue(\"%\"),wrapFieldName(value)):quoteValue(`%${escapeValue(value)}`);}if(typeof value===\"boolean\"){return value?\"TRUE\":\"FALSE\";}return valueIsField?wrapFieldName(value):shouldRenderAsNumber(value,parseNumbers)?`${trimIfString(value)}`:`${wrapAndEscape(value)}`;};","import{toArray}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{isValidValue,shouldRenderAsNumber}from\"./utils\";const rangeOperatorMap={\"<\":\"lt\",\"<=\":\"lte\",\">\":\"gt\",\">=\":\"gte\"};const negateIfNotOp=(op,elasticSearchRule)=>op.startsWith(\"not\")||op.startsWith(\"doesnot\")?{bool:{must_not:elasticSearchRule}}:elasticSearchRule;const escapeSQ=s=>s?.replace(/('|\\\\)/g,`\\\\$1`);const textFunctionMap={beginswith:\"startsWith\",doesnotbeginwith:\"startsWith\",doesnotcontain:\"contains\",doesnotendwith:\"endsWith\",endswith:\"endsWith\"};const getTextScript=(f,o,v)=>{const script=`doc['${f}'].value.${textFunctionMap[o]??o}(doc['${v}'].value)`;return o.startsWith(\"d\")?`!${script}`:script;};const valueRenderer=(v,parseNumbers)=>typeof v===\"boolean\"?v:shouldRenderAsNumber(v,parseNumbers)?parseNumber(v,{parseNumbers}):v;export const defaultRuleProcessorElasticSearch=function(_ref){let{field,operator,value,valueSource}=_ref;let{parseNumbers,preserveValueOrder}=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};const operatorLC=operator.toLowerCase();if(valueSource===\"field\"){if(toArray(value).some(v=>typeof v!==\"string\"))return false;const fieldForScript=escapeSQ(field);switch(operatorLC){case\"=\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":{const operatorForScript=operatorLC===\"=\"?\"==\":operatorLC;const valueForScript=escapeSQ(value);return valueForScript?{bool:{filter:{script:{script:`doc['${fieldForScript}'].value ${operatorForScript} doc['${valueForScript}'].value`}}}}:false;}case\"in\":case\"notin\":{const valueAsArray=toArray(value);if(valueAsArray.length>0){const arr=valueAsArray.map(v=>({bool:{filter:{script:{script:`doc['${fieldForScript}'].value == doc['${v}'].value`}}}}));return{bool:operatorLC===\"in\"?{should:arr}:{must_not:arr}};}return false;}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value);if(valueAsArray.length>=2&&valueAsArray[0]&&valueAsArray[1]){const script=`doc['${fieldForScript}'].value >= doc['${valueAsArray[0]}'].value && doc['${fieldForScript}'].value <= doc['${valueAsArray[1]}'].value`;return{bool:{filter:{script:{script:operatorLC===\"notbetween\"?`!(${script})`:script}}}};}return false;}case\"contains\":case\"doesnotcontain\":case\"beginswith\":case\"doesnotbeginwith\":case\"endswith\":case\"doesnotendwith\":{const valueForScript=escapeSQ(value);if(!valueForScript)return false;const script=getTextScript(fieldForScript,operatorLC,valueForScript);return{bool:{filter:{script:{script}}}};}}}switch(operatorLC){case\"<\":case\"<=\":case\">\":case\">=\":return{range:{[field]:{[rangeOperatorMap[operatorLC]]:valueRenderer(value,parseNumbers)}}};case\"=\":return{term:{[field]:valueRenderer(value,parseNumbers)}};case\"!=\":return{bool:{must_not:{term:{[field]:valueRenderer(value,parseNumbers)}}}};case\"null\":return{bool:{must_not:{exists:{field}}}};case\"notnull\":return{exists:{field}};case\"in\":case\"notin\":{const valueAsArray=toArray(value).map(v=>valueRenderer(v,parseNumbers));if(valueAsArray.length>0){const arr=valueAsArray.map(v=>({term:{[field]:valueRenderer(v,parseNumbers)}}));return{bool:operatorLC===\"in\"?{should:arr}:{must_not:arr}};}return false;}case\"between\":case\"notbetween\":{const valueAsArray=toArray(value);if(valueAsArray.length>=2&&isValidValue(valueAsArray[0])&&isValidValue(valueAsArray[1])){let[first,second]=valueAsArray;if(shouldRenderAsNumber(first,true)&&shouldRenderAsNumber(second,true)){const firstNum=parseNumber(first,{parseNumbers:true});const secondNum=parseNumber(second,{parseNumbers:true});if(!preserveValueOrder&&secondNum<firstNum){const tempNum=secondNum;second=firstNum;first=tempNum;}else{first=firstNum;second=secondNum;}}return negateIfNotOp(operatorLC,{range:{[field]:{gte:first,lte:second}}});}return false;}case\"contains\":case\"doesnotcontain\":return negateIfNotOp(operatorLC,{regexp:{[field]:{value:`.*${value}.*`}}});case\"beginswith\":case\"doesnotbeginwith\":return negateIfNotOp(operatorLC,{regexp:{[field]:{value:`${value}.*`}}});case\"endswith\":case\"doesnotendwith\":return negateIfNotOp(operatorLC,{regexp:{[field]:{value:`.*${value}`}}});}return false;};","import{toArray,trimIfString}from\"../arrayUtils\";import{parseNumber}from\"../parseNumber\";import{nullOrUndefinedOrEmpty,getQuotedFieldName,shouldRenderAsNumber}from\"./utils\";const shouldNegate=op=>op.startsWith(\"not\")||op.startsWith(\"doesnot\");const quote=(v,escapeQuotes)=>`\"${typeof v!==\"string\"||!escapeQuotes?v:v.replaceAll(`\"`,`\\\\\"`)}\"`;const negate=(clause,negate2)=>negate2?`$not(${clause})`:`${clause}`;const escapeStringRegex=s=>`${s}`.replaceAll(/[$()*+.