@react-querybuilder/core 8.18.0 → 8.19.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.
Files changed (74) hide show
  1. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +21 -13
  2. package/dist/cjs/react-querybuilder_core.cjs.development.js +200 -199
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  4. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +21 -13
  5. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  7. package/dist/{convertQuery-BoMPXL7_.js → convertQuery-BJKNgecE.js} +2 -2
  8. package/dist/{convertQuery-BoMPXL7_.js.map → convertQuery-BJKNgecE.js.map} +1 -1
  9. package/dist/{convertQuery-CQwOrjQr.mjs → convertQuery-J1CaoDxe.mjs} +2 -2
  10. package/dist/{convertQuery-CQwOrjQr.mjs.map → convertQuery-J1CaoDxe.mjs.map} +1 -1
  11. package/dist/formatQuery.d.mts +2 -2
  12. package/dist/formatQuery.d.ts +2 -2
  13. package/dist/formatQuery.js +195 -197
  14. package/dist/formatQuery.js.map +1 -1
  15. package/dist/formatQuery.mjs +195 -197
  16. package/dist/formatQuery.mjs.map +1 -1
  17. package/dist/{objectUtils-DxVaGCdg.js → objectUtils-DBJI82bl.js} +2 -2
  18. package/dist/objectUtils-DBJI82bl.js.map +1 -0
  19. package/dist/{objectUtils-D-w8MzpZ.mjs → objectUtils-ZvPkF6u6.mjs} +2 -2
  20. package/dist/objectUtils-ZvPkF6u6.mjs.map +1 -0
  21. package/dist/parseCEL.js +3 -3
  22. package/dist/parseCEL.js.map +1 -1
  23. package/dist/parseCEL.mjs +3 -3
  24. package/dist/parseCEL.mjs.map +1 -1
  25. package/dist/parseCypher.js.map +1 -1
  26. package/dist/parseCypher.mjs.map +1 -1
  27. package/dist/parseGremlin.js.map +1 -1
  28. package/dist/parseGremlin.mjs.map +1 -1
  29. package/dist/parseJSONata.js +2 -2
  30. package/dist/parseJSONata.js.map +1 -1
  31. package/dist/parseJSONata.mjs +2 -2
  32. package/dist/parseJSONata.mjs.map +1 -1
  33. package/dist/parseJsonLogic.js +4 -4
  34. package/dist/parseJsonLogic.js.map +1 -1
  35. package/dist/parseJsonLogic.mjs +4 -4
  36. package/dist/parseJsonLogic.mjs.map +1 -1
  37. package/dist/parseMongoDB.js +4 -4
  38. package/dist/parseMongoDB.js.map +1 -1
  39. package/dist/parseMongoDB.mjs +4 -4
  40. package/dist/parseMongoDB.mjs.map +1 -1
  41. package/dist/parseSPARQL.js.map +1 -1
  42. package/dist/parseSPARQL.mjs.map +1 -1
  43. package/dist/parseSQL.js +3 -3
  44. package/dist/parseSQL.js.map +1 -1
  45. package/dist/parseSQL.mjs +3 -3
  46. package/dist/parseSQL.mjs.map +1 -1
  47. package/dist/parseSpEL.js +3 -3
  48. package/dist/parseSpEL.js.map +1 -1
  49. package/dist/parseSpEL.mjs +3 -3
  50. package/dist/parseSpEL.mjs.map +1 -1
  51. package/dist/{prepareQueryObjects-BXf5aV-A.mjs → prepareQueryObjects-Cd_tt4oy.mjs} +3 -3
  52. package/dist/{prepareQueryObjects-BXf5aV-A.mjs.map → prepareQueryObjects-Cd_tt4oy.mjs.map} +1 -1
  53. package/dist/{prepareQueryObjects-gRQqiBPR.js → prepareQueryObjects-DaAXX792.js} +3 -3
  54. package/dist/{prepareQueryObjects-gRQqiBPR.js.map → prepareQueryObjects-DaAXX792.js.map} +1 -1
  55. package/dist/react-querybuilder_core.d.mts +21 -13
  56. package/dist/react-querybuilder_core.legacy-esm.d.ts +21 -13
  57. package/dist/react-querybuilder_core.legacy-esm.js +198 -197
  58. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  59. package/dist/react-querybuilder_core.mjs +200 -199
  60. package/dist/react-querybuilder_core.mjs.map +1 -1
  61. package/dist/react-querybuilder_core.production.d.mts +21 -13
  62. package/dist/react-querybuilder_core.production.mjs +1 -1
  63. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  64. package/dist/transformQuery.js +1 -1
  65. package/dist/transformQuery.mjs +1 -1
  66. package/dist/{utils-ZlKseh1X.js → utils-BpaOtylk.js} +3 -3
  67. package/dist/utils-BpaOtylk.js.map +1 -0
  68. package/dist/{utils-01WaTGBL.mjs → utils-CJRGiPb-.mjs} +3 -3
  69. package/dist/utils-CJRGiPb-.mjs.map +1 -0
  70. package/package.json +8 -8
  71. package/dist/objectUtils-D-w8MzpZ.mjs.map +0 -1
  72. package/dist/objectUtils-DxVaGCdg.js.map +0 -1
  73. package/dist/utils-01WaTGBL.mjs.map +0 -1
  74. package/dist/utils-ZlKseh1X.js.map +0 -1
@@ -1,4 +1,4 @@
1
- const require_objectUtils = require("./objectUtils-DxVaGCdg.js");
1
+ const require_objectUtils = require("./objectUtils-DBJI82bl.js");
2
2
  //#region src/utils/convertQuery.ts
3
3
  const combinatorLevels = [
4
4
  "or",
@@ -91,4 +91,4 @@ Object.defineProperty(exports, "convertToIC", {
91
91
  }
92
92
  });
93
93
 
