@medplum/core 2.0.23 → 2.0.25
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/cjs/index.cjs +6 -13364
- package/dist/cjs/index.cjs.map +7 -1
- package/dist/esm/index.mjs +31 -26
- package/dist/esm/index.mjs.map +7 -1
- package/dist/types/access.d.ts +48 -0
- package/dist/types/client.d.ts +15 -20
- package/dist/types/fhirlexer/parse.d.ts +5 -4
- package/dist/types/fhirpath/functions.d.ts +1 -3
- package/dist/types/index.d.ts +3 -0
- package/dist/types/outcomes.d.ts +3 -1
- package/dist/types/search/search.d.ts +7 -0
- package/dist/types/typeschema/types.d.ts +5 -2
- package/dist/types/typeschema/validation.d.ts +2 -0
- package/dist/types/utils.d.ts +14 -0
- package/package.json +2 -2
- package/dist/cjs/index.min.cjs +0 -1
- package/dist/esm/base-schema.json.mjs +0 -4408
- package/dist/esm/base-schema.json.mjs.map +0 -1
- package/dist/esm/base64.mjs +0 -33
- package/dist/esm/base64.mjs.map +0 -1
- package/dist/esm/bundle.mjs +0 -36
- package/dist/esm/bundle.mjs.map +0 -1
- package/dist/esm/cache.mjs +0 -64
- package/dist/esm/cache.mjs.map +0 -1
- package/dist/esm/client.mjs +0 -2144
- package/dist/esm/client.mjs.map +0 -1
- package/dist/esm/crypto.mjs +0 -22
- package/dist/esm/crypto.mjs.map +0 -1
- package/dist/esm/eventtarget.mjs +0 -36
- package/dist/esm/eventtarget.mjs.map +0 -1
- package/dist/esm/fhirlexer/parse.mjs +0 -122
- package/dist/esm/fhirlexer/parse.mjs.map +0 -1
- package/dist/esm/fhirlexer/tokenize.mjs +0 -231
- package/dist/esm/fhirlexer/tokenize.mjs.map +0 -1
- package/dist/esm/fhirmapper/parse.mjs +0 -329
- package/dist/esm/fhirmapper/parse.mjs.map +0 -1
- package/dist/esm/fhirmapper/tokenize.mjs +0 -13
- package/dist/esm/fhirmapper/tokenize.mjs.map +0 -1
- package/dist/esm/fhirpath/atoms.mjs +0 -347
- package/dist/esm/fhirpath/atoms.mjs.map +0 -1
- package/dist/esm/fhirpath/date.mjs +0 -24
- package/dist/esm/fhirpath/date.mjs.map +0 -1
- package/dist/esm/fhirpath/functions.mjs +0 -1626
- package/dist/esm/fhirpath/functions.mjs.map +0 -1
- package/dist/esm/fhirpath/parse.mjs +0 -144
- package/dist/esm/fhirpath/parse.mjs.map +0 -1
- package/dist/esm/fhirpath/tokenize.mjs +0 -10
- package/dist/esm/fhirpath/tokenize.mjs.map +0 -1
- package/dist/esm/fhirpath/utils.mjs +0 -378
- package/dist/esm/fhirpath/utils.mjs.map +0 -1
- package/dist/esm/filter/parse.mjs +0 -101
- package/dist/esm/filter/parse.mjs.map +0 -1
- package/dist/esm/filter/tokenize.mjs +0 -16
- package/dist/esm/filter/tokenize.mjs.map +0 -1
- package/dist/esm/filter/types.mjs +0 -34
- package/dist/esm/filter/types.mjs.map +0 -1
- package/dist/esm/format.mjs +0 -390
- package/dist/esm/format.mjs.map +0 -1
- package/dist/esm/hl7.mjs +0 -242
- package/dist/esm/hl7.mjs.map +0 -1
- package/dist/esm/index.min.mjs +0 -1
- package/dist/esm/jwt.mjs +0 -30
- package/dist/esm/jwt.mjs.map +0 -1
- package/dist/esm/node_modules/tslib/package.json +0 -1
- package/dist/esm/outcomes.mjs +0 -271
- package/dist/esm/outcomes.mjs.map +0 -1
- package/dist/esm/readablepromise.mjs +0 -82
- package/dist/esm/readablepromise.mjs.map +0 -1
- package/dist/esm/schema.mjs +0 -417
- package/dist/esm/schema.mjs.map +0 -1
- package/dist/esm/search/details.mjs +0 -164
- package/dist/esm/search/details.mjs.map +0 -1
- package/dist/esm/search/match.mjs +0 -164
- package/dist/esm/search/match.mjs.map +0 -1
- package/dist/esm/search/search.mjs +0 -369
- package/dist/esm/search/search.mjs.map +0 -1
- package/dist/esm/sftp.mjs +0 -24
- package/dist/esm/sftp.mjs.map +0 -1
- package/dist/esm/storage.mjs +0 -95
- package/dist/esm/storage.mjs.map +0 -1
- package/dist/esm/types.mjs +0 -370
- package/dist/esm/types.mjs.map +0 -1
- package/dist/esm/utils.mjs +0 -632
- package/dist/esm/utils.mjs.map +0 -1
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
import { PrefixOperatorAtom, InfixOperatorAtom } from '../fhirlexer/parse.mjs';
|
|
2
|
-
import { isResource, PropertyType } from '../types.mjs';
|
|
3
|
-
import { functions } from './functions.mjs';
|
|
4
|
-
import { getTypedPropertyValue, isQuantity, booleanToTypedValue, toTypedValue, removeDuplicates, fhirPathArrayEquals, fhirPathNot, fhirPathArrayEquivalent, fhirPathIs, toJsBoolean } from './utils.mjs';
|
|
5
|
-
|
|
6
|
-
class FhirPathAtom {
|
|
7
|
-
constructor(original, child) {
|
|
8
|
-
this.original = original;
|
|
9
|
-
this.child = child;
|
|
10
|
-
}
|
|
11
|
-
eval(context, input) {
|
|
12
|
-
try {
|
|
13
|
-
if (input.length > 0) {
|
|
14
|
-
return input.map((e) => this.child.eval(context, [e])).flat();
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
return this.child.eval(context, []);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
throw new Error(`FhirPathError on "${this.original}": ${error}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
toString() {
|
|
25
|
-
return this.child.toString();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
class LiteralAtom {
|
|
29
|
-
constructor(value) {
|
|
30
|
-
this.value = value;
|
|
31
|
-
}
|
|
32
|
-
eval() {
|
|
33
|
-
return [this.value];
|
|
34
|
-
}
|
|
35
|
-
toString() {
|
|
36
|
-
const value = this.value.value;
|
|
37
|
-
if (typeof value === 'string') {
|
|
38
|
-
return `'${value}'`;
|
|
39
|
-
}
|
|
40
|
-
return value.toString();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
class SymbolAtom {
|
|
44
|
-
constructor(name) {
|
|
45
|
-
this.name = name;
|
|
46
|
-
}
|
|
47
|
-
eval(context, input) {
|
|
48
|
-
if (this.name === '$this') {
|
|
49
|
-
return input;
|
|
50
|
-
}
|
|
51
|
-
if (this.name.startsWith('%')) {
|
|
52
|
-
const symbol = context.variables[this.name.slice(1)];
|
|
53
|
-
if (!symbol) {
|
|
54
|
-
throw new Error(`Undefined variable ${this.name}`);
|
|
55
|
-
}
|
|
56
|
-
return [symbol];
|
|
57
|
-
}
|
|
58
|
-
return input.flatMap((e) => this.evalValue(e)).filter((e) => e?.value !== undefined);
|
|
59
|
-
}
|
|
60
|
-
evalValue(typedValue) {
|
|
61
|
-
const input = typedValue.value;
|
|
62
|
-
if (!input || typeof input !== 'object') {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
if (isResource(input) && input.resourceType === this.name) {
|
|
66
|
-
return typedValue;
|
|
67
|
-
}
|
|
68
|
-
return getTypedPropertyValue(typedValue, this.name);
|
|
69
|
-
}
|
|
70
|
-
toString() {
|
|
71
|
-
return this.name;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
class EmptySetAtom {
|
|
75
|
-
eval() {
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
toString() {
|
|
79
|
-
return '{}';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
class UnaryOperatorAtom extends PrefixOperatorAtom {
|
|
83
|
-
constructor(operator, child, impl) {
|
|
84
|
-
super(operator, child);
|
|
85
|
-
this.impl = impl;
|
|
86
|
-
}
|
|
87
|
-
eval(context, input) {
|
|
88
|
-
return this.impl(this.child.eval(context, input));
|
|
89
|
-
}
|
|
90
|
-
toString() {
|
|
91
|
-
return this.child.toString();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
class AsAtom extends InfixOperatorAtom {
|
|
95
|
-
constructor(left, right) {
|
|
96
|
-
super('as', left, right);
|
|
97
|
-
}
|
|
98
|
-
eval(context, input) {
|
|
99
|
-
return functions.ofType(context, this.left.eval(context, input), this.right);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
class ArithemticOperatorAtom extends InfixOperatorAtom {
|
|
103
|
-
constructor(operator, left, right, impl) {
|
|
104
|
-
super(operator, left, right);
|
|
105
|
-
this.impl = impl;
|
|
106
|
-
}
|
|
107
|
-
eval(context, input) {
|
|
108
|
-
const leftEvalResult = this.left.eval(context, input);
|
|
109
|
-
if (leftEvalResult.length !== 1) {
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
const rightEvalResult = this.right.eval(context, input);
|
|
113
|
-
if (rightEvalResult.length !== 1) {
|
|
114
|
-
return [];
|
|
115
|
-
}
|
|
116
|
-
const leftValue = leftEvalResult[0].value;
|
|
117
|
-
const rightValue = rightEvalResult[0].value;
|
|
118
|
-
const leftNumber = isQuantity(leftValue) ? leftValue.value : leftValue;
|
|
119
|
-
const rightNumber = isQuantity(rightValue) ? rightValue.value : rightValue;
|
|
120
|
-
const result = this.impl(leftNumber, rightNumber);
|
|
121
|
-
if (typeof result === 'boolean') {
|
|
122
|
-
return booleanToTypedValue(result);
|
|
123
|
-
}
|
|
124
|
-
else if (isQuantity(leftValue)) {
|
|
125
|
-
return [{ type: PropertyType.Quantity, value: { ...leftValue, value: result } }];
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
return [toTypedValue(result)];
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
class ConcatAtom extends InfixOperatorAtom {
|
|
133
|
-
constructor(left, right) {
|
|
134
|
-
super('&', left, right);
|
|
135
|
-
}
|
|
136
|
-
eval(context, input) {
|
|
137
|
-
const leftValue = this.left.eval(context, input);
|
|
138
|
-
const rightValue = this.right.eval(context, input);
|
|
139
|
-
const result = [...leftValue, ...rightValue];
|
|
140
|
-
if (result.length > 0 && result.every((e) => typeof e.value === 'string')) {
|
|
141
|
-
return [{ type: PropertyType.string, value: result.map((e) => e.value).join('') }];
|
|
142
|
-
}
|
|
143
|
-
return result;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
class ContainsAtom extends InfixOperatorAtom {
|
|
147
|
-
constructor(left, right) {
|
|
148
|
-
super('contains', left, right);
|
|
149
|
-
}
|
|
150
|
-
eval(context, input) {
|
|
151
|
-
const leftValue = this.left.eval(context, input);
|
|
152
|
-
const rightValue = this.right.eval(context, input);
|
|
153
|
-
return booleanToTypedValue(leftValue.some((e) => e.value === rightValue[0].value));
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
class InAtom extends InfixOperatorAtom {
|
|
157
|
-
constructor(left, right) {
|
|
158
|
-
super('in', left, right);
|
|
159
|
-
}
|
|
160
|
-
eval(context, input) {
|
|
161
|
-
const leftValue = this.left.eval(context, input);
|
|
162
|
-
const rightValue = this.right.eval(context, input);
|
|
163
|
-
return booleanToTypedValue(rightValue.some((e) => e.value === leftValue[0].value));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
class DotAtom extends InfixOperatorAtom {
|
|
167
|
-
constructor(left, right) {
|
|
168
|
-
super('.', left, right);
|
|
169
|
-
}
|
|
170
|
-
eval(context, input) {
|
|
171
|
-
return this.right.eval(context, this.left.eval(context, input));
|
|
172
|
-
}
|
|
173
|
-
toString() {
|
|
174
|
-
return `${this.left.toString()}.${this.right.toString()}`;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
class UnionAtom extends InfixOperatorAtom {
|
|
178
|
-
constructor(left, right) {
|
|
179
|
-
super('|', left, right);
|
|
180
|
-
}
|
|
181
|
-
eval(context, input) {
|
|
182
|
-
const leftResult = this.left.eval(context, input);
|
|
183
|
-
const rightResult = this.right.eval(context, input);
|
|
184
|
-
return removeDuplicates([...leftResult, ...rightResult]);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
class EqualsAtom extends InfixOperatorAtom {
|
|
188
|
-
constructor(left, right) {
|
|
189
|
-
super('=', left, right);
|
|
190
|
-
}
|
|
191
|
-
eval(context, input) {
|
|
192
|
-
const leftValue = this.left.eval(context, input);
|
|
193
|
-
const rightValue = this.right.eval(context, input);
|
|
194
|
-
return fhirPathArrayEquals(leftValue, rightValue);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
class NotEqualsAtom extends InfixOperatorAtom {
|
|
198
|
-
constructor(left, right) {
|
|
199
|
-
super('!=', left, right);
|
|
200
|
-
}
|
|
201
|
-
eval(context, input) {
|
|
202
|
-
const leftValue = this.left.eval(context, input);
|
|
203
|
-
const rightValue = this.right.eval(context, input);
|
|
204
|
-
return fhirPathNot(fhirPathArrayEquals(leftValue, rightValue));
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
class EquivalentAtom extends InfixOperatorAtom {
|
|
208
|
-
constructor(left, right) {
|
|
209
|
-
super('~', left, right);
|
|
210
|
-
}
|
|
211
|
-
eval(context, input) {
|
|
212
|
-
const leftValue = this.left.eval(context, input);
|
|
213
|
-
const rightValue = this.right.eval(context, input);
|
|
214
|
-
return fhirPathArrayEquivalent(leftValue, rightValue);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
class NotEquivalentAtom extends InfixOperatorAtom {
|
|
218
|
-
constructor(left, right) {
|
|
219
|
-
super('!~', left, right);
|
|
220
|
-
}
|
|
221
|
-
eval(context, input) {
|
|
222
|
-
const leftValue = this.left.eval(context, input);
|
|
223
|
-
const rightValue = this.right.eval(context, input);
|
|
224
|
-
return fhirPathNot(fhirPathArrayEquivalent(leftValue, rightValue));
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
class IsAtom extends InfixOperatorAtom {
|
|
228
|
-
constructor(left, right) {
|
|
229
|
-
super('is', left, right);
|
|
230
|
-
}
|
|
231
|
-
eval(context, input) {
|
|
232
|
-
const leftValue = this.left.eval(context, input);
|
|
233
|
-
if (leftValue.length !== 1) {
|
|
234
|
-
return [];
|
|
235
|
-
}
|
|
236
|
-
const typeName = this.right.name;
|
|
237
|
-
return booleanToTypedValue(fhirPathIs(leftValue[0], typeName));
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* 6.5.1. and
|
|
242
|
-
* Returns true if both operands evaluate to true,
|
|
243
|
-
* false if either operand evaluates to false,
|
|
244
|
-
* and the empty collection otherwise.
|
|
245
|
-
*/
|
|
246
|
-
class AndAtom extends InfixOperatorAtom {
|
|
247
|
-
constructor(left, right) {
|
|
248
|
-
super('and', left, right);
|
|
249
|
-
}
|
|
250
|
-
eval(context, input) {
|
|
251
|
-
const leftValue = this.left.eval(context, input);
|
|
252
|
-
const rightValue = this.right.eval(context, input);
|
|
253
|
-
if (leftValue[0]?.value === true && rightValue[0]?.value === true) {
|
|
254
|
-
return booleanToTypedValue(true);
|
|
255
|
-
}
|
|
256
|
-
if (leftValue[0]?.value === false || rightValue[0]?.value === false) {
|
|
257
|
-
return booleanToTypedValue(false);
|
|
258
|
-
}
|
|
259
|
-
return [];
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
class OrAtom extends InfixOperatorAtom {
|
|
263
|
-
constructor(left, right) {
|
|
264
|
-
super('or', left, right);
|
|
265
|
-
}
|
|
266
|
-
eval(context, input) {
|
|
267
|
-
const leftValue = this.left.eval(context, input);
|
|
268
|
-
if (toJsBoolean(leftValue)) {
|
|
269
|
-
return leftValue;
|
|
270
|
-
}
|
|
271
|
-
const rightValue = this.right.eval(context, input);
|
|
272
|
-
if (toJsBoolean(rightValue)) {
|
|
273
|
-
return rightValue;
|
|
274
|
-
}
|
|
275
|
-
return [];
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* 6.5.4. xor
|
|
280
|
-
* Returns true if exactly one of the operands evaluates to true,
|
|
281
|
-
* false if either both operands evaluate to true or both operands evaluate to false,
|
|
282
|
-
* and the empty collection otherwise.
|
|
283
|
-
*/
|
|
284
|
-
class XorAtom extends InfixOperatorAtom {
|
|
285
|
-
constructor(left, right) {
|
|
286
|
-
super('xor', left, right);
|
|
287
|
-
}
|
|
288
|
-
eval(context, input) {
|
|
289
|
-
const leftResult = this.left.eval(context, input);
|
|
290
|
-
const rightResult = this.right.eval(context, input);
|
|
291
|
-
if (leftResult.length === 0 && rightResult.length === 0) {
|
|
292
|
-
return [];
|
|
293
|
-
}
|
|
294
|
-
const leftValue = leftResult.length === 0 ? null : leftResult[0].value;
|
|
295
|
-
const rightValue = rightResult.length === 0 ? null : rightResult[0].value;
|
|
296
|
-
if ((leftValue === true && rightValue !== true) || (leftValue !== true && rightValue === true)) {
|
|
297
|
-
return booleanToTypedValue(true);
|
|
298
|
-
}
|
|
299
|
-
if ((leftValue === true && rightValue === true) || (leftValue === false && rightValue === false)) {
|
|
300
|
-
return booleanToTypedValue(false);
|
|
301
|
-
}
|
|
302
|
-
return [];
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
class FunctionAtom {
|
|
306
|
-
constructor(name, args) {
|
|
307
|
-
this.name = name;
|
|
308
|
-
this.args = args;
|
|
309
|
-
}
|
|
310
|
-
eval(context, input) {
|
|
311
|
-
const impl = functions[this.name];
|
|
312
|
-
if (!impl) {
|
|
313
|
-
throw new Error('Unrecognized function: ' + this.name);
|
|
314
|
-
}
|
|
315
|
-
return impl(context, input, ...this.args);
|
|
316
|
-
}
|
|
317
|
-
toString() {
|
|
318
|
-
return `${this.name}(${this.args.map((arg) => arg.toString()).join(', ')})`;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
class IndexerAtom {
|
|
322
|
-
constructor(left, expr) {
|
|
323
|
-
this.left = left;
|
|
324
|
-
this.expr = expr;
|
|
325
|
-
}
|
|
326
|
-
eval(context, input) {
|
|
327
|
-
const evalResult = this.expr.eval(context, input);
|
|
328
|
-
if (evalResult.length !== 1) {
|
|
329
|
-
return [];
|
|
330
|
-
}
|
|
331
|
-
const index = evalResult[0].value;
|
|
332
|
-
if (typeof index !== 'number') {
|
|
333
|
-
throw new Error(`Invalid indexer expression: should return integer}`);
|
|
334
|
-
}
|
|
335
|
-
const leftResult = this.left.eval(context, input);
|
|
336
|
-
if (!(index in leftResult)) {
|
|
337
|
-
return [];
|
|
338
|
-
}
|
|
339
|
-
return [leftResult[index]];
|
|
340
|
-
}
|
|
341
|
-
toString() {
|
|
342
|
-
return `${this.left.toString()}[${this.expr.toString()}]`;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
export { AndAtom, ArithemticOperatorAtom, AsAtom, ConcatAtom, ContainsAtom, DotAtom, EmptySetAtom, EqualsAtom, EquivalentAtom, FhirPathAtom, FunctionAtom, InAtom, IndexerAtom, IsAtom, LiteralAtom, NotEqualsAtom, NotEquivalentAtom, OrAtom, SymbolAtom, UnaryOperatorAtom, UnionAtom, XorAtom };
|
|
347
|
-
//# sourceMappingURL=atoms.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"atoms.mjs","sources":["../../../src/fhirpath/atoms.ts"],"sourcesContent":["import { Atom, AtomContext, InfixOperatorAtom, PrefixOperatorAtom } from '../fhirlexer';\nimport { PropertyType, TypedValue, isResource } from '../types';\nimport { functions } from './functions';\nimport {\n booleanToTypedValue,\n fhirPathArrayEquals,\n fhirPathArrayEquivalent,\n fhirPathIs,\n fhirPathNot,\n getTypedPropertyValue,\n isQuantity,\n removeDuplicates,\n toJsBoolean,\n toTypedValue,\n} from './utils';\nexport class FhirPathAtom implements Atom {\n constructor(public readonly original: string, public readonly child: Atom) {}\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n try {\n if (input.length > 0) {\n return input.map((e) => this.child.eval(context, [e])).flat();\n } else {\n return this.child.eval(context, []);\n }\n } catch (error) {\n throw new Error(`FhirPathError on \"${this.original}\": ${error}`);\n }\n }\n\n toString(): string {\n return this.child.toString();\n }\n}\n\nexport class LiteralAtom implements Atom {\n constructor(public readonly value: TypedValue) {}\n eval(): TypedValue[] {\n return [this.value];\n }\n\n toString(): string {\n const value = this.value.value;\n if (typeof value === 'string') {\n return `'${value}'`;\n }\n return value.toString();\n }\n}\n\nexport class SymbolAtom implements Atom {\n constructor(public readonly name: string) {}\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n if (this.name === '$this') {\n return input;\n }\n if (this.name.startsWith('%')) {\n const symbol = context.variables[this.name.slice(1)];\n if (!symbol) {\n throw new Error(`Undefined variable ${this.name}`);\n }\n return [symbol];\n }\n return input.flatMap((e) => this.evalValue(e)).filter((e) => e?.value !== undefined) as TypedValue[];\n }\n\n private evalValue(typedValue: TypedValue): TypedValue[] | TypedValue | undefined {\n const input = typedValue.value;\n if (!input || typeof input !== 'object') {\n return undefined;\n }\n\n if (isResource(input) && input.resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n\n toString(): string {\n return this.name;\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n\n toString(): string {\n return '{}';\n }\n}\n\nexport class UnaryOperatorAtom extends PrefixOperatorAtom {\n constructor(operator: string, child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {\n super(operator, child);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n return this.impl(this.child.eval(context, input));\n }\n\n toString(): string {\n return this.child.toString();\n }\n}\n\nexport class AsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('as', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n return functions.ofType(context, this.left.eval(context, input), this.right);\n }\n}\n\nexport class ArithemticOperatorAtom extends InfixOperatorAtom {\n constructor(\n operator: string,\n left: Atom,\n right: Atom,\n public readonly impl: (x: number, y: number) => number | boolean\n ) {\n super(operator, left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftEvalResult = this.left.eval(context, input);\n if (leftEvalResult.length !== 1) {\n return [];\n }\n const rightEvalResult = this.right.eval(context, input);\n if (rightEvalResult.length !== 1) {\n return [];\n }\n const leftValue = leftEvalResult[0].value;\n const rightValue = rightEvalResult[0].value;\n const leftNumber = isQuantity(leftValue) ? leftValue.value : leftValue;\n const rightNumber = isQuantity(rightValue) ? rightValue.value : rightValue;\n const result = this.impl(leftNumber, rightNumber);\n if (typeof result === 'boolean') {\n return booleanToTypedValue(result);\n } else if (isQuantity(leftValue)) {\n return [{ type: PropertyType.Quantity, value: { ...leftValue, value: result } }];\n } else {\n return [toTypedValue(result)];\n }\n }\n}\n\nexport class ConcatAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('&', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n const result = [...leftValue, ...rightValue];\n if (result.length > 0 && result.every((e) => typeof e.value === 'string')) {\n return [{ type: PropertyType.string, value: result.map((e) => e.value as string).join('') }];\n }\n return result;\n }\n}\n\nexport class ContainsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('contains', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return booleanToTypedValue(leftValue.some((e) => e.value === rightValue[0].value));\n }\n}\n\nexport class InAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('in', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return booleanToTypedValue(rightValue.some((e) => e.value === leftValue[0].value));\n }\n}\n\nexport class DotAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('.', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n return this.right.eval(context, this.left.eval(context, input));\n }\n\n toString(): string {\n return `${this.left.toString()}.${this.right.toString()}`;\n }\n}\n\nexport class UnionAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('|', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context, input);\n const rightResult = this.right.eval(context, input);\n return removeDuplicates([...leftResult, ...rightResult]);\n }\n}\n\nexport class EqualsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('=', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return fhirPathArrayEquals(leftValue, rightValue);\n }\n}\n\nexport class NotEqualsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!=', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return fhirPathNot(fhirPathArrayEquals(leftValue, rightValue));\n }\n}\n\nexport class EquivalentAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('~', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return fhirPathArrayEquivalent(leftValue, rightValue);\n }\n}\n\nexport class NotEquivalentAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!~', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n return fhirPathNot(fhirPathArrayEquivalent(leftValue, rightValue));\n }\n}\n\nexport class IsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('is', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n if (leftValue.length !== 1) {\n return [];\n }\n const typeName = (this.right as SymbolAtom).name;\n return booleanToTypedValue(fhirPathIs(leftValue[0], typeName));\n }\n}\n\n/**\n * 6.5.1. and\n * Returns true if both operands evaluate to true,\n * false if either operand evaluates to false,\n * and the empty collection otherwise.\n */\nexport class AndAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('and', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n const rightValue = this.right.eval(context, input);\n if (leftValue[0]?.value === true && rightValue[0]?.value === true) {\n return booleanToTypedValue(true);\n }\n if (leftValue[0]?.value === false || rightValue[0]?.value === false) {\n return booleanToTypedValue(false);\n }\n return [];\n }\n}\n\nexport class OrAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('or', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context, input);\n if (toJsBoolean(leftValue)) {\n return leftValue;\n }\n\n const rightValue = this.right.eval(context, input);\n if (toJsBoolean(rightValue)) {\n return rightValue;\n }\n\n return [];\n }\n}\n\n/**\n * 6.5.4. xor\n * Returns true if exactly one of the operands evaluates to true,\n * false if either both operands evaluate to true or both operands evaluate to false,\n * and the empty collection otherwise.\n */\nexport class XorAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('xor', left, right);\n }\n\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context, input);\n const rightResult = this.right.eval(context, input);\n if (leftResult.length === 0 && rightResult.length === 0) {\n return [];\n }\n const leftValue = leftResult.length === 0 ? null : leftResult[0].value;\n const rightValue = rightResult.length === 0 ? null : rightResult[0].value;\n if ((leftValue === true && rightValue !== true) || (leftValue !== true && rightValue === true)) {\n return booleanToTypedValue(true);\n }\n if ((leftValue === true && rightValue === true) || (leftValue === false && rightValue === false)) {\n return booleanToTypedValue(false);\n }\n return [];\n }\n}\n\nexport class FunctionAtom implements Atom {\n constructor(public readonly name: string, public readonly args: Atom[]) {}\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const impl = functions[this.name];\n if (!impl) {\n throw new Error('Unrecognized function: ' + this.name);\n }\n return impl(context, input, ...this.args);\n }\n\n toString(): string {\n return `${this.name}(${this.args.map((arg) => arg.toString()).join(', ')})`;\n }\n}\n\nexport class IndexerAtom implements Atom {\n constructor(public readonly left: Atom, public readonly expr: Atom) {}\n eval(context: AtomContext, input: TypedValue[]): TypedValue[] {\n const evalResult = this.expr.eval(context, input);\n if (evalResult.length !== 1) {\n return [];\n }\n const index = evalResult[0].value;\n if (typeof index !== 'number') {\n throw new Error(`Invalid indexer expression: should return integer}`);\n }\n const leftResult = this.left.eval(context, input);\n if (!(index in leftResult)) {\n return [];\n }\n return [leftResult[index]];\n }\n\n toString(): string {\n return `${this.left.toString()}[${this.expr.toString()}]`;\n }\n}\n"],"names":[],"mappings":";;;;;MAea,YAAY,CAAA;IACvB,WAA4B,CAAA,QAAgB,EAAkB,KAAW,EAAA;QAA7C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;KAAI;IAE7E,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;QAC5C,IAAI;AACF,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/D,aAAA;AAAM,iBAAA;gBACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAqB,kBAAA,EAAA,IAAI,CAAC,QAAQ,CAAM,GAAA,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;AAClE,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC9B;AACF,CAAA;MAEY,WAAW,CAAA;AACtB,IAAA,WAAA,CAA4B,KAAiB,EAAA;QAAjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;KAAI;IACjD,IAAI,GAAA;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrB;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KACzB;AACF,CAAA;MAEY,UAAU,CAAA;AACrB,IAAA,WAAA,CAA4B,IAAY,EAAA;QAAZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAC5C,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;AACpD,aAAA;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;AACjB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,SAAS,CAAiB,CAAC;KACtG;AAEO,IAAA,SAAS,CAAC,UAAsB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,EAAE;AACzD,YAAA,OAAO,UAAU,CAAC;AACnB,SAAA;QAED,OAAO,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACrD;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AACF,CAAA;MAEY,YAAY,CAAA;IACvB,IAAI,GAAA;AACF,QAAA,OAAO,EAAE,CAAC;KACX;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAEK,MAAO,iBAAkB,SAAQ,kBAAkB,CAAA;AACvD,IAAA,WAAA,CAAY,QAAgB,EAAE,KAAW,EAAkB,IAAuC,EAAA;AAChG,QAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QADkC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAmC;KAEjG;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;KACnD;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC9B;AACF,CAAA;AAEK,MAAO,MAAO,SAAQ,iBAAiB,CAAA;IAC3C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;QAC5C,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9E;AACF,CAAA;AAEK,MAAO,sBAAuB,SAAQ,iBAAiB,CAAA;AAC3D,IAAA,WAAA,CACE,QAAgB,EAChB,IAAU,EACV,KAAW,EACK,IAAgD,EAAA;AAEhE,QAAA,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAFb,IAAI,CAAA,IAAA,GAAJ,IAAI,CAA4C;KAGjE;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC;AACvE,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAClD,QAAA,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;AAC/B,YAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;YAChC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAClF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,SAAA;KACF;AACF,CAAA;AAEK,MAAO,UAAW,SAAQ,iBAAiB,CAAA;IAC/C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE;AACzE,YAAA,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9F,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACF,CAAA;AAEK,MAAO,YAAa,SAAQ,iBAAiB,CAAA;IACjD,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAChC;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACpF;AACF,CAAA;AAEK,MAAO,MAAO,SAAQ,iBAAiB,CAAA;IAC3C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACpF;AACF,CAAA;AAEK,MAAO,OAAQ,SAAQ,iBAAiB,CAAA;IAC5C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;KACjE;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;KAC3D;AACF,CAAA;AAEK,MAAO,SAAU,SAAQ,iBAAiB,CAAA;IAC9C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,gBAAgB,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;KAC1D;AACF,CAAA;AAEK,MAAO,UAAW,SAAQ,iBAAiB,CAAA;IAC/C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,OAAO,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACnD;AACF,CAAA;AAEK,MAAO,aAAc,SAAQ,iBAAiB,CAAA;IAClD,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;KAChE;AACF,CAAA;AAEK,MAAO,cAAe,SAAQ,iBAAiB,CAAA;IACnD,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACzB;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,OAAO,uBAAuB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACvD;AACF,CAAA;AAEK,MAAO,iBAAkB,SAAQ,iBAAiB,CAAA;IACtD,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;KACpE;AACF,CAAA;AAEK,MAAO,MAAO,SAAQ,iBAAiB,CAAA;IAC3C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAoB,CAAC,IAAI,CAAC;AACjD,QAAA,OAAO,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;KAChE;AACF,CAAA;AAED;;;;;AAKG;AACG,MAAO,OAAQ,SAAQ,iBAAiB,CAAA;IAC5C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC3B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE;AACjE,YAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,EAAE;AACnE,YAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACF,CAAA;AAEK,MAAO,MAAO,SAAQ,iBAAiB,CAAA;IAC3C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC1B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE;AAC1B,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;AAC3B,YAAA,OAAO,UAAU,CAAC;AACnB,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;AACF,CAAA;AAED;;;;;AAKG;AACG,MAAO,OAAQ,SAAQ,iBAAiB,CAAA;IAC5C,WAAY,CAAA,IAAU,EAAE,KAAW,EAAA;AACjC,QAAA,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC3B;IAED,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACvD,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1E,QAAA,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE;AAC9F,YAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,MAAM,SAAS,KAAK,KAAK,IAAI,UAAU,KAAK,KAAK,CAAC,EAAE;AAChG,YAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACF,CAAA;MAEY,YAAY,CAAA;IACvB,WAA4B,CAAA,IAAY,EAAkB,IAAY,EAAA;QAA1C,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAAkB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAAI;IAC1E,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;QAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,SAAA;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;IAED,QAAQ,GAAA;QACN,OAAO,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;KAC7E;AACF,CAAA;MAEY,WAAW,CAAA;IACtB,WAA4B,CAAA,IAAU,EAAkB,IAAU,EAAA;QAAtC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QAAkB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;KAAI;IACtE,IAAI,CAAC,OAAoB,EAAE,KAAmB,EAAA;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kDAAA,CAAoD,CAAC,CAAC;AACvE,SAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,IAAI,EAAE,KAAK,IAAI,UAAU,CAAC,EAAE;AAC1B,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;KAC3D;AACF;;;;"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
function parseDateString(str) {
|
|
2
|
-
if (str.startsWith('T')) {
|
|
3
|
-
// If a time string,
|
|
4
|
-
// then normalize to full length.
|
|
5
|
-
return str + 'T00:00:00.000Z'.substring(str.length);
|
|
6
|
-
}
|
|
7
|
-
if (str.length <= 10) {
|
|
8
|
-
// If a local date (i.e., "2021-01-01"),
|
|
9
|
-
// then return as-is.
|
|
10
|
-
return str;
|
|
11
|
-
}
|
|
12
|
-
try {
|
|
13
|
-
// Try to normalize to UTC
|
|
14
|
-
return new Date(str).toISOString();
|
|
15
|
-
}
|
|
16
|
-
catch (e) {
|
|
17
|
-
// Fallback to original input
|
|
18
|
-
// This happens on unsupported time formats such as "2021-01-01T12"
|
|
19
|
-
return str;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { parseDateString };
|
|
24
|
-
//# sourceMappingURL=date.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date.mjs","sources":["../../../src/fhirpath/date.ts"],"sourcesContent":["export function parseDateString(str: string): string {\n if (str.startsWith('T')) {\n // If a time string,\n // then normalize to full length.\n return str + 'T00:00:00.000Z'.substring(str.length);\n }\n\n if (str.length <= 10) {\n // If a local date (i.e., \"2021-01-01\"),\n // then return as-is.\n return str;\n }\n\n try {\n // Try to normalize to UTC\n return new Date(str).toISOString();\n } catch (e) {\n // Fallback to original input\n // This happens on unsupported time formats such as \"2021-01-01T12\"\n return str;\n }\n}\n"],"names":[],"mappings":"AAAM,SAAU,eAAe,CAAC,GAAW,EAAA;AACzC,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;;;QAGvB,OAAO,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrD,KAAA;AAED,IAAA,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE;;;AAGpB,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;IAED,IAAI;;QAEF,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,KAAA;AAAC,IAAA,OAAO,CAAC,EAAE;;;AAGV,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AACH;;;;"}
|