fhirpath-ts 0.1.0 → 0.2.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 (120) hide show
  1. package/README.md +50 -18
  2. package/dist/analyzer/analyze-dto.d.ts +4 -0
  3. package/dist/analyzer/analyze-dto.d.ts.map +1 -1
  4. package/dist/analyzer/analyze-dto.js +12 -14
  5. package/dist/analyzer/analyze-dto.js.map +1 -1
  6. package/dist/analyzer/analyze.d.ts +22 -6
  7. package/dist/analyzer/analyze.d.ts.map +1 -1
  8. package/dist/analyzer/analyze.js +242 -98
  9. package/dist/analyzer/analyze.js.map +1 -1
  10. package/dist/analyzer/declarations.d.ts +26 -0
  11. package/dist/analyzer/declarations.d.ts.map +1 -0
  12. package/dist/analyzer/declarations.js +68 -0
  13. package/dist/analyzer/declarations.js.map +1 -0
  14. package/dist/analyzer/operator-rules.d.ts +127 -0
  15. package/dist/analyzer/operator-rules.d.ts.map +1 -0
  16. package/dist/analyzer/operator-rules.js +70 -0
  17. package/dist/analyzer/operator-rules.js.map +1 -0
  18. package/dist/analyzer/signatures.d.ts +1097 -10
  19. package/dist/analyzer/signatures.d.ts.map +1 -1
  20. package/dist/analyzer/signatures.js +70 -29
  21. package/dist/analyzer/signatures.js.map +1 -1
  22. package/dist/api/compile.d.ts +32 -8
  23. package/dist/api/compile.d.ts.map +1 -1
  24. package/dist/api/compile.js +2 -0
  25. package/dist/api/compile.js.map +1 -1
  26. package/dist/api/engine.d.ts +42 -16
  27. package/dist/api/engine.d.ts.map +1 -1
  28. package/dist/api/engine.js +2 -1
  29. package/dist/api/engine.js.map +1 -1
  30. package/dist/api/project.d.ts +8 -8
  31. package/dist/api/project.d.ts.map +1 -1
  32. package/dist/api/project.js +31 -19
  33. package/dist/api/project.js.map +1 -1
  34. package/dist/api/strict.d.ts +6 -0
  35. package/dist/api/strict.d.ts.map +1 -0
  36. package/dist/api/strict.js +71 -0
  37. package/dist/api/strict.js.map +1 -0
  38. package/dist/api/tagged.d.ts +4 -4
  39. package/dist/api/tagged.d.ts.map +1 -1
  40. package/dist/api/tagged.js.map +1 -1
  41. package/dist/cli/dto-check.js +7 -3
  42. package/dist/cli/dto-check.js.map +1 -1
  43. package/dist/engine/context.d.ts +3 -1
  44. package/dist/engine/context.d.ts.map +1 -1
  45. package/dist/engine/context.js +5 -1
  46. package/dist/engine/context.js.map +1 -1
  47. package/dist/engine/navigation.d.ts.map +1 -1
  48. package/dist/engine/navigation.js +7 -48
  49. package/dist/engine/navigation.js.map +1 -1
  50. package/dist/engine/type-matching.d.ts.map +1 -1
  51. package/dist/engine/type-matching.js +6 -16
  52. package/dist/engine/type-matching.js.map +1 -1
  53. package/dist/index.d.ts +4 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/parser/parser.d.ts.map +1 -1
  57. package/dist/parser/parser.js +102 -73
  58. package/dist/parser/parser.js.map +1 -1
  59. package/dist/parser/precedence.d.ts +368 -4
  60. package/dist/parser/precedence.d.ts.map +1 -1
  61. package/dist/parser/precedence.js +146 -32
  62. package/dist/parser/precedence.js.map +1 -1
  63. package/dist/r4/generated/type-maps.d.ts +1367 -0
  64. package/dist/r4/generated/type-maps.d.ts.map +1 -1
  65. package/dist/r4/index.d.ts +3 -1
  66. package/dist/r4/index.d.ts.map +1 -1
  67. package/dist/typed/context-maps.d.ts +23 -0
  68. package/dist/typed/context-maps.d.ts.map +1 -0
  69. package/dist/typed/context-maps.js +2 -0
  70. package/dist/typed/context-maps.js.map +1 -0
  71. package/dist/typed/infer.d.ts +99 -229
  72. package/dist/typed/infer.d.ts.map +1 -1
  73. package/dist/typed/infer.js +1 -84
  74. package/dist/typed/infer.js.map +1 -1
  75. package/dist/typed/inference-limits.d.ts +7 -0
  76. package/dist/typed/inference-limits.d.ts.map +1 -0
  77. package/dist/typed/inference-limits.js +6 -0
  78. package/dist/typed/inference-limits.js.map +1 -0
  79. package/dist/typed/metadata-compact.d.ts +189 -0
  80. package/dist/typed/metadata-compact.d.ts.map +1 -0
  81. package/dist/typed/metadata-compact.js +3 -0
  82. package/dist/typed/metadata-compact.js.map +1 -0
  83. package/dist/typed/parser.d.ts +515 -0
  84. package/dist/typed/parser.d.ts.map +1 -0
  85. package/dist/typed/parser.js +2 -0
  86. package/dist/typed/parser.js.map +1 -0
  87. package/dist/values/type-compat.d.ts +8 -0
  88. package/dist/values/type-compat.d.ts.map +1 -1
  89. package/dist/values/type-compat.js +44 -1
  90. package/dist/values/type-compat.js.map +1 -1
  91. package/package.json +20 -1
  92. package/src/analyzer/analyze-dto.ts +21 -17
  93. package/src/analyzer/analyze.ts +335 -109
  94. package/src/analyzer/declarations.ts +120 -0
  95. package/src/analyzer/operator-rules.ts +88 -0
  96. package/src/analyzer/signatures.ts +99 -41
  97. package/src/api/compile.ts +66 -11
  98. package/src/api/engine.ts +97 -33
  99. package/src/api/project.ts +54 -30
  100. package/src/api/strict.ts +112 -0
  101. package/src/api/tagged.ts +5 -5
  102. package/src/cli/dto-check.ts +7 -3
  103. package/src/engine/context.ts +7 -2
  104. package/src/engine/navigation.ts +7 -52
  105. package/src/engine/type-matching.ts +11 -17
  106. package/src/index.ts +25 -2
  107. package/src/parser/parser.ts +106 -74
  108. package/src/parser/precedence.ts +250 -33
  109. package/src/r4/generated/type-maps.ts +1557 -0
  110. package/src/typed/context-maps.ts +41 -0
  111. package/src/typed/infer.ts +157 -425
  112. package/src/typed/inference-limits.ts +9 -0
  113. package/src/typed/metadata-compact.ts +307 -0
  114. package/src/typed/parser.ts +2277 -0
  115. package/src/values/type-compat.ts +48 -1
  116. package/dist/typed/perf-fixture.types.d.ts +0 -136
  117. package/dist/typed/perf-fixture.types.d.ts.map +0 -1
  118. package/dist/typed/perf-fixture.types.js +0 -2
  119. package/dist/typed/perf-fixture.types.js.map +0 -1
  120. package/src/typed/perf-fixture.types.ts +0 -143
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Binding powers derived from the spec's 13-level operator precedence table
3
- * (https://hl7.org/fhirpath/#operator-precedence). Higher binds tighter; the
4
- * spec numbers levels the other way around (1 = `.`, 13 = `implies`).
2
+ * Binding powers derived from the spec's 13-level operator precedence table.
3
+ * Higher binds tighter; the spec numbers levels in the opposite direction.
5
4
  */
6
5
  export declare const BindingPower: {
7
6
  readonly Implies: 1;
@@ -19,6 +18,371 @@ export declare const BindingPower: {
19
18
  readonly Dot: 13;
20
19
  readonly FunctionCall: 14;
21
20
  };
22
- /** Binding power for every infix (and postfix) construct, keyed by token text. */
21
+ export type InfixParseletRecord = {
22
+ tokenKind: 'operator' | 'keyword';
23
+ fixity: 'infix';
24
+ bindingPower: number;
25
+ associativity: 'left';
26
+ rhs: 'expression';
27
+ reducer: 'binary';
28
+ } | {
29
+ tokenKind: 'keyword';
30
+ fixity: 'infix';
31
+ bindingPower: number;
32
+ associativity: 'left';
33
+ rhs: 'type-name';
34
+ reducer: 'type';
35
+ } | {
36
+ tokenKind: 'punct';
37
+ fixity: 'infix';
38
+ bindingPower: number;
39
+ associativity: 'left';
40
+ rhs: 'path';
41
+ reducer: 'dot';
42
+ } | {
43
+ tokenKind: 'punct';
44
+ fixity: 'postfix';
45
+ bindingPower: number;
46
+ associativity: 'left';
47
+ rhs: 'index';
48
+ reducer: 'indexer';
49
+ } | {
50
+ tokenKind: 'punct';
51
+ fixity: 'postfix';
52
+ bindingPower: number;
53
+ associativity: 'left';
54
+ rhs: 'arguments';
55
+ reducer: 'call';
56
+ };
57
+ export type PrefixParseletRecord = {
58
+ tokenKind: 'identifier' | 'variable';
59
+ fixity: 'prefix';
60
+ bindingPower: number;
61
+ associativity: 'none';
62
+ rhs: 'none';
63
+ reducer: 'identifier';
64
+ } | {
65
+ tokenKind: 'literal';
66
+ fixity: 'prefix';
67
+ bindingPower: number;
68
+ associativity: 'none';
69
+ rhs: 'none';
70
+ reducer: 'literal';
71
+ } | {
72
+ tokenKind: 'operator';
73
+ fixity: 'prefix';
74
+ bindingPower: number;
75
+ associativity: 'right';
76
+ rhs: 'expression';
77
+ reducer: 'unary';
78
+ } | {
79
+ tokenKind: 'punct';
80
+ fixity: 'prefix';
81
+ bindingPower: number;
82
+ associativity: 'none';
83
+ rhs: 'group';
84
+ reducer: 'group';
85
+ } | {
86
+ tokenKind: 'punct';
87
+ fixity: 'prefix';
88
+ bindingPower: number;
89
+ associativity: 'none';
90
+ rhs: 'none';
91
+ reducer: 'empty';
92
+ } | {
93
+ tokenKind: 'punct';
94
+ fixity: 'prefix';
95
+ bindingPower: number;
96
+ associativity: 'none';
97
+ rhs: 'external-name';
98
+ reducer: 'external';
99
+ };
100
+ /** Single source of truth for tokens and token kinds accepted before an operand. */
101
+ export declare const PREFIX_PARSELETS: {
102
+ readonly identifier: {
103
+ readonly tokenKind: "identifier";
104
+ readonly fixity: "prefix";
105
+ readonly bindingPower: 0;
106
+ readonly associativity: "none";
107
+ readonly rhs: "none";
108
+ readonly reducer: "identifier";
109
+ };
110
+ readonly literal: {
111
+ readonly tokenKind: "literal";
112
+ readonly fixity: "prefix";
113
+ readonly bindingPower: 0;
114
+ readonly associativity: "none";
115
+ readonly rhs: "none";
116
+ readonly reducer: "literal";
117
+ };
118
+ readonly variable: {
119
+ readonly tokenKind: "variable";
120
+ readonly fixity: "prefix";
121
+ readonly bindingPower: 0;
122
+ readonly associativity: "none";
123
+ readonly rhs: "none";
124
+ readonly reducer: "identifier";
125
+ };
126
+ readonly '+': {
127
+ readonly tokenKind: "operator";
128
+ readonly fixity: "prefix";
129
+ readonly bindingPower: 11;
130
+ readonly associativity: "right";
131
+ readonly rhs: "expression";
132
+ readonly reducer: "unary";
133
+ };
134
+ readonly '-': {
135
+ readonly tokenKind: "operator";
136
+ readonly fixity: "prefix";
137
+ readonly bindingPower: 11;
138
+ readonly associativity: "right";
139
+ readonly rhs: "expression";
140
+ readonly reducer: "unary";
141
+ };
142
+ readonly '(': {
143
+ readonly tokenKind: "punct";
144
+ readonly fixity: "prefix";
145
+ readonly bindingPower: 0;
146
+ readonly associativity: "none";
147
+ readonly rhs: "group";
148
+ readonly reducer: "group";
149
+ };
150
+ readonly '{': {
151
+ readonly tokenKind: "punct";
152
+ readonly fixity: "prefix";
153
+ readonly bindingPower: 0;
154
+ readonly associativity: "none";
155
+ readonly rhs: "none";
156
+ readonly reducer: "empty";
157
+ };
158
+ readonly '%': {
159
+ readonly tokenKind: "punct";
160
+ readonly fixity: "prefix";
161
+ readonly bindingPower: 0;
162
+ readonly associativity: "none";
163
+ readonly rhs: "external-name";
164
+ readonly reducer: "external";
165
+ };
166
+ };
167
+ /** Single source of truth for every token accepted after an operand. */
168
+ export declare const INFIX_PARSELETS: {
169
+ readonly implies: {
170
+ tokenKind: "operator" | "keyword";
171
+ fixity: "infix";
172
+ bindingPower: number;
173
+ associativity: "left";
174
+ rhs: "expression";
175
+ reducer: "binary";
176
+ };
177
+ readonly or: {
178
+ tokenKind: "operator" | "keyword";
179
+ fixity: "infix";
180
+ bindingPower: number;
181
+ associativity: "left";
182
+ rhs: "expression";
183
+ reducer: "binary";
184
+ };
185
+ readonly xor: {
186
+ tokenKind: "operator" | "keyword";
187
+ fixity: "infix";
188
+ bindingPower: number;
189
+ associativity: "left";
190
+ rhs: "expression";
191
+ reducer: "binary";
192
+ };
193
+ readonly and: {
194
+ tokenKind: "operator" | "keyword";
195
+ fixity: "infix";
196
+ bindingPower: number;
197
+ associativity: "left";
198
+ rhs: "expression";
199
+ reducer: "binary";
200
+ };
201
+ readonly in: {
202
+ tokenKind: "operator" | "keyword";
203
+ fixity: "infix";
204
+ bindingPower: number;
205
+ associativity: "left";
206
+ rhs: "expression";
207
+ reducer: "binary";
208
+ };
209
+ readonly contains: {
210
+ tokenKind: "operator" | "keyword";
211
+ fixity: "infix";
212
+ bindingPower: number;
213
+ associativity: "left";
214
+ rhs: "expression";
215
+ reducer: "binary";
216
+ };
217
+ readonly '=': {
218
+ tokenKind: "operator" | "keyword";
219
+ fixity: "infix";
220
+ bindingPower: number;
221
+ associativity: "left";
222
+ rhs: "expression";
223
+ reducer: "binary";
224
+ };
225
+ readonly '~': {
226
+ tokenKind: "operator" | "keyword";
227
+ fixity: "infix";
228
+ bindingPower: number;
229
+ associativity: "left";
230
+ rhs: "expression";
231
+ reducer: "binary";
232
+ };
233
+ readonly '!=': {
234
+ tokenKind: "operator" | "keyword";
235
+ fixity: "infix";
236
+ bindingPower: number;
237
+ associativity: "left";
238
+ rhs: "expression";
239
+ reducer: "binary";
240
+ };
241
+ readonly '!~': {
242
+ tokenKind: "operator" | "keyword";
243
+ fixity: "infix";
244
+ bindingPower: number;
245
+ associativity: "left";
246
+ rhs: "expression";
247
+ reducer: "binary";
248
+ };
249
+ readonly '<': {
250
+ tokenKind: "operator" | "keyword";
251
+ fixity: "infix";
252
+ bindingPower: number;
253
+ associativity: "left";
254
+ rhs: "expression";
255
+ reducer: "binary";
256
+ };
257
+ readonly '>': {
258
+ tokenKind: "operator" | "keyword";
259
+ fixity: "infix";
260
+ bindingPower: number;
261
+ associativity: "left";
262
+ rhs: "expression";
263
+ reducer: "binary";
264
+ };
265
+ readonly '<=': {
266
+ tokenKind: "operator" | "keyword";
267
+ fixity: "infix";
268
+ bindingPower: number;
269
+ associativity: "left";
270
+ rhs: "expression";
271
+ reducer: "binary";
272
+ };
273
+ readonly '>=': {
274
+ tokenKind: "operator" | "keyword";
275
+ fixity: "infix";
276
+ bindingPower: number;
277
+ associativity: "left";
278
+ rhs: "expression";
279
+ reducer: "binary";
280
+ };
281
+ readonly '|': {
282
+ tokenKind: "operator" | "keyword";
283
+ fixity: "infix";
284
+ bindingPower: number;
285
+ associativity: "left";
286
+ rhs: "expression";
287
+ reducer: "binary";
288
+ };
289
+ readonly is: {
290
+ readonly tokenKind: "keyword";
291
+ readonly fixity: "infix";
292
+ readonly bindingPower: 8;
293
+ readonly associativity: "left";
294
+ readonly rhs: "type-name";
295
+ readonly reducer: "type";
296
+ };
297
+ readonly as: {
298
+ readonly tokenKind: "keyword";
299
+ readonly fixity: "infix";
300
+ readonly bindingPower: 8;
301
+ readonly associativity: "left";
302
+ readonly rhs: "type-name";
303
+ readonly reducer: "type";
304
+ };
305
+ readonly '+': {
306
+ tokenKind: "operator" | "keyword";
307
+ fixity: "infix";
308
+ bindingPower: number;
309
+ associativity: "left";
310
+ rhs: "expression";
311
+ reducer: "binary";
312
+ };
313
+ readonly '-': {
314
+ tokenKind: "operator" | "keyword";
315
+ fixity: "infix";
316
+ bindingPower: number;
317
+ associativity: "left";
318
+ rhs: "expression";
319
+ reducer: "binary";
320
+ };
321
+ readonly '&': {
322
+ tokenKind: "operator" | "keyword";
323
+ fixity: "infix";
324
+ bindingPower: number;
325
+ associativity: "left";
326
+ rhs: "expression";
327
+ reducer: "binary";
328
+ };
329
+ readonly '*': {
330
+ tokenKind: "operator" | "keyword";
331
+ fixity: "infix";
332
+ bindingPower: number;
333
+ associativity: "left";
334
+ rhs: "expression";
335
+ reducer: "binary";
336
+ };
337
+ readonly '/': {
338
+ tokenKind: "operator" | "keyword";
339
+ fixity: "infix";
340
+ bindingPower: number;
341
+ associativity: "left";
342
+ rhs: "expression";
343
+ reducer: "binary";
344
+ };
345
+ readonly div: {
346
+ tokenKind: "operator" | "keyword";
347
+ fixity: "infix";
348
+ bindingPower: number;
349
+ associativity: "left";
350
+ rhs: "expression";
351
+ reducer: "binary";
352
+ };
353
+ readonly mod: {
354
+ tokenKind: "operator" | "keyword";
355
+ fixity: "infix";
356
+ bindingPower: number;
357
+ associativity: "left";
358
+ rhs: "expression";
359
+ reducer: "binary";
360
+ };
361
+ readonly '[': {
362
+ readonly tokenKind: "punct";
363
+ readonly fixity: "postfix";
364
+ readonly bindingPower: 12;
365
+ readonly associativity: "left";
366
+ readonly rhs: "index";
367
+ readonly reducer: "indexer";
368
+ };
369
+ readonly '.': {
370
+ readonly tokenKind: "punct";
371
+ readonly fixity: "infix";
372
+ readonly bindingPower: 13;
373
+ readonly associativity: "left";
374
+ readonly rhs: "path";
375
+ readonly reducer: "dot";
376
+ };
377
+ readonly '(': {
378
+ readonly tokenKind: "punct";
379
+ readonly fixity: "postfix";
380
+ readonly bindingPower: 14;
381
+ readonly associativity: "left";
382
+ readonly rhs: "arguments";
383
+ readonly reducer: "call";
384
+ };
385
+ };
386
+ /** Compatibility view used by callers that only need precedence. */
23
387
  export declare const INFIX_BINDING_POWER: Readonly<Record<string, number>>;
24
388
  //# sourceMappingURL=precedence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"precedence.d.ts","sourceRoot":"","sources":["../../src/parser/precedence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAef,CAAA;AAEV,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BhE,CAAA"}
1
+ {"version":3,"file":"precedence.d.ts","sourceRoot":"","sources":["../../src/parser/precedence.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAef,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAC3B;IACE,SAAS,EAAE,UAAU,GAAG,SAAS,CAAA;IACjC,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,YAAY,CAAA;IACjB,OAAO,EAAE,QAAQ,CAAA;CAClB,GACD;IACE,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,WAAW,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,KAAK,CAAA;CACf,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,SAAS,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,SAAS,CAAA;CACnB,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,SAAS,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,WAAW,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL,MAAM,MAAM,oBAAoB,GAC5B;IACE,SAAS,EAAE,YAAY,GAAG,UAAU,CAAA;IACpC,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,YAAY,CAAA;CACtB,GACD;IACE,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,SAAS,CAAA;CACnB,GACD;IACE,SAAS,EAAE,UAAU,CAAA;IACrB,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,YAAY,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB,GACD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,eAAe,CAAA;IACpB,OAAO,EAAE,UAAU,CAAA;CACpB,CAAA;AAEL,oFAAoF;AACpF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiE4B,CAAA;AAczD,wEAAwE;AACxE,eAAO,MAAM,eAAe;;mBA3KX,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;;;;;;;;;;;;;;;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;mBALN,UAAU,GAAG,SAAS;gBACzB,OAAO;sBACD,MAAM;uBACL,MAAM;aAChB,YAAY;iBACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;CAqOiC,CAAA;AAExD,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEhE,CAAA"}
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Binding powers derived from the spec's 13-level operator precedence table
3
- * (https://hl7.org/fhirpath/#operator-precedence). Higher binds tighter; the
4
- * spec numbers levels the other way around (1 = `.`, 13 = `implies`).
2
+ * Binding powers derived from the spec's 13-level operator precedence table.
3
+ * Higher binds tighter; the spec numbers levels in the opposite direction.
5
4
  */
6
5
  export const BindingPower = {
7
6
  Implies: 1,
@@ -19,34 +18,149 @@ export const BindingPower = {
19
18
  Dot: 13,
20
19
  FunctionCall: 14,
21
20
  };
22
- /** Binding power for every infix (and postfix) construct, keyed by token text. */
23
- export const INFIX_BINDING_POWER = {
24
- implies: BindingPower.Implies,
25
- or: BindingPower.OrXor,
26
- xor: BindingPower.OrXor,
27
- and: BindingPower.And,
28
- in: BindingPower.Membership,
29
- contains: BindingPower.Membership,
30
- '=': BindingPower.Equality,
31
- '~': BindingPower.Equality,
32
- '!=': BindingPower.Equality,
33
- '!~': BindingPower.Equality,
34
- '<': BindingPower.Comparison,
35
- '>': BindingPower.Comparison,
36
- '<=': BindingPower.Comparison,
37
- '>=': BindingPower.Comparison,
38
- '|': BindingPower.Union,
39
- is: BindingPower.TypeOps,
40
- as: BindingPower.TypeOps,
41
- '+': BindingPower.Additive,
42
- '-': BindingPower.Additive,
43
- '&': BindingPower.Additive,
44
- '*': BindingPower.Multiplicative,
45
- '/': BindingPower.Multiplicative,
46
- div: BindingPower.Multiplicative,
47
- mod: BindingPower.Multiplicative,
48
- '[': BindingPower.Indexer,
49
- '.': BindingPower.Dot,
50
- '(': BindingPower.FunctionCall,
21
+ /** Single source of truth for tokens and token kinds accepted before an operand. */
22
+ export const PREFIX_PARSELETS = {
23
+ identifier: {
24
+ tokenKind: 'identifier',
25
+ fixity: 'prefix',
26
+ bindingPower: 0,
27
+ associativity: 'none',
28
+ rhs: 'none',
29
+ reducer: 'identifier',
30
+ },
31
+ literal: {
32
+ tokenKind: 'literal',
33
+ fixity: 'prefix',
34
+ bindingPower: 0,
35
+ associativity: 'none',
36
+ rhs: 'none',
37
+ reducer: 'literal',
38
+ },
39
+ variable: {
40
+ tokenKind: 'variable',
41
+ fixity: 'prefix',
42
+ bindingPower: 0,
43
+ associativity: 'none',
44
+ rhs: 'none',
45
+ reducer: 'identifier',
46
+ },
47
+ '+': {
48
+ tokenKind: 'operator',
49
+ fixity: 'prefix',
50
+ bindingPower: BindingPower.Unary,
51
+ associativity: 'right',
52
+ rhs: 'expression',
53
+ reducer: 'unary',
54
+ },
55
+ '-': {
56
+ tokenKind: 'operator',
57
+ fixity: 'prefix',
58
+ bindingPower: BindingPower.Unary,
59
+ associativity: 'right',
60
+ rhs: 'expression',
61
+ reducer: 'unary',
62
+ },
63
+ '(': {
64
+ tokenKind: 'punct',
65
+ fixity: 'prefix',
66
+ bindingPower: 0,
67
+ associativity: 'none',
68
+ rhs: 'group',
69
+ reducer: 'group',
70
+ },
71
+ '{': {
72
+ tokenKind: 'punct',
73
+ fixity: 'prefix',
74
+ bindingPower: 0,
75
+ associativity: 'none',
76
+ rhs: 'none',
77
+ reducer: 'empty',
78
+ },
79
+ '%': {
80
+ tokenKind: 'punct',
81
+ fixity: 'prefix',
82
+ bindingPower: 0,
83
+ associativity: 'none',
84
+ rhs: 'external-name',
85
+ reducer: 'external',
86
+ },
51
87
  };
88
+ const binary = (tokenKind, bindingPower) => ({
89
+ tokenKind,
90
+ fixity: 'infix',
91
+ bindingPower,
92
+ associativity: 'left',
93
+ rhs: 'expression',
94
+ reducer: 'binary',
95
+ });
96
+ /** Single source of truth for every token accepted after an operand. */
97
+ export const INFIX_PARSELETS = {
98
+ implies: binary('keyword', BindingPower.Implies),
99
+ or: binary('keyword', BindingPower.OrXor),
100
+ xor: binary('keyword', BindingPower.OrXor),
101
+ and: binary('keyword', BindingPower.And),
102
+ in: binary('keyword', BindingPower.Membership),
103
+ contains: binary('keyword', BindingPower.Membership),
104
+ '=': binary('operator', BindingPower.Equality),
105
+ '~': binary('operator', BindingPower.Equality),
106
+ '!=': binary('operator', BindingPower.Equality),
107
+ '!~': binary('operator', BindingPower.Equality),
108
+ '<': binary('operator', BindingPower.Comparison),
109
+ '>': binary('operator', BindingPower.Comparison),
110
+ '<=': binary('operator', BindingPower.Comparison),
111
+ '>=': binary('operator', BindingPower.Comparison),
112
+ '|': binary('operator', BindingPower.Union),
113
+ is: {
114
+ tokenKind: 'keyword',
115
+ fixity: 'infix',
116
+ bindingPower: BindingPower.TypeOps,
117
+ associativity: 'left',
118
+ rhs: 'type-name',
119
+ reducer: 'type',
120
+ },
121
+ as: {
122
+ tokenKind: 'keyword',
123
+ fixity: 'infix',
124
+ bindingPower: BindingPower.TypeOps,
125
+ associativity: 'left',
126
+ rhs: 'type-name',
127
+ reducer: 'type',
128
+ },
129
+ '+': binary('operator', BindingPower.Additive),
130
+ '-': binary('operator', BindingPower.Additive),
131
+ '&': binary('operator', BindingPower.Additive),
132
+ '*': binary('operator', BindingPower.Multiplicative),
133
+ '/': binary('operator', BindingPower.Multiplicative),
134
+ div: binary('keyword', BindingPower.Multiplicative),
135
+ mod: binary('keyword', BindingPower.Multiplicative),
136
+ '[': {
137
+ tokenKind: 'punct',
138
+ fixity: 'postfix',
139
+ bindingPower: BindingPower.Indexer,
140
+ associativity: 'left',
141
+ rhs: 'index',
142
+ reducer: 'indexer',
143
+ },
144
+ '.': {
145
+ tokenKind: 'punct',
146
+ fixity: 'infix',
147
+ bindingPower: BindingPower.Dot,
148
+ associativity: 'left',
149
+ rhs: 'path',
150
+ reducer: 'dot',
151
+ },
152
+ '(': {
153
+ tokenKind: 'punct',
154
+ fixity: 'postfix',
155
+ bindingPower: BindingPower.FunctionCall,
156
+ associativity: 'left',
157
+ rhs: 'arguments',
158
+ reducer: 'call',
159
+ },
160
+ };
161
+ /** Compatibility view used by callers that only need precedence. */
162
+ export const INFIX_BINDING_POWER = Object.fromEntries(Object.entries(INFIX_PARSELETS).map(([token, record]) => [token, record.bindingPower]));
163
+ /** Compile-time coverage: every binary AST operator has a binary parselet. */
164
+ const _binaryOperatorCoverage = INFIX_PARSELETS;
165
+ void _binaryOperatorCoverage;
52
166
  //# sourceMappingURL=precedence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"precedence.js","sourceRoot":"","sources":["../../src/parser/precedence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,EAAE;IAClB,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,GAAG,EAAE,EAAE;IACP,YAAY,EAAE,EAAE;CACR,CAAA;AAEV,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAqC;IACnE,OAAO,EAAE,YAAY,CAAC,OAAO;IAC7B,EAAE,EAAE,YAAY,CAAC,KAAK;IACtB,GAAG,EAAE,YAAY,CAAC,KAAK;IACvB,GAAG,EAAE,YAAY,CAAC,GAAG;IACrB,EAAE,EAAE,YAAY,CAAC,UAAU;IAC3B,QAAQ,EAAE,YAAY,CAAC,UAAU;IACjC,GAAG,EAAE,YAAY,CAAC,QAAQ;IAC1B,GAAG,EAAE,YAAY,CAAC,QAAQ;IAC1B,IAAI,EAAE,YAAY,CAAC,QAAQ;IAC3B,IAAI,EAAE,YAAY,CAAC,QAAQ;IAC3B,GAAG,EAAE,YAAY,CAAC,UAAU;IAC5B,GAAG,EAAE,YAAY,CAAC,UAAU;IAC5B,IAAI,EAAE,YAAY,CAAC,UAAU;IAC7B,IAAI,EAAE,YAAY,CAAC,UAAU;IAC7B,GAAG,EAAE,YAAY,CAAC,KAAK;IACvB,EAAE,EAAE,YAAY,CAAC,OAAO;IACxB,EAAE,EAAE,YAAY,CAAC,OAAO;IACxB,GAAG,EAAE,YAAY,CAAC,QAAQ;IAC1B,GAAG,EAAE,YAAY,CAAC,QAAQ;IAC1B,GAAG,EAAE,YAAY,CAAC,QAAQ;IAC1B,GAAG,EAAE,YAAY,CAAC,cAAc;IAChC,GAAG,EAAE,YAAY,CAAC,cAAc;IAChC,GAAG,EAAE,YAAY,CAAC,cAAc;IAChC,GAAG,EAAE,YAAY,CAAC,cAAc;IAChC,GAAG,EAAE,YAAY,CAAC,OAAO;IACzB,GAAG,EAAE,YAAY,CAAC,GAAG;IACrB,GAAG,EAAE,YAAY,CAAC,YAAY;CAC/B,CAAA"}
1
+ {"version":3,"file":"precedence.js","sourceRoot":"","sources":["../../src/parser/precedence.ts"],"names":[],"mappings":"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"}