@platforma-sdk/model 1.54.9 → 1.54.13

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 (52) hide show
  1. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  2. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  3. package/dist/components/PlDataTable/table.cjs +27 -9
  4. package/dist/components/PlDataTable/table.cjs.map +1 -1
  5. package/dist/components/PlDataTable/table.d.ts.map +1 -1
  6. package/dist/components/PlDataTable/table.js +28 -10
  7. package/dist/components/PlDataTable/table.js.map +1 -1
  8. package/dist/components/PlDataTable/v5.d.ts +8 -5
  9. package/dist/components/PlDataTable/v5.d.ts.map +1 -1
  10. package/dist/filters/converters/filterToQuery.cjs +21 -15
  11. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  12. package/dist/filters/converters/filterToQuery.d.ts +1 -1
  13. package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
  14. package/dist/filters/converters/filterToQuery.js +21 -15
  15. package/dist/filters/converters/filterToQuery.js.map +1 -1
  16. package/dist/filters/converters/filterUiToExpressionImpl.cjs +80 -100
  17. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
  18. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -1
  19. package/dist/filters/converters/filterUiToExpressionImpl.js +81 -101
  20. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
  21. package/dist/filters/distill.cjs +18 -18
  22. package/dist/filters/distill.cjs.map +1 -1
  23. package/dist/filters/distill.d.ts +3 -2
  24. package/dist/filters/distill.d.ts.map +1 -1
  25. package/dist/filters/distill.js +18 -18
  26. package/dist/filters/distill.js.map +1 -1
  27. package/dist/filters/traverse.cjs +53 -0
  28. package/dist/filters/traverse.cjs.map +1 -0
  29. package/dist/filters/traverse.d.ts +27 -0
  30. package/dist/filters/traverse.d.ts.map +1 -0
  31. package/dist/filters/traverse.js +50 -0
  32. package/dist/filters/traverse.js.map +1 -0
  33. package/dist/package.json.cjs +1 -1
  34. package/dist/package.json.js +1 -1
  35. package/dist/pframe_utils/querySpec.d.ts +1 -1
  36. package/dist/pframe_utils/querySpec.d.ts.map +1 -1
  37. package/dist/render/api.cjs +1 -1
  38. package/dist/render/api.cjs.map +1 -1
  39. package/dist/render/api.d.ts.map +1 -1
  40. package/dist/render/api.js +2 -2
  41. package/dist/render/api.js.map +1 -1
  42. package/package.json +6 -6
  43. package/src/components/PlDataTable/state-migration.ts +4 -4
  44. package/src/components/PlDataTable/table.ts +43 -12
  45. package/src/components/PlDataTable/v5.ts +10 -7
  46. package/src/filters/converters/filterToQuery.ts +25 -17
  47. package/src/filters/converters/filterUiToExpressionImpl.ts +81 -125
  48. package/src/filters/distill.ts +28 -24
  49. package/src/filters/traverse.test.ts +134 -0
  50. package/src/filters/traverse.ts +84 -0
  51. package/src/pframe_utils/querySpec.ts +1 -1
  52. package/src/render/api.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"filterToQuery.cjs","sources":["../../../src/filters/converters/filterToQuery.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport type {\n FilterSpec,\n FilterSpecLeaf,\n PTableColumnId,\n SingleAxisSelector,\n SpecQueryExpression,\n} from \"@milaboratories/pl-model-common\";\n\n/** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */\nfunction resolveColumnRef(columnStr: string): SpecQueryExpression {\n const parsed = JSON.parse(columnStr) as PTableColumnId;\n if (parsed.type === \"axis\") {\n return { type: \"axisRef\", value: parsed.id as SingleAxisSelector };\n }\n return { type: \"columnRef\", value: parsed.id };\n}\n\n/** Converts a FilterSpec tree into a SpecQueryExpression. */\nexport function filterSpecToSpecQueryExpr(\n filter: FilterSpec<FilterSpecLeaf<string>>,\n): SpecQueryExpression {\n switch (filter.type) {\n case \"and\":\n case \"or\": {\n const inputs = filter.filters\n .filter((f) => f.type !== undefined)\n .map(filterSpecToSpecQueryExpr);\n if (inputs.length === 0) {\n throw new Error(`${filter.type.toUpperCase()} filter requires at least one operand`);\n }\n return { type: filter.type, input: inputs };\n }\n case \"not\":\n return { type: \"not\", input: filterSpecToSpecQueryExpr(filter.filter) };\n\n case \"patternEquals\":\n return {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotEquals\":\n return {\n type: \"not\",\n input: {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternContainSubsequence\":\n return {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotContainSubsequence\":\n return {\n type: \"not\",\n input: {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternMatchesRegularExpression\":\n return {\n type: \"stringRegex\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n };\n case \"patternFuzzyContainSubsequence\":\n return {\n type: \"stringContainsFuzzy\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n maxEdits: filter.maxEdits ?? 1,\n caseInsensitive: false,\n substitutionsOnly: filter.substitutionsOnly ?? false,\n wildcard: filter.wildcard ?? null,\n };\n\n case \"equal\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"notEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ne\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThan\":\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThan\":\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n\n case \"equalToColumn\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: resolveColumnRef(filter.rhs),\n };\n case \"lessThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"lt\", left, right };\n }\n case \"greaterThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"gt\", left, right };\n }\n case \"lessThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"le\", left, right };\n }\n case \"greaterThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"ge\", left, right };\n }\n\n case \"inSet\":\n return {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n };\n case \"notInSet\":\n return {\n type: \"not\",\n input: {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n },\n };\n\n case \"isNA\":\n return {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n };\n case \"isNotNA\":\n return {\n type: \"not\",\n input: {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n },\n };\n\n case \"ifNa\":\n return {\n type: \"ifNull\",\n input: resolveColumnRef(filter.column),\n replacement: { type: \"constant\", value: filter.replacement },\n };\n\n case \"topN\":\n case \"bottomN\":\n throw new Error(`Filter type \"${filter.type}\" is not supported in query expressions`);\n\n case undefined:\n throw new Error(\"Filter type is undefined\");\n\n default:\n assertNever(filter);\n }\n}\n"],"names":["assertNever"],"mappings":"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"}
