@haste-health/fhirpath 0.12.2
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/lib/analyze.d.ts +12 -0
- package/lib/analyze.js +307 -0
- package/lib/analyze.js.map +1 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.js +481 -0
- package/lib/index.js.map +1 -0
- package/lib/parserv2/index.d.ts +2 -0
- package/lib/parserv2/index.js +361 -0
- package/lib/parserv2/index.js.map +1 -0
- package/lib/parserv2/lexer.d.ts +35 -0
- package/lib/parserv2/lexer.js +190 -0
- package/lib/parserv2/lexer.js.map +1 -0
- package/lib/parserv2/types.d.ts +75 -0
- package/lib/parserv2/types.js +2 -0
- package/lib/parserv2/types.js.map +1 -0
- package/package.json +47 -0
- package/readme.md +105 -0
package/lib/index.js
ADDED
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
import { R4 } from "@haste-health/fhir-types/versions";
|
|
2
|
+
import * as metaUtils from "@haste-health/meta-value/utilities";
|
|
3
|
+
import * as metaValueV2 from "@haste-health/meta-value/v2";
|
|
4
|
+
import parse from "./parserv2/index.js";
|
|
5
|
+
function flatten(arr) {
|
|
6
|
+
return arr.reduce((acc, v) => [...acc, ...v], []);
|
|
7
|
+
}
|
|
8
|
+
async function getVariableValue(variableId, options) {
|
|
9
|
+
let value;
|
|
10
|
+
if (options?.variables instanceof Function) {
|
|
11
|
+
value = await options.variables(variableId);
|
|
12
|
+
}
|
|
13
|
+
else if (options?.variables instanceof Object) {
|
|
14
|
+
value = options.variables[variableId];
|
|
15
|
+
}
|
|
16
|
+
return metaUtils.flatten(metaValueV2.metaValue({ fhirVersion: options.fhirVersion }, value));
|
|
17
|
+
}
|
|
18
|
+
function assert(assertion, message) {
|
|
19
|
+
if (!assertion) {
|
|
20
|
+
throw new Error(message || "Assertion failed");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Problem is you can't distinguish an identifier vs typeidentifier so just check to confirm singular and only identifier present.
|
|
24
|
+
function expressionToTypeIdentifier(ast) {
|
|
25
|
+
switch (ast.type) {
|
|
26
|
+
case "expression": {
|
|
27
|
+
if (ast.expression[0].type === "identifier") {
|
|
28
|
+
return ast.expression[0].value;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
default: {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const fp_functions = {
|
|
38
|
+
// [EXISTENCE FUNCTIONS]
|
|
39
|
+
// Returns true if the input collection is empty ({ }) and false otherwise.
|
|
40
|
+
async exists(ast, context, options) {
|
|
41
|
+
if (ast.parameters.length === 1) {
|
|
42
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, (await _evaluate(ast.parameters[0], context, options)).length > 0));
|
|
43
|
+
}
|
|
44
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.length > 0));
|
|
45
|
+
},
|
|
46
|
+
// exists([criteria : expression]) : Boolean
|
|
47
|
+
async empty(ast, context, options) {
|
|
48
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.length === 0));
|
|
49
|
+
},
|
|
50
|
+
async all(ast, context, options) {
|
|
51
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, flatten(await Promise.all(context.map((v) => _evaluate(ast.parameters[0], [v], options))))
|
|
52
|
+
.map((v) => v.getValue())
|
|
53
|
+
.reduce((acc, v) => acc && v, true)));
|
|
54
|
+
},
|
|
55
|
+
async allTrue(ast, context, options) {
|
|
56
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.reduce((acc, v) => v.getValue() === true && acc, true)));
|
|
57
|
+
},
|
|
58
|
+
async anyTrue(ast, context, options) {
|
|
59
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.reduce((acc, v) => v.getValue() === true || acc, false)));
|
|
60
|
+
},
|
|
61
|
+
async allFalse(ast, context, options) {
|
|
62
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.reduce((acc, v) => v.getValue() === false && acc, true)));
|
|
63
|
+
},
|
|
64
|
+
async anyFalse(ast, context, options) {
|
|
65
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.reduce((acc, v) => v.getValue() === false || acc, false)));
|
|
66
|
+
},
|
|
67
|
+
async subsetOf(ast, context, options) {
|
|
68
|
+
const otherSet = await _evaluate(ast.parameters[0], context, options);
|
|
69
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.reduce((acc, v1) => acc &&
|
|
70
|
+
otherSet.find((v2) => {
|
|
71
|
+
return equalityCheck([v1], [v2]);
|
|
72
|
+
}) !== undefined, true)));
|
|
73
|
+
},
|
|
74
|
+
// Conceptionally this is the opposite of subsetOf.
|
|
75
|
+
async supersetOf(ast, context, options) {
|
|
76
|
+
const otherSet = await _evaluate(ast.parameters[0], context, options);
|
|
77
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, otherSet.reduce((acc, v1) => acc &&
|
|
78
|
+
context.find((v2) => {
|
|
79
|
+
return equalityCheck([v1], [v2]);
|
|
80
|
+
}) !== undefined, true)));
|
|
81
|
+
},
|
|
82
|
+
async count(_ast, context, options) {
|
|
83
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "integer" }, context.length));
|
|
84
|
+
},
|
|
85
|
+
async distinct(_ast, context) {
|
|
86
|
+
const map = context
|
|
87
|
+
.map((v) => [
|
|
88
|
+
JSON.stringify(v.getValue()),
|
|
89
|
+
v,
|
|
90
|
+
])
|
|
91
|
+
.reduce((m, [k, v]) => {
|
|
92
|
+
m[k] = v;
|
|
93
|
+
return m;
|
|
94
|
+
}, {});
|
|
95
|
+
return Object.values(map);
|
|
96
|
+
},
|
|
97
|
+
async isDistinct(ast, context, options) {
|
|
98
|
+
const distinct = await fp_functions.distinct({ type: "function", functionName: "distinct", parameters: [] }, context, options);
|
|
99
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, context.length === distinct.length));
|
|
100
|
+
},
|
|
101
|
+
// [FILTER FUNCTIONS]
|
|
102
|
+
async where(ast, context, options) {
|
|
103
|
+
const criteria = ast.parameters[0];
|
|
104
|
+
const result = [];
|
|
105
|
+
for (const v of context) {
|
|
106
|
+
const evaluation = await _evaluate(criteria, [v], options);
|
|
107
|
+
assert(evaluation.length === 1, "where clause evaluation must evaluate to a single boolean.");
|
|
108
|
+
if (!typeChecking("boolean", evaluation)) {
|
|
109
|
+
throw new Error("Where clause criteria must evaluate to a boolean");
|
|
110
|
+
}
|
|
111
|
+
if (evaluation[0].getValue()) {
|
|
112
|
+
result.push(v);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Returns a collection with all immediate child nodes of all items in the input collection.
|
|
119
|
+
* Note that the ordering of the children is undefined and using functions like first() on the result may return different results on different platforms.
|
|
120
|
+
*/
|
|
121
|
+
async children(_ast, context) {
|
|
122
|
+
const children = flatten(await Promise.all(context.map(async (node) => {
|
|
123
|
+
const children = flatten(await Promise.all(node.keys().map(async (k) => metaUtils.flatten(node.descend(k))))).filter((v) => v !== undefined);
|
|
124
|
+
return children;
|
|
125
|
+
})));
|
|
126
|
+
return children;
|
|
127
|
+
},
|
|
128
|
+
/**
|
|
129
|
+
* Returns a collection with all descendant nodes of all items in the input collection.
|
|
130
|
+
*/
|
|
131
|
+
async descendants(_ast, context, options) {
|
|
132
|
+
return _evaluate(compileAST("repeat(children())"), context, options);
|
|
133
|
+
},
|
|
134
|
+
async select(ast, context, options) {
|
|
135
|
+
const selection = ast.parameters[0];
|
|
136
|
+
return flatten(await Promise.all(context.map((v) => {
|
|
137
|
+
return _evaluate(selection, [v], options);
|
|
138
|
+
})));
|
|
139
|
+
},
|
|
140
|
+
async repeat(ast, context, options) {
|
|
141
|
+
const projection = ast.parameters[0];
|
|
142
|
+
let endResult = [];
|
|
143
|
+
let cur = context;
|
|
144
|
+
while (cur.length !== 0) {
|
|
145
|
+
cur = await _evaluate(projection, cur, options);
|
|
146
|
+
endResult = [...endResult, ...cur];
|
|
147
|
+
}
|
|
148
|
+
return endResult;
|
|
149
|
+
},
|
|
150
|
+
// Type Functions
|
|
151
|
+
async ofType(ast, context) {
|
|
152
|
+
const parameters = ast.parameters;
|
|
153
|
+
const typeIdentifier = expressionToTypeIdentifier(parameters[0]);
|
|
154
|
+
if (!typeIdentifier)
|
|
155
|
+
throw new Error("Invalid Type identifier");
|
|
156
|
+
return filterByType(typeIdentifier, context);
|
|
157
|
+
},
|
|
158
|
+
async as(ast, context) {
|
|
159
|
+
assert(context.length <= 1, "as function must have a length of 1 for context.");
|
|
160
|
+
const parameters = ast.parameters;
|
|
161
|
+
const typeIdentifier = expressionToTypeIdentifier(parameters[0]);
|
|
162
|
+
if (!typeIdentifier)
|
|
163
|
+
throw new Error("Invalid Type identifier");
|
|
164
|
+
return filterByType(typeIdentifier, context);
|
|
165
|
+
},
|
|
166
|
+
async resolve(ast, context) {
|
|
167
|
+
// console.warn("not supporting resolve just returning item");
|
|
168
|
+
return context;
|
|
169
|
+
},
|
|
170
|
+
async replace(ast, context, options) {
|
|
171
|
+
if (ast.parameters.length !== 2) {
|
|
172
|
+
throw new Error("Replace function must have two arguments");
|
|
173
|
+
}
|
|
174
|
+
if (context.length !== 1) {
|
|
175
|
+
throw new Error("Replace function must have one context");
|
|
176
|
+
}
|
|
177
|
+
if (!typeChecking("string", context)) {
|
|
178
|
+
throw new Error("Replace function arguments must be strings");
|
|
179
|
+
}
|
|
180
|
+
const value = context[0].getValue();
|
|
181
|
+
const [findAST, replaceAST] = ast.parameters;
|
|
182
|
+
const findEval = await _evaluate(findAST, context, options);
|
|
183
|
+
const replaceEval = await _evaluate(replaceAST, context, options);
|
|
184
|
+
if (findEval.length !== 1 ||
|
|
185
|
+
replaceEval.length !== 1 ||
|
|
186
|
+
!typeChecking("string", findEval) ||
|
|
187
|
+
!typeChecking("string", replaceEval)) {
|
|
188
|
+
throw new Error("Replace function arguments must be strings");
|
|
189
|
+
}
|
|
190
|
+
const find = findEval[0].getValue();
|
|
191
|
+
const replace = replaceEval[0].getValue();
|
|
192
|
+
return metaUtils.flatten(await metaValueV2.metaValue(context[0].meta(), value.replace(find, replace)));
|
|
193
|
+
},
|
|
194
|
+
async type(ast, context, options) {
|
|
195
|
+
return flatten(context.map((c) => {
|
|
196
|
+
const meta = c.meta();
|
|
197
|
+
return metaUtils.flatten(metaValueV2.metaValue({ fhirVersion: options.fhirVersion },
|
|
198
|
+
// { name: string, type: TypeSpecifier, isOneBased: Boolean }
|
|
199
|
+
{
|
|
200
|
+
name: c.location()?.pop(),
|
|
201
|
+
type: meta?.type,
|
|
202
|
+
}));
|
|
203
|
+
}));
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
async function evaluateInvocation(ast, context, options) {
|
|
207
|
+
switch (ast.type) {
|
|
208
|
+
case "index":
|
|
209
|
+
throw new Error("Not implemented");
|
|
210
|
+
case "total":
|
|
211
|
+
throw new Error("Not implemented");
|
|
212
|
+
case "this":
|
|
213
|
+
return context;
|
|
214
|
+
case "identifier": {
|
|
215
|
+
const res = (await Promise.all(context.map(async (v) => metaUtils.flatten(v.descend(ast.value))))).flat();
|
|
216
|
+
return res;
|
|
217
|
+
}
|
|
218
|
+
case "function": {
|
|
219
|
+
const fp_func = fp_functions[ast.functionName];
|
|
220
|
+
if (!fp_func)
|
|
221
|
+
throw new Error("Unknown function '" + ast.functionName + "'");
|
|
222
|
+
return fp_func(ast, context, options);
|
|
223
|
+
}
|
|
224
|
+
default: {
|
|
225
|
+
// @ts-ignore
|
|
226
|
+
throw new Error("Unknown invocation type: '" + ast.type + "'");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
async function evaluateTerm(ast, context, options) {
|
|
231
|
+
switch (ast.type) {
|
|
232
|
+
case "function": {
|
|
233
|
+
const fp_func = fp_functions[ast.functionName];
|
|
234
|
+
if (!fp_func)
|
|
235
|
+
throw new Error("Unknown function '" + ast.functionName + "'");
|
|
236
|
+
return fp_func(ast, context, options);
|
|
237
|
+
}
|
|
238
|
+
case "expression":
|
|
239
|
+
case "operation": {
|
|
240
|
+
return _evaluate(ast, context, options);
|
|
241
|
+
}
|
|
242
|
+
case "literal": {
|
|
243
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion }, ast.value));
|
|
244
|
+
}
|
|
245
|
+
case "variable": {
|
|
246
|
+
return getVariableValue(ast.value, options);
|
|
247
|
+
}
|
|
248
|
+
case "identifier": {
|
|
249
|
+
// Special handling for type identifier at start for example Patient.name
|
|
250
|
+
const typeIdentifier = ast.value;
|
|
251
|
+
const result = filterByType(typeIdentifier, context);
|
|
252
|
+
if (result.length > 0)
|
|
253
|
+
return result;
|
|
254
|
+
else {
|
|
255
|
+
return evaluateInvocation(ast, context, options);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
case "index":
|
|
259
|
+
case "this":
|
|
260
|
+
case "total": {
|
|
261
|
+
return evaluateInvocation(ast, context, options);
|
|
262
|
+
}
|
|
263
|
+
default: {
|
|
264
|
+
// @ts-ignore
|
|
265
|
+
throw new Error("Unknown term type: '" + ast.type + "'");
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async function evaluateProperty(ast, context, options) {
|
|
270
|
+
switch (ast.type) {
|
|
271
|
+
case "identifier":
|
|
272
|
+
case "this":
|
|
273
|
+
case "total":
|
|
274
|
+
case "function":
|
|
275
|
+
case "index": {
|
|
276
|
+
return evaluateInvocation(ast, context, options);
|
|
277
|
+
}
|
|
278
|
+
case "indexed": {
|
|
279
|
+
const indexed = await _evaluate(ast.index, context, options);
|
|
280
|
+
if (indexed.length !== 1)
|
|
281
|
+
throw new Error("Indexing requires a single value");
|
|
282
|
+
if (!typeChecking("number", indexed))
|
|
283
|
+
throw new Error("Indexing requires a number");
|
|
284
|
+
const value = context[indexed[0].getValue()];
|
|
285
|
+
return value !== undefined ? [value] : [];
|
|
286
|
+
}
|
|
287
|
+
default: {
|
|
288
|
+
// @ts-ignore
|
|
289
|
+
throw new Error("Unknown term type: '" + ast.type + "'");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async function evaluateSingular(ast, context, options) {
|
|
294
|
+
let start = await evaluateTerm(ast.expression[0], context, options);
|
|
295
|
+
for (const next of ast.expression.slice(1)) {
|
|
296
|
+
start = await evaluateProperty(next, start, options);
|
|
297
|
+
}
|
|
298
|
+
return start;
|
|
299
|
+
}
|
|
300
|
+
function typeChecking(typeChecking, args) {
|
|
301
|
+
return args.reduce((acc, v) => {
|
|
302
|
+
if (typeof v.getValue() !== typeChecking)
|
|
303
|
+
return false;
|
|
304
|
+
return acc;
|
|
305
|
+
}, true);
|
|
306
|
+
}
|
|
307
|
+
export class InvalidOperandError extends Error {
|
|
308
|
+
args;
|
|
309
|
+
operator;
|
|
310
|
+
constructor(args, operator) {
|
|
311
|
+
super(`Invalid operands for operator: '${operator}' Found types '${typeof args[0]}' and '${typeof args[1]}'`);
|
|
312
|
+
this.args = args;
|
|
313
|
+
this.operator = operator;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function op_prevaled(operation_function) {
|
|
317
|
+
return async (ast, context, options) => {
|
|
318
|
+
const left = await _evaluate(ast.left, context, options);
|
|
319
|
+
const right = await _evaluate(ast.right, context, options);
|
|
320
|
+
return operation_function(left, right, options);
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
const equalityCheck = (left, right) => {
|
|
324
|
+
// TODO improve Deep Equals speed.
|
|
325
|
+
if (left.length !== right.length) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
else if (typeof left[0].getValue() === "object") {
|
|
329
|
+
return (JSON.stringify(left[0].getValue()) === JSON.stringify(right[0].getValue()));
|
|
330
|
+
}
|
|
331
|
+
return left[0].getValue() === right[0].getValue();
|
|
332
|
+
};
|
|
333
|
+
function filterByType(type, context) {
|
|
334
|
+
return context.map((v) => v.asType(type)).filter((v) => v !== undefined);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Check for membership of value in collection.
|
|
338
|
+
* Used for both in and contains (reversed).
|
|
339
|
+
* @param options FP Options
|
|
340
|
+
* @param collection Collection to check for membership
|
|
341
|
+
* @param value Value to check if exists in collection
|
|
342
|
+
* @returns MetaValue boolean value.
|
|
343
|
+
*/
|
|
344
|
+
function membershipCheck(options, collection, value) {
|
|
345
|
+
if (value.length !== 1) {
|
|
346
|
+
throw new Error("Membership check value must be a single value");
|
|
347
|
+
}
|
|
348
|
+
for (const colValue of collection) {
|
|
349
|
+
if (equalityCheck(value, [colValue])) {
|
|
350
|
+
return metaUtils.flatten(metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, true));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return metaUtils.flatten(metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, false));
|
|
354
|
+
}
|
|
355
|
+
const fp_operations = {
|
|
356
|
+
contains: op_prevaled(async (left, right, options) => {
|
|
357
|
+
return membershipCheck(options, left, right);
|
|
358
|
+
}),
|
|
359
|
+
in: op_prevaled(async (left, right, options) => {
|
|
360
|
+
return membershipCheck(options, right, left);
|
|
361
|
+
}),
|
|
362
|
+
"+": op_prevaled(async (left, right, options) => {
|
|
363
|
+
if (typeChecking("number", left) && typeChecking("number", right)) {
|
|
364
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "decimal" }, left[0].getValue() + right[0].getValue()));
|
|
365
|
+
}
|
|
366
|
+
else if (typeChecking("string", left) && typeChecking("string", right)) {
|
|
367
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "string" }, left[0].getValue() + right[0].getValue()));
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
throw new InvalidOperandError([left[0], right[0]], "+");
|
|
371
|
+
}
|
|
372
|
+
}),
|
|
373
|
+
as: async (ast, context, options) => {
|
|
374
|
+
const left = await _evaluate(ast.left, context, options);
|
|
375
|
+
if (left.length > 1)
|
|
376
|
+
throw new Error("The 'as' operator left hand operand must be equal to length 1");
|
|
377
|
+
const typeIdentifier = expressionToTypeIdentifier(ast.right);
|
|
378
|
+
if (!typeIdentifier)
|
|
379
|
+
throw new Error("Invalid Type identifier");
|
|
380
|
+
return filterByType(typeIdentifier, left);
|
|
381
|
+
},
|
|
382
|
+
is: async (ast, context, options) => {
|
|
383
|
+
const left = await _evaluate(ast.left, context, options);
|
|
384
|
+
if (left.length > 1)
|
|
385
|
+
throw new Error("The 'is' operator left hand operand must be equal to length 1");
|
|
386
|
+
const typeIdentifier = expressionToTypeIdentifier(ast.right);
|
|
387
|
+
if (!typeIdentifier)
|
|
388
|
+
throw new Error("Invalid Type identifier");
|
|
389
|
+
return (await Promise.all(left.map(async (c) => {
|
|
390
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, c.isType(typeIdentifier)));
|
|
391
|
+
}))).flat();
|
|
392
|
+
},
|
|
393
|
+
"-": op_prevaled(async (left, right, options) => {
|
|
394
|
+
if (typeChecking("number", left) && typeChecking("number", right)) {
|
|
395
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "decimal" }, left[0].getValue() - right[0].getValue()));
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
throw new InvalidOperandError([left[0], right[0]], "-");
|
|
399
|
+
}
|
|
400
|
+
}),
|
|
401
|
+
"*": op_prevaled(async (left, right, options) => {
|
|
402
|
+
if (typeChecking("number", left) && typeChecking("number", right)) {
|
|
403
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "decimal" }, left[0].getValue() * right[0].getValue()));
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
throw new InvalidOperandError([left[0], right[0]], "*");
|
|
407
|
+
}
|
|
408
|
+
}),
|
|
409
|
+
"/": op_prevaled(async (left, right, options) => {
|
|
410
|
+
if (typeChecking("number", left) && typeChecking("number", right)) {
|
|
411
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "decimal" }, left[0].getValue() / right[0].getValue()));
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
throw new InvalidOperandError([left[0], right[0]], "/");
|
|
415
|
+
}
|
|
416
|
+
}),
|
|
417
|
+
"|": op_prevaled(async (left, right) => {
|
|
418
|
+
return left.concat(right);
|
|
419
|
+
}),
|
|
420
|
+
and: op_prevaled(async (left, right, options) => {
|
|
421
|
+
if (typeChecking("boolean", left) && typeChecking("boolean", right)) {
|
|
422
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, left[0].getValue() && right[0].getValue()));
|
|
423
|
+
}
|
|
424
|
+
throw new InvalidOperandError([left[0], right[0]], "/");
|
|
425
|
+
}),
|
|
426
|
+
or: op_prevaled(async (left, right, options) => {
|
|
427
|
+
if (typeChecking("boolean", left) && typeChecking("boolean", right)) {
|
|
428
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, left[0].getValue() || right[0].getValue()));
|
|
429
|
+
}
|
|
430
|
+
throw new InvalidOperandError([left[0], right[0]], "/");
|
|
431
|
+
}),
|
|
432
|
+
"=": op_prevaled(async (left, right, options) => metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, equalityCheck(left, right)))),
|
|
433
|
+
"!=": op_prevaled(async (left, right, options) => {
|
|
434
|
+
const equality = equalityCheck(left, right);
|
|
435
|
+
return metaUtils.flatten(await metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: "boolean" }, equality === false));
|
|
436
|
+
}),
|
|
437
|
+
};
|
|
438
|
+
async function evaluateOperation(ast, context, options) {
|
|
439
|
+
const operator = fp_operations[ast.operator];
|
|
440
|
+
if (operator)
|
|
441
|
+
return operator(ast, context, options);
|
|
442
|
+
else
|
|
443
|
+
throw new Error("Unsupported operator: '" + ast.operator + "'");
|
|
444
|
+
}
|
|
445
|
+
async function _evaluate(ast, context, options) {
|
|
446
|
+
switch (ast.type) {
|
|
447
|
+
case "operation": {
|
|
448
|
+
return evaluateOperation(ast, context, options);
|
|
449
|
+
}
|
|
450
|
+
case "expression": {
|
|
451
|
+
return evaluateSingular(ast, context, options);
|
|
452
|
+
}
|
|
453
|
+
default: {
|
|
454
|
+
// @ts-ignore
|
|
455
|
+
throw new Error("Invalid AST Expression Node '" + ast.type + "'");
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Because Primitive types could have undefined on .value do quick check here to confirm existence.
|
|
461
|
+
*/
|
|
462
|
+
function nonNullable(v) {
|
|
463
|
+
return v !== undefined && v !== null;
|
|
464
|
+
}
|
|
465
|
+
const cachedAST = {};
|
|
466
|
+
function compileAST(expression) {
|
|
467
|
+
if (!cachedAST[expression]) {
|
|
468
|
+
const ast = parse(expression);
|
|
469
|
+
cachedAST[expression] = ast;
|
|
470
|
+
}
|
|
471
|
+
return cachedAST[expression];
|
|
472
|
+
}
|
|
473
|
+
export async function evaluateWithMeta(expression, ctx, options = { fhirVersion: R4 }) {
|
|
474
|
+
const ast = compileAST(expression);
|
|
475
|
+
const context = metaUtils.flatten(metaValueV2.metaValue({ fhirVersion: options.fhirVersion, type: options.type }, ctx));
|
|
476
|
+
return (await _evaluate(ast, context, options)).filter((v) => nonNullable(v.getValue()));
|
|
477
|
+
}
|
|
478
|
+
export async function evaluate(expression, ctx, options) {
|
|
479
|
+
return (await evaluateWithMeta(expression, ctx, options)).map((v) => v.getValue());
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|