@platforma-sdk/model 1.53.15 → 1.54.7

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 (142) hide show
  1. package/dist/annotations/converter.cjs +8 -32
  2. package/dist/annotations/converter.cjs.map +1 -1
  3. package/dist/annotations/converter.d.ts.map +1 -1
  4. package/dist/annotations/converter.js +7 -31
  5. package/dist/annotations/converter.js.map +1 -1
  6. package/dist/block_model.cjs +1 -0
  7. package/dist/block_model.cjs.map +1 -1
  8. package/dist/block_model.d.ts.map +1 -1
  9. package/dist/block_model.js +1 -0
  10. package/dist/block_model.js.map +1 -1
  11. package/dist/builder.cjs +1 -0
  12. package/dist/builder.cjs.map +1 -1
  13. package/dist/builder.d.ts.map +1 -1
  14. package/dist/builder.js +1 -0
  15. package/dist/builder.js.map +1 -1
  16. package/dist/components/PlDataTable/index.d.ts +5 -0
  17. package/dist/components/PlDataTable/index.d.ts.map +1 -0
  18. package/dist/components/PlDataTable/labels.cjs +91 -0
  19. package/dist/components/PlDataTable/labels.cjs.map +1 -0
  20. package/dist/components/PlDataTable/labels.d.ts +7 -0
  21. package/dist/components/PlDataTable/labels.d.ts.map +1 -0
  22. package/dist/components/PlDataTable/labels.js +88 -0
  23. package/dist/components/PlDataTable/labels.js.map +1 -0
  24. package/dist/components/PlDataTable/state-migration.cjs +162 -0
  25. package/dist/components/PlDataTable/state-migration.cjs.map +1 -0
  26. package/dist/components/PlDataTable/state-migration.d.ts +94 -0
  27. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -0
  28. package/dist/components/PlDataTable/state-migration.js +158 -0
  29. package/dist/components/PlDataTable/state-migration.js.map +1 -0
  30. package/dist/components/PlDataTable/table.cjs +188 -0
  31. package/dist/components/PlDataTable/table.cjs.map +1 -0
  32. package/dist/components/PlDataTable/table.d.ts +26 -0
  33. package/dist/components/PlDataTable/table.d.ts.map +1 -0
  34. package/dist/components/PlDataTable/table.js +184 -0
  35. package/dist/components/PlDataTable/table.js.map +1 -0
  36. package/dist/components/PlDataTable/v4.d.ts +157 -0
  37. package/dist/components/PlDataTable/v4.d.ts.map +1 -0
  38. package/dist/components/PlDataTable/v5.d.ts +113 -0
  39. package/dist/components/PlDataTable/v5.d.ts.map +1 -0
  40. package/dist/filters/converters/filterEmpty.cjs +49 -0
  41. package/dist/filters/converters/filterEmpty.cjs.map +1 -0
  42. package/dist/filters/converters/filterEmpty.d.ts +4 -0
  43. package/dist/filters/converters/filterEmpty.d.ts.map +1 -0
  44. package/dist/filters/converters/filterEmpty.js +46 -0
  45. package/dist/filters/converters/filterEmpty.js.map +1 -0
  46. package/dist/filters/converters/filterToQuery.cjs +244 -0
  47. package/dist/filters/converters/filterToQuery.cjs.map +1 -0
  48. package/dist/filters/converters/filterToQuery.d.ts +4 -0
  49. package/dist/filters/converters/filterToQuery.d.ts.map +1 -0
  50. package/dist/filters/converters/filterToQuery.js +242 -0
  51. package/dist/filters/converters/filterToQuery.js.map +1 -0
  52. package/dist/filters/{converter.cjs → converters/filterUiToExpressionImpl.cjs} +3 -2
  53. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -0
  54. package/dist/filters/{converter.d.ts → converters/filterUiToExpressionImpl.d.ts} +2 -2
  55. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -0
  56. package/dist/filters/{converter.js → converters/filterUiToExpressionImpl.js} +3 -2
  57. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -0
  58. package/dist/filters/converters/index.d.ts +3 -0
  59. package/dist/filters/converters/index.d.ts.map +1 -0
  60. package/dist/filters/distill.cjs +46 -0
  61. package/dist/filters/distill.cjs.map +1 -0
  62. package/dist/filters/distill.d.ts +6 -0
  63. package/dist/filters/distill.d.ts.map +1 -0
  64. package/dist/filters/distill.js +44 -0
  65. package/dist/filters/distill.js.map +1 -0
  66. package/dist/filters/index.d.ts +2 -1
  67. package/dist/filters/index.d.ts.map +1 -1
  68. package/dist/filters/types.d.ts +1 -117
  69. package/dist/filters/types.d.ts.map +1 -1
  70. package/dist/index.cjs +17 -15
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.js +5 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/package.json.cjs +1 -1
  75. package/dist/package.json.js +1 -1
  76. package/dist/pframe_utils/columns.cjs +2 -0
  77. package/dist/pframe_utils/columns.cjs.map +1 -1
  78. package/dist/pframe_utils/columns.js +2 -0
  79. package/dist/pframe_utils/columns.js.map +1 -1
  80. package/dist/pframe_utils/index.cjs +2 -0
  81. package/dist/pframe_utils/index.cjs.map +1 -1
  82. package/dist/pframe_utils/index.js +2 -0
  83. package/dist/pframe_utils/index.js.map +1 -1
  84. package/dist/pframe_utils/querySpec.d.ts +2 -0
  85. package/dist/pframe_utils/querySpec.d.ts.map +1 -0
  86. package/dist/render/api.cjs +7 -0
  87. package/dist/render/api.cjs.map +1 -1
  88. package/dist/render/api.d.ts +3 -2
  89. package/dist/render/api.d.ts.map +1 -1
  90. package/dist/render/api.js +8 -1
  91. package/dist/render/api.js.map +1 -1
  92. package/dist/render/future.d.ts +1 -1
  93. package/dist/render/index.d.ts +2 -1
  94. package/dist/render/index.d.ts.map +1 -1
  95. package/dist/render/internal.cjs.map +1 -1
  96. package/dist/render/internal.d.ts +4 -1
  97. package/dist/render/internal.d.ts.map +1 -1
  98. package/dist/render/internal.js.map +1 -1
  99. package/dist/render/util/column_collection.cjs.map +1 -1
  100. package/dist/render/util/column_collection.d.ts +1 -1
  101. package/dist/render/util/column_collection.d.ts.map +1 -1
  102. package/dist/render/util/column_collection.js.map +1 -1
  103. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  104. package/dist/render/util/pcolumn_data.d.ts +1 -1
  105. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  106. package/dist/render/util/pcolumn_data.js.map +1 -1
  107. package/package.json +8 -6
  108. package/src/annotations/converter.ts +12 -40
  109. package/src/block_model.ts +1 -0
  110. package/src/builder.ts +1 -0
  111. package/src/components/PlDataTable/index.ts +22 -0
  112. package/src/components/PlDataTable/labels.ts +101 -0
  113. package/src/components/PlDataTable/state-migration.ts +285 -0
  114. package/src/components/PlDataTable/table.ts +279 -0
  115. package/src/components/PlDataTable/v4.ts +193 -0
  116. package/src/components/PlDataTable/v5.ts +140 -0
  117. package/src/filters/converters/filterEmpty.test.ts +125 -0
  118. package/src/filters/converters/filterEmpty.ts +57 -0
  119. package/src/filters/converters/filterToQuery.test.ts +417 -0
  120. package/src/filters/converters/filterToQuery.ts +258 -0
  121. package/src/filters/{converter.test.ts → converters/filterUiToExpressionImpl.test.ts} +2 -2
  122. package/src/filters/{converter.ts → converters/filterUiToExpressionImpl.ts} +3 -2
  123. package/src/filters/converters/index.ts +2 -0
  124. package/src/filters/distill.ts +59 -0
  125. package/src/filters/index.ts +2 -1
  126. package/src/filters/types.ts +8 -48
  127. package/src/pframe_utils/querySpec.ts +1 -0
  128. package/src/render/api.ts +13 -6
  129. package/src/render/index.ts +2 -1
  130. package/src/render/internal.ts +11 -0
  131. package/src/render/util/column_collection.ts +1 -1
  132. package/src/render/util/pcolumn_data.ts +1 -1
  133. package/dist/components/PlDataTable.cjs +0 -307
  134. package/dist/components/PlDataTable.cjs.map +0 -1
  135. package/dist/components/PlDataTable.d.ts +0 -366
  136. package/dist/components/PlDataTable.d.ts.map +0 -1
  137. package/dist/components/PlDataTable.js +0 -297
  138. package/dist/components/PlDataTable.js.map +0 -1
  139. package/dist/filters/converter.cjs.map +0 -1
  140. package/dist/filters/converter.d.ts.map +0 -1
  141. package/dist/filters/converter.js.map +0 -1
  142. package/src/components/PlDataTable.ts +0 -794
