@react-querybuilder/core 8.17.0 → 8.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +36 -3
- package/dist/cjs/react-querybuilder_core.cjs.development.js +14 -9
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +36 -3
- package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
- package/dist/formatQuery.d.mts +3 -1
- package/dist/formatQuery.d.ts +3 -1
- package/dist/formatQuery.js +10 -8
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +10 -8
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-CSHMjlid.d.ts → import-Qs1-kgv5.d.ts} +2 -2
- package/dist/{import-BQ5xaW6i.d.mts → import-ShTj5IdB.d.mts} +2 -2
- package/dist/{index-CREDWM32.d.ts → index-DlVg-QXo.d.mts} +32 -3
- package/dist/{index-CREDWM32.d.mts → index-DlVg-QXo.d.ts} +32 -3
- package/dist/parseCEL.d.mts +7 -7
- package/dist/parseCEL.d.ts +7 -7
- package/dist/parseCEL.js +3 -3
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +3 -3
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseCypher.d.mts +1 -1
- package/dist/parseCypher.d.ts +1 -1
- package/dist/parseGremlin.d.mts +1 -1
- package/dist/parseGremlin.d.ts +1 -1
- package/dist/parseJSONata.d.mts +2 -2
- package/dist/parseJSONata.d.ts +2 -2
- package/dist/parseJsonLogic.d.mts +2 -2
- package/dist/parseJsonLogic.d.ts +2 -2
- package/dist/parseJsonLogic.js +7 -7
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +7 -7
- package/dist/parseJsonLogic.mjs.map +1 -1
- package/dist/parseMongoDB.d.mts +2 -2
- package/dist/parseMongoDB.d.ts +2 -2
- package/dist/parseSPARQL.d.mts +1 -1
- package/dist/parseSPARQL.d.ts +1 -1
- package/dist/parseSQL.d.mts +2 -2
- package/dist/parseSQL.d.ts +2 -2
- package/dist/parseSpEL.d.mts +2 -2
- package/dist/parseSpEL.d.ts +2 -2
- package/dist/react-querybuilder_core.d.mts +36 -3
- package/dist/react-querybuilder_core.legacy-esm.d.ts +36 -3
- package/dist/react-querybuilder_core.legacy-esm.js +14 -9
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +14 -9
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +36 -3
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/transformQuery.d.mts +1 -1
- package/dist/transformQuery.d.ts +1 -1
- package/dist/utils-01WaTGBL.mjs.map +1 -1
- package/dist/utils-ZlKseh1X.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJsonLogic.js","names":["isPojo","getFieldsArray","fieldIsValidUtil","isPojo","objectKeys","isRuleGroup","isRuleGroupType","defaultOperatorNegationMap","joinWith","prepareRuleGroup","convertToIC"],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!']);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!']);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: fld }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation);\n\n // TODO: Support operations that evaluate array member properties\n if (!matcher) return false;\n\n rule = {\n field: fld,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // v8 ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* v8 ignore start -- @preserve */ false /* v8 ignore stop -- @preserve */\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // v8 ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);\n}\n\nexport { parseJsonLogic };\n"],"mappings":";;;;;;AA2BA,MAAa,kBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,SAAS;AAC5B,MAAa,qBAAqB,UAChC,eAAe,KAAK,KAAK,OAAO,MAAM,QAAQ;AAChD,MAAa,oBAAoB,UAC/BA,oBAAAA,OAAO,KAAK,KAAK,QAAQ;AAC3B,MAAa,0BAA0B,UACrCA,oBAAAA,OAAO,KAAK,KAAK,SAAS;AAC5B,MAAa,uBAAuB,UAClCA,oBAAAA,OAAO,KAAK,KAAK,QAAQ;AAC3B,MAAa,6BAA6B,UACxCA,oBAAAA,OAAO,KAAK,KAAK,SAAS;AAC5B,MAAa,uBAAuB,UAClCA,oBAAAA,OAAO,KAAK,KAAK,OAAO;AAC1B,MAAa,6BAA6B,UACxCA,oBAAAA,OAAO,KAAK,KAAK,QAAQ;AAC3B,MAAa,iBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,QAAQ;AAC3B,MAAa,kBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,SAAS;AAC5B,MAAa,0BACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,OAAO;AAC1B,MAAa,iCACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,QAAQ;AAC3B,MAAa,uBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,OAAO,SAAS,MAAM,KAAK,WAAW;AACzD,MAAa,8BACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,QAAQ,SAAS,MAAM,MAAM,WAAW;AAC3D,MAAa,sBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,QAAQ,SAAS,MAAM,QAAQ,MAAM,GAAG,EAAE;AAC7D,MAAa,uBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,QAAQ,SAAS,CAAC,MAAM,QAAQ,MAAM,GAAG,EAAE;AAC9D,MAAa,kBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,SAAS;AAC5B,MAAa,mBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,UAAU;AAC7B,MAAa,mBACX,UAEAA,oBAAAA,OAAO,KAAK,KAAK,UAAU;AAG7B,MAAa,+BAA+B,UAC1CA,oBAAAA,OAAO,KAAK,KAAK,OAAO,SAAS,MAAM,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK,WAAW;AACtF,MAAa,+BAA+B,UAC1CA,oBAAAA,OAAO,KAAK,KAAK,QAAQ,SAAS,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,WAAW;AAGzF,MAAa,4BAA4B,UACvCA,oBAAAA,OAAO,KAAK,KAAK,gBAAgB;AACnC,MAAa,0BAA0B,UACrCA,oBAAAA,OAAO,KAAK,KAAK,cAAc;;;AC5CjC,MAAM,iBAAuC;CAAE,YAAY;CAAO,OAAO,CAAC;AAAE;AA8B5E,SAAS,eACP,cACA,UAAiC,CAAC,GACT;CACzB,MAAM,aAAaC,4BAAAA,eAAe,QAAQ,MAAM;CAChD,MAAM,EAAE,iBAAiB,eAAe,wBAAwB;CAEhE,MAAM,gBACJ,WACA,UACA,yBAEAC,4BAAAA,iBAAiB;EACf;EACA;EACA;EACA;EACA;CACF,CAAC;CAUH,SAAS,aACP,OACA,WACgD;EAEhD,IAAI,aAAa,CAACC,oBAAAA,OAAO,KAAK,GAC5B,OAAO;EAET,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC;EAG7D,IAAI,uBAAuBC,oBAAAA,WAAW,mBAAmB,EAAE,SAAS,GAAG,GAAG;GACxE,MAAM,OAAO,oBAAoB,KAAK,QAAQ;GAC9C,OAAO,OACH,aAAa,CAACC,oBAAAA,YAAY,IAAI,IAC5B;IAAE,YAAY;IAAO,OAAO,CAAC,IAAI;GAAE,IACnC,OACF;EACN;EAGA,IAAI,eAAe,KAAK,GACtB,OAAO;GACL,YAAY;GACZ,OAAO,MAAM,IAAI,KAAI,MAAK,aAAa,CAAC,CAAC,EAAE,OAAO,OAAO;EAI3D;OACK,IAAI,cAAc,KAAK,GAC5B,OAAO;GACL,YAAY;GACZ,OAAO,MAAM,GAAG,KAAI,MAAK,aAAa,CAAC,CAAC,EAAE,OAAO,OAAO;EAI1D;OACK,IAAI,oBAAoB,KAAK,GAAG;GACrC,MAAM,OAAO,aAAa,MAAM,IAAI;GACpC,IAAI,MAAM;IACR,IACE,CAACC,oBAAAA,gBAAgB,IAAI,MACpB,KAAK,aAAa,aACjB,KAAK,aAAa,QAClB,KAAK,aAAa,cAClB,KAAK,aAAa,gBAClB,KAAK,aAAa,aACpB;KACA,MAAM,UAAU;MAAE,GAAG;MAAM,UAAUC,cAAAA,2BAA2B,KAAK;KAAU;KAC/E,IAAI,WACF,OAAO;MAAE,YAAY;MAAO,OAAO,CAAC,OAAO;KAAE;KAE/C,OAAO;IACT,OAAO,IAAI,4BAA4B,MAAM,IAAI,KAAKD,oBAAAA,gBAAgB,IAAI,GACxE,OAAO;KAAE,GAAG;KAAM,KAAK;IAAK;IAE9B,OAAO;KAAE,YAAY;KAAO,OAAO,CAAC,IAAI;KAAG,KAAK;IAAK;GACvD;GACA,OAAO;EACT,OAAO,IAAI,0BAA0B,KAAK,GAExC,OADa,aAAa,MAAM,KACtB,KAAK;EAIjB,IAAI,OAAgC;EACpC,IAAI,QAAQ;EACZ,IAAI,WAAgC;EAEpC,IAAI,QAAa;EACjB,IAAI,cAAuC,KAAA;EAE3C,IAEE,iBAAiB,KAAK,KACtB,uBAAuB,KAAK,KAC5B,oBAAoB,KAAK,KACzB,0BAA0B,KAAK,KAC/B,uBAAuB,KAAK,KAC5B,8BAA8B,KAAK,KACnC,oBAAoB,KAAK,KACzB,2BAA2B,KAAK,KAChC,oBAAoB,KAAK,KACzB,yBAAyB,KAAK,KAC9B,uBAAuB,KAAK,GAC5B;GACA,MAAM,CAAC,OAAO,UAAU;GACxB,IAAI,kBAAkB,KAAK,KAAK,CAACH,oBAAAA,OAAO,MAAM,GAAG;IAC/C,QAAQ,MAAM;IACd,QAAQ;GACV,OAAO,IAAI,CAACA,oBAAAA,OAAO,KAAK,KAAK,kBAAkB,MAAM,GAAG;IACtD,QAAQ,OAAO;IACf,QAAQ;GACV,OAAO,IAAI,kBAAkB,KAAK,KAAK,kBAAkB,MAAM,GAAG;IAChE,QAAQ,MAAM;IACd,QAAQ,OAAO;IACf,cAAc;GAChB,OACE,OAAO;GAIT,IAAI,iBAAiB,KAAK,KAAK,uBAAuB,KAAK,GACzD,WAAW,UAAU,OAAO,SAAS;QAChC,IAAI,oBAAoB,KAAK,KAAK,0BAA0B,KAAK,GACtE,WAAW,UAAU,OAAO,YAAY;QACnC,IAAI,oBAAoB,KAAK,GAClC,WAAW;QACN,IAAI,yBAAyB,KAAK,GACvC,WAAW;QACN,IAAI,uBAAuB,KAAK,GACrC,WAAW;QAEX,WAAW;GAGb,IAAI,aAAa,OAAO,UAAU,gBAAgB,UAAU,QAAQ,KAAA,CAAS,GAC3E,OAAO;IAAE;IAAO;IAAU;IAAO;GAAY;EAEjD,OAAO,IACJ,eAAe,KAAK,KAAK,kBAAkB,MAAM,OAAO,EAAE,KAC1D,gBAAgB,KAAK,KAAK,kBAAkB,MAAM,QAAQ,EAAE,KAC5D,gBAAgB,KAAK,KAAK,kBAAkB,MAAM,QAAQ,EAAE,GAC7D;GAGA,MAAM,QAAqB,EACzB,MAAM,gBAAgB,KAAK,IAAI,SAAS,gBAAgB,KAAK,IAAI,SAAS,MAC5E;GAGA,MAAM,CAAC,EAAE,KAAK,OAAO,aAAc,MAAc,MAAM;GACvD,MAAM,UAAU,aAAa,SAAS;GAGtC,IAAI,CAAC,SAAS,OAAO;GAErB,OAAO;IACL,OAAO;IACP,UAAU;IACV;IACA,OAAOE,oBAAAA,YAAY,OAAO,IAAI,UAAU;KAAE,YAAY;KAAO,OAAO,CAAC,OAAO;IAAE;GAChF;EACF,OAAO,IAAI,4BAA4B,KAAK,KAAK,kBAAkB,MAAM,KAAK,EAAE,GAAG;GACjF,QAAQ,MAAM,KAAK,GAAG;GACtB,MAAM,SAAS,CAAC,MAAM,KAAK,IAAI,MAAM,KAAK,EAAE;;GAE5C,IACE,OAAO,OAAM,MAAK,kBAAkB,CAAC,CAAC,KACtC,OAAO,OAAM,OAAM,OAAO,OAAO,QAAQ,KACzC,OAAO,OAAM,OAAM,OAAO,OAAO,QAAQ,KACzC,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,GAE1C,OACE,aAAa,EACX,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,EAAE,EAAE,CAAC,EAClF,CAAC,KAAwC;EAG/C,OAAO,IAAI,4BAA4B,KAAK,KAAK,kBAAkB,MAAM,MAAM,EAAE,GAAG;GAClF,QAAQ,MAAM,MAAM,GAAG;GACvB,WAAW;GACX,MAAM,SAAS,CAAC,MAAM,MAAM,IAAI,MAAM,MAAM,EAAE;GAC9C,IAAI,MAAM,MAAM,OAAM,MAAK,kBAAkB,CAAC,CAAC,GAAG;IAChD,MAAM,OAAO;IACb,cAAc;IACd,MAAM,YAAY,KAAK,KAAI,OAAM,GAAG,GAAG,EAAE,QAAO,OAAM,aAAa,OAAO,UAAU,EAAE,CAAC;IACvF,QAAQ,gBAAgB,YAAYG,cAAAA,SAAS,WAAW,GAAG;GAC7D,OAEE,IACE,OAAO,OAAM,OAAM,OAAO,OAAO,QAAQ,KACzC,OAAO,OAAM,OAAM,OAAO,OAAO,QAAQ,KACzC,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,GAE1C,QAAQ,gBACJ,SACAA,cAAAA,SACE,OAAO,KAAI,OAAM,GAAG,IAAI,GACxB,GACF;GAIR,IAAI,aAAa,OAAO,QAAQ,KAAK,MAAM,UAAU,GACnD,OAAO;IAAE;IAAO;IAAU;IAAO;GAAY;EAEjD,OAAO,IAAI,mBAAmB,KAAK,KAAK,kBAAkB,SAAS,EAAE,GAAG;GACtE,QAAQ,SAAS,GAAG;GACpB,WAAW;GACX,IAAI,MAAM,GAAG,GAAG,OAAM,MAAK,kBAAkB,CAAC,CAAC,GAAG;IAChD,cAAc;IACd,MAAM,YAAY,MAAM,GAAG,GACxB,KAAI,OAAM,GAAG,GAAG,EAChB,QAAO,OAAM,aAAa,OAAO,UAAU,EAAE,CAAC;IACjD,QAAQ,gBAAgB,YAAYA,cAAAA,SAAS,WAAW,GAAG;GAC7D,OAEE,IACE,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,QAAQ,KAC9C,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,QAAQ,KAC9C,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,SAAS,GAE/C,QAAQ,gBACJ,MAAM,GAAG,KACTA,cAAAA,SACE,MAAM,GAAG,GAAG,KAAI,OAAM,GAAG,IAAI,GAC7B,GACF;;GAKR,IAAI,MAAM,SAAS,GACjB,OAAO;IAAE;IAAO;IAAU;IAAO;GAAY;EAEjD;EAEA,OAAO,OAAQ,YAAY;GAAE,YAAY;GAAO,OAAO,CAAC,IAAI;EAAE,IAAI,OAAQ;CAC5E;CAEA,MAAM,UAAU,QAAQ,cAAcC,4BAAAA,oBAAuB,MAAS;CAEtE,IAAI,YAAY;CAChB,IAAI,OAAO,iBAAiB,UAC1B,IAAI;EACF,YAAY,KAAK,MAAM,YAAY;CACrC,QAAQ;EACN,OAAO,QAAQ,cAAc;CAC/B;CAIF,MAAM,aADS,aAAa,WAAW,IACO,KAAK;CACnD,OAAO,QAAQ,QAAQ,yBAAyBC,qBAAAA,YAAY,UAAU,IAAI,UAAU;AACtF"}
|
|
1
|
+
{"version":3,"file":"parseJsonLogic.js","names":["isPojo","getFieldsArray","fieldIsValidUtil","isPojo","objectKeys","isRuleGroup","isRuleGroupType","defaultOperatorNegationMap","joinWith","prepareRuleGroup","convertToIC"],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false,\n inSubquery?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean,\n inSubquery?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l, false, inSubquery)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l, false, inSubquery)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!'], false, inSubquery);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!'], false, inSubquery);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (\n inSubquery ||\n fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)\n ) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: fld }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation, false, true);\n\n if (!matcher) return false;\n\n rule = {\n field: fld,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // v8 ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* v8 ignore start -- @preserve */ false /* v8 ignore stop -- @preserve */\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // v8 ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);\n}\n\nexport { parseJsonLogic };\n"],"mappings":"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"}
|
package/dist/parseJsonLogic.mjs
CHANGED
|
@@ -42,7 +42,7 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
|
|
|
42
42
|
subordinateFieldName,
|
|
43
43
|
getValueSources
|
|
44
44
|
});
|
|
45
|
-
function processLogic(logic, outermost) {
|
|
45
|
+
function processLogic(logic, outermost, inSubquery) {
|
|
46
46
|
if (outermost && !isPojo(logic)) return false;
|
|
47
47
|
const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];
|
|
48
48
|
if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {
|
|
@@ -54,14 +54,14 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
|
|
|
54
54
|
}
|
|
55
55
|
if (isJsonLogicAnd(logic)) return {
|
|
56
56
|
combinator: "and",
|
|
57
|
-
rules: logic.and.map((l) => processLogic(l)).filter(Boolean)
|
|
57
|
+
rules: logic.and.map((l) => processLogic(l, false, inSubquery)).filter(Boolean)
|
|
58
58
|
};
|
|
59
59
|
else if (isJsonLogicOr(logic)) return {
|
|
60
60
|
combinator: "or",
|
|
61
|
-
rules: logic.or.map((l) => processLogic(l)).filter(Boolean)
|
|
61
|
+
rules: logic.or.map((l) => processLogic(l, false, inSubquery)).filter(Boolean)
|
|
62
62
|
};
|
|
63
63
|
else if (isJsonLogicNegation(logic)) {
|
|
64
|
-
const rule = processLogic(logic["!"]);
|
|
64
|
+
const rule = processLogic(logic["!"], false, inSubquery);
|
|
65
65
|
if (rule) {
|
|
66
66
|
if (!isRuleGroupType(rule) && (rule.operator === "between" || rule.operator === "in" || rule.operator === "contains" || rule.operator === "beginsWith" || rule.operator === "endsWith")) {
|
|
67
67
|
const newRule = {
|
|
@@ -84,7 +84,7 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
|
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
return false;
|
|
87
|
-
} else if (isJsonLogicDoubleNegation(logic)) return processLogic(logic["!!"]) || false;
|
|
87
|
+
} else if (isJsonLogicDoubleNegation(logic)) return processLogic(logic["!!"], false, inSubquery) || false;
|
|
88
88
|
let rule = false;
|
|
89
89
|
let field = "";
|
|
90
90
|
let operator = "=";
|
|
@@ -109,7 +109,7 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
|
|
|
109
109
|
else if (isRQBJsonLogicStartsWith(logic)) operator = "beginsWith";
|
|
110
110
|
else if (isRQBJsonLogicEndsWith(logic)) operator = "endsWith";
|
|
111
111
|
else operator = key;
|
|
112
|
-
if (fieldIsValid(field, operator, valueSource === "field" ? value : void 0)) rule = {
|
|
112
|
+
if (inSubquery || fieldIsValid(field, operator, valueSource === "field" ? value : void 0)) rule = {
|
|
113
113
|
field,
|
|
114
114
|
operator,
|
|
115
115
|
value,
|
|
@@ -118,7 +118,7 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
|
|
|
118
118
|
} else if (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic["all"][0]) || isJsonLogicNone(logic) && isRQBJsonLogicVar(logic["none"][0]) || isJsonLogicSome(logic) && isRQBJsonLogicVar(logic["some"][0])) {
|
|
119
119
|
const match = { mode: isJsonLogicNone(logic) ? "none" : isJsonLogicSome(logic) ? "some" : "all" };
|
|
120
120
|
const [{ var: fld }, operation] = logic[match.mode];
|
|
121
|
-
const matcher = processLogic(operation);
|
|
121
|
+
const matcher = processLogic(operation, false, true);
|
|
122
122
|
if (!matcher) return false;
|
|
123
123
|
rule = {
|
|
124
124
|
field: fld,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJsonLogic.mjs","names":[],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!']);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!']);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: fld }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation);\n\n // TODO: Support operations that evaluate array member properties\n if (!matcher) return false;\n\n rule = {\n field: fld,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // v8 ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* v8 ignore start -- @preserve */ false /* v8 ignore stop -- @preserve */\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // v8 ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);\n}\n\nexport { parseJsonLogic };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parseJsonLogic.mjs","names":[],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false,\n inSubquery?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean,\n inSubquery?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l, false, inSubquery)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l, false, inSubquery)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!'], false, inSubquery);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!'], false, inSubquery);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (\n inSubquery ||\n fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)\n ) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: fld }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation, false, true);\n\n if (!matcher) return false;\n\n rule = {\n field: fld,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // v8 ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* v8 ignore start -- @preserve */ false /* v8 ignore stop -- @preserve */\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // v8 ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // v8 ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);\n}\n\nexport { parseJsonLogic };\n"],"mappings":"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"}
|
package/dist/parseMongoDB.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as RuleGroupType, E as DefaultRuleGroupType, O as RuleType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { D as RuleGroupType, E as DefaultRuleGroupType, O as RuleType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.mjs";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-ShTj5IdB.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseMongoDB/parseMongoDB.d.ts
|
|
5
5
|
/**
|
package/dist/parseMongoDB.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as RuleGroupType, E as DefaultRuleGroupType, O as RuleType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { D as RuleGroupType, E as DefaultRuleGroupType, O as RuleType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.js";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-Qs1-kgv5.js";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseMongoDB/parseMongoDB.d.ts
|
|
5
5
|
/**
|
package/dist/parseSPARQL.d.mts
CHANGED
package/dist/parseSPARQL.d.ts
CHANGED
package/dist/parseSQL.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.mjs";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-ShTj5IdB.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseSQL/parseSQL.d.ts
|
|
5
5
|
/**
|
package/dist/parseSQL.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.js";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-Qs1-kgv5.js";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseSQL/parseSQL.d.ts
|
|
5
5
|
/**
|
package/dist/parseSpEL.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.mjs";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-ShTj5IdB.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseSpEL/parseSpEL.d.ts
|
|
5
5
|
/**
|
package/dist/parseSpEL.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-
|
|
2
|
-
import { t as ParserCommonOptions } from "./import-
|
|
1
|
+
import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-DlVg-QXo.js";
|
|
2
|
+
import { t as ParserCommonOptions } from "./import-Qs1-kgv5.js";
|
|
3
3
|
|
|
4
4
|
//#region src/utils/parseSpEL/parseSpEL.d.ts
|
|
5
5
|
/**
|
|
@@ -871,7 +871,36 @@ type Result = ApplyDefaultOptions<PathsOptions, DefaultPathsOptions, SpecifiedOp
|
|
|
871
871
|
// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'.
|
|
872
872
|
```
|
|
873
873
|
*/
|
|
874
|
-
type ApplyDefaultOptions<Options extends object, Defaults extends Simplify<Omit<Required<Options>, RequiredKeysOf<Options>> & Partial<Record<RequiredKeysOf<Options>, never>>>, SpecifiedOptions extends Options> =
|
|
874
|
+
type ApplyDefaultOptions<Options extends object, Defaults extends Simplify<Omit<Required<Options>, RequiredKeysOf<Options>> & Partial<Record<RequiredKeysOf<Options>, never>>>, SpecifiedOptions extends Options> = _ApplyDefaultOptions<Options, Defaults, SpecifiedOptions> extends infer Result extends Required<Options> // `extends Required<Options>` ensures that `ApplyDefaultOptions<SomeOption, ...>` is always assignable to `Required<SomeOption>`
|
|
875
|
+
? Result : never;
|
|
876
|
+
type _ApplyDefaultOptions<Options, Defaults, SpecifiedOptions> = If<IsAny<SpecifiedOptions>, Defaults, If<IsNever<SpecifiedOptions>, Defaults, Merge<Defaults, { [Key in keyof SpecifiedOptions as undefined extends Required<Options>[Key & keyof Options] ? Key : undefined extends SpecifiedOptions[Key] ? never : Key]: SpecifiedOptions[Key] }>>>;
|
|
877
|
+
/**
|
|
878
|
+
Collapses literal types in a union into their corresponding primitive types, when possible. For example, `CollapseLiterals<'foo' | 'bar' | (string & {})>` returns `string`.
|
|
879
|
+
|
|
880
|
+
Note: This doesn't collapse literals within tagged types. For example, `CollapseLiterals<Tagged<'foo' | (string & {}), 'Tag'>>` returns `("foo" & Tag<"Tag", never>) | (string & Tag<"Tag", never>)` and not `string & Tag<"Tag", never>`.
|
|
881
|
+
|
|
882
|
+
Use-case: For collapsing unions created using {@link LiteralUnion}.
|
|
883
|
+
|
|
884
|
+
@example
|
|
885
|
+
```
|
|
886
|
+
import type {LiteralUnion} from 'type-fest';
|
|
887
|
+
|
|
888
|
+
type A = CollapseLiterals<'foo' | 'bar' | (string & {})>;
|
|
889
|
+
//=> string
|
|
890
|
+
|
|
891
|
+
type B = CollapseLiterals<LiteralUnion<1 | 2 | 3, number>>;
|
|
892
|
+
//=> number
|
|
893
|
+
|
|
894
|
+
type C = CollapseLiterals<LiteralUnion<'onClick' | 'onChange', `on${string}`>>;
|
|
895
|
+
//=> `on${string}`
|
|
896
|
+
|
|
897
|
+
type D = CollapseLiterals<'click' | 'change' | (`on${string}` & {})>;
|
|
898
|
+
//=> 'click' | 'change' | `on${string}`
|
|
899
|
+
|
|
900
|
+
type E = CollapseLiterals<LiteralUnion<'foo' | 'bar', string> | null | undefined>;
|
|
901
|
+
//=> string | null | undefined
|
|
902
|
+
```
|
|
903
|
+
*/
|
|
875
904
|
//#endregion
|
|
876
905
|
//#region ../../node_modules/type-fest/source/except.d.ts
|
|
877
906
|
/**
|
|
@@ -1119,7 +1148,7 @@ type SetArrayRequired<TArray extends UnknownArray, Keys, Counter extends any[] =
|
|
|
1119
1148
|
: never; // Should never happen
|
|
1120
1149
|
//#endregion
|
|
1121
1150
|
//#region src/types/options.d.ts
|
|
1122
|
-
type RequireAtLeastOne<
|
|
1151
|
+
type RequireAtLeastOne<O, K extends keyof O> = { [P in K]-?: Required<Pick<O, P>> & Partial<Pick<O, Exclude<K, P>>> }[K] & Except<O, K>;
|
|
1123
1152
|
type StringUnionToFlexibleOptionArray<Op extends string> = Array<Op extends unknown ? FlexibleOption<Op> : never>;
|
|
1124
1153
|
type StringUnionToFullOptionArray<Op extends string> = Array<Op extends unknown ? FullOption<Op> : never>;
|
|
1125
1154
|
/**
|
|
@@ -2607,7 +2636,9 @@ interface BaseTranslations<LabelType = string> {
|
|
|
2607
2636
|
operators: BaseTranslationWithPlaceholders;
|
|
2608
2637
|
values: BaseTranslationWithPlaceholders;
|
|
2609
2638
|
matchMode: BaseTranslation;
|
|
2610
|
-
matchThreshold: BaseTranslation
|
|
2639
|
+
matchThreshold: BaseTranslation & {
|
|
2640
|
+
placeholderName?: string;
|
|
2641
|
+
};
|
|
2611
2642
|
value: BaseTranslation;
|
|
2612
2643
|
removeRule: BaseTranslationWithLabel<LabelType>;
|
|
2613
2644
|
removeGroup: BaseTranslationWithLabel<LabelType>;
|
|
@@ -3868,6 +3899,8 @@ declare const bigIntJsonParseReviver: (_key: string, value: unknown) => unknown;
|
|
|
3868
3899
|
/**
|
|
3869
3900
|
* Default value processor used by {@link formatQuery} for "sql" format.
|
|
3870
3901
|
*
|
|
3902
|
+
* @deprecated Prefer {@link defaultValueProcessorByRule}.
|
|
3903
|
+
*
|
|
3871
3904
|
* @group Export
|
|
3872
3905
|
*/
|
|
3873
3906
|
declare const defaultValueProcessor: ValueProcessorLegacy;
|
|
@@ -871,7 +871,36 @@ type Result = ApplyDefaultOptions<PathsOptions, DefaultPathsOptions, SpecifiedOp
|
|
|
871
871
|
// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'.
|
|
872
872
|
```
|
|
873
873
|
*/
|
|
874
|
-
type ApplyDefaultOptions<Options extends object, Defaults extends Simplify<Omit<Required<Options>, RequiredKeysOf<Options>> & Partial<Record<RequiredKeysOf<Options>, never>>>, SpecifiedOptions extends Options> =
|
|
874
|
+
type ApplyDefaultOptions<Options extends object, Defaults extends Simplify<Omit<Required<Options>, RequiredKeysOf<Options>> & Partial<Record<RequiredKeysOf<Options>, never>>>, SpecifiedOptions extends Options> = _ApplyDefaultOptions<Options, Defaults, SpecifiedOptions> extends infer Result extends Required<Options> // `extends Required<Options>` ensures that `ApplyDefaultOptions<SomeOption, ...>` is always assignable to `Required<SomeOption>`
|
|
875
|
+
? Result : never;
|
|
876
|
+
type _ApplyDefaultOptions<Options, Defaults, SpecifiedOptions> = If<IsAny<SpecifiedOptions>, Defaults, If<IsNever<SpecifiedOptions>, Defaults, Merge<Defaults, { [Key in keyof SpecifiedOptions as undefined extends Required<Options>[Key & keyof Options] ? Key : undefined extends SpecifiedOptions[Key] ? never : Key]: SpecifiedOptions[Key] }>>>;
|
|
877
|
+
/**
|
|
878
|
+
Collapses literal types in a union into their corresponding primitive types, when possible. For example, `CollapseLiterals<'foo' | 'bar' | (string & {})>` returns `string`.
|
|
879
|
+
|
|
880
|
+
Note: This doesn't collapse literals within tagged types. For example, `CollapseLiterals<Tagged<'foo' | (string & {}), 'Tag'>>` returns `("foo" & Tag<"Tag", never>) | (string & Tag<"Tag", never>)` and not `string & Tag<"Tag", never>`.
|
|
881
|
+
|
|
882
|
+
Use-case: For collapsing unions created using {@link LiteralUnion}.
|
|
883
|
+
|
|
884
|
+
@example
|
|
885
|
+
```
|
|
886
|
+
import type {LiteralUnion} from 'type-fest';
|
|
887
|
+
|
|
888
|
+
type A = CollapseLiterals<'foo' | 'bar' | (string & {})>;
|
|
889
|
+
//=> string
|
|
890
|
+
|
|
891
|
+
type B = CollapseLiterals<LiteralUnion<1 | 2 | 3, number>>;
|
|
892
|
+
//=> number
|
|
893
|
+
|
|
894
|
+
type C = CollapseLiterals<LiteralUnion<'onClick' | 'onChange', `on${string}`>>;
|
|
895
|
+
//=> `on${string}`
|
|
896
|
+
|
|
897
|
+
type D = CollapseLiterals<'click' | 'change' | (`on${string}` & {})>;
|
|
898
|
+
//=> 'click' | 'change' | `on${string}`
|
|
899
|
+
|
|
900
|
+
type E = CollapseLiterals<LiteralUnion<'foo' | 'bar', string> | null | undefined>;
|
|
901
|
+
//=> string | null | undefined
|
|
902
|
+
```
|
|
903
|
+
*/
|
|
875
904
|
//#endregion
|
|
876
905
|
//#region ../../node_modules/type-fest/source/except.d.ts
|
|
877
906
|
/**
|
|
@@ -1119,7 +1148,7 @@ type SetArrayRequired<TArray extends UnknownArray, Keys, Counter extends any[] =
|
|
|
1119
1148
|
: never; // Should never happen
|
|
1120
1149
|
//#endregion
|
|
1121
1150
|
//#region src/types/options.d.ts
|
|
1122
|
-
type RequireAtLeastOne<
|
|
1151
|
+
type RequireAtLeastOne<O, K extends keyof O> = { [P in K]-?: Required<Pick<O, P>> & Partial<Pick<O, Exclude<K, P>>> }[K] & Except<O, K>;
|
|
1123
1152
|
type StringUnionToFlexibleOptionArray<Op extends string> = Array<Op extends unknown ? FlexibleOption<Op> : never>;
|
|
1124
1153
|
type StringUnionToFullOptionArray<Op extends string> = Array<Op extends unknown ? FullOption<Op> : never>;
|
|
1125
1154
|
/**
|
|
@@ -2607,7 +2636,9 @@ interface BaseTranslations<LabelType = string> {
|
|
|
2607
2636
|
operators: BaseTranslationWithPlaceholders;
|
|
2608
2637
|
values: BaseTranslationWithPlaceholders;
|
|
2609
2638
|
matchMode: BaseTranslation;
|
|
2610
|
-
matchThreshold: BaseTranslation
|
|
2639
|
+
matchThreshold: BaseTranslation & {
|
|
2640
|
+
placeholderName?: string;
|
|
2641
|
+
};
|
|
2611
2642
|
value: BaseTranslation;
|
|
2612
2643
|
removeRule: BaseTranslationWithLabel<LabelType>;
|
|
2613
2644
|
removeGroup: BaseTranslationWithLabel<LabelType>;
|
|
@@ -3868,6 +3899,8 @@ declare const bigIntJsonParseReviver: (_key: string, value: unknown) => unknown;
|
|
|
3868
3899
|
/**
|
|
3869
3900
|
* Default value processor used by {@link formatQuery} for "sql" format.
|
|
3870
3901
|
*
|
|
3902
|
+
* @deprecated Prefer {@link defaultValueProcessorByRule}.
|
|
3903
|
+
*
|
|
3871
3904
|
* @group Export
|
|
3872
3905
|
*/
|
|
3873
3906
|
declare const defaultValueProcessor: ValueProcessorLegacy;
|