94
- //# sourceMappingURL=convertQuery-BoMPXL7_.js.map
94
+ //# sourceMappingURL=convertQuery-BJKNgecE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertQuery-BoMPXL7_.js","names":["lc","isRuleGroupType","isRuleGroup","isRuleGroupTypeIC"],"sources":["../src/utils/convertQuery.ts"],"sourcesContent":["import type {\n RuleGroupArray,\n RuleGroupICArray,\n RuleGroupType,\n RuleGroupTypeAny,\n RuleGroupTypeIC,\n RuleType,\n ToRuleGroupType,\n ToRuleGroupTypeIC,\n} from '../types';\nimport { isRuleGroup, isRuleGroupType, isRuleGroupTypeIC } from './isRuleGroup';\nimport { lc } from './misc';\n\nconst combinatorLevels = ['or', 'xor', 'and'] as const;\n\nconst isSameString = (a: unknown, b: string) => lc(a) === b;\n\nconst generateRuleGroupICWithConsistentCombinators = (\n rg: RuleGroupTypeIC,\n baseCombinatorLevel: number = 0\n): RuleGroupTypeIC => {\n const baseCombinator = combinatorLevels[baseCombinatorLevel];\n\n // oxlint-disable-next-line typescript/no-explicit-any\n if (!rg.rules.includes(baseCombinator as any)) {\n // No instances of this combinator, so group based on the next\n // combinator level if at least two levels remain\n return baseCombinatorLevel < combinatorLevels.length - 2\n ? generateRuleGroupICWithConsistentCombinators(rg, baseCombinatorLevel + 1)\n : rg;\n }\n\n const newRules = [...rg.rules] as RuleGroupICArray;\n let cursor = 0;\n\n // Group all chains of combinators in the rule array that are not the base combinator\n while (cursor < newRules.length - 2) {\n if (isSameString(newRules[cursor + 1], baseCombinator)) {\n cursor += 2;\n continue;\n }\n\n let nextBaseCombinatorIndex = -1;\n for (let i = cursor + 2; i < newRules.length; i++) {\n if (typeof newRules[i] === 'string' && lc(newRules[i]) === baseCombinator) {\n nextBaseCombinatorIndex = i;\n break;\n }\n }\n\n if (nextBaseCombinatorIndex === -1) {\n // No more instances of this combinator, so group all remaining rules and exit the loop\n newRules.splice(\n cursor,\n newRules.length,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor) as any },\n baseCombinatorLevel + 1\n )\n );\n break;\n } else {\n // Group all rules between the current cursor and the next instance of the base combinator\n newRules.splice(\n cursor,\n nextBaseCombinatorIndex - cursor,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor, nextBaseCombinatorIndex) as any },\n baseCombinatorLevel + 1\n )\n );\n }\n }\n\n return { ...rg, rules: newRules };\n};\n\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}.\n *\n * This function is idempotent: {@link RuleGroupType} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertFromIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupType<RG> => {\n if (isRuleGroupType(rg)) {\n return rg as ToRuleGroupType<RG>;\n }\n const processedRG = generateRuleGroupICWithConsistentCombinators(rg);\n const rules: RuleGroupArray = [];\n let combinator = 'and';\n for (const [idx, r] of processedRG.rules.entries()) {\n if (typeof r === 'string') {\n if (idx === 1) combinator = r;\n } else {\n rules.push(isRuleGroup(r) ? convertFromIC(r) : r);\n }\n }\n return { ...processedRG, combinator, rules } as ToRuleGroupType<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}.\n *\n * This function is idempotent: {@link RuleGroupTypeIC} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertToIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupTypeIC<RG> => {\n if (isRuleGroupTypeIC(rg)) {\n return rg as ToRuleGroupTypeIC<RG>;\n }\n const { combinator, ...queryWithoutCombinator } = rg;\n const rules: (RuleGroupTypeIC | RuleType | string)[] = [];\n const { length } = rg.rules;\n for (let idx = 0; idx < length; idx++) {\n const r = rg.rules[idx];\n if (isRuleGroup(r)) {\n rules.push(convertToIC(r));\n } else {\n rules.push(r);\n }\n if (combinator && idx < length - 1) {\n rules.push(combinator);\n }\n }\n return { ...queryWithoutCombinator, rules } as ToRuleGroupTypeIC<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}. For a more explicit\n * operation, use {@link convertToIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupType): RuleGroupTypeIC;\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}. For a more explicit\n * operation, use {@link convertFromIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupTypeIC): RuleGroupType;\nfunction convertQuery(query: RuleGroupType | RuleGroupTypeIC): RuleGroupType | RuleGroupTypeIC {\n return isRuleGroupTypeIC(query) ? convertFromIC(query) : convertToIC(query);\n}\n\nexport { convertQuery };\n"],"mappings":";;AAaA,MAAM,mBAAmB;CAAC;CAAM;CAAO;AAAK;AAE5C,MAAM,gBAAgB,GAAY,MAAcA,oBAAAA,GAAG,CAAC,MAAM;AAE1D,MAAM,gDACJ,IACA,sBAA8B,MACV;CACpB,MAAM,iBAAiB,iBAAiB;CAGxC,IAAI,CAAC,GAAG,MAAM,SAAS,cAAqB,GAG1C,OAAO,sBAAsB,iBAAiB,SAAS,IACnD,6CAA6C,IAAI,sBAAsB,CAAC,IACxE;CAGN,MAAM,WAAW,CAAC,GAAG,GAAG,KAAK;CAC7B,IAAI,SAAS;CAGb,OAAO,SAAS,SAAS,SAAS,GAAG;EACnC,IAAI,aAAa,SAAS,SAAS,IAAI,cAAc,GAAG;GACtD,UAAU;GACV;EACF;EAEA,IAAI,0BAA0B;EAC9B,KAAK,IAAI,IAAI,SAAS,GAAG,IAAI,SAAS,QAAQ,KAC5C,IAAI,OAAO,SAAS,OAAO,YAAYA,oBAAAA,GAAG,SAAS,EAAE,MAAM,gBAAgB;GACzE,0BAA0B;GAC1B;EACF;EAGF,IAAI,4BAA4B,IAAI;GAElC,SAAS,OACP,QACA,SAAS,QACT,6CAEE,EAAE,OAAO,SAAS,MAAM,MAAM,EAAS,GACvC,sBAAsB,CACxB,CACF;GACA;EACF,OAEE,SAAS,OACP,QACA,0BAA0B,QAC1B,6CAEE,EAAE,OAAO,SAAS,MAAM,QAAQ,uBAAuB,EAAS,GAChE,sBAAsB,CACxB,CACF;CAEJ;CAEA,OAAO;EAAE,GAAG;EAAI,OAAO;CAAS;AAClC;;;;;;;;;AAUA,MAAa,iBAA8C,OAAgC;CACzF,IAAIC,oBAAAA,gBAAgB,EAAE,GACpB,OAAO;CAET,MAAM,cAAc,6CAA6C,EAAE;CACnE,MAAM,QAAwB,CAAC;CAC/B,IAAI,aAAa;CACjB,KAAK,MAAM,CAAC,KAAK,MAAM,YAAY,MAAM,QAAQ,GAC/C,IAAI,OAAO,MAAM;MACX,QAAQ,GAAG,aAAa;CAAA,OAE5B,MAAM,KAAKC,oBAAAA,YAAY,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;CAGpD,OAAO;EAAE,GAAG;EAAa;EAAY;CAAM;AAC7C;;;;;;;;;AAUA,MAAa,eAA4C,OAAkC;CACzF,IAAIC,oBAAAA,kBAAkB,EAAE,GACtB,OAAO;CAET,MAAM,EAAE,YAAY,GAAG,2BAA2B;CAClD,MAAM,QAAiD,CAAC;CACxD,MAAM,EAAE,WAAW,GAAG;CACtB,KAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO;EACrC,MAAM,IAAI,GAAG,MAAM;EACnB,IAAID,oBAAAA,YAAY,CAAC,GACf,MAAM,KAAK,YAAY,CAAC,CAAC;OAEzB,MAAM,KAAK,CAAC;EAEd,IAAI,cAAc,MAAM,SAAS,GAC/B,MAAM,KAAK,UAAU;CAEzB;CACA,OAAO;EAAE,GAAG;EAAwB;CAAM;AAC5C"}
1
+ {"version":3,"file":"convertQuery-BJKNgecE.js","names":["lc","isRuleGroupType","isRuleGroup","isRuleGroupTypeIC"],"sources":["../src/utils/convertQuery.ts"],"sourcesContent":["import type {\n RuleGroupArray,\n RuleGroupICArray,\n RuleGroupType,\n RuleGroupTypeAny,\n RuleGroupTypeIC,\n RuleType,\n ToRuleGroupType,\n ToRuleGroupTypeIC,\n} from '../types';\nimport { isRuleGroup, isRuleGroupType, isRuleGroupTypeIC } from './isRuleGroup';\nimport { lc } from './misc';\n\nconst combinatorLevels = ['or', 'xor', 'and'] as const;\n\nconst isSameString = (a: unknown, b: string) => lc(a) === b;\n\nconst generateRuleGroupICWithConsistentCombinators = (\n rg: RuleGroupTypeIC,\n baseCombinatorLevel: number = 0\n): RuleGroupTypeIC => {\n const baseCombinator = combinatorLevels[baseCombinatorLevel];\n\n // oxlint-disable-next-line typescript/no-explicit-any\n if (!rg.rules.includes(baseCombinator as any)) {\n // No instances of this combinator, so group based on the next\n // combinator level if at least two levels remain\n return baseCombinatorLevel < combinatorLevels.length - 2\n ? generateRuleGroupICWithConsistentCombinators(rg, baseCombinatorLevel + 1)\n : rg;\n }\n\n const newRules = [...rg.rules] as RuleGroupICArray;\n let cursor = 0;\n\n // Group all chains of combinators in the rule array that are not the base combinator\n while (cursor < newRules.length - 2) {\n if (isSameString(newRules[cursor + 1], baseCombinator)) {\n cursor += 2;\n continue;\n }\n\n let nextBaseCombinatorIndex = -1;\n for (let i = cursor + 2; i < newRules.length; i++) {\n if (typeof newRules[i] === 'string' && lc(newRules[i]) === baseCombinator) {\n nextBaseCombinatorIndex = i;\n break;\n }\n }\n\n if (nextBaseCombinatorIndex === -1) {\n // No more instances of this combinator, so group all remaining rules and exit the loop\n newRules.splice(\n cursor,\n newRules.length,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor) as any },\n baseCombinatorLevel + 1\n )\n );\n break;\n } else {\n // Group all rules between the current cursor and the next instance of the base combinator\n newRules.splice(\n cursor,\n nextBaseCombinatorIndex - cursor,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor, nextBaseCombinatorIndex) as any },\n baseCombinatorLevel + 1\n )\n );\n }\n }\n\n return { ...rg, rules: newRules };\n};\n\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}.\n *\n * This function is idempotent: {@link RuleGroupType} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertFromIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupType<RG> => {\n if (isRuleGroupType(rg)) {\n return rg as ToRuleGroupType<RG>;\n }\n const processedRG = generateRuleGroupICWithConsistentCombinators(rg);\n const rules: RuleGroupArray = [];\n let combinator = 'and';\n for (const [idx, r] of processedRG.rules.entries()) {\n if (typeof r === 'string') {\n if (idx === 1) combinator = r;\n } else {\n rules.push(isRuleGroup(r) ? convertFromIC(r) : r);\n }\n }\n return { ...processedRG, combinator, rules } as ToRuleGroupType<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}.\n *\n * This function is idempotent: {@link RuleGroupTypeIC} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertToIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupTypeIC<RG> => {\n if (isRuleGroupTypeIC(rg)) {\n return rg as ToRuleGroupTypeIC<RG>;\n }\n const { combinator, ...queryWithoutCombinator } = rg;\n const rules: (RuleGroupTypeIC | RuleType | string)[] = [];\n const { length } = rg.rules;\n for (let idx = 0; idx < length; idx++) {\n const r = rg.rules[idx];\n if (isRuleGroup(r)) {\n rules.push(convertToIC(r));\n } else {\n rules.push(r);\n }\n if (combinator && idx < length - 1) {\n rules.push(combinator);\n }\n }\n return { ...queryWithoutCombinator, rules } as ToRuleGroupTypeIC<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}. For a more explicit\n * operation, use {@link convertToIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupType): RuleGroupTypeIC;\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}. For a more explicit\n * operation, use {@link convertFromIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupTypeIC): RuleGroupType;\nfunction convertQuery(query: RuleGroupType | RuleGroupTypeIC): RuleGroupType | RuleGroupTypeIC {\n return isRuleGroupTypeIC(query) ? convertFromIC(query) : convertToIC(query);\n}\n\nexport { convertQuery };\n"],"mappings":";;AAaA,MAAM,mBAAmB;CAAC;CAAM;CAAO;AAAK;AAE5C,MAAM,gBAAgB,GAAY,MAAcA,oBAAAA,GAAG,CAAC,MAAM;AAE1D,MAAM,gDACJ,IACA,sBAA8B,MACV;CACpB,MAAM,iBAAiB,iBAAiB;CAGxC,IAAI,CAAC,GAAG,MAAM,SAAS,cAAqB,GAG1C,OAAO,sBAAsB,iBAAiB,SAAS,IACnD,6CAA6C,IAAI,sBAAsB,CAAC,IACxE;CAGN,MAAM,WAAW,CAAC,GAAG,GAAG,KAAK;CAC7B,IAAI,SAAS;CAGb,OAAO,SAAS,SAAS,SAAS,GAAG;EACnC,IAAI,aAAa,SAAS,SAAS,IAAI,cAAc,GAAG;GACtD,UAAU;GACV;EACF;EAEA,IAAI,0BAA0B;EAC9B,KAAK,IAAI,IAAI,SAAS,GAAG,IAAI,SAAS,QAAQ,KAC5C,IAAI,OAAO,SAAS,OAAO,YAAYA,oBAAAA,GAAG,SAAS,EAAE,MAAM,gBAAgB;GACzE,0BAA0B;GAC1B;EACF;EAGF,IAAI,4BAA4B,IAAI;GAElC,SAAS,OACP,QACA,SAAS,QACT,6CAEE,EAAE,OAAO,SAAS,MAAM,MAAM,EAAS,GACvC,sBAAsB,CACxB,CACF;GACA;EACF,OAEE,SAAS,OACP,QACA,0BAA0B,QAC1B,6CAEE,EAAE,OAAO,SAAS,MAAM,QAAQ,uBAAuB,EAAS,GAChE,sBAAsB,CACxB,CACF;CAEJ;CAEA,OAAO;EAAE,GAAG;EAAI,OAAO;CAAS;AAClC;;;;;;;;;AAUA,MAAa,iBAA8C,OAAgC;CACzF,IAAIC,oBAAAA,gBAAgB,EAAE,GACpB,OAAO;CAET,MAAM,cAAc,6CAA6C,EAAE;CACnE,MAAM,QAAwB,CAAC;CAC/B,IAAI,aAAa;CACjB,KAAK,MAAM,CAAC,KAAK,MAAM,YAAY,MAAM,QAAQ,GAC/C,IAAI,OAAO,MAAM;MACX,QAAQ,GAAG,aAAa;CAAA,OAE5B,MAAM,KAAKC,oBAAAA,YAAY,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;CAGpD,OAAO;EAAE,GAAG;EAAa;EAAY;CAAM;AAC7C;;;;;;;;;AAUA,MAAa,eAA4C,OAAkC;CACzF,IAAIC,oBAAAA,kBAAkB,EAAE,GACtB,OAAO;CAET,MAAM,EAAE,YAAY,GAAG,2BAA2B;CAClD,MAAM,QAAiD,CAAC;CACxD,MAAM,EAAE,WAAW,GAAG;CACtB,KAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO;EACrC,MAAM,IAAI,GAAG,MAAM;EACnB,IAAID,oBAAAA,YAAY,CAAC,GACf,MAAM,KAAK,YAAY,CAAC,CAAC;OAEzB,MAAM,KAAK,CAAC;EAEd,IAAI,cAAc,MAAM,SAAS,GAC/B,MAAM,KAAK,UAAU;CAEzB;CACA,OAAO;EAAE,GAAG;EAAwB;CAAM;AAC5C"}
@@ -1,4 +1,4 @@
1
- import { a as isRuleGroupTypeIC, i as isRuleGroupType, r as isRuleGroup, s as lc } from "./objectUtils-D-w8MzpZ.mjs";
1
+ import { a as isRuleGroupTypeIC, i as isRuleGroupType, r as isRuleGroup, s as lc } from "./objectUtils-ZvPkF6u6.mjs";
2
2
  //#region src/utils/convertQuery.ts
