@dra2020/baseclient 1.0.166 → 1.0.167
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all/all.d.ts +2 -2
- package/dist/baseclient.js +61 -29
- package/dist/baseclient.js.map +1 -1
- package/dist/filterexpr/filterexpr.d.ts +1 -0
- package/lib/all/all.ts +2 -2
- package/lib/filterexpr/filterexpr.ts +68 -30
- package/package.json +1 -1
package/lib/all/all.ts
CHANGED
|
@@ -15,8 +15,8 @@ import * as OT from '../ot-js/all';
|
|
|
15
15
|
export { OT };
|
|
16
16
|
import * as OTE from '../ot-editutil/all';
|
|
17
17
|
export { OTE };
|
|
18
|
-
import { FilterExpr } from '../filterexpr/all';
|
|
19
|
-
export { FilterExpr }
|
|
18
|
+
import { FilterExpr, cacheFilterExpr } from '../filterexpr/all';
|
|
19
|
+
export { FilterExpr, cacheFilterExpr }
|
|
20
20
|
import * as G from '../geo/all';
|
|
21
21
|
export { G };
|
|
22
22
|
import * as Emit from '../emit/all';
|
|
@@ -677,42 +677,55 @@ export class FilterExpr
|
|
|
677
677
|
|
|
678
678
|
testClause(o: any, types: any, clause: Clause, prop?: string, relation?: TokType): boolean
|
|
679
679
|
{
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
case TokType.Text:
|
|
684
|
-
for (let p in o) if (o.hasOwnProperty(p) && (prop == null || p.toLowerCase() === prop))
|
|
680
|
+
const filterProp = (p: string) => {
|
|
681
|
+
let s = toString(o[p]);
|
|
682
|
+
if (s)
|
|
685
683
|
{
|
|
686
|
-
let
|
|
687
|
-
if (
|
|
684
|
+
let t = types ? types[p] : undefined;
|
|
685
|
+
if (t === 'skip')
|
|
686
|
+
return false;
|
|
687
|
+
if (t && t === 'date')
|
|
688
|
+
s = wordyDate(s);
|
|
689
|
+
s = s.toLowerCase();
|
|
690
|
+
if (relation === undefined)
|
|
688
691
|
{
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
692
|
+
if (s.indexOf(clause.op.text) >= 0)
|
|
693
|
+
return true;
|
|
694
|
+
}
|
|
695
|
+
else
|
|
696
|
+
{
|
|
697
|
+
let op2: any = isNaN(Number(clause.op.text)) ? clause.op.text : Number(clause.op.text);
|
|
698
|
+
let op1: any = typeof op2 === 'number' ? Number(s) : s;
|
|
699
|
+
switch (relation)
|
|
696
700
|
{
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
let op1: any = typeof op2 === 'number' ? Number(s) : s;
|
|
704
|
-
switch (relation)
|
|
705
|
-
{
|
|
706
|
-
case TokType.Equal: return op1 === op2;
|
|
707
|
-
case TokType.LessThan: return op1 < op2;
|
|
708
|
-
case TokType.LessThanEqual: return op1 <= op2;
|
|
709
|
-
case TokType.GreaterThanEqual: return op1 >= op2;
|
|
710
|
-
case TokType.GreaterThan: return op1 > op2;
|
|
711
|
-
case TokType.NotEqual: return op1 !== op2;
|
|
712
|
-
}
|
|
701
|
+
case TokType.Equal: return op1 === op2;
|
|
702
|
+
case TokType.LessThan: return op1 < op2;
|
|
703
|
+
case TokType.LessThanEqual: return op1 <= op2;
|
|
704
|
+
case TokType.GreaterThanEqual: return op1 >= op2;
|
|
705
|
+
case TokType.GreaterThan: return op1 > op2;
|
|
706
|
+
case TokType.NotEqual: return op1 !== op2;
|
|
713
707
|
}
|
|
714
708
|
}
|
|
715
709
|
}
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
if (clause == null) return true;
|
|
713
|
+
switch (clause.op.tt)
|
|
714
|
+
{
|
|
715
|
+
case TokType.Text:
|
|
716
|
+
if (o._filtercache)
|
|
717
|
+
{
|
|
718
|
+
if (prop == null)
|
|
719
|
+
return o._filtercache.indexOf(clause.op.text) >= 0;
|
|
720
|
+
else
|
|
721
|
+
return filterProp(prop);
|
|
722
|
+
}
|
|
723
|
+
else
|
|
724
|
+
{
|
|
725
|
+
for (let p in o)
|
|
726
|
+
if ((prop == null || p === prop) && filterProp(p))
|
|
727
|
+
return true;
|
|
728
|
+
}
|
|
716
729
|
return false;
|
|
717
730
|
|
|
718
731
|
case TokType.Colon:
|
|
@@ -743,3 +756,28 @@ export class FilterExpr
|
|
|
743
756
|
// NOTREACHED
|
|
744
757
|
}
|
|
745
758
|
}
|
|
759
|
+
|
|
760
|
+
export function cacheFilterExpr(o: any, types: any): void
|
|
761
|
+
{
|
|
762
|
+
if (o)
|
|
763
|
+
{
|
|
764
|
+
delete o._filtercache;
|
|
765
|
+
let a: string[] = [];
|
|
766
|
+
for (let p in o)
|
|
767
|
+
{
|
|
768
|
+
let s: string;
|
|
769
|
+
let t = types ? types[p] : undefined;
|
|
770
|
+
if (t === 'skip')
|
|
771
|
+
s = '';
|
|
772
|
+
else
|
|
773
|
+
{
|
|
774
|
+
s = toString(o[p]);
|
|
775
|
+
if (t === 'date')
|
|
776
|
+
s = wordyDate(s);
|
|
777
|
+
s = s.toLowerCase();
|
|
778
|
+
}
|
|
779
|
+
a.push(s);
|
|
780
|
+
}
|
|
781
|
+
o._filtercache = a.join('|'); // insert separator to reduce likelihood of spurious matches that cross property values
|
|
782
|
+
}
|
|
783
|
+
}
|