@@ -0,0 +1,244 @@
1
+ 'use strict';
2
+
3
+ var plModelCommon = require('@milaboratories/pl-model-common');
4
+
5
+ /** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */
6
+ function resolveColumnRef(columnStr) {
7
+ const parsed = JSON.parse(columnStr);
8
+ if (parsed.type === "axis") {
9
+ return { type: "axisRef", value: parsed.id };
10
+ }
11
+ return { type: "columnRef", value: parsed.id };
12
+ }
13
+ /** Converts a FilterSpec tree into a SpecQueryExpression. */
14
+ function filterSpecToSpecQueryExpr(filter) {
15
+ switch (filter.type) {
16
+ case "and":
17
+ case "or": {
18
+ const inputs = filter.filters
19
+ .filter((f) => f.type !== undefined)
20
+ .map(filterSpecToSpecQueryExpr);
21
+ if (inputs.length === 0) {
22
+ throw new Error(`${filter.type.toUpperCase()} filter requires at least one operand`);
23
+ }
24
+ return { type: filter.type, input: inputs };
25
+ }
26
+ case "not":
27
+ return { type: "not", input: filterSpecToSpecQueryExpr(filter.filter) };
28
+ case "patternEquals":
29
+ return {
30
+ type: "stringEquals",
31
+ input: resolveColumnRef(filter.column),
32
+ value: filter.value,
33
+ caseInsensitive: false,
34
+ };
35
+ case "patternNotEquals":
36
+ return {
37
+ type: "not",
38
+ input: {
39
+ type: "stringEquals",
40
+ input: resolveColumnRef(filter.column),
41
+ value: filter.value,
42
+ caseInsensitive: false,
43
+ },
44
+ };
45
+ case "patternContainSubsequence":
46
+ return {
47
+ type: "stringContains",
48
+ input: resolveColumnRef(filter.column),
49
+ value: filter.value,
50
+ caseInsensitive: false,
51
+ };
52
+ case "patternNotContainSubsequence":
53
+ return {
54
+ type: "not",
55
+ input: {
56
+ type: "stringContains",
57
+ input: resolveColumnRef(filter.column),
58
+ value: filter.value,
59
+ caseInsensitive: false,
60
+ },
61
+ };
62
+ case "patternMatchesRegularExpression":
63
+ return {
64
+ type: "stringRegex",
65
+ input: resolveColumnRef(filter.column),
66
+ value: filter.value,
67
+ };
68
+ case "patternFuzzyContainSubsequence":
69
+ return {
70
+ type: "stringContainsFuzzy",
71
+ input: resolveColumnRef(filter.column),
72
+ value: filter.value,
73
+ maxEdits: filter.maxEdits ?? 1,
74
+ caseInsensitive: false,
75
+ substitutionsOnly: filter.substitutionsOnly ?? false,
76
+ wildcard: filter.wildcard ?? null,
77
+ };
78
+ case "equal":
79
+ return {
80
+ type: "numericComparison",
81
+ operand: "eq",
82
+ left: resolveColumnRef(filter.column),
83
+ right: { type: "constant", value: filter.x },
84
+ };
85
+ case "notEqual":
86
+ return {
87
+ type: "numericComparison",
88
+ operand: "ne",
89
+ left: resolveColumnRef(filter.column),
90
+ right: { type: "constant", value: filter.x },
91
+ };
92
+ case "lessThan":
93
+ return {
94
+ type: "numericComparison",
95
+ operand: "lt",
96
+ left: resolveColumnRef(filter.column),
97
+ right: { type: "constant", value: filter.x },
98
+ };
99
+ case "greaterThan":
100
+ return {
101
+ type: "numericComparison",
102
+ operand: "gt",
103
+ left: resolveColumnRef(filter.column),
104
+ right: { type: "constant", value: filter.x },
105
+ };
106
+ case "lessThanOrEqual":
107
+ return {
108
+ type: "numericComparison",
109
+ operand: "le",
110
+ left: resolveColumnRef(filter.column),
111
+ right: { type: "constant", value: filter.x },
112
+ };
113
+ case "greaterThanOrEqual":
114
+ return {
115
+ type: "numericComparison",
116
+ operand: "ge",
117
+ left: resolveColumnRef(filter.column),
118
+ right: { type: "constant", value: filter.x },
119
+ };
120
+ case "equalToColumn":
121
+ return {
122
+ type: "numericComparison",
123
+ operand: "eq",
124
+ left: resolveColumnRef(filter.column),
125
+ right: resolveColumnRef(filter.rhs),
126
+ };
127
+ case "lessThanColumn": {
128
+ const left = resolveColumnRef(filter.column);
129
+ const right = resolveColumnRef(filter.rhs);
130
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
131
+ return {
132
+ type: "numericComparison",
133
+ operand: "lt",
134
+ left: {
135
+ type: "numericBinary",
136
+ operand: "add",
137
+ left,
138
+ right: { type: "constant", value: filter.minDiff },
139
+ },
140
+ right,
141
+ };
142
+ }
143
+ return { type: "numericComparison", operand: "lt", left, right };
144
+ }
145
+ case "greaterThanColumn": {
146
+ const left = resolveColumnRef(filter.column);
147
+ const right = resolveColumnRef(filter.rhs);
148
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
149
+ return {
150
+ type: "numericComparison",
151
+ operand: "gt",
152
+ left: {
153
+ type: "numericBinary",
154
+ operand: "add",
155
+ left,
156
+ right: { type: "constant", value: filter.minDiff },
157
+ },
158
+ right,
159
+ };
160
+ }
161
+ return { type: "numericComparison", operand: "gt", left, right };
162
+ }
163
+ case "lessThanColumnOrEqual": {
164
+ const left = resolveColumnRef(filter.column);
165
+ const right = resolveColumnRef(filter.rhs);
166
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
167
+ return {
168
+ type: "numericComparison",
169
+ operand: "le",
170
+ left: {
171
+ type: "numericBinary",
172
+ operand: "add",
173
+ left,
174
+ right: { type: "constant", value: filter.minDiff },
175
+ },
176
+ right,
177
+ };
178
+ }
179
+ return { type: "numericComparison", operand: "le", left, right };
180
+ }
181
+ case "greaterThanColumnOrEqual": {
182
+ const left = resolveColumnRef(filter.column);
183
+ const right = resolveColumnRef(filter.rhs);
184
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
185
+ return {
186
+ type: "numericComparison",
187
+ operand: "ge",
188
+ left: {
189
+ type: "numericBinary",
190
+ operand: "add",
191
+ left,
192
+ right: { type: "constant", value: filter.minDiff },
193
+ },
194
+ right,
195
+ };
196
+ }
197
+ return { type: "numericComparison", operand: "ge", left, right };
198
+ }
199
+ case "inSet":
200
+ return {
201
+ type: "isIn",
202
+ input: resolveColumnRef(filter.column),
203
+ set: filter.value,
204
+ };
205
+ case "notInSet":
206
+ return {
207
+ type: "not",
208
+ input: {
209
+ type: "isIn",
210
+ input: resolveColumnRef(filter.column),
211
+ set: filter.value,
212
+ },
213
+ };
214
+ case "isNA":
215
+ return {
216
+ type: "isNull",
217
+ input: resolveColumnRef(filter.column),
218
+ };
219
+ case "isNotNA":
220
+ return {
221
+ type: "not",
222
+ input: {
223
+ type: "isNull",
224
+ input: resolveColumnRef(filter.column),
225
+ },
226
+ };
227
+ case "ifNa":
228
+ return {
229
+ type: "ifNull",
230
+ input: resolveColumnRef(filter.column),
231
+ replacement: { type: "constant", value: filter.replacement },
232
+ };
233
+ case "topN":
234
+ case "bottomN":
235
+ throw new Error(`Filter type "${filter.type}" is not supported in query expressions`);
236
+ case undefined:
237
+ throw new Error("Filter type is undefined");
238
+ default:
239
+ plModelCommon.assertNever(filter);
240
+ }
241
+ }
242
+
243
+ exports.filterSpecToSpecQueryExpr = filterSpecToSpecQueryExpr;
244
+ //# sourceMappingURL=filterToQuery.cjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,4 @@
1
+ import type { FilterSpec, FilterSpecLeaf, SpecQueryExpression } from "@milaboratories/pl-model-common";
2
+ /** Converts a FilterSpec tree into a SpecQueryExpression. */
3
+ export declare function filterSpecToSpecQueryExpr(filter: FilterSpec<FilterSpecLeaf<string>>): SpecQueryExpression;
4
+ //# sourceMappingURL=filterToQuery.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,242 @@
1
+ import { assertNever } from '@milaboratories/pl-model-common';
2
+
3
+ /** Parses a CanonicalizedJson<PTableColumnId> string into a SpecQueryExpression reference. */
4
+ function resolveColumnRef(columnStr) {
5
+ 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 };
10
+ }
11
+ /** Converts a FilterSpec tree into a SpecQueryExpression. */
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);
19
+ if (inputs.length === 0) {
20
+ throw new Error(`${filter.type.toUpperCase()} filter requires at least one operand`);
21
+ }
22
+ return { type: filter.type, input: inputs };
23
+ }
24
+ case "not":
25
+ return { type: "not", input: filterSpecToSpecQueryExpr(filter.filter) };
26
+ case "patternEquals":
27
+ return {
28
+ type: "stringEquals",
29
+ input: resolveColumnRef(filter.column),
30
+ value: filter.value,
31
+ caseInsensitive: false,
32
+ };
33
+ case "patternNotEquals":
34
+ return {
35
+ type: "not",
36
+ input: {
37
+ type: "stringEquals",
38
+ input: resolveColumnRef(filter.column),
39
+ value: filter.value,
40
+ caseInsensitive: false,
41
+ },
42
+ };
43
+ case "patternContainSubsequence":
44
+ return {
45
+ type: "stringContains",
46
+ input: resolveColumnRef(filter.column),
47
+ value: filter.value,
48
+ caseInsensitive: false,
49
+ };
50
+ case "patternNotContainSubsequence":
51
+ return {
52
+ type: "not",
53
+ input: {
54
+ type: "stringContains",
55
+ input: resolveColumnRef(filter.column),
56
+ value: filter.value,
57
+ caseInsensitive: false,
58
+ },
59
+ };
60
+ case "patternMatchesRegularExpression":
61
+ return {
62
+ type: "stringRegex",
63
+ input: resolveColumnRef(filter.column),
64
+ value: filter.value,
65
+ };
66
+ case "patternFuzzyContainSubsequence":
67
+ return {
68
+ type: "stringContainsFuzzy",
69
+ input: resolveColumnRef(filter.column),
70
+ value: filter.value,
71
+ maxEdits: filter.maxEdits ?? 1,
72
+ caseInsensitive: false,
73
+ substitutionsOnly: filter.substitutionsOnly ?? false,
74
+ wildcard: filter.wildcard ?? null,
75
+ };
76
+ case "equal":
77
+ return {
78
+ type: "numericComparison",
79
+ operand: "eq",
80
+ left: resolveColumnRef(filter.column),
81
+ right: { type: "constant", value: filter.x },
82
+ };
83
+ case "notEqual":
84
+ return {
85
+ type: "numericComparison",
86
+ operand: "ne",
87
+ left: resolveColumnRef(filter.column),
88
+ right: { type: "constant", value: filter.x },
89
+ };
90
+ case "lessThan":
91
+ return {
92
+ type: "numericComparison",
93
+ operand: "lt",
94
+ left: resolveColumnRef(filter.column),
95
+ right: { type: "constant", value: filter.x },
96
+ };
97
+ case "greaterThan":
98
+ return {
99
+ type: "numericComparison",
100
+ operand: "gt",
101
+ left: resolveColumnRef(filter.column),
102
+ right: { type: "constant", value: filter.x },
103
+ };
104
+ case "lessThanOrEqual":
105
+ return {
106
+ type: "numericComparison",
107
+ operand: "le",
108
+ left: resolveColumnRef(filter.column),
109
+ right: { type: "constant", value: filter.x },
110
+ };
111
+ case "greaterThanOrEqual":
112
+ return {
113
+ type: "numericComparison",
114
+ operand: "ge",
115
+ left: resolveColumnRef(filter.column),
116
+ right: { type: "constant", value: filter.x },
117
+ };
118
+ case "equalToColumn":
119
+ return {
120
+ type: "numericComparison",
121
+ operand: "eq",
122
+ left: resolveColumnRef(filter.column),
123
+ right: resolveColumnRef(filter.rhs),
124
+ };
125
+ case "lessThanColumn": {
126
+ const left = resolveColumnRef(filter.column);
127
+ const right = resolveColumnRef(filter.rhs);
128
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
129
+ return {
130
+ type: "numericComparison",
131
+ operand: "lt",
132
+ left: {
133
+ type: "numericBinary",
134
+ operand: "add",
135
+ left,
136
+ right: { type: "constant", value: filter.minDiff },
137
+ },
138
+ right,
139
+ };
140
+ }
141
+ return { type: "numericComparison", operand: "lt", left, right };
142
+ }
143
+ case "greaterThanColumn": {
144
+ const left = resolveColumnRef(filter.column);
145
+ const right = resolveColumnRef(filter.rhs);
146
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
147
+ return {
148
+ type: "numericComparison",
149
+ operand: "gt",
150
+ left: {
151
+ type: "numericBinary",
152
+ operand: "add",
153
+ left,
154
+ right: { type: "constant", value: filter.minDiff },
155
+ },
156
+ right,
157
+ };
158
+ }
159
+ return { type: "numericComparison", operand: "gt", left, right };
160
+ }
161
+ case "lessThanColumnOrEqual": {
162
+ const left = resolveColumnRef(filter.column);
163
+ const right = resolveColumnRef(filter.rhs);
164
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
165
+ return {
166
+ type: "numericComparison",
167
+ operand: "le",
168
+ left: {
169
+ type: "numericBinary",
170
+ operand: "add",
171
+ left,
172
+ right: { type: "constant", value: filter.minDiff },
173
+ },
174
+ right,
175
+ };
176
+ }
177
+ return { type: "numericComparison", operand: "le", left, right };
178
+ }
179
+ case "greaterThanColumnOrEqual": {
180
+ const left = resolveColumnRef(filter.column);
181
+ const right = resolveColumnRef(filter.rhs);
182
+ if (filter.minDiff !== undefined && filter.minDiff !== 0) {
183
+ return {
184
+ type: "numericComparison",
185
+ operand: "ge",
186
+ left: {
187
+ type: "numericBinary",
188
+ operand: "add",
189
+ left,
190
+ right: { type: "constant", value: filter.minDiff },
191
+ },
192
+ right,
193
+ };
194
+ }
195
+ return { type: "numericComparison", operand: "ge", left, right };
196
+ }
197
+ case "inSet":
198
+ return {
199
+ type: "isIn",
200
+ input: resolveColumnRef(filter.column),
201
+ set: filter.value,
202
+ };
203
+ case "notInSet":
204
+ return {
205
+ type: "not",
206
+ input: {
207
+ type: "isIn",
208
+ input: resolveColumnRef(filter.column),
209
+ set: filter.value,
210
+ },
211
+ };
212
+ case "isNA":
213
+ return {
214
+ type: "isNull",
215
+ input: resolveColumnRef(filter.column),
216
+ };
217
+ case "isNotNA":
218
+ return {
219
+ type: "not",
220
+ input: {
221
+ type: "isNull",
222
+ input: resolveColumnRef(filter.column),
223
+ },
224
+ };
225
+ case "ifNa":
226
+ return {
227
+ type: "ifNull",
228
+ input: resolveColumnRef(filter.column),
229
+ replacement: { type: "constant", value: filter.replacement },
230
+ };
231
+ case "topN":
232
+ case "bottomN":
233
+ throw new Error(`Filter type "${filter.type}" is not supported in query expressions`);
234
+ case undefined:
235
+ throw new Error("Filter type is undefined");
236
+ default:
237
+ assertNever(filter);
238
+ }
239
+ }
240
+
241
+ export { filterSpecToSpecQueryExpr };
242
+ //# sourceMappingURL=filterToQuery.js.map
@@ -0,0 +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":";;AASA;AACA,SAAS,gBAAgB,CAAC,SAAiB,EAAA;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAmB;AACtD,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;QAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,EAAwB,EAAE;IACpE;IACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;AAChD;AAEA;AACM,SAAU,yBAAyB,CACvC,MAA0C,EAAA;AAE1C,IAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,KAAK;QACV,KAAK,IAAI,EAAE;AACT,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC;iBACnB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS;iBAClC,GAAG,CAAC,yBAAyB,CAAC;AACjC,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,qCAAA,CAAuC,CAAC;YACtF;YACA,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7C;AACA,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAEzE,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;;;;"}
@@ -97,7 +97,8 @@ function convertFilterUiToExpressionImpl(value) {
97
97
  if (value.type === "patternMatchesRegularExpression" ||
98
98
  value.type === "patternFuzzyContainSubsequence" ||
99
99
  value.type === "inSet" ||
100
- value.type === "notInSet") {
100
+ value.type === "notInSet" ||
101
+ value.type === "ifNa") {
101
102
  throw new Error("Not implemented filter type: " + value.type);
102
103
  }
103
104
  if (value.type === undefined) {
@@ -111,4 +112,4 @@ function convertFilterUiToExpressions(value) {
111
112
 
112
113
  exports.convertFilterUiToExpressionImpl = convertFilterUiToExpressionImpl;
113
114
  exports.convertFilterUiToExpressions = convertFilterUiToExpressions;
114
- //# sourceMappingURL=converter.cjs.map
115
+ //# sourceMappingURL=filterUiToExpressionImpl.cjs.map
@@ -0,0 +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,5 +1,5 @@
1
1
  import { type Expression, type ExpressionImpl } from "@milaboratories/ptabler-expression-js";
2
- import type { FilterSpec } from "../filters";
2
+ import type { FilterSpec } from "../types";
3
3
  export declare function convertFilterUiToExpressionImpl(value: FilterSpec): ExpressionImpl;
4
4
  export declare function convertFilterUiToExpressions(value: FilterSpec): Expression;
5
- //# sourceMappingURL=converter.d.ts.map
5
+ //# sourceMappingURL=filterUiToExpressionImpl.d.ts.map
@@ -0,0 +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"}
@@ -95,7 +95,8 @@ function convertFilterUiToExpressionImpl(value) {
95
95
  if (value.type === "patternMatchesRegularExpression" ||
96
96
  value.type === "patternFuzzyContainSubsequence" ||
97
97
  value.type === "inSet" ||
98
- value.type === "notInSet") {
98
+ value.type === "notInSet" ||
99
+ value.type === "ifNa") {
99
100
  throw new Error("Not implemented filter type: " + value.type);
100
101
  }
101
102
  if (value.type === undefined) {
@@ -108,4 +109,4 @@ function convertFilterUiToExpressions(value) {
108
109
  }
109
110
 
110
111
  export { convertFilterUiToExpressionImpl, convertFilterUiToExpressions };
111
- //# sourceMappingURL=converter.js.map
112
+ //# sourceMappingURL=filterUiToExpressionImpl.js.map