3
3
  const combinatorLevels = [
4
4
  "or",
@@ -80,4 +80,4 @@ const convertToIC = (rg) => {
80
80
  //#endregion
81
81
  export { convertToIC as n, convertFromIC as t };
82
82
 
83
- //# sourceMappingURL=convertQuery-CQwOrjQr.mjs.map
83
+ //# sourceMappingURL=convertQuery-J1CaoDxe.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertQuery-CQwOrjQr.mjs","names":[],"sources":["../src/utils/convertQuery.ts"],"sourcesContent":["import type {\n RuleGroupArray,\n RuleGroupICArray,\n RuleGroupType,\n RuleGroupTypeAny,\n RuleGroupTypeIC,\n RuleType,\n ToRuleGroupType,\n ToRuleGroupTypeIC,\n} from '../types';\nimport { isRuleGroup, isRuleGroupType, isRuleGroupTypeIC } from './isRuleGroup';\nimport { lc } from './misc';\n\nconst combinatorLevels = ['or', 'xor', 'and'] as const;\n\nconst isSameString = (a: unknown, b: string) => lc(a) === b;\n\nconst generateRuleGroupICWithConsistentCombinators = (\n rg: RuleGroupTypeIC,\n baseCombinatorLevel: number = 0\n): RuleGroupTypeIC => {\n const baseCombinator = combinatorLevels[baseCombinatorLevel];\n\n // oxlint-disable-next-line typescript/no-explicit-any\n if (!rg.rules.includes(baseCombinator as any)) {\n // No instances of this combinator, so group based on the next\n // combinator level if at least two levels remain\n return baseCombinatorLevel < combinatorLevels.length - 2\n ? generateRuleGroupICWithConsistentCombinators(rg, baseCombinatorLevel + 1)\n : rg;\n }\n\n const newRules = [...rg.rules] as RuleGroupICArray;\n let cursor = 0;\n\n // Group all chains of combinators in the rule array that are not the base combinator\n while (cursor < newRules.length - 2) {\n if (isSameString(newRules[cursor + 1], baseCombinator)) {\n cursor += 2;\n continue;\n }\n\n let nextBaseCombinatorIndex = -1;\n for (let i = cursor + 2; i < newRules.length; i++) {\n if (typeof newRules[i] === 'string' && lc(newRules[i]) === baseCombinator) {\n nextBaseCombinatorIndex = i;\n break;\n }\n }\n\n if (nextBaseCombinatorIndex === -1) {\n // No more instances of this combinator, so group all remaining rules and exit the loop\n newRules.splice(\n cursor,\n newRules.length,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor) as any },\n baseCombinatorLevel + 1\n )\n );\n break;\n } else {\n // Group all rules between the current cursor and the next instance of the base combinator\n newRules.splice(\n cursor,\n nextBaseCombinatorIndex - cursor,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor, nextBaseCombinatorIndex) as any },\n baseCombinatorLevel + 1\n )\n );\n }\n }\n\n return { ...rg, rules: newRules };\n};\n\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}.\n *\n * This function is idempotent: {@link RuleGroupType} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertFromIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupType<RG> => {\n if (isRuleGroupType(rg)) {\n return rg as ToRuleGroupType<RG>;\n }\n const processedRG = generateRuleGroupICWithConsistentCombinators(rg);\n const rules: RuleGroupArray = [];\n let combinator = 'and';\n for (const [idx, r] of processedRG.rules.entries()) {\n if (typeof r === 'string') {\n if (idx === 1) combinator = r;\n } else {\n rules.push(isRuleGroup(r) ? convertFromIC(r) : r);\n }\n }\n return { ...processedRG, combinator, rules } as ToRuleGroupType<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}.\n *\n * This function is idempotent: {@link RuleGroupTypeIC} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertToIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupTypeIC<RG> => {\n if (isRuleGroupTypeIC(rg)) {\n return rg as ToRuleGroupTypeIC<RG>;\n }\n const { combinator, ...queryWithoutCombinator } = rg;\n const rules: (RuleGroupTypeIC | RuleType | string)[] = [];\n const { length } = rg.rules;\n for (let idx = 0; idx < length; idx++) {\n const r = rg.rules[idx];\n if (isRuleGroup(r)) {\n rules.push(convertToIC(r));\n } else {\n rules.push(r);\n }\n if (combinator && idx < length - 1) {\n rules.push(combinator);\n }\n }\n return { ...queryWithoutCombinator, rules } as ToRuleGroupTypeIC<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}. For a more explicit\n * operation, use {@link convertToIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupType): RuleGroupTypeIC;\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}. For a more explicit\n * operation, use {@link convertFromIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupTypeIC): RuleGroupType;\nfunction convertQuery(query: RuleGroupType | RuleGroupTypeIC): RuleGroupType | RuleGroupTypeIC {\n return isRuleGroupTypeIC(query) ? convertFromIC(query) : convertToIC(query);\n}\n\nexport { convertQuery };\n"],"mappings":";;AAaA,MAAM,mBAAmB;CAAC;CAAM;CAAO;AAAK;AAE5C,MAAM,gBAAgB,GAAY,MAAc,GAAG,CAAC,MAAM;AAE1D,MAAM,gDACJ,IACA,sBAA8B,MACV;CACpB,MAAM,iBAAiB,iBAAiB;CAGxC,IAAI,CAAC,GAAG,MAAM,SAAS,cAAqB,GAG1C,OAAO,sBAAsB,iBAAiB,SAAS,IACnD,6CAA6C,IAAI,sBAAsB,CAAC,IACxE;CAGN,MAAM,WAAW,CAAC,GAAG,GAAG,KAAK;CAC7B,IAAI,SAAS;CAGb,OAAO,SAAS,SAAS,SAAS,GAAG;EACnC,IAAI,aAAa,SAAS,SAAS,IAAI,cAAc,GAAG;GACtD,UAAU;GACV;EACF;EAEA,IAAI,0BAA0B;EAC9B,KAAK,IAAI,IAAI,SAAS,GAAG,IAAI,SAAS,QAAQ,KAC5C,IAAI,OAAO,SAAS,OAAO,YAAY,GAAG,SAAS,EAAE,MAAM,gBAAgB;GACzE,0BAA0B;GAC1B;EACF;EAGF,IAAI,4BAA4B,IAAI;GAElC,SAAS,OACP,QACA,SAAS,QACT,6CAEE,EAAE,OAAO,SAAS,MAAM,MAAM,EAAS,GACvC,sBAAsB,CACxB,CACF;GACA;EACF,OAEE,SAAS,OACP,QACA,0BAA0B,QAC1B,6CAEE,EAAE,OAAO,SAAS,MAAM,QAAQ,uBAAuB,EAAS,GAChE,sBAAsB,CACxB,CACF;CAEJ;CAEA,OAAO;EAAE,GAAG;EAAI,OAAO;CAAS;AAClC;;;;;;;;;AAUA,MAAa,iBAA8C,OAAgC;CACzF,IAAI,gBAAgB,EAAE,GACpB,OAAO;CAET,MAAM,cAAc,6CAA6C,EAAE;CACnE,MAAM,QAAwB,CAAC;CAC/B,IAAI,aAAa;CACjB,KAAK,MAAM,CAAC,KAAK,MAAM,YAAY,MAAM,QAAQ,GAC/C,IAAI,OAAO,MAAM;MACX,QAAQ,GAAG,aAAa;CAAA,OAE5B,MAAM,KAAK,YAAY,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;CAGpD,OAAO;EAAE,GAAG;EAAa;EAAY;CAAM;AAC7C;;;;;;;;;AAUA,MAAa,eAA4C,OAAkC;CACzF,IAAI,kBAAkB,EAAE,GACtB,OAAO;CAET,MAAM,EAAE,YAAY,GAAG,2BAA2B;CAClD,MAAM,QAAiD,CAAC;CACxD,MAAM,EAAE,WAAW,GAAG;CACtB,KAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO;EACrC,MAAM,IAAI,GAAG,MAAM;EACnB,IAAI,YAAY,CAAC,GACf,MAAM,KAAK,YAAY,CAAC,CAAC;OAEzB,MAAM,KAAK,CAAC;EAEd,IAAI,cAAc,MAAM,SAAS,GAC/B,MAAM,KAAK,UAAU;CAEzB;CACA,OAAO;EAAE,GAAG;EAAwB;CAAM;AAC5C"}
1
+ {"version":3,"file":"convertQuery-J1CaoDxe.mjs","names":[],"sources":["../src/utils/convertQuery.ts"],"sourcesContent":["import type {\n RuleGroupArray,\n RuleGroupICArray,\n RuleGroupType,\n RuleGroupTypeAny,\n RuleGroupTypeIC,\n RuleType,\n ToRuleGroupType,\n ToRuleGroupTypeIC,\n} from '../types';\nimport { isRuleGroup, isRuleGroupType, isRuleGroupTypeIC } from './isRuleGroup';\nimport { lc } from './misc';\n\nconst combinatorLevels = ['or', 'xor', 'and'] as const;\n\nconst isSameString = (a: unknown, b: string) => lc(a) === b;\n\nconst generateRuleGroupICWithConsistentCombinators = (\n rg: RuleGroupTypeIC,\n baseCombinatorLevel: number = 0\n): RuleGroupTypeIC => {\n const baseCombinator = combinatorLevels[baseCombinatorLevel];\n\n // oxlint-disable-next-line typescript/no-explicit-any\n if (!rg.rules.includes(baseCombinator as any)) {\n // No instances of this combinator, so group based on the next\n // combinator level if at least two levels remain\n return baseCombinatorLevel < combinatorLevels.length - 2\n ? generateRuleGroupICWithConsistentCombinators(rg, baseCombinatorLevel + 1)\n : rg;\n }\n\n const newRules = [...rg.rules] as RuleGroupICArray;\n let cursor = 0;\n\n // Group all chains of combinators in the rule array that are not the base combinator\n while (cursor < newRules.length - 2) {\n if (isSameString(newRules[cursor + 1], baseCombinator)) {\n cursor += 2;\n continue;\n }\n\n let nextBaseCombinatorIndex = -1;\n for (let i = cursor + 2; i < newRules.length; i++) {\n if (typeof newRules[i] === 'string' && lc(newRules[i]) === baseCombinator) {\n nextBaseCombinatorIndex = i;\n break;\n }\n }\n\n if (nextBaseCombinatorIndex === -1) {\n // No more instances of this combinator, so group all remaining rules and exit the loop\n newRules.splice(\n cursor,\n newRules.length,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor) as any },\n baseCombinatorLevel + 1\n )\n );\n break;\n } else {\n // Group all rules between the current cursor and the next instance of the base combinator\n newRules.splice(\n cursor,\n nextBaseCombinatorIndex - cursor,\n generateRuleGroupICWithConsistentCombinators(\n // oxlint-disable-next-line typescript/no-explicit-any\n { rules: newRules.slice(cursor, nextBaseCombinatorIndex) as any },\n baseCombinatorLevel + 1\n )\n );\n }\n }\n\n return { ...rg, rules: newRules };\n};\n\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}.\n *\n * This function is idempotent: {@link RuleGroupType} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertFromIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupType<RG> => {\n if (isRuleGroupType(rg)) {\n return rg as ToRuleGroupType<RG>;\n }\n const processedRG = generateRuleGroupICWithConsistentCombinators(rg);\n const rules: RuleGroupArray = [];\n let combinator = 'and';\n for (const [idx, r] of processedRG.rules.entries()) {\n if (typeof r === 'string') {\n if (idx === 1) combinator = r;\n } else {\n rules.push(isRuleGroup(r) ? convertFromIC(r) : r);\n }\n }\n return { ...processedRG, combinator, rules } as ToRuleGroupType<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}.\n *\n * This function is idempotent: {@link RuleGroupTypeIC} queries will be\n * returned as-is.\n *\n * @group Query Tools\n */\nexport const convertToIC = <RG extends RuleGroupTypeAny>(rg: RG): ToRuleGroupTypeIC<RG> => {\n if (isRuleGroupTypeIC(rg)) {\n return rg as ToRuleGroupTypeIC<RG>;\n }\n const { combinator, ...queryWithoutCombinator } = rg;\n const rules: (RuleGroupTypeIC | RuleType | string)[] = [];\n const { length } = rg.rules;\n for (let idx = 0; idx < length; idx++) {\n const r = rg.rules[idx];\n if (isRuleGroup(r)) {\n rules.push(convertToIC(r));\n } else {\n rules.push(r);\n }\n if (combinator && idx < length - 1) {\n rules.push(combinator);\n }\n }\n return { ...queryWithoutCombinator, rules } as ToRuleGroupTypeIC<RG>;\n};\n\n/**\n * Converts a {@link RuleGroupType} to {@link RuleGroupTypeIC}. For a more explicit\n * operation, use {@link convertToIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupType): RuleGroupTypeIC;\n/**\n * Converts a {@link RuleGroupTypeIC} to {@link RuleGroupType}. For a more explicit\n * operation, use {@link convertFromIC}.\n *\n * @group Query Tools\n */\nfunction convertQuery(query: RuleGroupTypeIC): RuleGroupType;\nfunction convertQuery(query: RuleGroupType | RuleGroupTypeIC): RuleGroupType | RuleGroupTypeIC {\n return isRuleGroupTypeIC(query) ? convertFromIC(query) : convertToIC(query);\n}\n\nexport { convertQuery };\n"],"mappings":";;AAaA,MAAM,mBAAmB;CAAC;CAAM;CAAO;AAAK;AAE5C,MAAM,gBAAgB,GAAY,MAAc,GAAG,CAAC,MAAM;AAE1D,MAAM,gDACJ,IACA,sBAA8B,MACV;CACpB,MAAM,iBAAiB,iBAAiB;CAGxC,IAAI,CAAC,GAAG,MAAM,SAAS,cAAqB,GAG1C,OAAO,sBAAsB,iBAAiB,SAAS,IACnD,6CAA6C,IAAI,sBAAsB,CAAC,IACxE;CAGN,MAAM,WAAW,CAAC,GAAG,GAAG,KAAK;CAC7B,IAAI,SAAS;CAGb,OAAO,SAAS,SAAS,SAAS,GAAG;EACnC,IAAI,aAAa,SAAS,SAAS,IAAI,cAAc,GAAG;GACtD,UAAU;GACV;EACF;EAEA,IAAI,0BAA0B;EAC9B,KAAK,IAAI,IAAI,SAAS,GAAG,IAAI,SAAS,QAAQ,KAC5C,IAAI,OAAO,SAAS,OAAO,YAAY,GAAG,SAAS,EAAE,MAAM,gBAAgB;GACzE,0BAA0B;GAC1B;EACF;EAGF,IAAI,4BAA4B,IAAI;GAElC,SAAS,OACP,QACA,SAAS,QACT,6CAEE,EAAE,OAAO,SAAS,MAAM,MAAM,EAAS,GACvC,sBAAsB,CACxB,CACF;GACA;EACF,OAEE,SAAS,OACP,QACA,0BAA0B,QAC1B,6CAEE,EAAE,OAAO,SAAS,MAAM,QAAQ,uBAAuB,EAAS,GAChE,sBAAsB,CACxB,CACF;CAEJ;CAEA,OAAO;EAAE,GAAG;EAAI,OAAO;CAAS;AAClC;;;;;;;;;AAUA,MAAa,iBAA8C,OAAgC;CACzF,IAAI,gBAAgB,EAAE,GACpB,OAAO;CAET,MAAM,cAAc,6CAA6C,EAAE;CACnE,MAAM,QAAwB,CAAC;CAC/B,IAAI,aAAa;CACjB,KAAK,MAAM,CAAC,KAAK,MAAM,YAAY,MAAM,QAAQ,GAC/C,IAAI,OAAO,MAAM;MACX,QAAQ,GAAG,aAAa;CAAA,OAE5B,MAAM,KAAK,YAAY,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;CAGpD,OAAO;EAAE,GAAG;EAAa;EAAY;CAAM;AAC7C;;;;;;;;;AAUA,MAAa,eAA4C,OAAkC;CACzF,IAAI,kBAAkB,EAAE,GACtB,OAAO;CAET,MAAM,EAAE,YAAY,GAAG,2BAA2B;CAClD,MAAM,QAAiD,CAAC;CACxD,MAAM,EAAE,WAAW,GAAG;CACtB,KAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO;EACrC,MAAM,IAAI,GAAG,MAAM;EACnB,IAAI,YAAY,CAAC,GACf,MAAM,KAAK,YAAY,CAAC,CAAC;OAEzB,MAAM,KAAK,CAAC;EAEd,IAAI,cAAc,MAAM,SAAS,GAC/B,MAAM,KAAK,UAAU;CAEzB;CACA,OAAO;EAAE,GAAG;EAAwB;CAAM;AAC5C"}
@@ -644,7 +644,7 @@ declare const numerifyValues: (rg: RuleGroupTypeAny, options: SetRequired<Format
644
644
  *
645
645
  * @group Export
646
646
  */
647
- declare const isValidValue: (value: any) => boolean;
647
+ declare const isValidValue: (value: unknown) => boolean;
648
648
  /**
649
649
  * Determines whether {@link formatQuery} should render the given value as a number.
650
650
  * As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and
@@ -652,7 +652,7 @@ declare const isValidValue: (value: any) => boolean;
652
652
  *
653
653
  * @group Export
654
654
  */
655
- declare const shouldRenderAsNumber: (value: any, parseNumbers?: boolean) => boolean;
655
+ declare const shouldRenderAsNumber: (value: unknown, parseNumbers?: boolean) => boolean;
656
656
  /**
657
657
  * Used by {@link formatQuery} to determine whether the given value processor is a
658
658
  * "legacy" value processor by counting the number of arguments. Legacy value
@@ -644,7 +644,7 @@ declare const numerifyValues: (rg: RuleGroupTypeAny, options: SetRequired<Format
644
644
  *
645
645
  * @group Export
646
646
  */
647
- declare const isValidValue: (value: any) => boolean;
647
+ declare const isValidValue: (value: unknown) => boolean;
648
648
  /**
649
649
  * Determines whether {@link formatQuery} should render the given value as a number.
650
650
  * As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and
@@ -652,7 +652,7 @@ declare const isValidValue: (value: any) => boolean;
652
652
  *
653
653
  * @group Export
654
654
  */
655
- declare const shouldRenderAsNumber: (value: any, parseNumbers?: boolean) => boolean;
655
+ declare const shouldRenderAsNumber: (value: unknown, parseNumbers?: boolean) => boolean;
656
656
  /**
657
657
  * Used by {@link formatQuery} to determine whether the given value processor is a
658
658
  * "legacy" value processor by counting the number of arguments. Legacy value
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_utils = require("./utils-ZlKseh1X.js");
3
- const require_objectUtils = require("./objectUtils-DxVaGCdg.js");
2
+ const require_utils = require("./utils-BpaOtylk.js");
3
+ const require_objectUtils = require("./objectUtils-DBJI82bl.js");
4
4
  const require_transformQuery = require("./transformQuery.js");
5
- const require_convertQuery = require("./convertQuery-BoMPXL7_.js");
5
+ const require_convertQuery = require("./convertQuery-BJKNgecE.js");
6
6
  //#region src/utils/isRuleOrGroupValid.ts
7
7
  /**
8
8
  * Determines if an object is useful as a validation result.
@@ -601,106 +601,6 @@ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
601
601
  return processRuleGroup(ruleGroup, true);
602
602
  };
603
603
  //#endregion
604
- //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
605
- /**
606
- * Default rule processor used by {@link formatQuery} for the "drizzle" format.
607
- *
608
- * @group Export
609
- */
610
- const defaultRuleProcessorDrizzle = (rule, _options) => {
611
- const opts = _options ?? ( /* v8 ignore start -- @preserve */ {});
612
- // v8 ignore next
613
- const { parseNumbers, preserveValueOrder, context = {} } = opts;
614
- const { columns, drizzleOperators, useRawFields } = context;
615
- if (!columns || !drizzleOperators) return void 0;
616
- const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
617
- const { field, operator, value, valueSource } = rule;
618
- const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
619
- const operatorLC = require_objectUtils.lc(operator);
620
- const valueIsField = valueSource === "field";
621
- const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
622
- const maybeParseNumber = (v) => {
623
- if (valueIsField || !parseNumbers) return asFieldOrValue(v);
624
- return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
625
- };
626
- if (!column) return void 0;
627
- const matchEval = require_utils.processMatchMode(rule);
628
- if (matchEval === false) return;
629
- else if (matchEval) {
630
- if (opts.preset !== "postgresql") return void 0;
631
- const { mode, threshold } = matchEval;
632
- const arrayElementAlias = "elem_alias";
633
- const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
634
- ...r,
635
- field: arrayElementAlias
636
- }) }), {
637
- ...opts,
638
- context: {
639
- ...opts.context,
640
- useRawFields: true
641
- }
642
- });
643
- switch (mode) {
644
- case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
645
- case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
646
- case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
647
- case "atleast":
648
- case "atmost":
649
- case "exactly": {
650
- const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
651
- return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
652
- }
653
- }
654
- }
655
- switch (operatorLC) {
656
- case "=": return eq(column, maybeParseNumber(value));
657
- case "!=": return ne(column, maybeParseNumber(value));
658
- case ">": return gt(column, maybeParseNumber(value));
659
- case "<": return lt(column, maybeParseNumber(value));
660
- case ">=": return gte(column, maybeParseNumber(value));
661
- case "<=": return lte(column, maybeParseNumber(value));
662
- case "beginswith":
663
- case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
664
- case "contains":
665
- case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
666
- case "endswith":
667
- case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
668
- case "null": return isNull(column);
669
- case "notnull": return isNotNull(column);
670
- case "in":
671
- case "notin": {
672
- const valueAsArray = require_utils.toArray(value).map((v) => maybeParseNumber(v));
673
- return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
674
- }
675
- case "between":
676
- case "notbetween": {
677
- const valueAsArray = require_utils.toArray(value);
678
- if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
679
- let [first, second] = valueAsArray;
680
- const shouldParseNumbers = !(parseNumbers === false);
681
- if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
682
- const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
683
- const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
684
- if (!preserveValueOrder && secondNum < firstNum) {
685
- const tempNum = secondNum;
686
- second = firstNum;
687
- first = tempNum;
688
- } else {
689
- first = firstNum;
690
- second = secondNum;
691
- }
692
- } else if (valueIsField) {
693
- first = asFieldOrValue(first);
694
- second = asFieldOrValue(second);
695
- }
696
- return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
697
- }
698
- return;
699
- }
700
- default: return;
701
- }
702
- };
703
- //#endregion
704
604
  //#region src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts
