@medplum/core 0.9.35 → 0.9.37

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 (50) hide show
  1. package/dist/cjs/client.d.ts +14 -5
  2. package/dist/cjs/fhirlexer/index.d.ts +2 -0
  3. package/dist/cjs/fhirlexer/parse.d.ts +31 -0
  4. package/dist/cjs/fhirlexer/tokenize.d.ts +14 -0
  5. package/dist/cjs/fhirmapper/atoms.d.ts +67 -0
  6. package/dist/cjs/fhirmapper/parse.d.ts +7 -0
  7. package/dist/cjs/fhirmapper/tokenize.d.ts +2 -0
  8. package/dist/cjs/fhirpath/atoms.d.ts +2 -7
  9. package/dist/cjs/fhirpath/functions.d.ts +2 -1
  10. package/dist/cjs/fhirpath/parse.d.ts +8 -5
  11. package/dist/cjs/fhirpath/tokenize.d.ts +3 -4
  12. package/dist/cjs/fhirpath/utils.d.ts +1 -1
  13. package/dist/cjs/index.js +310 -272
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/index.min.js +1 -1
  16. package/dist/cjs/index.min.js.map +1 -1
  17. package/dist/cjs/types.d.ts +4 -0
  18. package/dist/esm/client.d.ts +14 -5
  19. package/dist/esm/client.js +58 -45
  20. package/dist/esm/client.js.map +1 -1
  21. package/dist/esm/fhirlexer/index.d.ts +2 -0
  22. package/dist/esm/fhirlexer/parse.d.ts +31 -0
  23. package/dist/esm/fhirlexer/parse.js +105 -0
  24. package/dist/esm/fhirlexer/parse.js.map +1 -0
  25. package/dist/esm/fhirlexer/tokenize.d.ts +14 -0
  26. package/dist/esm/fhirlexer/tokenize.js +212 -0
  27. package/dist/esm/fhirlexer/tokenize.js.map +1 -0
  28. package/dist/esm/fhirmapper/atoms.d.ts +67 -0
  29. package/dist/esm/fhirmapper/parse.d.ts +7 -0
  30. package/dist/esm/fhirmapper/tokenize.d.ts +2 -0
  31. package/dist/esm/fhirpath/atoms.d.ts +2 -7
  32. package/dist/esm/fhirpath/atoms.js.map +1 -1
  33. package/dist/esm/fhirpath/functions.d.ts +2 -1
  34. package/dist/esm/fhirpath/functions.js.map +1 -1
  35. package/dist/esm/fhirpath/parse.d.ts +8 -5
  36. package/dist/esm/fhirpath/parse.js +57 -169
  37. package/dist/esm/fhirpath/parse.js.map +1 -1
  38. package/dist/esm/fhirpath/tokenize.d.ts +3 -4
  39. package/dist/esm/fhirpath/tokenize.js +5 -180
  40. package/dist/esm/fhirpath/tokenize.js.map +1 -1
  41. package/dist/esm/fhirpath/utils.d.ts +1 -1
  42. package/dist/esm/fhirpath/utils.js.map +1 -1
  43. package/dist/esm/index.js +2 -2
  44. package/dist/esm/index.min.js +1 -1
  45. package/dist/esm/index.min.js.map +1 -1
  46. package/dist/esm/outcomes.js +1 -1
  47. package/dist/esm/outcomes.js.map +1 -1
  48. package/dist/esm/types.d.ts +4 -0
  49. package/dist/esm/types.js.map +1 -1
  50. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sources":["../../../src/fhirlexer/parse.ts"],"sourcesContent":["import { TypedValue } from '../types';\nimport { Token } from './tokenize';\n\nexport interface Atom {\n eval(context: TypedValue[]): TypedValue[];\n}\n\nexport interface PrefixParselet {\n parse(parser: Parser, token: Token): Atom;\n}\n\nexport interface InfixParselet {\n precedence: number;\n parse(parser: Parser, left: Atom, token: Token): Atom;\n}\n\nexport class ParserBuilder {\n readonly #prefixParselets: Record<string, PrefixParselet> = {};\n readonly #infixParselets: Record<string, InfixParselet> = {};\n\n public registerInfix(tokenType: string, parselet: InfixParselet): ParserBuilder {\n this.#infixParselets[tokenType] = parselet;\n return this;\n }\n\n public registerPrefix(tokenType: string, parselet: PrefixParselet): ParserBuilder {\n this.#prefixParselets[tokenType] = parselet;\n return this;\n }\n\n public prefix(tokenType: string, precedence: number, builder: (token: Token, right: Atom) => Atom): ParserBuilder {\n return this.registerPrefix(tokenType, {\n parse(parser, token) {\n const right = parser.consumeAndParse(precedence);\n return builder(token, right);\n },\n });\n }\n\n public infixLeft(\n tokenType: string,\n precedence: number,\n builder: (left: Atom, token: Token, right: Atom) => Atom\n ): ParserBuilder {\n return this.registerInfix(tokenType, {\n parse(parser, left, token) {\n const right = parser.consumeAndParse(precedence);\n return builder(left, token, right);\n },\n precedence,\n });\n }\n\n public construct(input: Token[]): Parser {\n return new Parser(input, this.#prefixParselets, this.#infixParselets);\n }\n}\n\nexport class Parser {\n #tokens: Token[];\n #prefixParselets: Record<string, PrefixParselet>;\n #infixParselets: Record<string, InfixParselet>;\n\n constructor(\n tokens: Token[],\n prefixParselets: Record<string, PrefixParselet>,\n infixParselets: Record<string, InfixParselet>\n ) {\n this.#tokens = tokens;\n this.#prefixParselets = prefixParselets;\n this.#infixParselets = infixParselets;\n }\n\n hasMore(): boolean {\n return this.#tokens.length > 0;\n }\n\n match(expected: string): boolean {\n const token = this.peek();\n if (token?.id !== expected) {\n return false;\n }\n\n this.consume();\n return true;\n }\n\n consumeAndParse(precedence = Infinity): Atom {\n const token = this.consume();\n const prefix = this.#prefixParselets[token.id];\n if (!prefix) {\n throw Error(\n `Parse error at \"${token.value}\" (line ${token.line}, column ${token.column}). No matching prefix parselet.`\n );\n }\n\n let left = prefix.parse(this, token);\n\n while (precedence > this.getPrecedence()) {\n const next = this.consume();\n const infix = this.#infixParselets[next.id];\n left = infix.parse(this, left, next);\n }\n\n return left;\n }\n\n getPrecedence(): number {\n const nextToken = this.peek();\n if (!nextToken) {\n return Infinity;\n }\n const parser = this.#infixParselets[nextToken.id];\n if (parser) {\n return parser.precedence;\n }\n return Infinity;\n }\n\n consume(expected?: string): Token {\n if (!this.#tokens.length) {\n throw Error('Cant consume unknown more tokens.');\n }\n if (expected && this.peek()?.id !== expected) {\n const actual = this.peek() as Token;\n throw Error(`Expected ${expected} but got \"${actual.value}\" at line ${actual.line} column ${actual.column}.`);\n }\n return this.#tokens.shift() as Token;\n }\n\n peek(): Token | undefined {\n return this.#tokens.length > 0 ? this.#tokens[0] : undefined;\n }\n\n removeComments(): void {\n this.#tokens = this.#tokens.filter((t) => t.id !== 'Comment');\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface Marker {
2
+ index: number;
3
+ line: number;
4
+ column: number;
5
+ }
6
+ export interface Token extends Marker {
7
+ id: string;
8
+ value: string;
9
+ }
10
+ export declare class Tokenizer {
11
+ #private;
12
+ constructor(str: string, keywords: string[], operators: string[]);
13
+ tokenize(): Token[];
14
+ }
@@ -0,0 +1,212 @@
1
+ import { __classPrivateFieldSet, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.js';
2
+
3
+ var _Tokenizer_instances, _Tokenizer_str, _Tokenizer_keywords, _Tokenizer_operators, _Tokenizer_result, _Tokenizer_pos, _Tokenizer_markStack, _Tokenizer_prevToken, _Tokenizer_peekToken, _Tokenizer_consumeToken, _Tokenizer_consumeWhitespace, _Tokenizer_consumeMultiLineComment, _Tokenizer_consumeSingleLineComment, _Tokenizer_consumeString, _Tokenizer_consumeBacktickSymbol, _Tokenizer_consumeDateTime, _Tokenizer_consumeNumber, _Tokenizer_consumeSymbol, _Tokenizer_consumeOperator, _Tokenizer_consumeWhile, _Tokenizer_curr, _Tokenizer_prev, _Tokenizer_peek, _Tokenizer_mark, _Tokenizer_reset, _Tokenizer_advance, _Tokenizer_buildToken;
4
+ const STANDARD_UNITS = [
5
+ 'year',
6
+ 'years',
7
+ 'month',
8
+ 'months',
9
+ 'week',
10
+ 'weeks',
11
+ 'day',
12
+ 'days',
13
+ 'hour',
14
+ 'hours',
15
+ 'minute',
16
+ 'minutes',
17
+ 'second',
18
+ 'seconds',
19
+ 'millisecond',
20
+ 'milliseconds',
21
+ ];
22
+ class Tokenizer {
23
+ constructor(str, keywords, operators) {
24
+ _Tokenizer_instances.add(this);
25
+ _Tokenizer_str.set(this, void 0);
26
+ _Tokenizer_keywords.set(this, void 0);
27
+ _Tokenizer_operators.set(this, void 0);
28
+ _Tokenizer_result.set(this, []);
29
+ _Tokenizer_pos.set(this, { index: 0, line: 0, column: 0 });
30
+ _Tokenizer_markStack.set(this, []);
31
+ __classPrivateFieldSet(this, _Tokenizer_str, str, "f");
32
+ __classPrivateFieldSet(this, _Tokenizer_keywords, keywords, "f");
33
+ __classPrivateFieldSet(this, _Tokenizer_operators, operators, "f");
34
+ }
35
+ tokenize() {
36
+ while (__classPrivateFieldGet(this, _Tokenizer_pos, "f").index < __classPrivateFieldGet(this, _Tokenizer_str, "f").length) {
37
+ const token = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeToken).call(this);
38
+ if (token) {
39
+ __classPrivateFieldGet(this, _Tokenizer_result, "f").push(token);
40
+ }
41
+ }
42
+ return __classPrivateFieldGet(this, _Tokenizer_result, "f");
43
+ }
44
+ }
45
+ _Tokenizer_str = new WeakMap(), _Tokenizer_keywords = new WeakMap(), _Tokenizer_operators = new WeakMap(), _Tokenizer_result = new WeakMap(), _Tokenizer_pos = new WeakMap(), _Tokenizer_markStack = new WeakMap(), _Tokenizer_instances = new WeakSet(), _Tokenizer_prevToken = function _Tokenizer_prevToken() {
46
+ return __classPrivateFieldGet(this, _Tokenizer_result, "f").slice(-1)[0];
47
+ }, _Tokenizer_peekToken = function _Tokenizer_peekToken() {
48
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_mark).call(this);
49
+ const token = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeToken).call(this);
50
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_reset).call(this);
51
+ return token;
52
+ }, _Tokenizer_consumeToken = function _Tokenizer_consumeToken() {
53
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhitespace).call(this);
54
+ const c = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this);
55
+ if (!c) {
56
+ return undefined;
57
+ }
58
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_mark).call(this);
59
+ const next = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peek).call(this);
60
+ if (c === '/' && next === '*') {
61
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeMultiLineComment).call(this);
62
+ }
63
+ if (c === '/' && next === '/') {
64
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeSingleLineComment).call(this);
65
+ }
66
+ if (c === "'" || c === '"') {
67
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeString).call(this, c);
68
+ }
69
+ if (c === '`') {
70
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeBacktickSymbol).call(this);
71
+ }
72
+ if (c === '@') {
73
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeDateTime).call(this);
74
+ }
75
+ if (c.match(/\d/)) {
76
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeNumber).call(this);
77
+ }
78
+ if (c.match(/\w/)) {
79
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeSymbol).call(this);
80
+ }
81
+ if (c === '$' && next.match(/\w/)) {
82
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeSymbol).call(this);
83
+ }
84
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeOperator).call(this);
85
+ }, _Tokenizer_consumeWhitespace = function _Tokenizer_consumeWhitespace() {
86
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/\s/));
87
+ }, _Tokenizer_consumeMultiLineComment = function _Tokenizer_consumeMultiLineComment() {
88
+ const start = __classPrivateFieldGet(this, _Tokenizer_pos, "f").index;
89
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) !== '*' || __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peek).call(this) !== '/');
90
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
91
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
92
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'Comment', __classPrivateFieldGet(this, _Tokenizer_str, "f").substring(start, __classPrivateFieldGet(this, _Tokenizer_pos, "f").index));
93
+ }, _Tokenizer_consumeSingleLineComment = function _Tokenizer_consumeSingleLineComment() {
94
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'Comment', __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) !== '\n'));
95
+ }, _Tokenizer_consumeString = function _Tokenizer_consumeString(endChar) {
96
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
97
+ const result = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'String', __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_prev).call(this) === '\\' || __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) !== endChar));
98
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
99
+ return result;
100
+ }, _Tokenizer_consumeBacktickSymbol = function _Tokenizer_consumeBacktickSymbol() {
101
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
102
+ const result = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'Symbol', __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) !== '`'));
103
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
104
+ return result;
105
+ }, _Tokenizer_consumeDateTime = function _Tokenizer_consumeDateTime() {
106
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this); // Consume "@"
107
+ const start = __classPrivateFieldGet(this, _Tokenizer_pos, "f").index;
108
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/[\d-]/));
109
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === 'T') {
110
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
111
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/[\d:]/));
112
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === '.' && __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peek).call(this).match(/\d/)) {
113
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
114
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/\d/));
115
+ }
116
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === 'Z') {
117
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
118
+ }
119
+ else if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === '+' || __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === '-') {
120
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
121
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/[\d:]/));
122
+ }
123
+ }
124
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'DateTime', __classPrivateFieldGet(this, _Tokenizer_str, "f").substring(start, __classPrivateFieldGet(this, _Tokenizer_pos, "f").index));
125
+ }, _Tokenizer_consumeNumber = function _Tokenizer_consumeNumber() {
126
+ const start = __classPrivateFieldGet(this, _Tokenizer_pos, "f").index;
127
+ let id = 'Number';
128
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/\d/));
129
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === '.' && __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peek).call(this).match(/\d/)) {
130
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
131
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/\d/));
132
+ }
133
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === ' ') {
134
+ if (isUnitToken(__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peekToken).call(this))) {
135
+ id = 'Quantity';
136
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeToken).call(this);
137
+ }
138
+ }
139
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, id, __classPrivateFieldGet(this, _Tokenizer_str, "f").substring(start, __classPrivateFieldGet(this, _Tokenizer_pos, "f").index));
140
+ }, _Tokenizer_consumeSymbol = function _Tokenizer_consumeSymbol() {
141
+ var _a;
142
+ const value = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_consumeWhile).call(this, () => __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this).match(/[$\w]/));
143
+ if (((_a = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_prevToken).call(this)) === null || _a === void 0 ? void 0 : _a.value) !== '.' && __classPrivateFieldGet(this, _Tokenizer_keywords, "f").includes(value)) {
144
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, value, value);
145
+ }
146
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, 'Symbol', value);
147
+ }, _Tokenizer_consumeOperator = function _Tokenizer_consumeOperator() {
148
+ const c = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this);
149
+ const next = __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_peek).call(this);
150
+ const twoCharOp = c + next;
151
+ if (__classPrivateFieldGet(this, _Tokenizer_operators, "f").includes(twoCharOp)) {
152
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
153
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
154
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, twoCharOp, twoCharOp);
155
+ }
156
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
157
+ return __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_buildToken).call(this, c, c);
158
+ }, _Tokenizer_consumeWhile = function _Tokenizer_consumeWhile(condition) {
159
+ const start = __classPrivateFieldGet(this, _Tokenizer_pos, "f").index;
160
+ while (__classPrivateFieldGet(this, _Tokenizer_pos, "f").index < __classPrivateFieldGet(this, _Tokenizer_str, "f").length && condition()) {
161
+ __classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_advance).call(this);
162
+ }
163
+ return __classPrivateFieldGet(this, _Tokenizer_str, "f").substring(start, __classPrivateFieldGet(this, _Tokenizer_pos, "f").index);
164
+ }, _Tokenizer_curr = function _Tokenizer_curr() {
165
+ return __classPrivateFieldGet(this, _Tokenizer_str, "f")[__classPrivateFieldGet(this, _Tokenizer_pos, "f").index];
166
+ }, _Tokenizer_prev = function _Tokenizer_prev() {
167
+ var _a;
168
+ return (_a = __classPrivateFieldGet(this, _Tokenizer_str, "f")[__classPrivateFieldGet(this, _Tokenizer_pos, "f").index - 1]) !== null && _a !== void 0 ? _a : '';
169
+ }, _Tokenizer_peek = function _Tokenizer_peek() {
170
+ var _a;
171
+ return (_a = __classPrivateFieldGet(this, _Tokenizer_str, "f")[__classPrivateFieldGet(this, _Tokenizer_pos, "f").index + 1]) !== null && _a !== void 0 ? _a : '';
172
+ }, _Tokenizer_mark = function _Tokenizer_mark() {
173
+ __classPrivateFieldGet(this, _Tokenizer_markStack, "f").push(Object.assign({}, __classPrivateFieldGet(this, _Tokenizer_pos, "f")));
174
+ }, _Tokenizer_reset = function _Tokenizer_reset() {
175
+ const mark = __classPrivateFieldGet(this, _Tokenizer_markStack, "f").pop();
176
+ if (!mark) {
177
+ throw new Error('No mark to reset to');
178
+ }
179
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").index = mark.index;
180
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").line = mark.line;
181
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").column = mark.column;
182
+ }, _Tokenizer_advance = function _Tokenizer_advance() {
183
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").index++;
184
+ if (__classPrivateFieldGet(this, _Tokenizer_instances, "m", _Tokenizer_curr).call(this) === '\n') {
185
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").line++;
186
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").column = 0;
187
+ }
188
+ else {
189
+ __classPrivateFieldGet(this, _Tokenizer_pos, "f").column++;
190
+ }
191
+ }, _Tokenizer_buildToken = function _Tokenizer_buildToken(id, value) {
192
+ const mark = __classPrivateFieldGet(this, _Tokenizer_markStack, "f").pop();
193
+ if (!mark) {
194
+ throw new Error('No mark for token');
195
+ }
196
+ return Object.assign({ id,
197
+ value }, mark);
198
+ };
199
+ function isUnitToken(token) {
200
+ if (token) {
201
+ if (token.id === 'String') {
202
+ return true;
203
+ }
204
+ if (token.id === 'Symbol' && STANDARD_UNITS.includes(token.value)) {
205
+ return true;
206
+ }
207
+ }
208
+ return false;
209
+ }
210
+
211
+ export { Tokenizer };
212
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sources":["../../../src/fhirlexer/tokenize.ts"],"sourcesContent":["export interface Marker {\n index: number;\n line: number;\n column: number;\n}\n\nexport interface Token extends Marker {\n id: string;\n value: string;\n}\n\nconst STANDARD_UNITS = [\n 'year',\n 'years',\n 'month',\n 'months',\n 'week',\n 'weeks',\n 'day',\n 'days',\n 'hour',\n 'hours',\n 'minute',\n 'minutes',\n 'second',\n 'seconds',\n 'millisecond',\n 'milliseconds',\n];\n\nexport class Tokenizer {\n readonly #str: string;\n readonly #keywords: string[];\n readonly #operators: string[];\n readonly #result: Token[] = [];\n readonly #pos: Marker = { index: 0, line: 0, column: 0 };\n readonly #markStack: Marker[] = [];\n\n constructor(str: string, keywords: string[], operators: string[]) {\n this.#str = str;\n this.#keywords = keywords;\n this.#operators = operators;\n }\n\n tokenize(): Token[] {\n while (this.#pos.index < this.#str.length) {\n const token = this.#consumeToken();\n if (token) {\n this.#result.push(token);\n }\n }\n\n return this.#result;\n }\n\n #prevToken(): Token | undefined {\n return this.#result.slice(-1)[0];\n }\n\n #peekToken(): Token | undefined {\n this.#mark();\n const token = this.#consumeToken();\n this.#reset();\n return token;\n }\n\n #consumeToken(): Token | undefined {\n this.#consumeWhitespace();\n\n const c = this.#curr();\n if (!c) {\n return undefined;\n }\n\n this.#mark();\n\n const next = this.#peek();\n\n if (c === '/' && next === '*') {\n return this.#consumeMultiLineComment();\n }\n\n if (c === '/' && next === '/') {\n return this.#consumeSingleLineComment();\n }\n\n if (c === \"'\" || c === '\"') {\n return this.#consumeString(c);\n }\n\n if (c === '`') {\n return this.#consumeBacktickSymbol();\n }\n\n if (c === '@') {\n return this.#consumeDateTime();\n }\n\n if (c.match(/\\d/)) {\n return this.#consumeNumber();\n }\n\n if (c.match(/\\w/)) {\n return this.#consumeSymbol();\n }\n\n if (c === '$' && next.match(/\\w/)) {\n return this.#consumeSymbol();\n }\n\n return this.#consumeOperator();\n }\n\n #consumeWhitespace(): void {\n this.#consumeWhile(() => this.#curr().match(/\\s/));\n }\n\n #consumeMultiLineComment(): Token {\n const start = this.#pos.index;\n this.#consumeWhile(() => this.#curr() !== '*' || this.#peek() !== '/');\n this.#advance();\n this.#advance();\n return this.#buildToken('Comment', this.#str.substring(start, this.#pos.index));\n }\n\n #consumeSingleLineComment(): Token {\n return this.#buildToken(\n 'Comment',\n this.#consumeWhile(() => this.#curr() !== '\\n')\n );\n }\n\n #consumeString(endChar: string): Token {\n this.#advance();\n const result = this.#buildToken(\n 'String',\n this.#consumeWhile(() => this.#prev() === '\\\\' || this.#curr() !== endChar)\n );\n this.#advance();\n return result;\n }\n\n #consumeBacktickSymbol(): Token {\n this.#advance();\n const result = this.#buildToken(\n 'Symbol',\n this.#consumeWhile(() => this.#curr() !== '`')\n );\n this.#advance();\n return result;\n }\n\n #consumeDateTime(): Token {\n this.#advance(); // Consume \"@\"\n\n const start = this.#pos.index;\n this.#consumeWhile(() => this.#curr().match(/[\\d-]/));\n\n if (this.#curr() === 'T') {\n this.#advance();\n this.#consumeWhile(() => this.#curr().match(/[\\d:]/));\n\n if (this.#curr() === '.' && this.#peek().match(/\\d/)) {\n this.#advance();\n this.#consumeWhile(() => this.#curr().match(/\\d/));\n }\n\n if (this.#curr() === 'Z') {\n this.#advance();\n } else if (this.#curr() === '+' || this.#curr() === '-') {\n this.#advance();\n this.#consumeWhile(() => this.#curr().match(/[\\d:]/));\n }\n }\n\n return this.#buildToken('DateTime', this.#str.substring(start, this.#pos.index));\n }\n\n #consumeNumber(): Token {\n const start = this.#pos.index;\n let id = 'Number';\n this.#consumeWhile(() => this.#curr().match(/\\d/));\n\n if (this.#curr() === '.' && this.#peek().match(/\\d/)) {\n this.#advance();\n this.#consumeWhile(() => this.#curr().match(/\\d/));\n }\n\n if (this.#curr() === ' ') {\n if (isUnitToken(this.#peekToken())) {\n id = 'Quantity';\n this.#consumeToken();\n }\n }\n\n return this.#buildToken(id, this.#str.substring(start, this.#pos.index));\n }\n\n #consumeSymbol(): Token {\n const value = this.#consumeWhile(() => this.#curr().match(/[$\\w]/));\n if (this.#prevToken()?.value !== '.' && this.#keywords.includes(value)) {\n return this.#buildToken(value, value);\n }\n return this.#buildToken('Symbol', value);\n }\n\n #consumeOperator(): Token {\n const c = this.#curr();\n const next = this.#peek();\n const twoCharOp = c + next;\n\n if (this.#operators.includes(twoCharOp)) {\n this.#advance();\n this.#advance();\n return this.#buildToken(twoCharOp, twoCharOp);\n }\n\n this.#advance();\n return this.#buildToken(c, c);\n }\n\n #consumeWhile(condition: () => unknown): string {\n const start = this.#pos.index;\n\n while (this.#pos.index < this.#str.length && condition()) {\n this.#advance();\n }\n\n return this.#str.substring(start, this.#pos.index);\n }\n\n #curr(): string {\n return this.#str[this.#pos.index];\n }\n\n #prev(): string {\n return this.#str[this.#pos.index - 1] ?? '';\n }\n\n #peek(): string {\n return this.#str[this.#pos.index + 1] ?? '';\n }\n\n #mark(): void {\n this.#markStack.push({ ...this.#pos });\n }\n\n #reset(): void {\n const mark = this.#markStack.pop();\n if (!mark) {\n throw new Error('No mark to reset to');\n }\n this.#pos.index = mark.index;\n this.#pos.line = mark.line;\n this.#pos.column = mark.column;\n }\n\n #advance(): void {\n this.#pos.index++;\n if (this.#curr() === '\\n') {\n this.#pos.line++;\n this.#pos.column = 0;\n } else {\n this.#pos.column++;\n }\n }\n\n #buildToken(id: string, value: string): Token {\n const mark = this.#markStack.pop();\n if (!mark) {\n throw new Error('No mark for token');\n }\n return {\n id,\n value,\n ...mark,\n };\n }\n}\n\nfunction isUnitToken(token: Token | undefined): boolean {\n if (token) {\n if (token.id === 'String') {\n return true;\n }\n\n if (token.id === 'Symbol' && STANDARD_UNITS.includes(token.value)) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Atom } from '../fhirlexer';
2
+ declare abstract class DefaultFhirMapperAtom implements Atom {
3
+ eval(): never;
4
+ }
5
+ export declare class MappingLanguageAtom extends DefaultFhirMapperAtom {
6
+ readonly original: string;
7
+ readonly child: Atom;
8
+ constructor(original: string, child: Atom);
9
+ }
10
+ export declare class MapAtom extends DefaultFhirMapperAtom {
11
+ readonly url: string;
12
+ readonly identifier: string;
13
+ constructor(url: string, identifier: string);
14
+ }
15
+ export declare class UsesAtom extends DefaultFhirMapperAtom {
16
+ readonly url: string;
17
+ readonly modelMode: string;
18
+ constructor(url: string, modelMode: string);
19
+ }
20
+ export declare class GroupAtom extends DefaultFhirMapperAtom {
21
+ readonly identifier: string;
22
+ readonly parameters: ParameterAtom[];
23
+ readonly rules: RuleAtom[];
24
+ constructor(identifier: string, parameters: ParameterAtom[], rules: RuleAtom[]);
25
+ }
26
+ export declare class ParameterAtom extends DefaultFhirMapperAtom {
27
+ readonly inputMode: string;
28
+ readonly identifier: string;
29
+ readonly type: string;
30
+ constructor(inputMode: string, identifier: string, type: string);
31
+ }
32
+ export declare class RuleAtom extends DefaultFhirMapperAtom {
33
+ readonly sources: RuleSourceAtom[];
34
+ readonly targets: RuleTargetAtom[] | undefined;
35
+ readonly dependent: RuleDependentAtom | undefined;
36
+ readonly name: string | undefined;
37
+ constructor(sources: RuleSourceAtom[], targets: RuleTargetAtom[] | undefined, dependent: RuleDependentAtom | undefined, name: string | undefined);
38
+ }
39
+ export declare class RuleSourceAtom extends DefaultFhirMapperAtom {
40
+ readonly context: string | undefined;
41
+ readonly sourceType: string | undefined;
42
+ readonly sourceDefault: Atom | undefined;
43
+ readonly sourceListMode: string | undefined;
44
+ readonly alias: string | undefined;
45
+ readonly whereClause: Atom | undefined;
46
+ readonly checkClause: Atom | undefined;
47
+ readonly log: Atom | undefined;
48
+ constructor(context: string | undefined, sourceType: string | undefined, sourceDefault: Atom | undefined, sourceListMode: string | undefined, alias: string | undefined, whereClause: Atom | undefined, checkClause: Atom | undefined, log: Atom | undefined);
49
+ }
50
+ export declare class RuleTargetAtom extends DefaultFhirMapperAtom {
51
+ readonly context: string;
52
+ readonly transform: Atom | undefined;
53
+ readonly alias: string | undefined;
54
+ readonly targetListMode: string | undefined;
55
+ constructor(context: string, transform: Atom | undefined, alias: string | undefined, targetListMode: string | undefined);
56
+ }
57
+ export declare class RuleInvocationAtom extends DefaultFhirMapperAtom {
58
+ readonly identifier: string;
59
+ readonly parameters: Atom[];
60
+ constructor(identifier: string, parameters: Atom[]);
61
+ }
62
+ export declare class RuleDependentAtom extends DefaultFhirMapperAtom {
63
+ readonly invocation: RuleInvocationAtom;
64
+ readonly rules: RuleAtom[];
65
+ constructor(invocation: RuleInvocationAtom, rules: RuleAtom[]);
66
+ }
67
+ export {};
@@ -0,0 +1,7 @@
1
+ import { Atom } from '../fhirlexer';
2
+ /**
3
+ * Parses a FHIR Mapping Language document into an AST.
4
+ * @param input The FHIR Mapping Language document to parse.
5
+ * @returns The AST representing the document.
6
+ */
7
+ export declare function parseMappingLanguage(input: string): Atom[];
@@ -0,0 +1,2 @@
1
+ import { Token } from '../fhirlexer';
2
+ export declare function tokenize(str: string): Token[];
@@ -1,11 +1,6 @@
1
+ import { Atom } from '../fhirlexer';
2
+ import { TypedValue } from '../types';
1
3
  import { FhirPathFunction } from './functions';
2
- export interface TypedValue {
3
- readonly type: string;
4
- readonly value: any;
5
- }
6
- export interface Atom {
7
- eval(context: TypedValue[]): TypedValue[];
8
- }
9
4
  export declare class FhirPathAtom implements Atom {
10
5
  readonly original: string;
11
6
  readonly child: Atom;
@@ -1 +1 @@
1
- {"version":3,"file":"atoms.js","sources":["../../../src/fhirpath/atoms.ts"],"sourcesContent":["import { Resource } from '@medplum/fhirtypes';\nimport { PropertyType } from '../types';\nimport { FhirPathFunction, 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';\n\nexport interface TypedValue {\n readonly type: string;\n readonly value: any;\n}\n\nexport interface Atom {\n eval(context: TypedValue[]): TypedValue[];\n}\n\nexport class FhirPathAtom implements Atom {\n constructor(public readonly original: string, public readonly child: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n try {\n if (context.length > 0) {\n return context.map((e) => this.child.eval([e])).flat();\n } else {\n return this.child.eval([]);\n }\n } catch (error) {\n throw new Error(`FhirPathError on \"${this.original}\": ${error}`);\n }\n }\n}\n\nexport class LiteralAtom implements Atom {\n constructor(public readonly value: TypedValue) {}\n eval(): TypedValue[] {\n return [this.value];\n }\n}\n\nexport class SymbolAtom implements Atom {\n constructor(public readonly name: string) {}\n eval(context: TypedValue[]): TypedValue[] {\n if (this.name === '$this') {\n return context;\n }\n return context\n .map((e) => this.#evalValue(e))\n .flat()\n .filter((e) => e?.value !== undefined) as TypedValue[];\n }\n\n #evalValue(typedValue: TypedValue): TypedValue[] | TypedValue | undefined {\n const input = typedValue.value;\n if (!input || typeof input !== 'object') {\n return undefined;\n }\n\n if ('resourceType' in input && (input as Resource).resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n}\n\nexport class UnaryOperatorAtom implements Atom {\n constructor(public readonly child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(this.child.eval(context));\n }\n}\n\nexport class AsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n return functions.ofType(this.left.eval(context), this.right);\n }\n}\n\nexport class ArithemticOperatorAtom implements Atom {\n constructor(\n public readonly left: Atom,\n public readonly right: Atom,\n public readonly impl: (x: number, y: number) => number | boolean\n ) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftEvalResult = this.left.eval(context);\n if (leftEvalResult.length !== 1) {\n return [];\n }\n const rightEvalResult = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return booleanToTypedValue(leftValue.some((e) => e.value === rightValue[0].value));\n }\n}\n\nexport class InAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return booleanToTypedValue(rightValue.some((e) => e.value === leftValue[0].value));\n }\n}\n\nexport class DotAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n return this.right.eval(this.left.eval(context));\n }\n}\n\nexport class UnionAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context);\n const rightResult = this.right.eval(context);\n return removeDuplicates([...leftResult, ...rightResult]);\n }\n}\n\nexport class EqualsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathArrayEquals(leftValue, rightValue);\n }\n}\n\nexport class NotEqualsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathNot(fhirPathArrayEquals(leftValue, rightValue));\n }\n}\n\nexport class EquivalentAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathArrayEquivalent(leftValue, rightValue);\n }\n}\n\nexport class NotEquivalentAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathNot(fhirPathArrayEquivalent(leftValue, rightValue));\n }\n}\n\nexport class IsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n if (toJsBoolean(leftValue)) {\n return leftValue;\n }\n\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context);\n const rightResult = this.right.eval(context);\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[], public readonly impl: FhirPathFunction) {}\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(context, ...this.args);\n }\n}\n\nexport class IndexerAtom implements Atom {\n constructor(public readonly left: Atom, public readonly expr: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n const evalResult = this.expr.eval(context);\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);\n if (!(index in leftResult)) {\n return [];\n }\n return [leftResult[index]];\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"atoms.js","sources":["../../../src/fhirpath/atoms.ts"],"sourcesContent":["import { Resource } from '@medplum/fhirtypes';\nimport { Atom } from '../fhirlexer';\nimport { PropertyType, TypedValue } from '../types';\nimport { FhirPathFunction, 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';\n\nexport class FhirPathAtom implements Atom {\n constructor(public readonly original: string, public readonly child: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n try {\n if (context.length > 0) {\n return context.map((e) => this.child.eval([e])).flat();\n } else {\n return this.child.eval([]);\n }\n } catch (error) {\n throw new Error(`FhirPathError on \"${this.original}\": ${error}`);\n }\n }\n}\n\nexport class LiteralAtom implements Atom {\n constructor(public readonly value: TypedValue) {}\n eval(): TypedValue[] {\n return [this.value];\n }\n}\n\nexport class SymbolAtom implements Atom {\n constructor(public readonly name: string) {}\n eval(context: TypedValue[]): TypedValue[] {\n if (this.name === '$this') {\n return context;\n }\n return context\n .map((e) => this.#evalValue(e))\n .flat()\n .filter((e) => e?.value !== undefined) as TypedValue[];\n }\n\n #evalValue(typedValue: TypedValue): TypedValue[] | TypedValue | undefined {\n const input = typedValue.value;\n if (!input || typeof input !== 'object') {\n return undefined;\n }\n\n if ('resourceType' in input && (input as Resource).resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n}\n\nexport class UnaryOperatorAtom implements Atom {\n constructor(public readonly child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(this.child.eval(context));\n }\n}\n\nexport class AsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n return functions.ofType(this.left.eval(context), this.right);\n }\n}\n\nexport class ArithemticOperatorAtom implements Atom {\n constructor(\n public readonly left: Atom,\n public readonly right: Atom,\n public readonly impl: (x: number, y: number) => number | boolean\n ) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftEvalResult = this.left.eval(context);\n if (leftEvalResult.length !== 1) {\n return [];\n }\n const rightEvalResult = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return booleanToTypedValue(leftValue.some((e) => e.value === rightValue[0].value));\n }\n}\n\nexport class InAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return booleanToTypedValue(rightValue.some((e) => e.value === leftValue[0].value));\n }\n}\n\nexport class DotAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n return this.right.eval(this.left.eval(context));\n }\n}\n\nexport class UnionAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context);\n const rightResult = this.right.eval(context);\n return removeDuplicates([...leftResult, ...rightResult]);\n }\n}\n\nexport class EqualsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathArrayEquals(leftValue, rightValue);\n }\n}\n\nexport class NotEqualsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathNot(fhirPathArrayEquals(leftValue, rightValue));\n }\n}\n\nexport class EquivalentAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathArrayEquivalent(leftValue, rightValue);\n }\n}\n\nexport class NotEquivalentAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\n return fhirPathNot(fhirPathArrayEquivalent(leftValue, rightValue));\n }\n}\n\nexport class IsAtom implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftValue = this.left.eval(context);\n if (toJsBoolean(leftValue)) {\n return leftValue;\n }\n\n const rightValue = this.right.eval(context);\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 implements Atom {\n constructor(public readonly left: Atom, public readonly right: Atom) {}\n\n eval(context: TypedValue[]): TypedValue[] {\n const leftResult = this.left.eval(context);\n const rightResult = this.right.eval(context);\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[], public readonly impl: FhirPathFunction) {}\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(context, ...this.args);\n }\n}\n\nexport class IndexerAtom implements Atom {\n constructor(public readonly left: Atom, public readonly expr: Atom) {}\n eval(context: TypedValue[]): TypedValue[] {\n const evalResult = this.expr.eval(context);\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);\n if (!(index in leftResult)) {\n return [];\n }\n return [leftResult[index]];\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { Atom, TypedValue } from './atoms';
1
+ import { Atom } from '../fhirlexer';
2
+ import { TypedValue } from '../types';
2
3
  export interface FhirPathFunction {
3
4
  (input: TypedValue[], ...args: Atom[]): TypedValue[];
4
5
  }