@jbrowse/jexl 5.0.1 → 6.0.0

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 (99) hide show
  1. package/README.md +8 -3
  2. package/dist/Expression.d.ts +0 -12
  3. package/dist/Expression.js +0 -16
  4. package/dist/Expression.js.map +1 -1
  5. package/dist/Jexl.js +12 -16
  6. package/dist/Jexl.js.map +1 -1
  7. package/dist/Lexer.d.ts +12 -94
  8. package/dist/Lexer.js +41 -142
  9. package/dist/Lexer.js.map +1 -1
  10. package/dist/analyze.d.ts +2 -0
  11. package/dist/analyze.js +7 -7
  12. package/dist/analyze.js.map +1 -1
  13. package/dist/check.d.ts +0 -5
  14. package/dist/check.js +62 -240
  15. package/dist/check.js.map +1 -1
  16. package/dist/collections.d.ts +7 -0
  17. package/dist/collections.js +9 -2
  18. package/dist/collections.js.map +1 -1
  19. package/dist/conditions.d.ts +1 -1
  20. package/dist/conditions.js +28 -50
  21. package/dist/conditions.js.map +1 -1
  22. package/dist/errors.d.ts +5 -0
  23. package/dist/errors.js +8 -0
  24. package/dist/errors.js.map +1 -1
  25. package/dist/evaluator/compile.js +37 -24
  26. package/dist/evaluator/compile.js.map +1 -1
  27. package/dist/grammar.d.ts +2 -2
  28. package/dist/grammar.js +1 -8
  29. package/dist/grammar.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.js +3 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/operators.d.ts +5 -0
  34. package/dist/operators.js +9 -5
  35. package/dist/operators.js.map +1 -1
  36. package/dist/parser/Parser.d.ts +11 -12
  37. package/dist/parser/Parser.js +4 -10
  38. package/dist/parser/Parser.js.map +1 -1
  39. package/dist/print.d.ts +9 -0
  40. package/dist/print.js +183 -0
  41. package/dist/print.js.map +1 -0
  42. package/dist/types.d.ts +18 -21
  43. package/esm/Expression.d.ts +0 -12
  44. package/esm/Expression.js +0 -16
  45. package/esm/Expression.js.map +1 -1
  46. package/esm/Jexl.js +12 -16
  47. package/esm/Jexl.js.map +1 -1
  48. package/esm/Lexer.d.ts +12 -94
  49. package/esm/Lexer.js +40 -142
  50. package/esm/Lexer.js.map +1 -1
  51. package/esm/analyze.d.ts +2 -0
  52. package/esm/analyze.js +6 -7
  53. package/esm/analyze.js.map +1 -1
  54. package/esm/check.d.ts +0 -5
  55. package/esm/check.js +29 -206
  56. package/esm/check.js.map +1 -1
  57. package/esm/collections.d.ts +7 -0
  58. package/esm/collections.js +8 -1
  59. package/esm/collections.js.map +1 -1
  60. package/esm/conditions.d.ts +1 -1
  61. package/esm/conditions.js +27 -49
  62. package/esm/conditions.js.map +1 -1
  63. package/esm/errors.d.ts +5 -0
  64. package/esm/errors.js +7 -0
  65. package/esm/errors.js.map +1 -1
  66. package/esm/evaluator/compile.js +37 -24
  67. package/esm/evaluator/compile.js.map +1 -1
  68. package/esm/grammar.d.ts +2 -2
  69. package/esm/grammar.js +1 -8
  70. package/esm/grammar.js.map +1 -1
  71. package/esm/index.d.ts +2 -1
  72. package/esm/index.js +2 -1
  73. package/esm/index.js.map +1 -1
  74. package/esm/operators.d.ts +5 -0
  75. package/esm/operators.js +8 -5
  76. package/esm/operators.js.map +1 -1
  77. package/esm/parser/Parser.d.ts +11 -12
  78. package/esm/parser/Parser.js +4 -8
  79. package/esm/parser/Parser.js.map +1 -1
  80. package/esm/print.d.ts +9 -0
  81. package/esm/print.js +177 -0
  82. package/esm/print.js.map +1 -0
  83. package/esm/types.d.ts +18 -21
  84. package/package.json +2 -1
  85. package/src/Expression.ts +0 -20
  86. package/src/Jexl.ts +13 -20
  87. package/src/Lexer.ts +42 -144
  88. package/src/analyze.ts +10 -10
  89. package/src/check.ts +48 -250
  90. package/src/collections.ts +11 -1
  91. package/src/conditions.ts +39 -62
  92. package/src/errors.ts +10 -0
  93. package/src/evaluator/compile.ts +49 -36
  94. package/src/grammar.ts +3 -9
  95. package/src/index.ts +2 -1
  96. package/src/operators.ts +10 -6
  97. package/src/parser/Parser.ts +13 -19
  98. package/src/print.ts +203 -0
  99. package/src/types.ts +19 -23