705
605
  /**
706
606
  * Default rule group processor used by {@link formatQuery} for the "drizzle" format. The returned
@@ -715,10 +615,9 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
715
615
  * @group Export
716
616
  */
717
617
  const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
718
- const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
618
+ const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, ruleProcessor } = options;
719
619
  if (!columns || !drizzleOperators) return void 0;
720
620
  const { and, not, or } = drizzleOperators;
721
- const ruleProcessor = defaultRuleProcessorDrizzle;
722
621
  const processRuleGroup = (rg, _outermost) => {
723
622
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
724
623
  const processedRules = rg.rules.map((rule) => {
@@ -1334,96 +1233,6 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
1334
1233
  return processRuleGroup(ruleGroup, true);
1335
1234
  };
1336
1235
  //#endregion
1337
- //#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
1338
- /**
1339
- * Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
1340
- *
1341
- * @group Export
1342
- */
1343
- const defaultRuleProcessorTanStackDB = (rule, _options) => {
1344
- const { parseNumbers, preserveValueOrder, context = {} } = _options ?? ( /* v8 ignore start -- @preserve */ {});
1345
- const ops = context.tanStackDbOperators;
1346
- const refs = context._tanstackDbRefs;
1347
- const primaryRef = context._tanstackDbPrimaryRef;
1348
- if (!ops || !refs || !primaryRef) return void 0;
1349
- const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
1350
- const resolveField = (fieldName) => {
1351
- const dotIdx = fieldName.indexOf(".");
1352
- if (dotIdx > 0) {
1353
- const prefix = fieldName.slice(0, dotIdx);
1354
- const rest = fieldName.slice(dotIdx + 1);
1355
- if (refs[prefix]) return refs[prefix][rest];
1356
- }
1357
- return refs[primaryRef][fieldName];
1358
- };
1359
- const { field, operator, value, valueSource } = rule;
1360
- const column = resolveField(field);
1361
- const operatorLC = require_objectUtils.lc(operator);
1362
- const valueIsField = valueSource === "field";
1363
- const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
1364
- const maybeParseNumber = (v) => {
1365
- if (valueIsField || !parseNumbers) return asFieldOrValue(v);
1366
- return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
1367
- };
1368
- switch (operatorLC) {
1369
- case "=": return eq(column, maybeParseNumber(value));
1370
- case "!=": return not(eq(column, maybeParseNumber(value)));
1371
- case ">": return gt(column, maybeParseNumber(value));
1372
- case "<": return lt(column, maybeParseNumber(value));
1373
- case ">=": return gte(column, maybeParseNumber(value));
1374
- case "<=": return lte(column, maybeParseNumber(value));
1375
- case "beginswith":
1376
- case "doesnotbeginwith": {
1377
- const expr = like(column, valueIsField ? void 0 : `${value}%`);
1378
- return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
1379
- }
1380
- case "contains":
1381
- case "doesnotcontain": {
1382
- const expr = like(column, valueIsField ? void 0 : `%${value}%`);
1383
- return operatorLC === "doesnotcontain" ? not(expr) : expr;
1384
- }
1385
- case "endswith":
1386
- case "doesnotendwith": {
1387
- const expr = like(column, valueIsField ? void 0 : `%${value}`);
1388
- return operatorLC === "doesnotendwith" ? not(expr) : expr;
1389
- }
1390
- case "null": return isNull(column);
1391
- case "notnull": return not(isNull(column));
1392
- case "in":
1393
- case "notin": {
1394
- const expr = inArray(column, require_utils.toArray(value).map((v) => maybeParseNumber(v)));
1395
- return operatorLC === "notin" ? not(expr) : expr;
1396
- }
1397
- case "between":
1398
- case "notbetween": {
1399
- const valueAsArray = require_utils.toArray(value);
1400
- if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
1401
- let [first, second] = valueAsArray;
1402
- const shouldParseNumbers = !(parseNumbers === false);
1403
- if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
1404
- const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
1405
- const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
1406
- if (!preserveValueOrder && secondNum < firstNum) {
1407
- const tempNum = secondNum;
1408
- second = firstNum;
1409
- first = tempNum;
1410
- } else {
1411
- first = firstNum;
1412
- second = secondNum;
1413
- }
1414
- } else if (valueIsField) {
1415
- first = asFieldOrValue(first);
1416
- second = asFieldOrValue(second);
1417
- }
1418
- const expr = and(gte(column, first), lte(column, second));
1419
- return operatorLC === "notbetween" ? not(expr) : expr;
1420
- }
1421
- return;
1422
- }
1423
- default: return;
1424
- }
1425
- };
1426
- //#endregion
1427
1236
  //#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
