@malloydata/malloy-filter 0.0.421 → 0.0.423

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.
@@ -1 +1 @@
1
- {"version":3,"file":"temporal_filter_expression.js","sourceRoot":"","sources":["../src/temporal_filter_expression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"temporal_filter_expression.js","sourceRoot":"","sources":["../src/temporal_filter_expression.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy-filter",
3
- "version": "0.0.421",
3
+ "version": "0.0.423",
4
4
  "license": "MIT",
5
5
  "description": "Parsers for the Malloy filtering sub-languages",
6
6
  "main": "dist/index.js",
@@ -27,12 +27,14 @@ export const BooleanFilterExpression = {
27
27
  ret.parsed = {operator: '=false'};
28
28
  } else if (src === 'null') {
29
29
  ret.parsed = {operator: 'null'};
30
+ } else if (src === 'none') {
31
+ ret.parsed = {operator: 'none'};
30
32
  } else {
31
33
  const nonSpace = srcText.match(/[^\s]/);
32
34
  const startIndex = nonSpace ? (nonSpace.index ?? 0) : 0;
33
35
  ret.log = [
34
36
  {
35
- message: `Illegal boolean filter '${src}'. Must be one of true,=true,false,=false,null`,
37
+ message: `Illegal boolean filter '${src}'. Must be one of true,=true,false,=false,null,none`,
36
38
  severity: 'error',
37
39
  startIndex,
38
40
  endIndex: startIndex + srcText.length - 1,
@@ -40,7 +40,7 @@ export function unescape(str: string) {
40
40
  */
41
41
  export function escape(str: string) {
42
42
  const lstr = str.toLowerCase();
43
- if (lstr === 'null' || lstr === 'empty') {
43
+ if (lstr === 'null' || lstr === 'empty' || lstr === 'none') {
44
44
  return '\\' + str;
45
45
  }
46
46
  return str.replace(/([,; |()\\%_-])/g, '\\$1');
@@ -138,6 +138,9 @@ export function matchOp(matchSrc: string): StringFilter {
138
138
  if (matchTxt.toLowerCase() === 'empty') {
139
139
  return {operator: 'empty'};
140
140
  }
141
+ if (matchTxt.toLowerCase() === 'none') {
142
+ return {operator: 'none'};
143
+ }
141
144
  return {operator: '=', values: [unescape(matchTxt)]};
142
145
  }
143
146
 
@@ -13,6 +13,11 @@ interface Negatable {
13
13
 
14
14
  export interface Null extends FilterOperator<'null'>, Negatable {}
15
15
 
16
+ // The "always false" filter — matches nothing. Companion to the empty filter
17
+ // `f''` (which is the null/absent filter, "always true"). Universal across all
18
+ // filter types. `not none` is "always true".
19
+ export interface None extends FilterOperator<'none'>, Negatable {}
20
+
16
21
  export type ChainOp = 'and' | 'or' | ',';
17
22
  export function isChainOp(s: string): s is ChainOp {
18
23
  return ['and', 'or', ','].includes(s);
@@ -51,6 +56,7 @@ export type StringFilter =
51
56
  | StringCondition
52
57
  | StringMatch
53
58
  | Null
59
+ | None
54
60
  | StringEmpty
55
61
  | ClauseChain<StringFilter>
56
62
  | ClauseGroup<StringFilter>;
@@ -68,6 +74,7 @@ export function isStringFilter(sc: unknown): sc is StringFilter {
68
74
  '=',
69
75
  '~',
70
76
  'null',
77
+ 'none',
71
78
  'empty',
72
79
  'and',
73
80
  'or',
@@ -83,7 +90,7 @@ export interface BooleanCondition extends Negatable {
83
90
  operator: BooleanOperator;
84
91
  }
85
92
 
86
- export type BooleanFilter = BooleanCondition | Null;
93
+ export type BooleanFilter = BooleanCondition | Null | None;
87
94
 
88
95
  export function isBooleanFilter(bc: unknown): bc is BooleanFilter {
89
96
  return (
@@ -91,7 +98,7 @@ export function isBooleanFilter(bc: unknown): bc is BooleanFilter {
91
98
  bc !== null &&
92
99
  'operator' in bc &&
93
100
  typeof bc.operator === 'string' &&
94
- ['null', 'true', 'false', '=false', '=true'].includes(bc.operator)
101
+ ['null', 'none', 'true', 'false', '=false', '=true'].includes(bc.operator)
95
102
  );
96
103
  }
97
104
 
@@ -115,6 +122,7 @@ export type NumberFilter =
115
122
  | NumberCondition
116
123
  | NumberRange
117
124
  | Null
125
+ | None
118
126
  | ClauseGroup<NumberFilter>
119
127
  | BooleanChain<NumberFilter>;
120
128
 
@@ -136,6 +144,7 @@ export function isNumberFilter(sc: unknown): sc is NumberFilter {
136
144
  'or',
137
145
  '()',
138
146
  'null',
147
+ 'none',
139
148
  ].includes(sc.operator)
140
149
  );
141
150
  }
@@ -234,6 +243,7 @@ export interface InMoment extends FilterOperator<'in'>, Negatable {
234
243
 
235
244
  export type TemporalFilter =
236
245
  | Null
246
+ | None
237
247
  | Before
238
248
  | After
239
249
  | To
@@ -265,6 +275,7 @@ export function isTemporalFilter(sc: unknown): sc is TemporalFilter {
265
275
  'next',
266
276
  '()',
267
277
  'null',
278
+ 'none',
268
279
  ].includes(sc.operator)
269
280
  );
270
281
  }
@@ -19,6 +19,7 @@ numberUnary
19
19
 
20
20
  clause
21
21
  = NULL { return {operator: 'null'}; }
22
+ / NONE { return {operator: 'none'}; }
22
23
  / "(" _ expr:numberFilter _ ")" { return {operator: "()", expr}; }
23
24
  / open:openInterval _ b:N _ TO _ e:N _ close:closeInterval { return mkRange(open, b, e, close); }
24
25
  / "!=" _ n:N nList:(_ "," _ N)* { return {operator: '!=', ...mkValues(n, nList.map(x => x[3]))}; }
@@ -37,6 +38,7 @@ conjunction
37
38
 
38
39
  NOT = "not"i !idChar { return "not"; }
39
40
  NULL = "null"i !idChar
41
+ NONE = "none"i !idChar
40
42
  AND = "and"i !idChar
41
43
  OR = "or"i !idChar
42
44
  TO = "to"i !idChar
@@ -19,6 +19,7 @@ temporalUnary
19
19
 
20
20
  clause
21
21
  = NULL { return {operator: 'null'}; }
22
+ / NONE { return {operator: 'none'}; }
22
23
  / "(" _ expr:temporalFilter _ ")" { return {operator: "()", expr}; }
23
24
  / BEFORE __ m:moment { return {operator: 'before', before: m}; }
24
25
  / STARTING __ m:moment { return {operator: 'before', before: m, not: true}; }
@@ -80,6 +81,7 @@ conjunction
80
81
  // Keywords - case insensitive, must not be followed by more id chars
81
82
  NOT = "not"i !idChar
82
83
  NULL = "null"i !idChar
84
+ NONE = "none"i !idChar
83
85
  TO = "to"i !idChar
84
86
  NOW = "now"i !idChar
85
87
  LAST = "last"i !idChar