1
+ {"version":3,"file":"filterToQuery.cjs","sources":["../../../src/filters/converters/filterToQuery.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport type {\n FilterSpec,\n FilterSpecLeaf,\n PTableColumnId,\n SingleAxisSelector,\n SpecQueryExpression,\n} from \"@milaboratories/pl-model-common\";\nimport { traverseFilterSpec } from \"../traverse\";\n\n/** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */\nfunction resolveColumnRef(columnStr: string): SpecQueryExpression {\n const parsed = JSON.parse(columnStr) as PTableColumnId;\n return parsed.type === \"axis\"\n ? { type: \"axisRef\", value: parsed.id as SingleAxisSelector }\n : { type: \"columnRef\", value: parsed.id };\n}\n\n/** Converts a FilterSpec tree into a SpecQueryExpression. */\nexport function filterSpecToSpecQueryExpr<Leaf extends FilterSpecLeaf<string>>(\n filter: FilterSpec<Leaf>,\n): SpecQueryExpression {\n return traverseFilterSpec(filter, {\n leaf: leafToSpecQueryExpr,\n and: (inputs) => {\n if (inputs.length === 0) {\n throw new Error(\"AND filter requires at least one operand\");\n }\n return { type: \"and\", input: inputs };\n },\n or: (inputs) => {\n if (inputs.length === 0) {\n throw new Error(\"OR filter requires at least one operand\");\n }\n return { type: \"or\", input: inputs };\n },\n not: (input) => ({ type: \"not\", input }),\n });\n}\n\nfunction leafToSpecQueryExpr<Leaf extends FilterSpecLeaf<string>>(\n filter: Leaf,\n): SpecQueryExpression {\n switch (filter.type) {\n case \"patternEquals\":\n return {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotEquals\":\n return {\n type: \"not\",\n input: {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternContainSubsequence\":\n return {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotContainSubsequence\":\n return {\n type: \"not\",\n input: {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternMatchesRegularExpression\":\n return {\n type: \"stringRegex\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n };\n case \"patternFuzzyContainSubsequence\":\n return {\n type: \"stringContainsFuzzy\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n maxEdits: filter.maxEdits ?? 1,\n caseInsensitive: false,\n substitutionsOnly: filter.substitutionsOnly ?? false,\n wildcard: filter.wildcard ?? null,\n };\n\n case \"equal\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"notEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ne\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThan\":\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThan\":\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n\n case \"equalToColumn\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: resolveColumnRef(filter.rhs),\n };\n case \"lessThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"lt\", left, right };\n }\n case \"greaterThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"gt\", left, right };\n }\n case \"lessThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"le\", left, right };\n }\n case \"greaterThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"ge\", left, right };\n }\n\n case \"inSet\":\n return {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n };\n case \"notInSet\":\n return {\n type: \"not\",\n input: {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n },\n };\n\n case \"isNA\":\n return {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n };\n case \"isNotNA\":\n return {\n type: \"not\",\n input: {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n },\n };\n\n case \"ifNa\":\n return {\n type: \"ifNull\",\n input: resolveColumnRef(filter.column),\n replacement: { type: \"constant\", value: filter.replacement },\n };\n\n case \"topN\":\n case \"bottomN\":\n throw new Error(`Filter type \"${filter.type}\" is not supported in query expressions`);\n\n case undefined:\n throw new Error(\"Filter type is undefined\");\n\n default:\n assertNever(filter);\n }\n}\n"],"names":["traverseFilterSpec","assertNever"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { FilterSpec, FilterSpecLeaf, SpecQueryExpression } from "@milaboratories/pl-model-common";
2
2
  /** Converts a FilterSpec tree into a SpecQueryExpression. */
3
- export declare function filterSpecToSpecQueryExpr(filter: FilterSpec<FilterSpecLeaf<string>>): SpecQueryExpression;
3
+ export declare function filterSpecToSpecQueryExpr<Leaf extends FilterSpecLeaf<string>>(filter: FilterSpec<Leaf>): SpecQueryExpression;
4
4
  //# sourceMappingURL=filterToQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterToQuery.d.ts","sourceRoot":"","sources":["../../../src/filters/converters/filterToQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EAGd,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAWzC,6DAA6D;AAC7D,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GACzC,mBAAmB,CA4OrB"}
1
+ {"version":3,"file":"filterToQuery.d.ts","sourceRoot":"","sources":["../../../src/filters/converters/filterToQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EAGd,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAWzC,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,IAAI,SAAS,cAAc,CAAC,MAAM,CAAC,EAC3E,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,GACvB,mBAAmB,CAiBrB"}
@@ -1,28 +1,34 @@
1
1
  import { assertNever } from '@milaboratories/pl-model-common';
2
+ import { traverseFilterSpec } from '../traverse.js';
2
3
 
3
4
  /** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */
4
5
  function resolveColumnRef(columnStr) {
5
6
  const parsed = JSON.parse(columnStr);
6
- if (parsed.type === "axis") {
7
- return { type: "axisRef", value: parsed.id };
8
- }
9
- return { type: "columnRef", value: parsed.id };
7
+ return parsed.type === "axis"
8
+ ? { type: "axisRef", value: parsed.id }
9
+ : { type: "columnRef", value: parsed.id };
10
10
  }
11
11
  /** Converts a FilterSpec tree into a SpecQueryExpression. */
12
12
  function filterSpecToSpecQueryExpr(filter) {
13
- switch (filter.type) {
14
- case "and":
15
- case "or": {
16
- const inputs = filter.filters
17
- .filter((f) => f.type !== undefined)
18
- .map(filterSpecToSpecQueryExpr);
13
+ return traverseFilterSpec(filter, {
14
+ leaf: leafToSpecQueryExpr,
15
+ and: (inputs) => {
19
16
  if (inputs.length === 0) {
20
- throw new Error(`${filter.type.toUpperCase()} filter requires at least one operand`);
17
+ throw new Error("AND filter requires at least one operand");
21
18
  }
22
- return { type: filter.type, input: inputs };
23
- }
24
- case "not":
25
- return { type: "not", input: filterSpecToSpecQueryExpr(filter.filter) };
19
+ return { type: "and", input: inputs };
20
+ },
21
+ or: (inputs) => {
22
+ if (inputs.length === 0) {
23
+ throw new Error("OR filter requires at least one operand");
24
+ }
25
+ return { type: "or", input: inputs };
26
+ },
27
+ not: (input) => ({ type: "not", input }),
28
+ });
29
+ }
30
+ function leafToSpecQueryExpr(filter) {
31
+ switch (filter.type) {
26
32
  case "patternEquals":
27
33
  return {
28
34
  type: "stringEquals",
@@ -1 +1 @@
1
- {"version":3,"file":"filterToQuery.js","sources":["../../../src/filters/converters/filterToQuery.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport type {\n FilterSpec,\n FilterSpecLeaf,\n PTableColumnId,\n SingleAxisSelector,\n SpecQueryExpression,\n} from \"@milaboratories/pl-model-common\";\n\n/** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */\nfunction resolveColumnRef(columnStr: string): SpecQueryExpression {\n const parsed = JSON.parse(columnStr) as PTableColumnId;\n if (parsed.type === \"axis\") {\n return { type: \"axisRef\", value: parsed.id as SingleAxisSelector };\n }\n return { type: \"columnRef\", value: parsed.id };\n}\n\n/** Converts a FilterSpec tree into a SpecQueryExpression. */\nexport function filterSpecToSpecQueryExpr(\n filter: FilterSpec<FilterSpecLeaf<string>>,\n): SpecQueryExpression {\n switch (filter.type) {\n case \"and\":\n case \"or\": {\n const inputs = filter.filters\n .filter((f) => f.type !== undefined)\n .map(filterSpecToSpecQueryExpr);\n if (inputs.length === 0) {\n throw new Error(`${filter.type.toUpperCase()} filter requires at least one operand`);\n }\n return { type: filter.type, input: inputs };\n }\n case \"not\":\n return { type: \"not\", input: filterSpecToSpecQueryExpr(filter.filter) };\n\n case \"patternEquals\":\n return {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotEquals\":\n return {\n type: \"not\",\n input: {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternContainSubsequence\":\n return {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotContainSubsequence\":\n return {\n type: \"not\",\n input: {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternMatchesRegularExpression\":\n return {\n type: \"stringRegex\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n };\n case \"patternFuzzyContainSubsequence\":\n return {\n type: \"stringContainsFuzzy\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n maxEdits: filter.maxEdits ?? 1,\n caseInsensitive: false,\n substitutionsOnly: filter.substitutionsOnly ?? false,\n wildcard: filter.wildcard ?? null,\n };\n\n case \"equal\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"notEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ne\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThan\":\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThan\":\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n\n case \"equalToColumn\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: resolveColumnRef(filter.rhs),\n };\n case \"lessThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"lt\", left, right };\n }\n case \"greaterThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"gt\", left, right };\n }\n case \"lessThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"le\", left, right };\n }\n case \"greaterThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"ge\", left, right };\n }\n\n case \"inSet\":\n return {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n };\n case \"notInSet\":\n return {\n type: \"not\",\n input: {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n },\n };\n\n case \"isNA\":\n return {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n };\n case \"isNotNA\":\n return {\n type: \"not\",\n input: {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n },\n };\n\n case \"ifNa\":\n return {\n type: \"ifNull\",\n input: resolveColumnRef(filter.column),\n replacement: { type: \"constant\", value: filter.replacement },\n };\n\n case \"topN\":\n case \"bottomN\":\n throw new Error(`Filter type \"${filter.type}\" is not supported in query expressions`);\n\n case undefined:\n throw new Error(\"Filter type is undefined\");\n\n default:\n assertNever(filter);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filterToQuery.js","sources":["../../../src/filters/converters/filterToQuery.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport type {\n FilterSpec,\n FilterSpecLeaf,\n PTableColumnId,\n SingleAxisSelector,\n SpecQueryExpression,\n} from \"@milaboratories/pl-model-common\";\nimport { traverseFilterSpec } from \"../traverse\";\n\n/** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */\nfunction resolveColumnRef(columnStr: string): SpecQueryExpression {\n const parsed = JSON.parse(columnStr) as PTableColumnId;\n return parsed.type === \"axis\"\n ? { type: \"axisRef\", value: parsed.id as SingleAxisSelector }\n : { type: \"columnRef\", value: parsed.id };\n}\n\n/** Converts a FilterSpec tree into a SpecQueryExpression. */\nexport function filterSpecToSpecQueryExpr<Leaf extends FilterSpecLeaf<string>>(\n filter: FilterSpec<Leaf>,\n): SpecQueryExpression {\n return traverseFilterSpec(filter, {\n leaf: leafToSpecQueryExpr,\n and: (inputs) => {\n if (inputs.length === 0) {\n throw new Error(\"AND filter requires at least one operand\");\n }\n return { type: \"and\", input: inputs };\n },\n or: (inputs) => {\n if (inputs.length === 0) {\n throw new Error(\"OR filter requires at least one operand\");\n }\n return { type: \"or\", input: inputs };\n },\n not: (input) => ({ type: \"not\", input }),\n });\n}\n\nfunction leafToSpecQueryExpr<Leaf extends FilterSpecLeaf<string>>(\n filter: Leaf,\n): SpecQueryExpression {\n switch (filter.type) {\n case \"patternEquals\":\n return {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotEquals\":\n return {\n type: \"not\",\n input: {\n type: \"stringEquals\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternContainSubsequence\":\n return {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n };\n case \"patternNotContainSubsequence\":\n return {\n type: \"not\",\n input: {\n type: \"stringContains\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n caseInsensitive: false,\n },\n };\n case \"patternMatchesRegularExpression\":\n return {\n type: \"stringRegex\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n };\n case \"patternFuzzyContainSubsequence\":\n return {\n type: \"stringContainsFuzzy\",\n input: resolveColumnRef(filter.column),\n value: filter.value,\n maxEdits: filter.maxEdits ?? 1,\n caseInsensitive: false,\n substitutionsOnly: filter.substitutionsOnly ?? false,\n wildcard: filter.wildcard ?? null,\n };\n\n case \"equal\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"notEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ne\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThan\":\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThan\":\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"lessThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n case \"greaterThanOrEqual\":\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: resolveColumnRef(filter.column),\n right: { type: \"constant\", value: filter.x },\n };\n\n case \"equalToColumn\":\n return {\n type: \"numericComparison\",\n operand: \"eq\",\n left: resolveColumnRef(filter.column),\n right: resolveColumnRef(filter.rhs),\n };\n case \"lessThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"lt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"lt\", left, right };\n }\n case \"greaterThanColumn\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"gt\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"gt\", left, right };\n }\n case \"lessThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"le\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"le\", left, right };\n }\n case \"greaterThanColumnOrEqual\": {\n const left = resolveColumnRef(filter.column);\n const right = resolveColumnRef(filter.rhs);\n if (filter.minDiff !== undefined && filter.minDiff !== 0) {\n return {\n type: \"numericComparison\",\n operand: \"ge\",\n left: {\n type: \"numericBinary\",\n operand: \"add\",\n left,\n right: { type: \"constant\", value: filter.minDiff },\n },\n right,\n };\n }\n return { type: \"numericComparison\", operand: \"ge\", left, right };\n }\n\n case \"inSet\":\n return {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n };\n case \"notInSet\":\n return {\n type: \"not\",\n input: {\n type: \"isIn\",\n input: resolveColumnRef(filter.column),\n set: filter.value,\n },\n };\n\n case \"isNA\":\n return {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n };\n case \"isNotNA\":\n return {\n type: \"not\",\n input: {\n type: \"isNull\",\n input: resolveColumnRef(filter.column),\n },\n };\n\n case \"ifNa\":\n return {\n type: \"ifNull\",\n input: resolveColumnRef(filter.column),\n replacement: { type: \"constant\", value: filter.replacement },\n };\n\n case \"topN\":\n case \"bottomN\":\n throw new Error(`Filter type \"${filter.type}\" is not supported in query expressions`);\n\n case undefined:\n throw new Error(\"Filter type is undefined\");\n\n default:\n assertNever(filter);\n }\n}\n"],"names":[],"mappings":";;;AAUA;AACA,SAAS,gBAAgB,CAAC,SAAiB,EAAA;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAmB;AACtD,IAAA,OAAO,MAAM,CAAC,IAAI,KAAK;UACnB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,EAAwB;AAC3D,UAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;AAC7C;AAEA;AACM,SAAU,yBAAyB,CACvC,MAAwB,EAAA;IAExB,OAAO,kBAAkB,CAAC,MAAM,EAAE;AAChC,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,GAAG,EAAE,CAAC,MAAM,KAAI;AACd,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;YAC7D;YACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;QACvC,CAAC;AACD,QAAA,EAAE,EAAE,CAAC,MAAM,KAAI;AACb,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;YAC5D;YACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;QACtC,CAAC;AACD,QAAA,GAAG,EAAE,CAAC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzC,KAAA,CAAC;AACJ;AAEA,SAAS,mBAAmB,CAC1B,MAAY,EAAA;AAEZ,IAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,eAAe;YAClB,OAAO;AACL,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,eAAe,EAAE,KAAK;aACvB;AACH,QAAA,KAAK,kBAAkB;YACrB,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,oBAAA,eAAe,EAAE,KAAK;AACvB,iBAAA;aACF;AACH,QAAA,KAAK,2BAA2B;YAC9B,OAAO;AACL,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,eAAe,EAAE,KAAK;aACvB;AACH,QAAA,KAAK,8BAA8B;YACjC,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,oBAAA,eAAe,EAAE,KAAK;AACvB,iBAAA;aACF;AACH,QAAA,KAAK,iCAAiC;YACpC,OAAO;AACL,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;AACH,QAAA,KAAK,gCAAgC;YACnC,OAAO;AACL,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;AAC9B,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;AACpD,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;aAClC;AAEH,QAAA,KAAK,OAAO;YACV,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AACH,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AACH,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AACH,QAAA,KAAK,aAAa;YAChB,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AACH,QAAA,KAAK,iBAAiB;YACpB,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AACH,QAAA,KAAK,oBAAoB;YACvB,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE;aAC7C;AAEH,QAAA,KAAK,eAAe;YAClB,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;AACrC,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;aACpC;QACH,KAAK,gBAAgB,EAAE;YACrB,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;gBACxD,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,OAAO,EAAE,KAAK;wBACd,IAAI;wBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AACnD,qBAAA;oBACD,KAAK;iBACN;YACH;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;QAClE;QACA,KAAK,mBAAmB,EAAE;YACxB,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;gBACxD,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,OAAO,EAAE,KAAK;wBACd,IAAI;wBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AACnD,qBAAA;oBACD,KAAK;iBACN;YACH;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;QAClE;QACA,KAAK,uBAAuB,EAAE;YAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;gBACxD,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,OAAO,EAAE,KAAK;wBACd,IAAI;wBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AACnD,qBAAA;oBACD,KAAK;iBACN;YACH;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;QAClE;QACA,KAAK,0BAA0B,EAAE;YAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;gBACxD,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,OAAO,EAAE,KAAK;wBACd,IAAI;wBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AACnD,qBAAA;oBACD,KAAK;iBACN;YACH;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;QAClE;AAEA,QAAA,KAAK,OAAO;YACV,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,GAAG,EAAE,MAAM,CAAC,KAAK;aAClB;AACH,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtC,GAAG,EAAE,MAAM,CAAC,KAAK;AAClB,iBAAA;aACF;AAEH,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;aACvC;AACH,QAAA,KAAK,SAAS;YACZ,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;AACvC,iBAAA;aACF;AAEH,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;aAC7D;AAEH,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,SAAS;YACZ,MAAM,IAAI,KAAK,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,IAAI,CAAA,uCAAA,CAAyC,CAAC;AAEvF,QAAA,KAAK,SAAS;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAE7C,QAAA;YACE,WAAW,CAAC,MAAM,CAAC;;AAEzB;;;;"}
@@ -2,109 +2,89 @@
2
2
 
3
3
  var plModelCommon = require('@milaboratories/pl-model-common');
4
4
  var ptablerExpressionJs = require('@milaboratories/ptabler-expression-js');
5
+ var traverse = require('../traverse.cjs');
5
6
 
6
7
  function convertFilterUiToExpressionImpl(value) {
7
- if (value.type === "or") {
8
- const expressions = value.filters
9
- .filter((f) => f.type !== undefined)
10
- .map(convertFilterUiToExpressionImpl);
11
- if (expressions.length === 0) {
12
- throw new Error("OR filter requires at least one operand");
13
- }
14
- return ptablerExpressionJs.or(...expressions);
15
- }
16
- if (value.type === "and") {
17
- const expressions = value.filters
18
- .filter((f) => f.type !== undefined)
19
- .map(convertFilterUiToExpressionImpl);
20
- if (expressions.length === 0) {
21
- throw new Error("AND filter requires at least one operand");
22
- }
23
- return ptablerExpressionJs.and(...expressions);
24
- }
25
- if (value.type === "not") {
26
- return convertFilterUiToExpressionImpl(value.filter).not();
27
- }
28
- if (value.type === "isNA") {
29
- return ptablerExpressionJs.col(value.column).isNull();
30
- }
31
- if (value.type === "isNotNA") {
32
- return ptablerExpressionJs.col(value.column).isNotNull();
33
- }
34
- if (value.type === "patternEquals") {
35
- return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.lit(value.value));
36
- }
37
- if (value.type === "patternNotEquals") {
38
- return ptablerExpressionJs.col(value.column).neq(ptablerExpressionJs.lit(value.value));
39
- }
40
- if (value.type === "patternContainSubsequence") {
41
- return ptablerExpressionJs.col(value.column).strContains(value.value, false, true);
42
- }
43
- if (value.type === "patternNotContainSubsequence") {
44
- return ptablerExpressionJs.col(value.column).strContains(value.value, false, true).not();
45
- }
46
- if (value.type === "equal") {
47
- return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.lit(value.x));
48
- }
49
- if (value.type === "notEqual") {
50
- return ptablerExpressionJs.col(value.column).neq(ptablerExpressionJs.lit(value.x));
51
- }
52
- if (value.type === "lessThan") {
53
- return ptablerExpressionJs.col(value.column).lt(ptablerExpressionJs.lit(value.x));
54
- }
55
- if (value.type === "greaterThan") {
56
- return ptablerExpressionJs.col(value.column).gt(ptablerExpressionJs.lit(value.x));
57
- }
58
- if (value.type === "lessThanOrEqual") {
59
- return ptablerExpressionJs.col(value.column).le(ptablerExpressionJs.lit(value.x));
60
- }
61
- if (value.type === "greaterThanOrEqual") {
62
- return ptablerExpressionJs.col(value.column).ge(ptablerExpressionJs.lit(value.x));
63
- }
64
- if (value.type === "equalToColumn") {
65
- return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.col(value.rhs));
66
- }
67
- if (value.type === "greaterThanColumn") {
68
- if (value.minDiff !== undefined && value.minDiff !== 0) {
69
- return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).gt(ptablerExpressionJs.col(value.rhs));
70
- }
71
- return ptablerExpressionJs.col(value.column).gt(ptablerExpressionJs.col(value.rhs));
72
- }
73
- if (value.type === "lessThanColumn") {
74
- if (value.minDiff !== undefined && value.minDiff !== 0) {
75
- return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).lt(ptablerExpressionJs.col(value.rhs));
76
- }
77
- return ptablerExpressionJs.col(value.column).lt(ptablerExpressionJs.col(value.rhs));
78
- }
79
- if (value.type === "greaterThanColumnOrEqual") {
80
- if (value.minDiff !== undefined && value.minDiff !== 0) {
81
- return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).ge(ptablerExpressionJs.col(value.rhs));
82
- }
83
- return ptablerExpressionJs.col(value.column).ge(ptablerExpressionJs.col(value.rhs));
84
- }
85
- if (value.type === "lessThanColumnOrEqual") {
86
- if (value.minDiff !== undefined && value.minDiff !== 0) {
87
- return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).le(ptablerExpressionJs.col(value.rhs));
88
- }
89
- return ptablerExpressionJs.col(value.column).le(ptablerExpressionJs.col(value.rhs));
90
- }
91
- if (value.type === "topN") {
92
- return ptablerExpressionJs.rank(ptablerExpressionJs.col(value.column), true).over([]).le(ptablerExpressionJs.lit(value.n));
93
- }
94
- if (value.type === "bottomN") {
95
- return ptablerExpressionJs.rank(ptablerExpressionJs.col(value.column), false).over([]).le(ptablerExpressionJs.lit(value.n));
96
- }
97
- if (value.type === "patternMatchesRegularExpression" ||
98
- value.type === "patternFuzzyContainSubsequence" ||
99
- value.type === "inSet" ||
100
- value.type === "notInSet" ||
101
- value.type === "ifNa") {
102
- throw new Error("Not implemented filter type: " + value.type);
103
- }
104
- if (value.type === undefined) {
105
- throw new Error("Filter type is undefined, this should not happen");
8
+ return traverse.traverseFilterSpec(value, {
9
+ leaf: leafToExpressionImpl,
10
+ and: (expressions) => {
11
+ if (expressions.length === 0) {
12
+ throw new Error("AND filter requires at least one operand");
13
+ }
14
+ return ptablerExpressionJs.and(...expressions);
15
+ },
16
+ or: (expressions) => {
17
+ if (expressions.length === 0) {
18
+ throw new Error("OR filter requires at least one operand");
19
+ }
20
+ return ptablerExpressionJs.or(...expressions);
21
+ },
22
+ not: (result) => result.not(),
23
+ });
24
+ }
25
+ function leafToExpressionImpl(value) {
26
+ switch (value.type) {
27
+ case "isNA":
28
+ return ptablerExpressionJs.col(value.column).isNull();
29
+ case "isNotNA":
30
+ return ptablerExpressionJs.col(value.column).isNotNull();
31
+ case "patternEquals":
32
+ return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.lit(value.value));
33
+ case "patternNotEquals":
34
+ return ptablerExpressionJs.col(value.column).neq(ptablerExpressionJs.lit(value.value));
35
+ case "patternContainSubsequence":
36
+ return ptablerExpressionJs.col(value.column).strContains(value.value, false, true);
37
+ case "patternNotContainSubsequence":
38
+ return ptablerExpressionJs.col(value.column).strContains(value.value, false, true).not();
39
+ case "equal":
40
+ return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.lit(value.x));
41
+ case "notEqual":
42
+ return ptablerExpressionJs.col(value.column).neq(ptablerExpressionJs.lit(value.x));
43
+ case "lessThan":
44
+ return ptablerExpressionJs.col(value.column).lt(ptablerExpressionJs.lit(value.x));
45
+ case "greaterThan":
46
+ return ptablerExpressionJs.col(value.column).gt(ptablerExpressionJs.lit(value.x));
47
+ case "lessThanOrEqual":
48
+ return ptablerExpressionJs.col(value.column).le(ptablerExpressionJs.lit(value.x));
49
+ case "greaterThanOrEqual":
50
+ return ptablerExpressionJs.col(value.column).ge(ptablerExpressionJs.lit(value.x));
51
+ case "equalToColumn":
52
+ return ptablerExpressionJs.col(value.column).eq(ptablerExpressionJs.col(value.rhs));
53
+ case "greaterThanColumn":
54
+ if (value.minDiff !== undefined && value.minDiff !== 0) {
55
+ return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).gt(ptablerExpressionJs.col(value.rhs));
56
+ }
57
+ return ptablerExpressionJs.col(value.column).gt(ptablerExpressionJs.col(value.rhs));
58
+ case "lessThanColumn":
59
+ if (value.minDiff !== undefined && value.minDiff !== 0) {
60
+ return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).lt(ptablerExpressionJs.col(value.rhs));
61
+ }
62
+ return ptablerExpressionJs.col(value.column).lt(ptablerExpressionJs.col(value.rhs));
63
+ case "greaterThanColumnOrEqual":
64
+ if (value.minDiff !== undefined && value.minDiff !== 0) {
65
+ return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).ge(ptablerExpressionJs.col(value.rhs));
66
+ }
67
+ return ptablerExpressionJs.col(value.column).ge(ptablerExpressionJs.col(value.rhs));
68
+ case "lessThanColumnOrEqual":
69
+ if (value.minDiff !== undefined && value.minDiff !== 0) {
70
+ return ptablerExpressionJs.col(value.column).plus(ptablerExpressionJs.lit(value.minDiff)).le(ptablerExpressionJs.col(value.rhs));
71
+ }
72
+ return ptablerExpressionJs.col(value.column).le(ptablerExpressionJs.col(value.rhs));
73
+ case "topN":
74
+ return ptablerExpressionJs.rank(ptablerExpressionJs.col(value.column), true).over([]).le(ptablerExpressionJs.lit(value.n));
75
+ case "bottomN":
76
+ return ptablerExpressionJs.rank(ptablerExpressionJs.col(value.column), false).over([]).le(ptablerExpressionJs.lit(value.n));
77
+ case "patternMatchesRegularExpression":
78
+ case "patternFuzzyContainSubsequence":
79
+ case "inSet":
80
+ case "notInSet":
81
+ case "ifNa":
82
+ throw new Error("Not implemented filter type: " + value.type);
83
+ case undefined:
84
+ throw new Error("Filter type is undefined, this should not happen");
85
+ default:
86
+ plModelCommon.assertNever(value);
106
87
  }