1428
1237
  /**
1429
1238
  * Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
@@ -1436,7 +1245,7 @@ const defaultRuleProcessorTanStackDB = (rule, _options) => {
1436
1245
  * @group Export
1437
1246
  */
1438
1247
  const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
1439
- const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
1248
+ const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {}, ruleProcessor } = options;
1440
1249
  const ops = context.tanStackDbOperators;
1441
1250
  if (!ops) return void 0;
1442
1251
  const { and, eq, not, or } = ops;
@@ -1444,7 +1253,6 @@ const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
1444
1253
  const refKeys = Object.keys(refs);
1445
1254
  /* v8 ignore next -- @preserve */
1446
1255
  if (refKeys.length === 0) return fallback;
1447
- const ruleProcessor = defaultRuleProcessorTanStackDB;
1448
1256
  const processRuleGroup = (rg) => {
1449
1257
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
1450
1258
  const processedRules = rg.rules.map((rule) => {
@@ -1842,6 +1650,106 @@ const defaultRuleProcessorCypher = (rule, opts = {}) => {
1842
1650
  }
1843
1651
  };
1844
1652
  //#endregion
1653
+ //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
1654
+ /**
1655
+ * Default rule processor used by {@link formatQuery} for the "drizzle" format.
1656
+ *
1657
+ * @group Export
1658
+ */
1659
+ const defaultRuleProcessorDrizzle = (rule, _options) => {
1660
+ const opts = _options ?? ( /* v8 ignore start -- @preserve */ {});
1661
+ // v8 ignore next
1662
+ const { parseNumbers, preserveValueOrder, context = {} } = opts;
1663
+ const { columns, drizzleOperators, useRawFields } = context;
1664
+ if (!columns || !drizzleOperators) return void 0;
1665
+ const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
1666
+ const { field, operator, value, valueSource } = rule;
1667
+ const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
1668
+ const operatorLC = require_objectUtils.lc(operator);
1669
+ const valueIsField = valueSource === "field";
1670
+ const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
1671
+ const maybeParseNumber = (v) => {
1672
+ if (valueIsField || !parseNumbers) return asFieldOrValue(v);
1673
+ return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
1674
+ };
1675
+ if (!column) return void 0;
1676
+ const matchEval = require_utils.processMatchMode(rule);
1677
+ if (matchEval === false) return;
1678
+ else if (matchEval) {
1679
+ if (opts.preset !== "postgresql") return void 0;
1680
+ const { mode, threshold } = matchEval;
1681
+ const arrayElementAlias = "elem_alias";
1682
+ const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
1683
+ ...r,
1684
+ field: arrayElementAlias
1685
+ }) }), {
1686
+ ...opts,
1687
+ context: {
1688
+ ...opts.context,
1689
+ useRawFields: true
1690
+ }
1691
+ });
1692
+ switch (mode) {
1693
+ case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
1694
+ case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
1695
+ case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
1696
+ case "atleast":
1697
+ case "atmost":
1698
+ case "exactly": {
1699
+ const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
1700
+ return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
1701
+ }
1702
+ }
1703
+ }
1704
+ switch (operatorLC) {
1705
+ case "=": return eq(column, maybeParseNumber(value));
1706
+ case "!=": return ne(column, maybeParseNumber(value));
1707
+ case ">": return gt(column, maybeParseNumber(value));
1708
+ case "<": return lt(column, maybeParseNumber(value));
1709
+ case ">=": return gte(column, maybeParseNumber(value));
1710
+ case "<=": return lte(column, maybeParseNumber(value));
1711
+ case "beginswith":
1712
+ case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
1713
+ case "contains":
1714
+ case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
1715
+ case "endswith":
1716
+ case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
1717
+ case "null": return isNull(column);
1718
+ case "notnull": return isNotNull(column);
1719
+ case "in":
1720
+ case "notin": {
1721
+ const valueAsArray = require_utils.toArray(value).map((v) => maybeParseNumber(v));
1722
+ return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
1723
+ }
1724
+ case "between":
1725
+ case "notbetween": {
1726
+ const valueAsArray = require_utils.toArray(value);
1727
+ if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
1728
+ let [first, second] = valueAsArray;
1729
+ const shouldParseNumbers = !(parseNumbers === false);
1730
+ if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
1731
+ const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
1732
+ const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
1733
+ if (!preserveValueOrder && secondNum < firstNum) {
1734
+ const tempNum = secondNum;
1735
+ second = firstNum;
1736
+ first = tempNum;
1737
+ } else {
1738
+ first = firstNum;
1739
+ second = secondNum;
1740
+ }
1741
+ } else if (valueIsField) {
1742
+ first = asFieldOrValue(first);
1743
+ second = asFieldOrValue(second);
1744
+ }
1745
+ return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
1746
+ }
1747
+ return;
1748
+ }
1749
+ default: return;
1750
+ }
1751
+ };
1752
+ //#endregion
1845
1753
  //#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
