@medplum/core 1.0.3 → 1.0.5
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/client.d.ts +1 -0
- package/dist/cjs/fhirlexer/parse.d.ts +18 -2
- package/dist/cjs/fhirmapper/parse.d.ts +2 -2
- package/dist/cjs/fhirmapper/testall.d.ts +1 -0
- package/dist/cjs/fhirpath/atoms.d.ts +28 -53
- package/dist/cjs/fhirpath/parse.d.ts +37 -0
- package/dist/cjs/index.js +724 -683
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +1 -1
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/esm/client.d.ts +1 -0
- package/dist/esm/client.js +26 -25
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/fhirlexer/parse.d.ts +18 -2
- package/dist/esm/fhirlexer/parse.js +33 -7
- package/dist/esm/fhirlexer/parse.js.map +1 -1
- package/dist/esm/fhirlexer/tokenize.js +1 -1
- package/dist/esm/fhirlexer/tokenize.js.map +1 -1
- package/dist/esm/fhirmapper/parse.d.ts +2 -2
- package/dist/esm/fhirmapper/testall.d.ts +1 -0
- package/dist/esm/fhirpath/atoms.d.ts +28 -53
- package/dist/esm/fhirpath/atoms.js +70 -52
- package/dist/esm/fhirpath/atoms.js.map +1 -1
- package/dist/esm/fhirpath/parse.d.ts +37 -0
- package/dist/esm/fhirpath/parse.js +31 -34
- package/dist/esm/fhirpath/parse.js.map +1 -1
- package/dist/esm/fhirpath/tokenize.js +1 -1
- package/dist/esm/fhirpath/tokenize.js.map +1 -1
- package/dist/esm/index.min.js +1 -1
- package/dist/esm/index.min.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/fhirmapper/atoms.d.ts +0 -67
- package/dist/esm/fhirmapper/atoms.d.ts +0 -67
|
@@ -1 +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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"}
|
|
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 abstract class PrefixOperatorAtom implements Atom {\n constructor(public readonly operator: string, public readonly child: Atom) {}\n\n abstract eval(context: TypedValue[]): TypedValue[];\n\n toString(): string {\n return `${this.operator}(${this.child.toString()})`;\n }\n}\n\nexport abstract class InfixOperatorAtom implements Atom {\n constructor(public readonly operator: string, public readonly left: Atom, public readonly right: Atom) {}\n\n abstract eval(context: TypedValue[]): TypedValue[];\n\n toString(): string {\n return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n }\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.getInfixParselet(next) as InfixParselet;\n left = (infix.parse as (parser: Parser, left: Atom, token: Token) => Atom)(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.getInfixParselet(nextToken);\n if (parser) {\n return parser.precedence;\n }\n return Infinity;\n }\n\n consume(expectedId?: string, expectedValue?: string): Token {\n if (!this.#tokens.length) {\n throw Error('Cant consume unknown more tokens.');\n }\n if (expectedId && this.peek()?.id !== expectedId) {\n const actual = this.peek() as Token;\n throw Error(`Expected ${expectedId} but got \"${actual.id}\" at line ${actual.line} column ${actual.column}.`);\n }\n if (expectedValue && this.peek()?.value !== expectedValue) {\n const actual = this.peek() as Token;\n throw Error(\n `Expected \"${expectedValue}\" but got \"${actual.value}\" at line ${actual.line} column ${actual.column}.`\n );\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 getInfixParselet(token: Token): InfixParselet | undefined {\n return this.#infixParselets[token.id === 'Symbol' ? token.value : token.id];\n }\n}\n"],"names":[],"mappings":";;;MAOsB,kBAAkB,CAAA;IACtC,WAA4B,CAAA,QAAgB,EAAkB,KAAW,EAAA;QAA7C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;KAAI;IAI7E,QAAQ,GAAA;AACN,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAA,CAAG,CAAC;KACrD;AACF,CAAA;MAEqB,iBAAiB,CAAA;AACrC,IAAA,WAAA,CAA4B,QAAgB,EAAkB,IAAU,EAAkB,KAAW,EAAA;QAAzE,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAAkB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;KAAI;IAIzG,QAAQ,GAAA;AACN,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;KAC5E;AACF,CAAA;MAWY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AACE,QAAA,8BAAA,CAAA,GAAA,CAAA,IAAA,EAA4D,EAAE,CAAC,CAAA;AAC/D,QAAA,6BAAA,CAAA,GAAA,CAAA,IAAA,EAA0D,EAAE,CAAC,CAAA;KAsC9D;IApCQ,aAAa,CAAC,SAAiB,EAAE,QAAuB,EAAA;AAC7D,QAAA,sBAAA,CAAA,IAAI,EAAgB,6BAAA,EAAA,GAAA,CAAA,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC;KACb;IAEM,cAAc,CAAC,SAAiB,EAAE,QAAwB,EAAA;AAC/D,QAAA,sBAAA,CAAA,IAAI,EAAiB,8BAAA,EAAA,GAAA,CAAA,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AAC5C,QAAA,OAAO,IAAI,CAAC;KACb;AAEM,IAAA,MAAM,CAAC,SAAiB,EAAE,UAAkB,EAAE,OAA4C,EAAA;AAC/F,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YACpC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAA;gBACjB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACjD,gBAAA,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC9B;AACF,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,SAAS,CACd,SAAiB,EACjB,UAAkB,EAClB,OAAwD,EAAA;AAExD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACnC,YAAA,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAA;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACjD,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACpC;YACD,UAAU;AACX,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,SAAS,CAAC,KAAc,EAAA;AAC7B,QAAA,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,sBAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,CAAiB,EAAE,sBAAA,CAAA,IAAI,EAAA,6BAAA,EAAA,GAAA,CAAgB,CAAC,CAAC;KACvE;AACF,CAAA;;MAEY,MAAM,CAAA;AAKjB,IAAA,WAAA,CACE,MAAe,EACf,eAA+C,EAC/C,cAA6C,EAAA;QAP/C,cAAiB,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QACjB,uBAAiD,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QACjD,sBAA+C,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAO7C,QAAA,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAW,MAAM,EAAA,GAAA,CAAA,CAAC;AACtB,QAAA,sBAAA,CAAA,IAAI,EAAA,uBAAA,EAAoB,eAAe,EAAA,GAAA,CAAA,CAAC;AACxC,QAAA,sBAAA,CAAA,IAAI,EAAA,sBAAA,EAAmB,cAAc,EAAA,GAAA,CAAA,CAAC;KACvC;IAED,OAAO,GAAA;AACL,QAAA,OAAO,uBAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KAChC;AAED,IAAA,KAAK,CAAC,QAAgB,EAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,EAAE,MAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,OAAO,IAAI,CAAC;KACb;IAED,eAAe,CAAC,UAAU,GAAG,QAAQ,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,sBAAA,CAAA,IAAI,EAAA,uBAAA,EAAA,GAAA,CAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,KAAK,CACT,CAAA,gBAAA,EAAmB,KAAK,CAAC,KAAK,CAAW,QAAA,EAAA,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,MAAM,CAAA,+BAAA,CAAiC,CAC7G,CAAC;AACH,SAAA;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAErC,QAAA,OAAO,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAkB,CAAC;YAC3D,IAAI,GAAI,KAAK,CAAC,KAA4D,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9F,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,aAAa,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAChD,QAAA,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,UAAU,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,CAAC,UAAmB,EAAE,aAAsB,EAAA;;AACjD,QAAA,IAAI,CAAC,sBAAA,CAAA,IAAI,EAAQ,cAAA,EAAA,GAAA,CAAA,CAAC,MAAM,EAAE;AACxB,YAAA,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,IAAI,UAAU,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,MAAK,UAAU,EAAE;AAChD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAW,CAAC;AACpC,YAAA,MAAM,KAAK,CAAC,CAAA,SAAA,EAAY,UAAU,CAAa,UAAA,EAAA,MAAM,CAAC,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAW,QAAA,EAAA,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC;AAC9G,SAAA;AACD,QAAA,IAAI,aAAa,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAK,aAAa,EAAE;AACzD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAW,CAAC;AACpC,YAAA,MAAM,KAAK,CACT,CAAA,UAAA,EAAa,aAAa,CAAc,WAAA,EAAA,MAAM,CAAC,KAAK,CAAA,UAAA,EAAa,MAAM,CAAC,IAAI,CAAW,QAAA,EAAA,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG,CACxG,CAAC;AACH,SAAA;AACD,QAAA,OAAO,uBAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAQ,CAAC,KAAK,EAAW,CAAC;KACtC;IAED,IAAI,GAAA;QACF,OAAO,sBAAA,CAAA,IAAI,EAAQ,cAAA,EAAA,GAAA,CAAA,CAAC,MAAM,GAAG,CAAC,GAAG,uBAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;KAC9D;IAED,cAAc,GAAA;QACZ,sBAAA,CAAA,IAAI,kBAAW,sBAAA,CAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,MAAA,CAAC;KAC/D;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;QAC3B,OAAO,sBAAA,CAAA,IAAI,EAAgB,sBAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;KAC7E;AACF,CAAA;;;;;"}
|
|
@@ -26,7 +26,7 @@ class Tokenizer {
|
|
|
26
26
|
_Tokenizer_keywords.set(this, void 0);
|
|
27
27
|
_Tokenizer_operators.set(this, void 0);
|
|
28
28
|
_Tokenizer_result.set(this, []);
|
|
29
|
-
_Tokenizer_pos.set(this, { index: 0, line:
|
|
29
|
+
_Tokenizer_pos.set(this, { index: 0, line: 1, column: 0 });
|
|
30
30
|
_Tokenizer_markStack.set(this, []);
|
|
31
31
|
__classPrivateFieldSet(this, _Tokenizer_str, str, "f");
|
|
32
32
|
__classPrivateFieldSet(this, _Tokenizer_keywords, keywords, "f");
|
|
@@ -1 +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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"}
|
|
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: 1, 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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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StructureMap } from '@medplum/fhirtypes';
|
|
2
2
|
/**
|
|
3
3
|
* Parses a FHIR Mapping Language document into an AST.
|
|
4
4
|
* @param input The FHIR Mapping Language document to parse.
|
|
5
5
|
* @returns The AST representing the document.
|
|
6
6
|
*/
|
|
7
|
-
export declare function parseMappingLanguage(input: string):
|
|
7
|
+
export declare function parseMappingLanguage(input: string): StructureMap;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,102 +1,82 @@
|
|
|
1
|
-
import { Atom } from '../fhirlexer';
|
|
1
|
+
import { Atom, InfixOperatorAtom, PrefixOperatorAtom } from '../fhirlexer';
|
|
2
2
|
import { TypedValue } from '../types';
|
|
3
|
-
import { FhirPathFunction } from './functions';
|
|
4
3
|
export declare class FhirPathAtom implements Atom {
|
|
5
4
|
readonly original: string;
|
|
6
5
|
readonly child: Atom;
|
|
7
6
|
constructor(original: string, child: Atom);
|
|
8
7
|
eval(context: TypedValue[]): TypedValue[];
|
|
8
|
+
toString(): string;
|
|
9
9
|
}
|
|
10
10
|
export declare class LiteralAtom implements Atom {
|
|
11
11
|
readonly value: TypedValue;
|
|
12
12
|
constructor(value: TypedValue);
|
|
13
13
|
eval(): TypedValue[];
|
|
14
|
+
toString(): string;
|
|
14
15
|
}
|
|
15
16
|
export declare class SymbolAtom implements Atom {
|
|
16
17
|
#private;
|
|
17
18
|
readonly name: string;
|
|
18
19
|
constructor(name: string);
|
|
19
20
|
eval(context: TypedValue[]): TypedValue[];
|
|
21
|
+
toString(): string;
|
|
20
22
|
}
|
|
21
23
|
export declare class EmptySetAtom implements Atom {
|
|
22
24
|
eval(): [];
|
|
25
|
+
toString(): string;
|
|
23
26
|
}
|
|
24
|
-
export declare class UnaryOperatorAtom
|
|
25
|
-
readonly child: Atom;
|
|
27
|
+
export declare class UnaryOperatorAtom extends PrefixOperatorAtom {
|
|
26
28
|
readonly impl: (x: TypedValue[]) => TypedValue[];
|
|
27
|
-
constructor(child: Atom, impl: (x: TypedValue[]) => TypedValue[]);
|
|
29
|
+
constructor(operator: string, child: Atom, impl: (x: TypedValue[]) => TypedValue[]);
|
|
28
30
|
eval(context: TypedValue[]): TypedValue[];
|
|
31
|
+
toString(): string;
|
|
29
32
|
}
|
|
30
|
-
export declare class AsAtom
|
|
31
|
-
readonly left: Atom;
|
|
32
|
-
readonly right: Atom;
|
|
33
|
+
export declare class AsAtom extends InfixOperatorAtom {
|
|
33
34
|
constructor(left: Atom, right: Atom);
|
|
34
35
|
eval(context: TypedValue[]): TypedValue[];
|
|
35
36
|
}
|
|
36
|
-
export declare class ArithemticOperatorAtom
|
|
37
|
-
readonly left: Atom;
|
|
38
|
-
readonly right: Atom;
|
|
37
|
+
export declare class ArithemticOperatorAtom extends InfixOperatorAtom {
|
|
39
38
|
readonly impl: (x: number, y: number) => number | boolean;
|
|
40
|
-
constructor(left: Atom, right: Atom, impl: (x: number, y: number) => number | boolean);
|
|
39
|
+
constructor(operator: string, left: Atom, right: Atom, impl: (x: number, y: number) => number | boolean);
|
|
41
40
|
eval(context: TypedValue[]): TypedValue[];
|
|
42
41
|
}
|
|
43
|
-
export declare class ConcatAtom
|
|
44
|
-
readonly left: Atom;
|
|
45
|
-
readonly right: Atom;
|
|
42
|
+
export declare class ConcatAtom extends InfixOperatorAtom {
|
|
46
43
|
constructor(left: Atom, right: Atom);
|
|
47
44
|
eval(context: TypedValue[]): TypedValue[];
|
|
48
45
|
}
|
|
49
|
-
export declare class ContainsAtom
|
|
50
|
-
readonly left: Atom;
|
|
51
|
-
readonly right: Atom;
|
|
46
|
+
export declare class ContainsAtom extends InfixOperatorAtom {
|
|
52
47
|
constructor(left: Atom, right: Atom);
|
|
53
48
|
eval(context: TypedValue[]): TypedValue[];
|
|
54
49
|
}
|
|
55
|
-
export declare class InAtom
|
|
56
|
-
readonly left: Atom;
|
|
57
|
-
readonly right: Atom;
|
|
50
|
+
export declare class InAtom extends InfixOperatorAtom {
|
|
58
51
|
constructor(left: Atom, right: Atom);
|
|
59
52
|
eval(context: TypedValue[]): TypedValue[];
|
|
60
53
|
}
|
|
61
|
-
export declare class DotAtom
|
|
62
|
-
readonly left: Atom;
|
|
63
|
-
readonly right: Atom;
|
|
54
|
+
export declare class DotAtom extends InfixOperatorAtom {
|
|
64
55
|
constructor(left: Atom, right: Atom);
|
|
65
56
|
eval(context: TypedValue[]): TypedValue[];
|
|
57
|
+
toString(): string;
|
|
66
58
|
}
|
|
67
|
-
export declare class UnionAtom
|
|
68
|
-
readonly left: Atom;
|
|
69
|
-
readonly right: Atom;
|
|
59
|
+
export declare class UnionAtom extends InfixOperatorAtom {
|
|
70
60
|
constructor(left: Atom, right: Atom);
|
|
71
61
|
eval(context: TypedValue[]): TypedValue[];
|
|
72
62
|
}
|
|
73
|
-
export declare class EqualsAtom
|
|
74
|
-
readonly left: Atom;
|
|
75
|
-
readonly right: Atom;
|
|
63
|
+
export declare class EqualsAtom extends InfixOperatorAtom {
|
|
76
64
|
constructor(left: Atom, right: Atom);
|
|
77
65
|
eval(context: TypedValue[]): TypedValue[];
|
|
78
66
|
}
|
|
79
|
-
export declare class NotEqualsAtom
|
|
80
|
-
readonly left: Atom;
|
|
81
|
-
readonly right: Atom;
|
|
67
|
+
export declare class NotEqualsAtom extends InfixOperatorAtom {
|
|
82
68
|
constructor(left: Atom, right: Atom);
|
|
83
69
|
eval(context: TypedValue[]): TypedValue[];
|
|
84
70
|
}
|
|
85
|
-
export declare class EquivalentAtom
|
|
86
|
-
readonly left: Atom;
|
|
87
|
-
readonly right: Atom;
|
|
71
|
+
export declare class EquivalentAtom extends InfixOperatorAtom {
|
|
88
72
|
constructor(left: Atom, right: Atom);
|
|
89
73
|
eval(context: TypedValue[]): TypedValue[];
|
|
90
74
|
}
|
|
91
|
-
export declare class NotEquivalentAtom
|
|
92
|
-
readonly left: Atom;
|
|
93
|
-
readonly right: Atom;
|
|
75
|
+
export declare class NotEquivalentAtom extends InfixOperatorAtom {
|
|
94
76
|
constructor(left: Atom, right: Atom);
|
|
95
77
|
eval(context: TypedValue[]): TypedValue[];
|
|
96
78
|
}
|
|
97
|
-
export declare class IsAtom
|
|
98
|
-
readonly left: Atom;
|
|
99
|
-
readonly right: Atom;
|
|
79
|
+
export declare class IsAtom extends InfixOperatorAtom {
|
|
100
80
|
constructor(left: Atom, right: Atom);
|
|
101
81
|
eval(context: TypedValue[]): TypedValue[];
|
|
102
82
|
}
|
|
@@ -106,15 +86,11 @@ export declare class IsAtom implements Atom {
|
|
|
106
86
|
* false if either operand evaluates to false,
|
|
107
87
|
* and the empty collection otherwise.
|
|
108
88
|
*/
|
|
109
|
-
export declare class AndAtom
|
|
110
|
-
readonly left: Atom;
|
|
111
|
-
readonly right: Atom;
|
|
89
|
+
export declare class AndAtom extends InfixOperatorAtom {
|
|
112
90
|
constructor(left: Atom, right: Atom);
|
|
113
91
|
eval(context: TypedValue[]): TypedValue[];
|
|
114
92
|
}
|
|
115
|
-
export declare class OrAtom
|
|
116
|
-
readonly left: Atom;
|
|
117
|
-
readonly right: Atom;
|
|
93
|
+
export declare class OrAtom extends InfixOperatorAtom {
|
|
118
94
|
constructor(left: Atom, right: Atom);
|
|
119
95
|
eval(context: TypedValue[]): TypedValue[];
|
|
120
96
|
}
|
|
@@ -124,22 +100,21 @@ export declare class OrAtom implements Atom {
|
|
|
124
100
|
* false if either both operands evaluate to true or both operands evaluate to false,
|
|
125
101
|
* and the empty collection otherwise.
|
|
126
102
|
*/
|
|
127
|
-
export declare class XorAtom
|
|
128
|
-
readonly left: Atom;
|
|
129
|
-
readonly right: Atom;
|
|
103
|
+
export declare class XorAtom extends InfixOperatorAtom {
|
|
130
104
|
constructor(left: Atom, right: Atom);
|
|
131
105
|
eval(context: TypedValue[]): TypedValue[];
|
|
132
106
|
}
|
|
133
107
|
export declare class FunctionAtom implements Atom {
|
|
134
108
|
readonly name: string;
|
|
135
109
|
readonly args: Atom[];
|
|
136
|
-
|
|
137
|
-
constructor(name: string, args: Atom[], impl: FhirPathFunction);
|
|
110
|
+
constructor(name: string, args: Atom[]);
|
|
138
111
|
eval(context: TypedValue[]): TypedValue[];
|
|
112
|
+
toString(): string;
|
|
139
113
|
}
|
|
140
114
|
export declare class IndexerAtom implements Atom {
|
|
141
115
|
readonly left: Atom;
|
|
142
116
|
readonly expr: Atom;
|
|
143
117
|
constructor(left: Atom, expr: Atom);
|
|
144
118
|
eval(context: TypedValue[]): TypedValue[];
|
|
119
|
+
toString(): string;
|
|
145
120
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.js';
|
|
2
|
+
import { PrefixOperatorAtom, InfixOperatorAtom } from '../fhirlexer/parse.js';
|
|
3
|
+
import '../fhirlexer/tokenize.js';
|
|
2
4
|
import { PropertyType } from '../types.js';
|
|
3
5
|
import { functions } from './functions.js';
|
|
4
6
|
import { isQuantity, booleanToTypedValue, toTypedValue, removeDuplicates, fhirPathArrayEquals, fhirPathNot, fhirPathArrayEquivalent, fhirPathIs, toJsBoolean, getTypedPropertyValue } from './utils.js';
|
|
@@ -22,6 +24,9 @@ class FhirPathAtom {
|
|
|
22
24
|
throw new Error(`FhirPathError on "${this.original}": ${error}`);
|
|
23
25
|
}
|
|
24
26
|
}
|
|
27
|
+
toString() {
|
|
28
|
+
return this.child.toString();
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
31
|
class LiteralAtom {
|
|
27
32
|
constructor(value) {
|
|
@@ -30,6 +35,13 @@ class LiteralAtom {
|
|
|
30
35
|
eval() {
|
|
31
36
|
return [this.value];
|
|
32
37
|
}
|
|
38
|
+
toString() {
|
|
39
|
+
const value = this.value.value;
|
|
40
|
+
if (typeof value === 'string') {
|
|
41
|
+
return `'${value}'`;
|
|
42
|
+
}
|
|
43
|
+
return value.toString();
|
|
44
|
+
}
|
|
33
45
|
}
|
|
34
46
|
class SymbolAtom {
|
|
35
47
|
constructor(name) {
|
|
@@ -45,6 +57,9 @@ class SymbolAtom {
|
|
|
45
57
|
.flat()
|
|
46
58
|
.filter((e) => (e === null || e === void 0 ? void 0 : e.value) !== undefined);
|
|
47
59
|
}
|
|
60
|
+
toString() {
|
|
61
|
+
return this.name;
|
|
62
|
+
}
|
|
48
63
|
}
|
|
49
64
|
_SymbolAtom_instances = new WeakSet(), _SymbolAtom_evalValue = function _SymbolAtom_evalValue(typedValue) {
|
|
50
65
|
const input = typedValue.value;
|
|
@@ -60,29 +75,33 @@ class EmptySetAtom {
|
|
|
60
75
|
eval() {
|
|
61
76
|
return [];
|
|
62
77
|
}
|
|
78
|
+
toString() {
|
|
79
|
+
return '{}';
|
|
80
|
+
}
|
|
63
81
|
}
|
|
64
|
-
class UnaryOperatorAtom {
|
|
65
|
-
constructor(child, impl) {
|
|
66
|
-
|
|
82
|
+
class UnaryOperatorAtom extends PrefixOperatorAtom {
|
|
83
|
+
constructor(operator, child, impl) {
|
|
84
|
+
super(operator, child);
|
|
67
85
|
this.impl = impl;
|
|
68
86
|
}
|
|
69
87
|
eval(context) {
|
|
70
88
|
return this.impl(this.child.eval(context));
|
|
71
89
|
}
|
|
90
|
+
toString() {
|
|
91
|
+
return this.child.toString();
|
|
92
|
+
}
|
|
72
93
|
}
|
|
73
|
-
class AsAtom {
|
|
94
|
+
class AsAtom extends InfixOperatorAtom {
|
|
74
95
|
constructor(left, right) {
|
|
75
|
-
|
|
76
|
-
this.right = right;
|
|
96
|
+
super('as', left, right);
|
|
77
97
|
}
|
|
78
98
|
eval(context) {
|
|
79
99
|
return functions.ofType(this.left.eval(context), this.right);
|
|
80
100
|
}
|
|
81
101
|
}
|
|
82
|
-
class ArithemticOperatorAtom {
|
|
83
|
-
constructor(left, right, impl) {
|
|
84
|
-
|
|
85
|
-
this.right = right;
|
|
102
|
+
class ArithemticOperatorAtom extends InfixOperatorAtom {
|
|
103
|
+
constructor(operator, left, right, impl) {
|
|
104
|
+
super(operator, left, right);
|
|
86
105
|
this.impl = impl;
|
|
87
106
|
}
|
|
88
107
|
eval(context) {
|
|
@@ -110,10 +129,9 @@ class ArithemticOperatorAtom {
|
|
|
110
129
|
}
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
|
-
class ConcatAtom {
|
|
132
|
+
class ConcatAtom extends InfixOperatorAtom {
|
|
114
133
|
constructor(left, right) {
|
|
115
|
-
|
|
116
|
-
this.right = right;
|
|
134
|
+
super('&', left, right);
|
|
117
135
|
}
|
|
118
136
|
eval(context) {
|
|
119
137
|
const leftValue = this.left.eval(context);
|
|
@@ -125,10 +143,9 @@ class ConcatAtom {
|
|
|
125
143
|
return result;
|
|
126
144
|
}
|
|
127
145
|
}
|
|
128
|
-
class ContainsAtom {
|
|
146
|
+
class ContainsAtom extends InfixOperatorAtom {
|
|
129
147
|
constructor(left, right) {
|
|
130
|
-
|
|
131
|
-
this.right = right;
|
|
148
|
+
super('contains', left, right);
|
|
132
149
|
}
|
|
133
150
|
eval(context) {
|
|
134
151
|
const leftValue = this.left.eval(context);
|
|
@@ -136,10 +153,9 @@ class ContainsAtom {
|
|
|
136
153
|
return booleanToTypedValue(leftValue.some((e) => e.value === rightValue[0].value));
|
|
137
154
|
}
|
|
138
155
|
}
|
|
139
|
-
class InAtom {
|
|
156
|
+
class InAtom extends InfixOperatorAtom {
|
|
140
157
|
constructor(left, right) {
|
|
141
|
-
|
|
142
|
-
this.right = right;
|
|
158
|
+
super('in', left, right);
|
|
143
159
|
}
|
|
144
160
|
eval(context) {
|
|
145
161
|
const leftValue = this.left.eval(context);
|
|
@@ -147,19 +163,20 @@ class InAtom {
|
|
|
147
163
|
return booleanToTypedValue(rightValue.some((e) => e.value === leftValue[0].value));
|
|
148
164
|
}
|
|
149
165
|
}
|
|
150
|
-
class DotAtom {
|
|
166
|
+
class DotAtom extends InfixOperatorAtom {
|
|
151
167
|
constructor(left, right) {
|
|
152
|
-
|
|
153
|
-
this.right = right;
|
|
168
|
+
super('.', left, right);
|
|
154
169
|
}
|
|
155
170
|
eval(context) {
|
|
156
171
|
return this.right.eval(this.left.eval(context));
|
|
157
172
|
}
|
|
173
|
+
toString() {
|
|
174
|
+
return `${this.left.toString()}.${this.right.toString()}`;
|
|
175
|
+
}
|
|
158
176
|
}
|
|
159
|
-
class UnionAtom {
|
|
177
|
+
class UnionAtom extends InfixOperatorAtom {
|
|
160
178
|
constructor(left, right) {
|
|
161
|
-
|
|
162
|
-
this.right = right;
|
|
179
|
+
super('|', left, right);
|
|
163
180
|
}
|
|
164
181
|
eval(context) {
|
|
165
182
|
const leftResult = this.left.eval(context);
|
|
@@ -167,10 +184,9 @@ class UnionAtom {
|
|
|
167
184
|
return removeDuplicates([...leftResult, ...rightResult]);
|
|
168
185
|
}
|
|
169
186
|
}
|
|
170
|
-
class EqualsAtom {
|
|
187
|
+
class EqualsAtom extends InfixOperatorAtom {
|
|
171
188
|
constructor(left, right) {
|
|
172
|
-
|
|
173
|
-
this.right = right;
|
|
189
|
+
super('=', left, right);
|
|
174
190
|
}
|
|
175
191
|
eval(context) {
|
|
176
192
|
const leftValue = this.left.eval(context);
|
|
@@ -178,10 +194,9 @@ class EqualsAtom {
|
|
|
178
194
|
return fhirPathArrayEquals(leftValue, rightValue);
|
|
179
195
|
}
|
|
180
196
|
}
|
|
181
|
-
class NotEqualsAtom {
|
|
197
|
+
class NotEqualsAtom extends InfixOperatorAtom {
|
|
182
198
|
constructor(left, right) {
|
|
183
|
-
|
|
184
|
-
this.right = right;
|
|
199
|
+
super('!=', left, right);
|
|
185
200
|
}
|
|
186
201
|
eval(context) {
|
|
187
202
|
const leftValue = this.left.eval(context);
|
|
@@ -189,10 +204,9 @@ class NotEqualsAtom {
|
|
|
189
204
|
return fhirPathNot(fhirPathArrayEquals(leftValue, rightValue));
|
|
190
205
|
}
|
|
191
206
|
}
|
|
192
|
-
class EquivalentAtom {
|
|
207
|
+
class EquivalentAtom extends InfixOperatorAtom {
|
|
193
208
|
constructor(left, right) {
|
|
194
|
-
|
|
195
|
-
this.right = right;
|
|
209
|
+
super('~', left, right);
|
|
196
210
|
}
|
|
197
211
|
eval(context) {
|
|
198
212
|
const leftValue = this.left.eval(context);
|
|
@@ -200,10 +214,9 @@ class EquivalentAtom {
|
|
|
200
214
|
return fhirPathArrayEquivalent(leftValue, rightValue);
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
|
-
class NotEquivalentAtom {
|
|
217
|
+
class NotEquivalentAtom extends InfixOperatorAtom {
|
|
204
218
|
constructor(left, right) {
|
|
205
|
-
|
|
206
|
-
this.right = right;
|
|
219
|
+
super('!~', left, right);
|
|
207
220
|
}
|
|
208
221
|
eval(context) {
|
|
209
222
|
const leftValue = this.left.eval(context);
|
|
@@ -211,10 +224,9 @@ class NotEquivalentAtom {
|
|
|
211
224
|
return fhirPathNot(fhirPathArrayEquivalent(leftValue, rightValue));
|
|
212
225
|
}
|
|
213
226
|
}
|
|
214
|
-
class IsAtom {
|
|
227
|
+
class IsAtom extends InfixOperatorAtom {
|
|
215
228
|
constructor(left, right) {
|
|
216
|
-
|
|
217
|
-
this.right = right;
|
|
229
|
+
super('is', left, right);
|
|
218
230
|
}
|
|
219
231
|
eval(context) {
|
|
220
232
|
const leftValue = this.left.eval(context);
|
|
@@ -231,10 +243,9 @@ class IsAtom {
|
|
|
231
243
|
* false if either operand evaluates to false,
|
|
232
244
|
* and the empty collection otherwise.
|
|
233
245
|
*/
|
|
234
|
-
class AndAtom {
|
|
246
|
+
class AndAtom extends InfixOperatorAtom {
|
|
235
247
|
constructor(left, right) {
|
|
236
|
-
|
|
237
|
-
this.right = right;
|
|
248
|
+
super('and', left, right);
|
|
238
249
|
}
|
|
239
250
|
eval(context) {
|
|
240
251
|
var _a, _b, _c, _d;
|
|
@@ -249,10 +260,9 @@ class AndAtom {
|
|
|
249
260
|
return [];
|
|
250
261
|
}
|
|
251
262
|
}
|
|
252
|
-
class OrAtom {
|
|
263
|
+
class OrAtom extends InfixOperatorAtom {
|
|
253
264
|
constructor(left, right) {
|
|
254
|
-
|
|
255
|
-
this.right = right;
|
|
265
|
+
super('or', left, right);
|
|
256
266
|
}
|
|
257
267
|
eval(context) {
|
|
258
268
|
const leftValue = this.left.eval(context);
|
|
@@ -272,10 +282,9 @@ class OrAtom {
|
|
|
272
282
|
* false if either both operands evaluate to true or both operands evaluate to false,
|
|
273
283
|
* and the empty collection otherwise.
|
|
274
284
|
*/
|
|
275
|
-
class XorAtom {
|
|
285
|
+
class XorAtom extends InfixOperatorAtom {
|
|
276
286
|
constructor(left, right) {
|
|
277
|
-
|
|
278
|
-
this.right = right;
|
|
287
|
+
super('xor', left, right);
|
|
279
288
|
}
|
|
280
289
|
eval(context) {
|
|
281
290
|
const leftResult = this.left.eval(context);
|
|
@@ -295,13 +304,19 @@ class XorAtom {
|
|
|
295
304
|
}
|
|
296
305
|
}
|
|
297
306
|
class FunctionAtom {
|
|
298
|
-
constructor(name, args
|
|
307
|
+
constructor(name, args) {
|
|
299
308
|
this.name = name;
|
|
300
309
|
this.args = args;
|
|
301
|
-
this.impl = impl;
|
|
302
310
|
}
|
|
303
311
|
eval(context) {
|
|
304
|
-
|
|
312
|
+
const impl = functions[this.name];
|
|
313
|
+
if (!impl) {
|
|
314
|
+
throw new Error('Unrecognized function: ' + this.name);
|
|
315
|
+
}
|
|
316
|
+
return impl(context, ...this.args);
|
|
317
|
+
}
|
|
318
|
+
toString() {
|
|
319
|
+
return `${this.name}(${this.args.map((arg) => arg.toString()).join(', ')})`;
|
|
305
320
|
}
|
|
306
321
|
}
|
|
307
322
|
class IndexerAtom {
|
|
@@ -324,6 +339,9 @@ class IndexerAtom {
|
|
|
324
339
|
}
|
|
325
340
|
return [leftResult[index]];
|
|
326
341
|
}
|
|
342
|
+
toString() {
|
|
343
|
+
return `${this.left.toString()}[${this.expr.toString()}]`;
|
|
344
|
+
}
|
|
327
345
|
}
|
|
328
346
|
|
|
329
347
|
export { AndAtom, ArithemticOperatorAtom, AsAtom, ConcatAtom, ContainsAtom, DotAtom, EmptySetAtom, EqualsAtom, EquivalentAtom, FhirPathAtom, FunctionAtom, InAtom, IndexerAtom, IsAtom, LiteralAtom, NotEqualsAtom, NotEquivalentAtom, OrAtom, SymbolAtom, UnaryOperatorAtom, UnionAtom, XorAtom };
|