107
- plModelCommon.assertNever(value);
108
88
  }
109
89
  function convertFilterUiToExpressions(value) {
110
90
  return convertFilterUiToExpressionImpl(value).toJSON();
@@ -1 +1 @@
1
- {"version":3,"file":"filterUiToExpressionImpl.cjs","sources":["../../../src/filters/converters/filterUiToExpressionImpl.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport {\n and,\n col,\n lit,\n or,\n rank,\n type Expression,\n type ExpressionImpl,\n} from \"@milaboratories/ptabler-expression-js\";\nimport type { FilterSpec } from \"../types\";\n\nexport function convertFilterUiToExpressionImpl(value: FilterSpec): ExpressionImpl {\n if (value.type === \"or\") {\n const expressions = value.filters\n .filter((f) => f.type !== undefined)\n .map(convertFilterUiToExpressionImpl);\n if (expressions.length === 0) {\n throw new Error(\"OR filter requires at least one operand\");\n }\n return or(...expressions);\n }\n\n if (value.type === \"and\") {\n const expressions = value.filters\n .filter((f) => f.type !== undefined)\n .map(convertFilterUiToExpressionImpl);\n if (expressions.length === 0) {\n throw new Error(\"AND filter requires at least one operand\");\n }\n return and(...expressions);\n }\n\n if (value.type === \"not\") {\n return convertFilterUiToExpressionImpl(value.filter).not();\n }\n\n if (value.type === \"isNA\") {\n return col(value.column).isNull();\n }\n\n if (value.type === \"isNotNA\") {\n return col(value.column).isNotNull();\n }\n\n if (value.type === \"patternEquals\") {\n return col(value.column).eq(lit(value.value));\n }\n\n if (value.type === \"patternNotEquals\") {\n return col(value.column).neq(lit(value.value));\n }\n\n if (value.type === \"patternContainSubsequence\") {\n return col(value.column).strContains(value.value, false, true);\n }\n\n if (value.type === \"patternNotContainSubsequence\") {\n return col(value.column).strContains(value.value, false, true).not();\n }\n\n if (value.type === \"equal\") {\n return col(value.column).eq(lit(value.x));\n }\n\n if (value.type === \"notEqual\") {\n return col(value.column).neq(lit(value.x));\n }\n\n if (value.type === \"lessThan\") {\n return col(value.column).lt(lit(value.x));\n }\n\n if (value.type === \"greaterThan\") {\n return col(value.column).gt(lit(value.x));\n }\n\n if (value.type === \"lessThanOrEqual\") {\n return col(value.column).le(lit(value.x));\n }\n\n if (value.type === \"greaterThanOrEqual\") {\n return col(value.column).ge(lit(value.x));\n }\n\n if (value.type === \"equalToColumn\") {\n return col(value.column).eq(col(value.rhs));\n }\n\n if (value.type === \"greaterThanColumn\") {\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).gt(col(value.rhs));\n }\n return col(value.column).gt(col(value.rhs));\n }\n\n if (value.type === \"lessThanColumn\") {\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).lt(col(value.rhs));\n }\n return col(value.column).lt(col(value.rhs));\n }\n\n if (value.type === \"greaterThanColumnOrEqual\") {\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).ge(col(value.rhs));\n }\n return col(value.column).ge(col(value.rhs));\n }\n\n if (value.type === \"lessThanColumnOrEqual\") {\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).le(col(value.rhs));\n }\n return col(value.column).le(col(value.rhs));\n }\n\n if (value.type === \"topN\") {\n return rank(col(value.column), true).over([]).le(lit(value.n));\n }\n\n if (value.type === \"bottomN\") {\n return rank(col(value.column), false).over([]).le(lit(value.n));\n }\n\n if (\n value.type === \"patternMatchesRegularExpression\" ||\n value.type === \"patternFuzzyContainSubsequence\" ||\n value.type === \"inSet\" ||\n value.type === \"notInSet\" ||\n value.type === \"ifNa\"\n ) {\n throw new Error(\"Not implemented filter type: \" + value.type);\n }\n\n if (value.type === undefined) {\n throw new Error(\"Filter type is undefined, this should not happen\");\n }\n\n assertNever(value);\n}\n\nexport function convertFilterUiToExpressions(value: FilterSpec): Expression {\n return convertFilterUiToExpressionImpl(value).toJSON();\n}\n"],"names":["or","and","col","lit","rank","assertNever"],"mappings":"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"}
1
+ {"version":3,"file":"filterUiToExpressionImpl.cjs","sources":["../../../src/filters/converters/filterUiToExpressionImpl.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/pl-model-common\";\nimport type { FilterSpecLeaf } from \"@milaboratories/pl-model-common\";\nimport {\n and,\n col,\n lit,\n or,\n rank,\n type Expression,\n type ExpressionImpl,\n} from \"@milaboratories/ptabler-expression-js\";\nimport type { FilterSpec } from \"../types\";\nimport { traverseFilterSpec } from \"../traverse\";\n\nexport function convertFilterUiToExpressionImpl(value: FilterSpec): ExpressionImpl {\n return traverseFilterSpec(value, {\n leaf: leafToExpressionImpl,\n and: (expressions) => {\n if (expressions.length === 0) {\n throw new Error(\"AND filter requires at least one operand\");\n }\n return and(...expressions);\n },\n or: (expressions) => {\n if (expressions.length === 0) {\n throw new Error(\"OR filter requires at least one operand\");\n }\n return or(...expressions);\n },\n not: (result) => result.not(),\n });\n}\n\nfunction leafToExpressionImpl(value: FilterSpecLeaf): ExpressionImpl {\n switch (value.type) {\n case \"isNA\":\n return col(value.column).isNull();\n case \"isNotNA\":\n return col(value.column).isNotNull();\n case \"patternEquals\":\n return col(value.column).eq(lit(value.value));\n case \"patternNotEquals\":\n return col(value.column).neq(lit(value.value));\n case \"patternContainSubsequence\":\n return col(value.column).strContains(value.value, false, true);\n case \"patternNotContainSubsequence\":\n return col(value.column).strContains(value.value, false, true).not();\n case \"equal\":\n return col(value.column).eq(lit(value.x));\n case \"notEqual\":\n return col(value.column).neq(lit(value.x));\n case \"lessThan\":\n return col(value.column).lt(lit(value.x));\n case \"greaterThan\":\n return col(value.column).gt(lit(value.x));\n case \"lessThanOrEqual\":\n return col(value.column).le(lit(value.x));\n case \"greaterThanOrEqual\":\n return col(value.column).ge(lit(value.x));\n case \"equalToColumn\":\n return col(value.column).eq(col(value.rhs));\n case \"greaterThanColumn\":\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).gt(col(value.rhs));\n }\n return col(value.column).gt(col(value.rhs));\n case \"lessThanColumn\":\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).lt(col(value.rhs));\n }\n return col(value.column).lt(col(value.rhs));\n case \"greaterThanColumnOrEqual\":\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).ge(col(value.rhs));\n }\n return col(value.column).ge(col(value.rhs));\n case \"lessThanColumnOrEqual\":\n if (value.minDiff !== undefined && value.minDiff !== 0) {\n return col(value.column).plus(lit(value.minDiff)).le(col(value.rhs));\n }\n return col(value.column).le(col(value.rhs));\n case \"topN\":\n return rank(col(value.column), true).over([]).le(lit(value.n));\n case \"bottomN\":\n return rank(col(value.column), false).over([]).le(lit(value.n));\n case \"patternMatchesRegularExpression\":\n case \"patternFuzzyContainSubsequence\":\n case \"inSet\":\n case \"notInSet\":\n case \"ifNa\":\n throw new Error(\"Not implemented filter type: \" + value.type);\n case undefined:\n throw new Error(\"Filter type is undefined, this should not happen\");\n default:\n assertNever(value);\n }\n}\n\nexport function convertFilterUiToExpressions(value: FilterSpec): Expression {\n return convertFilterUiToExpressionImpl(value).toJSON();\n}\n"],"names":["traverseFilterSpec","and","or","col","lit","rank","assertNever"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filterUiToExpressionImpl.d.ts","sourceRoot":"","sources":["../../../src/filters/converters/filterUiToExpressionImpl.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAgIjF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAE1E"}
1
+ {"version":3,"file":"filterUiToExpressionImpl.d.ts","sourceRoot":"","sources":["../../../src/filters/converters/filterUiToExpressionImpl.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAiBjF;AAmED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAE1E"}