package/dist/analyze.js CHANGED
@@ -4,13 +4,15 @@
4
4
  * Copyright 2020 Tom Shawver
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.literalValue = literalValue;
7
8
  exports.analyze = analyze;
9
+ const errors_ts_1 = require("./errors.js");
8
10
  function literalKey(node) {
9
11
  const value = literalValue(node);
10
12
  return typeof value === 'boolean' ? String(value) : (value ?? undefined);
11
13
  }
12
- function literalValue(ast) {
13
- const node = ast;
14
+ /** A literal's value, or a template's with no interpolation. */
15
+ function literalValue(node) {
14
16
  if (node.type === 'Literal') {
15
17
  return node.value;
16
18
  }
@@ -29,8 +31,7 @@ function extend(read, keys, dynamic = false) {
29
31
  ? { root: read.root, path, dynamic }
30
32
  : { root: read.root, path };
31
33
  }
32
- function isBarePath(ast) {
33
- const node = ast;
34
+ function isBarePath(node) {
34
35
  if (node.type === 'Identifier') {
35
36
  return !node.from || isBarePath(node.from);
36
37
  }
@@ -134,8 +135,7 @@ function analyze(ast, { accessors = {}, row, env } = {}) {
134
135
  }
135
136
  return subject.map((read) => extend(read, keys, dynamic));
136
137
  }
137
- function walk(ast, scope) {
138
- const node = ast;
138
+ function walk(node, scope) {
139
139
  switch (node.type) {
140
140
  case 'Literal': {
141
141
  return [];
@@ -230,7 +230,7 @@ function analyze(ast, { accessors = {}, row, env } = {}) {
230
230
  return [];
231
231
  }
232
232
  default: {
233
- throw new Error(`Corrupt AST: unknown node type '${ast.type}'`);
233
+ return (0, errors_ts_1.unknownNode)(node);
234
234
  }
235
235
  }
236
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"}
package/dist/check.d.ts CHANGED
@@ -93,11 +93,6 @@ export interface CheckResult {
93
93
  type: Type;
94
94
  }
95
95
  export declare const UNKNOWN: Type;
96
- /**
97
- * Renders a tree back to expression text, for messages and suggestions. The
98
- * text parses back to the same tree.
99
- */
100
- export declare function print(ast: AstNode): string;
101
96
  /** The type of a row whose fields `schema` declares. */
102
97
  export declare function recordOf(schema: readonly FieldSchema[]): Type;
103
98
  export declare function union(a: Type, b: Type): Type;
package/dist/check.js CHANGED
@@ -5,10 +5,13 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.UNKNOWN = void 0;
8
- exports.print = print;
9
8
  exports.recordOf = recordOf;
10
9
  exports.union = union;
11
10
  exports.check = check;
11
+ const analyze_ts_1 = require("./analyze.js");
12
+ const errors_ts_1 = require("./errors.js");
13
+ const operators_ts_1 = require("./operators.js");
14
+ const print_ts_1 = require("./print.js");
12
15
  exports.UNKNOWN = { kind: 'unknown' };
13
16
  const UNDEFINED = { kind: 'undefined' };
14
17
  const BOOLEAN = { kind: 'boolean' };
@@ -18,184 +21,6 @@ const MAX_VALUES = 64;
18
21
  const ARITHMETIC = new Set(['-', '*', '/', '//', '%', '^']);
19
22
  const ORDER = new Set(['<', '<=', '>', '>=']);
20
23
  const EQUALITY = new Set(['==', '!=']);
21
- const PRECEDENCE = {
22
- '=': 2,
23
- '||': 10,
24
- '??': 10,
25
- '&&': 11,
26
- '==': 20,
27
- '!=': 20,
28
- '~': 20,
29
- '!~': 20,
30
- '<': 20,
31
- '<=': 20,
32
- '>': 20,
33
- '>=': 20,
34
- in: 20,
35
- '+': 30,
36
- '-': 30,
37
- '*': 40,
38
- '/': 40,
39
- '//': 40,
40
- '%': 50,
41
- '^': 50
42
- };
43
- const RIGHT_ASSOCIATIVE = new Set(['^']);
44
- const LOGICAL = new Set(['||', '&&']);
45
- // how tightly each form binds, mirroring the Parser's levels: `;`, then `=`
46
- // and lambdas, then `?:`, then binary operators, then prefix operators
47
- const SEQUENCE = 0;
48
- const ASSIGNMENT = 1;
49
- const CONDITIONAL = 2;
50
- const CUSTOM_BINARY = 3;
51
- const UNARY = 100;
52
- const letter = String.raw `a-zA-Zа-яА-Я_À-ÖØ-öø-ÿ$`;
53
- const IDENTIFIER = new RegExp(`^[${letter}][${letter}0-9]*$`);
54
- const WORDS = new Set(['in', 'true', 'false', 'null']);
55
- function isName(text) {
56
- return IDENTIFIER.test(text) && !WORDS.has(text);
57
- }
58
- function key(name) {
59
- return isName(name) ? `.${name}` : `[${quote(name)}]`;
60
- }
61
- function quote(text) {
62
- return `'${text.replaceAll('\\', '\\\\').replaceAll("'", String.raw `\'`)}'`;
63
- }
64
- function precedenceOf(node) {
65
- switch (node.type) {
66
- case 'SequenceExpression': {
67
- return SEQUENCE;
68
- }
69
- case 'AssignmentExpression':
70
- case 'Lambda': {
71
- return ASSIGNMENT;
72
- }
73
- case 'ConditionalExpression': {
74
- // with no alternate, it ends only before `)`, `]`, `}`, `,`, `;` or the end
75
- return node.alternate ? CONDITIONAL : SEQUENCE;
76
- }
77
- case 'BinaryExpression': {
78
- return PRECEDENCE[node.operator] ?? CUSTOM_BINARY;
79
- }
80
- case 'UnaryExpression': {
81
- return UNARY;
82
- }
83
- default: {
84
- return Infinity;
85
- }
86
- }
87
- }
88
- function within(ast, least) {
89
- const text = print(ast);
90
- return precedenceOf(ast) < least ? `(${text})` : text;
91
- }
92
- function binaryOperand(parent, ast, left) {
93
- const own = PRECEDENCE[parent.operator];
94
- if (own === undefined) {
95
- return within(ast, UNARY);
96
- }
97
- const child = ast;
98
- const theirs = precedenceOf(child);
99
- const chained = child.type === 'BinaryExpression' &&
100
- RIGHT_ASSOCIATIVE.has(parent.operator) &&
101
- RIGHT_ASSOCIATIVE.has(child.operator);
102
- const mixesNullish = child.type === 'BinaryExpression' &&
103
- ((parent.operator === '??' && LOGICAL.has(child.operator)) ||
104
- (child.operator === '??' && LOGICAL.has(parent.operator)));
105
- const text = print(ast);
106
- return theirs < own || (theirs === own && left === chained) || mixesNullish
107
- ? `(${text})`
108
- : text;
109
- }
110
- /**
111
- * Renders a tree back to expression text, for messages and suggestions. The
112
- * text parses back to the same tree.
113
- */
114
- function print(ast) {
115
- const node = ast;
116
- switch (node.type) {
117
- case 'Literal': {
118
- const { value } = node;
119
- return typeof value === 'string'
120
- ? quote(value)
121
- : Object.is(value, -0)
122
- ? '-0'
123
- : String(value);
124
- }
125
- case 'Identifier': {
126
- return node.from
127
- ? within(node.from, Infinity) + key(node.value)
128
- : node.value;
129
- }
130
- case 'FilterExpression': {
131
- return `${within(node.subject, Infinity)}[${within(node.expr, ASSIGNMENT)}]`;
132
- }
133
- case 'BinaryExpression': {
134
- return `${binaryOperand(node, node.left, true)} ${node.operator} ${binaryOperand(node, node.right, false)}`;
135
- }
136
- case 'UnaryExpression': {
137
- const { operator } = node;
138
- const right = within(node.right, UNARY);
139
- // the Lexer folds a minus before a digit into the number
140
- if (operator === '-' && /^\d/.test(right)) {
141
- return `-(${right})`;
142
- }
143
- return IDENTIFIER.test(operator)
144
- ? `${operator} ${right}`
145
- : operator + right;
146
- }
147
- case 'ConditionalExpression': {
148
- const test = within(node.test, CUSTOM_BINARY);
149
- const consequent = node.consequent
150
- ? ` ${within(node.consequent, ASSIGNMENT)} `
151
- : '';
152
- const alternate = node.alternate
153
- ? ` ${within(node.alternate, ASSIGNMENT)}`
154
- : '';
155
- return `${test} ?${consequent}:${alternate}`;
156
- }
157
- case 'FunctionCall': {
158
- const args = node.args.map((arg) => within(arg, ASSIGNMENT));
159
- return `${node.name}(${args.join(', ')})`;
160
- }
161
- case 'ArrayLiteral': {
162
- const items = node.value.map((item) => within(item, ASSIGNMENT));
163
- return `[${items.join(', ')}]`;
164
- }
165
- case 'ObjectLiteral': {
166
- const entries = Object.entries(node.value).map(([name, value]) => `${isName(name) ? name : quote(name)}: ${within(value, ASSIGNMENT)}`);
167
- return `{${entries.join(', ')}}`;
168
- }
169
- case 'TemplateLiteral': {
170
- const parts = node.parts.map((part) => part.type === 'static'
171
- ? part.value
172
- .replaceAll('\\', '\\\\')
173
- .replaceAll('`', '\\`')
174
- .replaceAll('${', '\\${')
175
- : `\${${print(part.value)}}`);
176
- return `\`${parts.join('')}\``;
177
- }
178
- case 'SequenceExpression': {
179
- const { expressions } = node;
180
- const text = expressions
181
- .map((expr) => within(expr, ASSIGNMENT))
182
- .join('; ');
183
- return expressions.length === 1 ? `${text};` : text;
184
- }
185
- case 'AssignmentExpression': {
186
- return `${node.left.value} = ${within(node.right, ASSIGNMENT)}`;
187
- }
188
- case 'Lambda': {
189
- const params = node.params.length === 1
190
- ? node.params[0]
191
- : `(${node.params.join(', ')})`;
192
- return `${params} => ${within(node.body, ASSIGNMENT)}`;
193
- }
194
- default: {
195
- return '?';
196
- }
197
- }
198
- }
199
24
  function distance(a, b) {
200
25
  let before = [];
201
26
  let previous = Array.from({ length: b.length + 1 }, (_, i) => i);
@@ -313,7 +138,7 @@ function isBoxed(type) {
313
138
  }
314
139
  function isPattern(pattern) {
315
140
  try {
316
- new RegExp(pattern.startsWith('(?i)') ? pattern.slice(4) : pattern);
141
+ (0, operators_ts_1.toRegExp)(pattern);
317
142
  return true;
318
143
  }
319
144
  catch {
@@ -570,21 +395,17 @@ function negate(type) {
570
395
  }
571
396
  }
572
397
  function paramName(subject, context) {
573
- const node = subject;
574
- const base = node.type === 'Identifier'
575
- ? node.value.toLowerCase().replaceAll(/\W/g, '')
398
+ const base = subject.type === 'Identifier'
399
+ ? subject.value.toLowerCase().replaceAll(/\W/g, '')
576
400
  : '';
577
- const name = isName(base) ? base : 'x';
578
- const text = print(context);
401
+ const name = (0, print_ts_1.isName)(base) ? base : 'x';
402
+ const text = (0, print_ts_1.print)(context);
579
403
  let candidate = name;
580
404
  for (let i = 2; new RegExp(String.raw `\b${candidate}\b`).test(text); i++) {
581
405
  candidate = `${name}${i}`;
582
406
  }
583
407
  return candidate;
584
408
  }
585
- function literalValue(node) {
586
- return node.type === 'Literal' ? node.value : undefined;
587
- }
588
409
  function describe(type) {
589
410
  switch (type.kind) {
590
411
  case 'list': {
@@ -597,7 +418,7 @@ function describe(type) {
597
418
  return type.values?.length === 1 ? String(type.values[0]) : 'a number';
598
419
  }
599
420
  case 'string': {
600
- return type.values?.length === 1 ? quote(type.values[0]) : 'text';
421
+ return type.values?.length === 1 ? (0, print_ts_1.quote)(type.values[0]) : 'text';
601
422
  }
602
423
  case 'boolean': {
603
424
  return type.field?.type === 'flag' ? 'a flag' : 'a boolean';
@@ -671,10 +492,10 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
671
492
  });
672
493
  }
673
494
  function text(node, name) {
674
- return node ? print(node) + key(name) : name;
495
+ return node ? (0, print_ts_1.print)(node) + (0, print_ts_1.key)(name) : name;
675
496
  }
676
497
  function field(subject, name, node, subjectNode, spell = (candidate) => text(subjectNode, candidate)) {
677
- const where = subjectNode ? print(subjectNode) : 'the row';
498
+ const where = subjectNode ? (0, print_ts_1.print)(subjectNode) : 'the row';
678
499
  switch (subject.kind) {
679
500
  case 'record': {
680
501
  const found = subject.fields.get(name) ?? subject.each;
@@ -698,16 +519,16 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
698
519
  (item.open || !!item.each || item.fields.has(name)));
699
520
  const suggestions = [];
700
521
  if (entriesHave && subjectNode && node.type === 'Identifier') {
701
- const list = print(subjectNode);
522
+ const list = (0, print_ts_1.print)(subjectNode);
702
523
  const param = paramName(subjectNode, node);
703
- suggestions.push(`${list}[0]${key(name)}`);
524
+ suggestions.push(`${list}[0]${(0, print_ts_1.key)(name)}`);
704
525
  if (functions?.map) {
705
- suggestions.push(`map(${list}, ${param} => ${param}${key(name)})`);
526
+ suggestions.push(`map(${list}, ${param} => ${param}${(0, print_ts_1.key)(name)})`);
706
527
  }
707
528
  }
708
- report('dot-through-list', 'warning', node, `${where} is a list, so ${key(name)} is undefined` +
529
+ report('dot-through-list', 'warning', node, `${where} is a list, so ${(0, print_ts_1.key)(name)} is undefined` +
709
530
  (entriesHave
710
- ? `; [0]${key(name)} reads the first entry's` +
531
+ ? `; [0]${(0, print_ts_1.key)(name)} reads the first entry's` +
711
532
  (functions?.any ? ', and any() tests each' : '')
712
533
  : ''), suggestions);
713
534
  return UNDEFINED;
@@ -730,7 +551,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
730
551
  return exports.UNKNOWN;
731
552
  }
732
553
  function index(subject, at, node, subjectNode) {
733
- const where = print(subjectNode);
554
+ const where = (0, print_ts_1.print)(subjectNode);
734
555
  switch (subject.kind) {
735
556
  case 'list': {
736
557
  const absent = firstAbsentIndex(subject.cardinality);
@@ -759,23 +580,17 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
759
580
  }
760
581
  }
761
582
  }
762
- function chain(node) {
583
+ function dottedKey(node) {
763
584
  const names = [node.value];
764
585
  let base = node;
765
- while (base.type === 'Identifier' && base.from) {
766
- base = base.from;
767
- if (base.type === 'Identifier') {
768
- names.unshift(base.value);
586
+ while (base.from) {
587
+ if (base.from.type !== 'Identifier') {
588
+ return undefined;
769
589
  }
590
+ base = base.from;
591
+ names.unshift(base.value);
770
592
  }
771
- return { base, names };
772
- }
773
- function dottedKey(node) {
774
- if (!node.from) {
775
- return undefined;
776
- }
777
- const { base, names } = chain(node);
778
- if (base.from) {
593
+ if (base === node) {
779
594
  return undefined;
780
595
  }
781
596
  let type = variable(base, false);
@@ -791,8 +606,8 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
791
606
  const stepReaches = step?.kind === 'record' &&
792
607
  (step.fields.has(names[i + 1]) || !!step.each);
793
608
  if (record.fields.has(whole) && !stepReaches) {
794
- const fixed = print(subjectNode) + key(whole);
795
- report('dotted-key', 'warning', node, `${whole} is one field of ${print(subjectNode)}; jexl reads ${names.slice(i, j).join(' then ')}`, [[fixed, ...names.slice(j).map((name) => key(name))].join('')]);
609
+ const fixed = (0, print_ts_1.print)(subjectNode) + (0, print_ts_1.key)(whole);
610
+ report('dotted-key', 'warning', node, `${whole} is one field of ${(0, print_ts_1.print)(subjectNode)}; jexl reads ${names.slice(i, j).join(' then ')}`, [[fixed, ...names.slice(j).map((name) => (0, print_ts_1.key)(name))].join('')]);
796
611
  let resolved = record.fields.get(whole);
797
612
  for (const name of names.slice(j)) {
798
613
  resolved = field(resolved, name, node, undefined);
@@ -849,23 +664,31 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
849
664
  if (node.type !== 'BinaryExpression' ||
850
665
  node.operator !== '-' ||
851
666
  node.left.type !== 'Identifier' ||
852
- node.right?.type !== 'Identifier' ||
667
+ node.right.type !== 'Identifier' ||
853
668
  node.right.from) {
854
669
  return undefined;
855
670
  }
856
671
  const left = node.left;
672
+ const name = left.value;
673
+ if (!left.from &&
674
+ (scope.has(name) || name === row || (env && Object.hasOwn(env, name)))) {
675
+ return undefined;
676
+ }
857
677
  const reported = diagnostics.length;
858
678
  const subject = left.from ? infer(left.from) : root;
859
679
  diagnostics.length = reported;
860
- if (subject.kind !== 'record' || subject.fields.has(left.value)) {
680
+ if (subject.kind !== 'record' || subject.fields.has(name)) {
861
681
  return undefined;
862
682
  }
863
- const whole = `${left.value}-${node.right.value}`;
683
+ const whole = `${name}-${node.right.value}`;
864
684
  const found = subject.fields.get(whole);
865
685
  if (!found) {
866
686
  return undefined;
867
687
  }
868
- report('unknown-field', 'warning', node, `${print(node)} subtracts; ${whole} is one field`, [text(left.from, whole)]);
688
+ // a bare name can't hold a hyphen, so only a row variable can spell it
689
+ const holder = left.from ??
690
+ (row === undefined ? undefined : { type: 'Identifier', value: row });
691
+ report('unknown-field', 'warning', node, `${(0, print_ts_1.print)(node)} subtracts; ${whole} is one field`, holder ? [text(holder, whole)] : []);
869
692
  return found;
870
693
  }
871
694
  function memberFor(element, value, valueNode, listNode, node) {
@@ -878,10 +701,10 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
878
701
  const scalar = type.kind === 'list' ? type.of : type;
879
702
  return scalar.kind === 'string' && scalar.values?.includes(literal);
880
703
  });
881
- report('never-equal', 'warning', node, `${print(listNode)} holds records, so no entry equals ${quote(literal)}` +
704
+ report('never-equal', 'warning', node, `${(0, print_ts_1.print)(listNode)} holds records, so no entry equals ${(0, print_ts_1.quote)(literal)}` +
882
705
  (holder ? `; it is a value of their ${holder[0]} field` : ''), holder && functions?.any
883
706
  ? [
884
- `any(${print(listNode)}, ${paramName(listNode, node)} => ${print(valueNode)} in ${paramName(listNode, node)}${key(holder[0])})`
707
+ `any(${(0, print_ts_1.print)(listNode)}, ${paramName(listNode, node)} => ${(0, print_ts_1.print)(valueNode)} in ${paramName(listNode, node)}${(0, print_ts_1.key)(holder[0])})`
885
708
  ]
886
709
  : []);
887
710
  return;
@@ -892,21 +715,21 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
892
715
  if (type.kind === 'number' &&
893
716
  typeof literal === 'string' &&
894
717
  Number.isNaN(Number(literal))) {
895
- report('never-equal', 'warning', node, `${quote(literal)} is not a number, so it never equals ${describe(type)}`);
718
+ report('never-equal', 'warning', node, `${(0, print_ts_1.quote)(literal)} is not a number, so it never equals ${describe(type)}`);
896
719
  }
897
720
  else if (type.kind === 'boolean' && typeof literal === 'string') {
898
- report('never-equal', 'warning', node, `${describe(type)} never equals the text ${quote(literal)}`, literal === 'true' || literal === 'false' ? [literal] : []);
721
+ report('never-equal', 'warning', node, `${describe(type)} never equals the text ${(0, print_ts_1.quote)(literal)}`, literal === 'true' || literal === 'false' ? [literal] : []);
899
722
  }
900
723
  else if (type.kind === 'string' &&
901
724
  type.field?.categories &&
902
725
  typeof literal === 'string' &&
903
726
  !type.field.categories.includes(literal)) {
904
727
  const near = nearest(literal, type.field.categories);
905
- report('unknown-category', 'warning', node, `${quote(literal)} is not one of the values the header declares for ${type.field.path.join('.')}` +
906
- (near.length ? `; did you mean ${near.map(quote).join(', ')}?` : ''), near.map(quote));
728
+ report('unknown-category', 'warning', node, `${(0, print_ts_1.quote)(literal)} is not one of the values the header declares for ${type.field.path.join('.')}` +
729
+ (near.length ? `; did you mean ${near.map(print_ts_1.quote).join(', ')}?` : ''), near.map(print_ts_1.quote));
907
730
  }
908
731
  else if (type.kind === 'record') {
909
- report('never-equal', 'warning', node, `a record never equals ${quote(String(literal))}`);
732
+ report('never-equal', 'warning', node, `a record never equals ${(0, print_ts_1.quote)(String(literal))}`);
910
733
  }
911
734
  }
912
735
  function binary(node) {
@@ -929,7 +752,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
929
752
  if (operator === '~' || operator === '!~') {
930
753
  const pattern = literalOf(right);
931
754
  if (typeof pattern === 'string' && !isPattern(pattern)) {
932
- report('invalid-pattern', 'error', node, `${quote(pattern)} is not a valid regular expression`);
755
+ report('invalid-pattern', 'error', node, `${(0, print_ts_1.quote)(pattern)} is not a valid regular expression`);
933
756
  }
934
757
  return BOOLEAN;
935
758
  }
@@ -945,7 +768,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
945
768
  second &&
946
769
  (ARITHMETIC.has(operator) || operator === '+') &&
947
770
  !pairs(first.cardinality, second.cardinality)) {
948
- report('list-lengths', 'warning', node, `${print(node.left)} ${holding(first)} and ${print(rightNode)} ${holding(second)}, so ${operator} pairs them only where both hold one value`);
771
+ report('list-lengths', 'warning', node, `${(0, print_ts_1.print)(node.left)} ${holding(first)} and ${(0, print_ts_1.print)(rightNode)} ${holding(second)}, so ${operator} pairs them only where both hold one value`);
949
772
  }
950
773
  const eachOf = (item) => first ? { kind: 'list', of: item, cardinality: first.cardinality } : item;
951
774
  if (operator === '+') {
@@ -960,9 +783,9 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
960
783
  ]) {
961
784
  const numericOther = ARITHMETIC.has(operator) || isNumberish(other);
962
785
  if (type.kind === 'string' && type.field && numericOther) {
963
- report('string-numeric', 'warning', node, `${print(typeNode)} is text, so ${operator} converts it to a number, ${ORDER.has(operator) ? 'answering false' : 'giving NaN'} wherever it is not one`, functions?.parseFloat
786
+ report('string-numeric', 'warning', node, `${(0, print_ts_1.print)(typeNode)} is text, so ${operator} converts it to a number, ${ORDER.has(operator) ? 'answering false' : 'giving NaN'} wherever it is not one`, functions?.parseFloat
964
787
  ? [
965
- print(node).replace(print(typeNode), `parseFloat(${print(typeNode)})`)
788
+ (0, print_ts_1.print)(node).replace((0, print_ts_1.print)(typeNode), `parseFloat(${(0, print_ts_1.print)(typeNode)})`)
966
789
  ]
967
790
  : []);
968
791
  }
@@ -974,7 +797,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
974
797
  if (EQUALITY.has(operator)) {
975
798
  const leftLiteral = literalOf(leftItem);
976
799
  const rightLiteral = literalOf(rightItem);
977
- if (rightLiteral !== undefined && node.right?.type === 'Literal') {
800
+ if (rightLiteral !== undefined && node.right.type === 'Literal') {
978
801
  compareLiteral(leftItem, rightLiteral, node);
979
802
  }
980
803
  else if (leftLiteral !== undefined && node.left.type === 'Literal') {
@@ -987,7 +810,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
987
810
  memberFor(right.of, leftItem, node.left, rightNode, node);
988
811
  }
989
812
  else if (right.kind === 'number' || right.kind === 'boolean') {
990
- report('never-equal', 'warning', node, `in tests a list, text, a Set, a Map or an object's keys, and ${print(rightNode)} is ${describe(right)}`);
813
+ report('never-equal', 'warning', node, `in tests a list, text, a Set, a Map or an object's keys, and ${(0, print_ts_1.print)(rightNode)} is ${describe(right)}`);
991
814
  }
992
815
  return BOOLEAN;
993
816
  }
@@ -1061,12 +884,12 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1061
884
  step(String(name), node);
1062
885
  }
1063
886
  for (const arg of keyArgs) {
1064
- const name = literalValue(arg);
887
+ const name = (0, analyze_ts_1.literalValue)(arg);
1065
888
  if (typeof name !== 'string' && typeof name !== 'number') {
1066
889
  keyArgs.forEach(infer);
1067
890
  return exports.UNKNOWN;
1068
891
  }
1069
- step(String(name), arg, quote);
892
+ step(String(name), arg, print_ts_1.quote);
1070
893
  }
1071
894
  return type;
1072
895
  }
@@ -1076,7 +899,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1076
899
  if (functions) {
1077
900
  const near = nearest(name, Object.keys(functions));
1078
901
  report('unknown-function', 'error', node, `no function ${name}` +
1079
- (near.length ? `; did you mean ${near.join(', ')}?` : ''), near.map((candidate) => print({ ...node, name: candidate })));
902
+ (near.length ? `; did you mean ${near.join(', ')}?` : ''), near.map((candidate) => (0, print_ts_1.print)({ ...node, name: candidate })));
1080
903
  }
1081
904
  return exports.UNKNOWN;
1082
905
  }
@@ -1104,7 +927,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1104
927
  const type = infer(arg);
1105
928
  types.push(type);
1106
929
  if (accepted.includes('lambda')) {
1107
- report('argument-type', 'error', arg, `${name} expects a function such as x => …, not ${print(arg)}`);
930
+ report('argument-type', 'error', arg, `${name} expects a function such as x => …, not ${(0, print_ts_1.print)(arg)}`);
1108
931
  continue;
1109
932
  }
1110
933
  if (accepted.includes('member') && lastCollection && lastCollectionNode) {
@@ -1119,7 +942,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1119
942
  ? 'list-operand'
1120
943
  : type.kind === 'string'
1121
944
  ? 'string-numeric'
1122
- : 'argument-type', 'warning', arg, `${name} expects ${accepted.join(' or ')} as argument ${i + 1}, but ${print(arg)} ${problems[0]}`);
945
+ : 'argument-type', 'warning', arg, `${name} expects ${accepted.join(' or ')} as argument ${i + 1}, but ${(0, print_ts_1.print)(arg)} ${problems[0]}`);
1123
946
  }
1124
947
  if (accepted.includes('list')) {
1125
948
  lastCollection = type;
@@ -1135,8 +958,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1135
958
  }
1136
959
  return returns ?? exports.UNKNOWN;
1137
960
  }
1138
- function infer(ast) {
1139
- const node = ast;
961
+ function infer(node) {
1140
962
  switch (node.type) {
1141
963
  case 'Literal': {
1142
964
  const { value } = node;
@@ -1160,20 +982,20 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1160
982
  }
1161
983
  case 'FilterExpression': {
1162
984
  const subject = infer(node.subject);
1163
- const at = literalValue(node.expr);
985
+ const at = (0, analyze_ts_1.literalValue)(node.expr);
1164
986
  if (typeof at === 'number') {
1165
987
  return index(subject, at, node, node.subject);
1166
988
  }
1167
989
  if (typeof at === 'string') {
1168
990
  if (subject.kind === 'list' && at !== 'length') {
1169
- report('unknown-field', 'warning', node, `${print(node.subject)} is ${describe(subject)}, so [${quote(at)}] reads nothing`);
991
+ report('unknown-field', 'warning', node, `${(0, print_ts_1.print)(node.subject)} is ${describe(subject)}, so [${(0, print_ts_1.quote)(at)}] reads nothing`);
1170
992
  return UNDEFINED;
1171
993
  }
1172
994
  return field(subject, at, node, node.subject);
1173
995
  }
1174
996
  const by = infer(node.expr);
1175
997
  if (isMulti(by)) {
1176
- report('list-operand', 'warning', node, `${print(node.expr)} ${holding(by)}, so indexing by it finds an entry only when there is exactly one`);
998
+ report('list-operand', 'warning', node, `${(0, print_ts_1.print)(node.expr)} ${holding(by)}, so indexing by it finds an entry only when there is exactly one`);
1177
999
  }
1178
1000
  if (subject.kind === 'record') {
1179
1001
  return unionAll([
@@ -1257,7 +1079,7 @@ function check(ast, { schema, functions, accessors = {}, row, env } = {}) {
1257
1079
  return lambda(node);
1258
1080
  }
1259
1081
  default: {
1260
- throw new Error(`Corrupt AST: unknown node type '${ast.type}'`);
1082
+ return (0, errors_ts_1.unknownNode)(node);
1261
1083
  }
1262
1084
  }
1263
1085
  }