1846
1754
  const rangeOperatorMap = {
1847
1755
  "<": "lt",
@@ -2811,6 +2719,96 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
2811
2719
  }
2812
2720
  };
2813
2721
  //#endregion
2722
+ //#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
2723
+ /**
2724
+ * Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
2725
+ *
2726
+ * @group Export
2727
+ */
2728
+ const defaultRuleProcessorTanStackDB = (rule, _options) => {
2729
+ const { parseNumbers, preserveValueOrder, context = {} } = _options ?? ( /* v8 ignore start -- @preserve */ {});
2730
+ const ops = context.tanStackDbOperators;
2731
+ const refs = context._tanstackDbRefs;
2732
+ const primaryRef = context._tanstackDbPrimaryRef;
2733
+ if (!ops || !refs || !primaryRef) return void 0;
2734
+ const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
2735
+ const resolveField = (fieldName) => {
2736
+ const dotIdx = fieldName.indexOf(".");
2737
+ if (dotIdx > 0) {
2738
+ const prefix = fieldName.slice(0, dotIdx);
2739
+ const rest = fieldName.slice(dotIdx + 1);
2740
+ if (refs[prefix]) return refs[prefix][rest];
2741
+ }
2742
+ return refs[primaryRef][fieldName];
2743
+ };
2744
+ const { field, operator, value, valueSource } = rule;
2745
+ const column = resolveField(field);
2746
+ const operatorLC = require_objectUtils.lc(operator);
2747
+ const valueIsField = valueSource === "field";
2748
+ const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
2749
+ const maybeParseNumber = (v) => {
2750
+ if (valueIsField || !parseNumbers) return asFieldOrValue(v);
2751
+ return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
2752
+ };
2753
+ switch (operatorLC) {
2754
+ case "=": return eq(column, maybeParseNumber(value));
2755
+ case "!=": return not(eq(column, maybeParseNumber(value)));
2756
+ case ">": return gt(column, maybeParseNumber(value));
2757
+ case "<": return lt(column, maybeParseNumber(value));
2758
+ case ">=": return gte(column, maybeParseNumber(value));
2759
+ case "<=": return lte(column, maybeParseNumber(value));
2760
+ case "beginswith":
2761
+ case "doesnotbeginwith": {
2762
+ const expr = like(column, valueIsField ? void 0 : `${value}%`);
2763
+ return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
2764
+ }
2765
+ case "contains":
2766
+ case "doesnotcontain": {
2767
+ const expr = like(column, valueIsField ? void 0 : `%${value}%`);
2768
+ return operatorLC === "doesnotcontain" ? not(expr) : expr;
2769
+ }
2770
+ case "endswith":
2771
+ case "doesnotendwith": {
2772
+ const expr = like(column, valueIsField ? void 0 : `%${value}`);
2773
+ return operatorLC === "doesnotendwith" ? not(expr) : expr;
2774
+ }
2775
+ case "null": return isNull(column);
2776
+ case "notnull": return not(isNull(column));
2777
+ case "in":
2778
+ case "notin": {
2779
+ const expr = inArray(column, require_utils.toArray(value).map((v) => maybeParseNumber(v)));
2780
+ return operatorLC === "notin" ? not(expr) : expr;
2781
+ }
2782
+ case "between":
2783
+ case "notbetween": {
2784
+ const valueAsArray = require_utils.toArray(value);
2785
+ if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
2786
+ let [first, second] = valueAsArray;
2787
+ const shouldParseNumbers = !(parseNumbers === false);
2788
+ if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
2789
+ const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
2790
+ const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
2791
+ if (!preserveValueOrder && secondNum < firstNum) {
2792
+ const tempNum = secondNum;
2793
+ second = firstNum;
2794
+ first = tempNum;
2795
+ } else {
2796
+ first = firstNum;
2797
+ second = secondNum;
2798
+ }
2799
+ } else if (valueIsField) {
2800
+ first = asFieldOrValue(first);
2801
+ second = asFieldOrValue(second);
2802
+ }
2803
+ const expr = and(gte(column, first), lte(column, second));
2804
+ return operatorLC === "notbetween" ? not(expr) : expr;
2805
+ }
2806
+ return;
2807
+ }
2808
+ default: return;
2809
+ }
2810
+ };
2811
+ //#endregion
2814
2812
  //#region src/utils/formatQuery/formatQuery.ts
2815
2813
  /**
2816
2814
  * A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.