@vuu-ui/vuu-filter-parser 2.1.19-beta.2 → 2.1.19-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/FilterParser.js +14 -0
- package/cjs/FilterParser.js.map +1 -0
- package/cjs/FilterTreeWalker.js +128 -0
- package/cjs/FilterTreeWalker.js.map +1 -0
- package/cjs/filter-evaluation-utils.js +244 -0
- package/cjs/filter-evaluation-utils.js.map +1 -0
- package/cjs/generated/filter-parser.js +21 -0
- package/cjs/generated/filter-parser.js.map +1 -0
- package/cjs/index.js +15 -0
- package/cjs/index.js.map +1 -0
- package/esm/FilterParser.js +12 -0
- package/esm/FilterParser.js.map +1 -0
- package/esm/FilterTreeWalker.js +126 -0
- package/esm/FilterTreeWalker.js.map +1 -0
- package/esm/filter-evaluation-utils.js +241 -0
- package/esm/filter-evaluation-utils.js.map +1 -0
- package/esm/generated/filter-parser.js +19 -0
- package/esm/generated/filter-parser.js.map +1 -0
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -0
- package/package.json +11 -8
- package/types/filter-evaluation-utils.d.ts +2 -2
- package/types/generated/filter-parser.d.ts +1 -1
- package/types/generated/filter-parser.terms.d.ts +28 -1
- package/src/FilterParser.js +0 -11
- package/src/FilterTreeWalker.js +0 -92
- package/src/filter-evaluation-utils.js +0 -177
- package/src/index.js +0 -4
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { isFilter, isScaledDecimalFilterClause } from "@vuu-ui/vuu-utils";
|
|
2
|
-
import { parseFilter } from "./FilterParser.js";
|
|
3
|
-
const filterPredicateMap = new Map();
|
|
4
|
-
const dataRowFilterPredicateMap = new Map();
|
|
5
|
-
const filterReject = ()=>false;
|
|
6
|
-
function getFilterPredicate(columnMapOrFilter, filterQuery) {
|
|
7
|
-
if ("string" == typeof columnMapOrFilter) {
|
|
8
|
-
let predicate = dataRowFilterPredicateMap.get(columnMapOrFilter);
|
|
9
|
-
if (predicate) return predicate;
|
|
10
|
-
try {
|
|
11
|
-
const filter = parseFilter(columnMapOrFilter);
|
|
12
|
-
predicate = filterPredicate(filter);
|
|
13
|
-
dataRowFilterPredicateMap.set(columnMapOrFilter, predicate);
|
|
14
|
-
return predicate;
|
|
15
|
-
} catch (err) {
|
|
16
|
-
console.warn(`filter-evaluation-utils, failed to parse filter "${filterQuery}"`);
|
|
17
|
-
return filterReject;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (filterQuery) {
|
|
21
|
-
let predicate = filterPredicateMap.get(filterQuery);
|
|
22
|
-
if (predicate) return predicate;
|
|
23
|
-
try {
|
|
24
|
-
const filter = parseFilter(filterQuery);
|
|
25
|
-
predicate = filterPredicate(columnMapOrFilter, filter);
|
|
26
|
-
filterPredicateMap.set(filterQuery, predicate);
|
|
27
|
-
return predicate;
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.warn(`filter-evaluation-utils, failed to parse filter "${filterQuery}"`);
|
|
30
|
-
return filterReject;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
throw Error("[getFilterPredicate] invalid params");
|
|
34
|
-
}
|
|
35
|
-
function filterPredicate(columnMapOrFilter, filter) {
|
|
36
|
-
if (isFilter(columnMapOrFilter)) switch(columnMapOrFilter.op){
|
|
37
|
-
case "in":
|
|
38
|
-
return testDataRowInclude(columnMapOrFilter);
|
|
39
|
-
case "=":
|
|
40
|
-
return testDataRowEQ(columnMapOrFilter);
|
|
41
|
-
case ">":
|
|
42
|
-
return testDataRowGT(columnMapOrFilter);
|
|
43
|
-
case ">=":
|
|
44
|
-
return testDataRowGE(columnMapOrFilter);
|
|
45
|
-
case "<":
|
|
46
|
-
return testDataRowLT(columnMapOrFilter);
|
|
47
|
-
case "<=":
|
|
48
|
-
return testDataRowLE(columnMapOrFilter);
|
|
49
|
-
case "ends":
|
|
50
|
-
return testDataRowEW(columnMapOrFilter);
|
|
51
|
-
case "starts":
|
|
52
|
-
return testDataRowSW(columnMapOrFilter);
|
|
53
|
-
case "contains":
|
|
54
|
-
return testDataRowContains(columnMapOrFilter);
|
|
55
|
-
case "and":
|
|
56
|
-
return testDataRowAND(columnMapOrFilter);
|
|
57
|
-
case "or":
|
|
58
|
-
return testDataRowOR(columnMapOrFilter);
|
|
59
|
-
default:
|
|
60
|
-
console.log(`unrecognized filter type ${columnMapOrFilter.op}`);
|
|
61
|
-
return ()=>true;
|
|
62
|
-
}
|
|
63
|
-
if (filter) switch(filter.op){
|
|
64
|
-
case "in":
|
|
65
|
-
return testInclude(columnMapOrFilter, filter);
|
|
66
|
-
case "=":
|
|
67
|
-
return testEQ(columnMapOrFilter, filter);
|
|
68
|
-
case ">":
|
|
69
|
-
return testGT(columnMapOrFilter, filter);
|
|
70
|
-
case ">=":
|
|
71
|
-
return testGE(columnMapOrFilter, filter);
|
|
72
|
-
case "<":
|
|
73
|
-
return testLT(columnMapOrFilter, filter);
|
|
74
|
-
case "<=":
|
|
75
|
-
return testLE(columnMapOrFilter, filter);
|
|
76
|
-
case "ends":
|
|
77
|
-
return testEW(columnMapOrFilter, filter);
|
|
78
|
-
case "starts":
|
|
79
|
-
return testSW(columnMapOrFilter, filter);
|
|
80
|
-
case "contains":
|
|
81
|
-
return testContains(columnMapOrFilter, filter);
|
|
82
|
-
case "and":
|
|
83
|
-
return testAND(columnMapOrFilter, filter);
|
|
84
|
-
case "or":
|
|
85
|
-
return testOR(columnMapOrFilter, filter);
|
|
86
|
-
default:
|
|
87
|
-
console.log(`unrecognized filter type ${filter.op}`);
|
|
88
|
-
return ()=>true;
|
|
89
|
-
}
|
|
90
|
-
throw Error("[filterPredicate] invalid params");
|
|
91
|
-
}
|
|
92
|
-
const testInclude = (columnMap, filter)=>(row)=>-1 !== filter.values.indexOf(row[columnMap[filter.column]]);
|
|
93
|
-
const testDataRowInclude = (filter)=>(row)=>-1 !== filter.values.indexOf(row[filter.column]);
|
|
94
|
-
const testEQ = (columnMap, filter)=>{
|
|
95
|
-
if (isScaledDecimalFilterClause(filter)) return (row)=>row[columnMap[filter.column]] === filter.value.asLong;
|
|
96
|
-
return (row)=>row[columnMap[filter.column]] === filter.value;
|
|
97
|
-
};
|
|
98
|
-
const testDataRowEQ = (filter)=>(row)=>row[filter.column] === filter.value;
|
|
99
|
-
const testGT = (columnMap, filter)=>(row)=>row[columnMap[filter.column]] > filter.value;
|
|
100
|
-
const testDataRowGT = (filter)=>(row)=>row[filter.column] > filter.value;
|
|
101
|
-
const testGE = (columnMap, filter)=>(row)=>row[columnMap[filter.column]] >= filter.value;
|
|
102
|
-
const testDataRowGE = (filter)=>(row)=>row[filter.column] >= filter.value;
|
|
103
|
-
const testLT = (columnMap, filter)=>(row)=>row[columnMap[filter.column]] < filter.value;
|
|
104
|
-
const testDataRowLT = (filter)=>(row)=>row[filter.column] < filter.value;
|
|
105
|
-
const testLE = (columnMap, filter)=>(row)=>row[columnMap[filter.column]] <= filter.value;
|
|
106
|
-
const testDataRowLE = (filter)=>(row)=>row[filter.column] <= filter.value;
|
|
107
|
-
const testEW = (columnMap, filter)=>{
|
|
108
|
-
const filterValue = filter.value;
|
|
109
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
110
|
-
return (row)=>{
|
|
111
|
-
const rowValue = row[columnMap[filter.column]];
|
|
112
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
113
|
-
return rowValue.toLowerCase().endsWith(filterValue.toLowerCase());
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
const testDataRowEW = (filter)=>{
|
|
117
|
-
const filterValue = filter.value;
|
|
118
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
119
|
-
return (row)=>{
|
|
120
|
-
const rowValue = row[filter.column];
|
|
121
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
122
|
-
return rowValue.toLowerCase().endsWith(filterValue.toLowerCase());
|
|
123
|
-
};
|
|
124
|
-
};
|
|
125
|
-
const testSW = (columnMap, filter)=>{
|
|
126
|
-
const filterValue = filter.value;
|
|
127
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
128
|
-
return (row)=>{
|
|
129
|
-
const rowValue = row[columnMap[filter.column]];
|
|
130
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
131
|
-
return rowValue.toLowerCase().startsWith(filterValue.toLowerCase());
|
|
132
|
-
};
|
|
133
|
-
};
|
|
134
|
-
const testDataRowSW = (filter)=>{
|
|
135
|
-
const filterValue = filter.value;
|
|
136
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
137
|
-
return (row)=>{
|
|
138
|
-
const rowValue = row[filter.column];
|
|
139
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
140
|
-
return rowValue.toLowerCase().startsWith(filterValue.toLowerCase());
|
|
141
|
-
};
|
|
142
|
-
};
|
|
143
|
-
const testContains = (columnMap, filter)=>{
|
|
144
|
-
const filterValue = filter.value;
|
|
145
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
146
|
-
return (row)=>{
|
|
147
|
-
const rowValue = row[columnMap[filter.column]];
|
|
148
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
149
|
-
return rowValue.toLowerCase().includes(filterValue.toLowerCase());
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
const testDataRowContains = (filter)=>{
|
|
153
|
-
const filterValue = filter.value;
|
|
154
|
-
if ("string" != typeof filterValue) throw Error("string filter applied to value of wrong type");
|
|
155
|
-
return (row)=>{
|
|
156
|
-
const rowValue = row[filter.column];
|
|
157
|
-
if ("string" != typeof rowValue) throw Error("string filter applied to value of wrong type");
|
|
158
|
-
return rowValue.toLowerCase().includes(filterValue.toLowerCase());
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
const testAND = (columnMap, filter)=>{
|
|
162
|
-
const filters = filter.filters.map((f1)=>filterPredicate(columnMap, f1));
|
|
163
|
-
return (row)=>filters.every((fn)=>fn(row));
|
|
164
|
-
};
|
|
165
|
-
const testDataRowAND = (filter)=>{
|
|
166
|
-
const filters = filter.filters.map((f1)=>filterPredicate(f1));
|
|
167
|
-
return (row)=>filters.every((fn)=>fn(row));
|
|
168
|
-
};
|
|
169
|
-
function testOR(columnMap, filter) {
|
|
170
|
-
const filters = filter.filters.map((f1)=>filterPredicate(columnMap, f1));
|
|
171
|
-
return (row)=>filters.some((fn)=>fn(row));
|
|
172
|
-
}
|
|
173
|
-
function testDataRowOR(filter) {
|
|
174
|
-
const filters = filter.filters.map((f1)=>filterPredicate(f1));
|
|
175
|
-
return (row)=>filters.some((fn)=>fn(row));
|
|
176
|
-
}
|
|
177
|
-
export { filterPredicate, getFilterPredicate };
|
package/src/index.js
DELETED