@medplum/core 2.0.11 → 2.0.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"parse.mjs","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;AAC1B,QAAA,IAAI,KAAK,EAAE,EAAE,KAAK,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;QACD,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,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;QACD,IAAI,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,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;;;;;"}
1
+ {"version":3,"file":"parse.mjs","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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.mjs","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 interface TokenizerOptions {\n dateTimeLiterals?: boolean;\n symbolRegex?: RegExp;\n}\n\nexport class Tokenizer {\n readonly #str: string;\n readonly #keywords: string[];\n readonly #operators: string[];\n readonly #dateTimeLiterals: boolean;\n readonly #symbolRegex: RegExp;\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[], options?: TokenizerOptions) {\n this.#str = str;\n this.#keywords = keywords;\n this.#operators = operators;\n this.#dateTimeLiterals = !!options?.dateTimeLiterals;\n this.#symbolRegex = options?.symbolRegex ?? /[$\\w]/;\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() === '-' && this.#dateTimeLiterals) {\n // Rewind to one character before the start, and then treat as dateTime literal.\n this.#pos.index = start - 1;\n return this.#consumeDateTime();\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(this.#symbolRegex));\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":";;;AAWA,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,aAAa;IACb,cAAc;CACf,CAAC;MAOW,SAAS,CAAA;AAUpB,IAAA,WAAA,CAAY,GAAW,EAAE,QAAkB,EAAE,SAAmB,EAAE,OAA0B,EAAA;;QAT5F,cAAsB,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QACtB,mBAA6B,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QAC7B,oBAA8B,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QAC9B,2BAAoC,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;QACpC,sBAA8B,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC9B,QAAA,iBAAA,CAAA,GAAA,CAAA,IAAA,EAA4B,EAAE,CAAC,CAAA;AAC/B,QAAA,cAAA,CAAA,GAAA,CAAA,IAAA,EAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AACzD,QAAA,oBAAA,CAAA,GAAA,CAAA,IAAA,EAAgC,EAAE,CAAC,CAAA;AAGjC,QAAA,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAQ,GAAG,EAAA,GAAA,CAAA,CAAC;AAChB,QAAA,sBAAA,CAAA,IAAI,EAAA,mBAAA,EAAa,QAAQ,EAAA,GAAA,CAAA,CAAC;AAC1B,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAc,SAAS,EAAA,GAAA,CAAA,CAAC;QAC5B,sBAAA,CAAA,IAAI,+BAAqB,CAAC,CAAC,OAAO,EAAE,gBAAgB,MAAA,CAAC;QACrD,sBAAA,CAAA,IAAI,0BAAgB,OAAO,EAAE,WAAW,IAAI,OAAO,MAAA,CAAC;KACrD;IAED,QAAQ,GAAA;QACN,OAAO,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,MAAM,EAAE;YACzC,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,CAAgB,CAAC;AACnC,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,sBAAA,CAAA,IAAI,EAAQ,iBAAA,EAAA,GAAA,CAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;QAED,OAAO,sBAAA,CAAA,IAAI,EAAA,iBAAA,EAAA,GAAA,CAAQ,CAAC;KACrB;AAuOF,CAAA;;AApOG,IAAA,OAAO,sBAAA,CAAA,IAAI,EAAQ,iBAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,EAAA,oBAAA,GAAA,SAAA,oBAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;IACb,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,CAAgB,CAAC;AACnC,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,gBAAA,CAAO,CAAX,IAAA,CAAA,IAAI,CAAS,CAAC;AACd,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,EAAA,uBAAA,GAAA,SAAA,uBAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,4BAAA,CAAmB,CAAvB,IAAA,CAAA,IAAI,CAAqB,CAAC;IAE1B,MAAM,CAAC,GAAG,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;IACvB,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AAED,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;IAEb,MAAM,IAAI,GAAG,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;AAE1B,IAAA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;AAC7B,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kCAAA,CAAyB,CAA7B,IAAA,CAAA,IAAI,CAA2B,CAAC;AACxC,KAAA;AAED,IAAA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;AAC7B,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,mCAAA,CAA0B,CAA9B,IAAA,CAAA,IAAI,CAA4B,CAAC;AACzC,KAAA;AAED,IAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;QAC1B,OAAO,sBAAA,CAAA,IAAI,EAAe,oBAAA,EAAA,GAAA,EAAA,wBAAA,CAAA,CAAA,IAAA,CAAnB,IAAI,EAAgB,CAAC,CAAC,CAAC;AAC/B,KAAA;IAED,IAAI,CAAC,KAAK,GAAG,EAAE;AACb,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,gCAAA,CAAuB,CAA3B,IAAA,CAAA,IAAI,CAAyB,CAAC;AACtC,KAAA;IAED,IAAI,CAAC,KAAK,GAAG,EAAE;AACb,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,0BAAA,CAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC;AAChC,KAAA;AAED,IAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,wBAAA,CAAe,CAAnB,IAAA,CAAA,IAAI,CAAiB,CAAC;AAC9B,KAAA;AAED,IAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACjB,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,wBAAA,CAAe,CAAnB,IAAA,CAAA,IAAI,CAAiB,CAAC;AAC9B,KAAA;IAED,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACjC,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,wBAAA,CAAe,CAAnB,IAAA,CAAA,IAAI,CAAiB,CAAC;AAC9B,KAAA;AAED,IAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,0BAAA,CAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC;AACjC,CAAC,EAAA,4BAAA,GAAA,SAAA,4BAAA,GAAA;IAGC,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC,EAAA,kCAAA,GAAA,SAAA,kCAAA,GAAA;AAGC,IAAA,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC;IAC9B,sBAAA,CAAA,IAAI,EAAc,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAA,CAAA,IAAA,CAAlB,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,KAAK,GAAG,CAAC,CAAC;AACvE,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;IAChB,OAAO,sBAAA,CAAA,IAAI,EAAY,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,EAAa,SAAS,EAAE,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAA,CAAA,IAAI,sBAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC,EAAA,mCAAA,GAAA,SAAA,mCAAA,GAAA;IAGC,OAAO,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,EACT,SAAS,EACT,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,IAAI,CAAC,CAChD,CAAC;AACJ,CAAC,+DAEc,OAAe,EAAA;AAC5B,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,IAAA,MAAM,MAAM,GAAG,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,MAAhB,IAAI,EACjB,QAAQ,EACR,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAc,MAAlB,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,KAAK,IAAI,IAAI,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,MAAV,IAAI,CAAQ,KAAK,OAAO,CAAC,CAC5E,CAAC;AACF,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,EAAA,gCAAA,GAAA,SAAA,gCAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,IAAA,MAAM,MAAM,GAAG,sBAAA,CAAA,IAAI,EAAY,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,EACjB,QAAQ,EACR,sBAAA,CAAA,IAAI,EAAc,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAA,CAAA,IAAA,CAAlB,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,KAAK,GAAG,CAAC,CAC/C,CAAC;AACF,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,EAAA,0BAAA,GAAA,SAAA,0BAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAS,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAA,CAAA,IAAA,CAAb,IAAI,CAAW,CAAC;AAEhB,IAAA,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC;IAC9B,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,EAAE;AACxB,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;QAChB,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAEtD,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACpD,YAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;YAChB,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,SAAA;QAED,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,EAAE;AACxB,YAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AACjB,SAAA;AAAM,aAAA,IAAI,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,EAAE;AACvD,YAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;YAChB,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,SAAA;AACF,KAAA;IAED,OAAO,sBAAA,CAAA,IAAI,EAAY,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,EAAa,UAAU,EAAE,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAA,CAAA,IAAI,sBAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,CAAC,EAAA,wBAAA,GAAA,SAAA,wBAAA,GAAA;AAGC,IAAA,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC;IAC9B,IAAI,EAAE,GAAG,QAAQ,CAAC;IAClB,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACpD,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;QAChB,sBAAA,CAAA,IAAI,qDAAc,CAAlB,IAAA,CAAA,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,KAAA;AAED,IAAA,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAA,2BAAA,EAAA,GAAA,CAAkB,EAAE;;QAElD,sBAAA,CAAA,IAAI,sBAAK,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AAC5B,QAAA,OAAO,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,0BAAA,CAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC;AAChC,KAAA;IAED,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,GAAG,EAAE;QACxB,IAAI,WAAW,CAAC,sBAAA,CAAA,IAAI,kDAAW,CAAf,IAAA,CAAA,IAAI,CAAa,CAAC,EAAE;YAClC,EAAE,GAAG,UAAU,CAAC;AAChB,YAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAc,CAAlB,IAAA,CAAA,IAAI,CAAgB,CAAC;AACtB,SAAA;AACF,KAAA;IAED,OAAO,sBAAA,CAAA,IAAI,EAAY,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,EAAa,EAAE,EAAE,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAA,CAAA,IAAI,sBAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC,EAAA,wBAAA,GAAA,SAAA,wBAAA,GAAA;IAGC,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,uBAAA,CAAc,MAAlB,IAAI,EAAe,MAAM,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,CAAC,KAAK,CAAC,sBAAA,CAAA,IAAI,EAAA,sBAAA,EAAA,GAAA,CAAa,CAAC,CAAC,CAAC;AAC9E,IAAA,IAAI,uBAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,oBAAA,CAAW,MAAf,IAAI,CAAa,EAAE,KAAK,KAAK,GAAG,IAAI,sBAAA,CAAA,IAAI,EAAU,mBAAA,EAAA,GAAA,CAAA,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACtE,OAAO,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,EAAa,KAAK,EAAE,KAAK,CAAC,CAAC;AACvC,KAAA;IACD,OAAO,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,EAAa,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC,EAAA,0BAAA,GAAA,SAAA,0BAAA,GAAA;IAGC,MAAM,CAAC,GAAG,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;IACvB,MAAM,IAAI,GAAG,sBAAA,CAAA,IAAI,6CAAM,CAAV,IAAA,CAAA,IAAI,CAAQ,CAAC;AAC1B,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;IAE3B,IAAI,sBAAA,CAAA,IAAI,EAAW,oBAAA,EAAA,GAAA,CAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACvC,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AAChB,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;QAChB,OAAO,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,EAAa,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,KAAA;AAED,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;IAChB,OAAO,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,qBAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,EAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC,6DAEa,SAAwB,EAAA;AACpC,IAAA,MAAM,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC;AAE9B,IAAA,OAAO,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE;AACxD,QAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,EAAA,kBAAA,CAAS,CAAb,IAAA,CAAA,IAAI,CAAW,CAAC;AACjB,KAAA;AAED,IAAA,OAAO,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC,EAAA,eAAA,GAAA,SAAA,eAAA,GAAA;IAGC,OAAO,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,EAAA,eAAA,GAAA,SAAA,eAAA,GAAA;AAGC,IAAA,OAAO,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,uBAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC,EAAA,eAAA,GAAA,SAAA,eAAA,GAAA;AAGC,IAAA,OAAO,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,uBAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC,EAAA,eAAA,GAAA,SAAA,eAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAA,oBAAA,EAAA,GAAA,CAAW,CAAC,IAAI,CAAC,EAAE,GAAG,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,EAAE,CAAC,CAAC;AACzC,CAAC,EAAA,gBAAA,GAAA,SAAA,gBAAA,GAAA;IAGC,MAAM,IAAI,GAAG,sBAAA,CAAA,IAAI,4BAAW,CAAC,GAAG,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxC,KAAA;IACD,sBAAA,CAAA,IAAI,sBAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,sBAAA,CAAA,IAAI,sBAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,sBAAA,CAAA,IAAI,sBAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACjC,CAAC,EAAA,kBAAA,GAAA,SAAA,kBAAA,GAAA;AAGC,IAAA,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,KAAK,EAAE,CAAC;IAClB,IAAI,sBAAA,CAAA,IAAI,EAAM,oBAAA,EAAA,GAAA,EAAA,eAAA,CAAA,CAAA,IAAA,CAAV,IAAI,CAAQ,KAAK,IAAI,EAAE;AACzB,QAAA,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,IAAI,EAAE,CAAC;AACjB,QAAA,sBAAA,CAAA,IAAI,EAAK,cAAA,EAAA,GAAA,CAAA,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,KAAA;AAAM,SAAA;AACL,QAAA,sBAAA,CAAA,IAAI,EAAA,cAAA,EAAA,GAAA,CAAK,CAAC,MAAM,EAAE,CAAC;AACpB,KAAA;AACH,CAAC,EAAA,qBAAA,GAAA,SAAA,qBAAA,CAEW,EAAU,EAAE,KAAa,EAAA;IACnC,MAAM,IAAI,GAAG,sBAAA,CAAA,IAAI,4BAAW,CAAC,GAAG,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,KAAA;IACD,OAAO;QACL,EAAE;QACF,KAAK;AACL,QAAA,GAAG,IAAI;KACR,CAAC;AACJ,CAAC,CAAA;AAGH,SAAS,WAAW,CAAC,KAAwB,EAAA;AAC3C,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACjE,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACF,KAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACf;;;;"}
1
+ {"version":3,"file":"tokenize.mjs","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 interface TokenizerOptions {\n dateTimeLiterals?: boolean;\n symbolRegex?: RegExp;\n}\n\nexport class Tokenizer {\n readonly #str: string;\n readonly #keywords: string[];\n readonly #operators: string[];\n readonly #dateTimeLiterals: boolean;\n readonly #symbolRegex: RegExp;\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[], options?: TokenizerOptions) {\n this.#str = str;\n this.#keywords = keywords;\n this.#operators = operators;\n this.#dateTimeLiterals = !!options?.dateTimeLiterals;\n this.#symbolRegex = options?.symbolRegex ?? /[$\\w]/;\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() === '-' && this.#dateTimeLiterals) {\n // Rewind to one character before the start, and then treat as dateTime literal.\n this.#pos.index = start - 1;\n return this.#consumeDateTime();\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(this.#symbolRegex));\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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"}
@@ -10,8 +10,8 @@ import { tokenize } from './tokenize.mjs';
10
10
  var _StructureMapParser_instances, _StructureMapParser_parseUses, _StructureMapParser_parseImport, _StructureMapParser_parseGroup, _StructureMapParser_parseParameters, _StructureMapParser_parseParameter, _StructureMapParser_parseRules, _StructureMapParser_parseRule, _StructureMapParser_parseRuleSources, _StructureMapParser_parseRuleSource, _StructureMapParser_parseRuleTargets, _StructureMapParser_parseRuleTarget, _StructureMapParser_parseRuleTargetTransform, _StructureMapParser_parseRuleTargetSymbol, _StructureMapParser_parseRuleTargetFunction, _StructureMapParser_parseRuleTargetLiteral, _StructureMapParser_parseRuleContext, _StructureMapParser_parseRuleDependents, _StructureMapParser_parseConceptMap;
11
11
  class StructureMapParser {
12
12
  constructor(parser) {
13
- this.parser = parser;
14
13
  _StructureMapParser_instances.add(this);
14
+ this.parser = parser;
15
15
  this.structureMap = { resourceType: 'StructureMap' };
16
16
  }
17
17
  parse() {
@@ -1 +1 @@
1
- {"version":3,"file":"parse.mjs","sources":["../../../src/fhirmapper/parse.ts"],"sourcesContent":["import {\n StructureMap,\n StructureMapGroup,\n StructureMapGroupInput,\n StructureMapGroupRule,\n StructureMapGroupRuleDependent,\n StructureMapGroupRuleSource,\n StructureMapGroupRuleTarget,\n StructureMapStructure,\n} from '@medplum/fhirtypes';\nimport { Parser } from '../fhirlexer';\nimport { FunctionAtom, initFhirPathParserBuilder, LiteralAtom, OperatorPrecedence, SymbolAtom } from '../fhirpath';\nimport { tokenize } from './tokenize';\n\nclass StructureMapParser {\n readonly structureMap: StructureMap = { resourceType: 'StructureMap' };\n constructor(readonly parser: Parser) {}\n\n parse(): StructureMap {\n // 'map' url '=' identifier\n // map \"http://hl7.org/fhir/StructureMap/tutorial\" = tutorial\n this.parser.consume('Symbol', 'map');\n this.structureMap.url = this.parser.consume('String').value;\n this.parser.consume('=');\n this.structureMap.name = this.parser.consume().value;\n while (this.parser.hasMore()) {\n const next = this.parser.peek()?.value;\n switch (next) {\n case 'uses':\n this.#parseUses();\n break;\n case 'imports':\n this.#parseImport();\n break;\n case 'group':\n this.#parseGroup();\n break;\n case 'conceptmap':\n this.#parseConceptMap();\n break;\n default:\n throw new Error(`Unexpected token: ${next}`);\n }\n }\n return this.structureMap;\n }\n\n #parseUses(): void {\n // 'uses' url structureAlias? 'as' modelMode\n // uses \"http://hl7.org/fhir/StructureDefinition/tutorial-left\" as source\n this.parser.consume('Symbol', 'uses');\n const result: StructureMapStructure = {};\n result.url = this.parser.consume('String').value;\n if (this.parser.peek()?.value === 'alias') {\n this.parser.consume('Symbol', 'alias');\n result.alias = this.parser.consume('Symbol').value;\n }\n this.parser.consume('Symbol', 'as');\n result.mode = this.parser.consume().value as 'source' | 'queried' | 'target' | 'produced';\n if (!this.structureMap.structure) {\n this.structureMap.structure = [];\n }\n this.structureMap.structure.push(result);\n }\n\n #parseImport(): void {\n this.parser.consume('Symbol', 'imports');\n if (!this.structureMap.import) {\n this.structureMap.import = [];\n }\n this.structureMap.import.push(this.parser.consume('String').value);\n }\n\n #parseGroup(): void {\n // 'group' identifier parameters extends? typeMode? rules\n // group tutorial(source src : TLeft, target tgt : TRight) {\n const result: StructureMapGroup = {};\n this.parser.consume('Symbol', 'group');\n result.name = this.parser.consume('Symbol').value;\n result.input = this.#parseParameters();\n\n if (this.parser.peek()?.value === 'extends') {\n this.parser.consume('Symbol', 'extends');\n result.extends = this.parser.consume('Symbol').value;\n }\n\n if (this.parser.peek()?.value === '<<') {\n this.parser.consume('<<');\n result.typeMode = this.parser.consume().value as 'none' | 'types' | 'type-and-types';\n if (this.parser.peek()?.value === '+') {\n this.parser.consume('+');\n result.typeMode = 'type-and-types';\n }\n this.parser.consume('>>');\n } else {\n result.typeMode = 'none';\n }\n\n result.rule = this.#parseRules();\n\n if (!this.structureMap.group) {\n this.structureMap.group = [];\n }\n this.structureMap.group.push(result);\n }\n\n #parseParameters(): StructureMapGroupInput[] {\n const parameters: StructureMapGroupInput[] = [];\n this.parser.consume('(');\n while (this.parser.hasMore() && this.parser.peek()?.value !== ')') {\n parameters.push(this.#parseParameter());\n if (this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n }\n }\n this.parser.consume(')');\n return parameters;\n }\n\n #parseParameter(): StructureMapGroupInput {\n // inputMode identifier type?\n // ':' identifier\n // source src : TLeft\n const result: StructureMapGroupInput = {};\n result.mode = this.parser.consume().value as 'source' | 'target';\n result.name = this.parser.consume('Symbol').value;\n if (this.parser.peek()?.value === ':') {\n this.parser.consume(':');\n result.type = this.parser.consume('Symbol').value;\n }\n return result;\n }\n\n #parseRules(): StructureMapGroupRule[] {\n const rules = [];\n this.parser.consume('{');\n while (this.parser.hasMore() && this.parser.peek()?.value !== '}') {\n rules.push(this.#parseRule());\n }\n this.parser.consume('}');\n return rules;\n }\n\n #parseRule(): StructureMapGroupRule {\n const result: StructureMapGroupRule = {\n source: this.#parseRuleSources(),\n };\n\n if (this.parser.peek()?.value === '->') {\n this.parser.consume('->');\n result.target = this.#parseRuleTargets();\n }\n\n if (this.parser.peek()?.value === 'then') {\n this.parser.consume('Symbol', 'then');\n if (this.parser.peek()?.id === '{') {\n result.rule = this.#parseRules();\n } else {\n result.dependent = this.#parseRuleDependents();\n }\n }\n\n if (this.parser.peek()?.id === 'String') {\n result.name = this.parser.consume().value;\n } else {\n result.name = result.source?.[0]?.element;\n }\n\n this.parser.consume(';');\n return result;\n }\n\n #parseRuleSources(): StructureMapGroupRuleSource[] {\n const sources = [this.#parseRuleSource()];\n while (this.parser.hasMore() && this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n sources.push(this.#parseRuleSource());\n }\n return sources;\n }\n\n #parseRuleSource(): StructureMapGroupRuleSource {\n const result: StructureMapGroupRuleSource = {};\n\n const context = this.#parseRuleContext();\n if (context.includes('.')) {\n const parts = context.split('.');\n result.context = parts[0];\n result.element = parts[1];\n } else {\n result.context = context;\n }\n\n if (this.parser.hasMore() && this.parser.peek()?.value === ':') {\n this.parser.consume(':');\n result.type = this.parser.consume().value;\n }\n\n if (this.parser.hasMore() && this.parser.peek()?.value === 'default') {\n this.parser.consume('default');\n this.parser.consumeAndParse();\n }\n\n if (\n this.parser.peek()?.value === 'first' ||\n this.parser.peek()?.value === 'not_first' ||\n this.parser.peek()?.value === 'last' ||\n this.parser.peek()?.value === 'not_last' ||\n this.parser.peek()?.value === 'only_one'\n ) {\n result.listMode = this.parser.consume().value as 'first' | 'not_first' | 'last' | 'not_last' | 'only_one';\n }\n\n if (this.parser.peek()?.value === 'as') {\n this.parser.consume('Symbol', 'as');\n result.variable = this.parser.consume().value;\n }\n\n if (this.parser.peek()?.value === 'where') {\n this.parser.consume('Symbol', 'where');\n const whereFhirPath = this.parser.consumeAndParse(OperatorPrecedence.Arrow);\n result.condition = whereFhirPath.toString();\n }\n\n if (this.parser.peek()?.value === 'check') {\n this.parser.consume('Symbol', 'check');\n const checkFhirPath = this.parser.consumeAndParse(OperatorPrecedence.Arrow);\n result.check = checkFhirPath.toString();\n }\n\n return result;\n }\n\n #parseRuleTargets(): StructureMapGroupRuleTarget[] {\n const targets = [this.#parseRuleTarget()];\n while (this.parser.hasMore() && this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n targets.push(this.#parseRuleTarget());\n }\n return targets;\n }\n\n #parseRuleTarget(): StructureMapGroupRuleTarget {\n const result: StructureMapGroupRuleTarget = {};\n\n const context = this.#parseRuleContext();\n if (context.includes('.')) {\n const parts = context.split('.');\n result.contextType = 'variable';\n result.context = parts[0];\n result.element = parts[1];\n } else {\n result.context = context;\n }\n\n if (this.parser.peek()?.value === '=') {\n this.parser.consume('=');\n this.#parseRuleTargetTransform(result);\n }\n\n if (this.parser.peek()?.value === 'as') {\n this.parser.consume('Symbol', 'as');\n result.variable = this.parser.consume().value;\n }\n\n if (\n this.parser.peek()?.value === 'first' ||\n this.parser.peek()?.value === 'share' ||\n this.parser.peek()?.value === 'last' ||\n this.parser.peek()?.value === 'collate'\n ) {\n result.listMode = [this.parser.consume().value as 'first' | 'share' | 'last' | 'collate'];\n }\n\n return result;\n }\n\n #parseRuleTargetTransform(result: StructureMapGroupRuleTarget): void {\n result.transform = 'copy';\n\n const transformFhirPath = this.parser.consumeAndParse(OperatorPrecedence.As);\n if (transformFhirPath instanceof SymbolAtom) {\n this.#parseRuleTargetSymbol(result, transformFhirPath);\n } else if (transformFhirPath instanceof FunctionAtom) {\n this.#parseRuleTargetFunction(result, transformFhirPath);\n } else if (transformFhirPath instanceof LiteralAtom) {\n this.#parseRuleTargetLiteral(result, transformFhirPath);\n } else {\n throw new Error(`Unexpected FHIRPath: ${transformFhirPath}`);\n }\n }\n\n #parseRuleTargetSymbol(result: StructureMapGroupRuleTarget, literalAtom: SymbolAtom): void {\n result.parameter = [{ valueId: literalAtom.name }];\n }\n\n #parseRuleTargetFunction(result: StructureMapGroupRuleTarget, functionAtom: FunctionAtom): void {\n const functionName = functionAtom.name;\n switch (functionName) {\n case 'create':\n result.parameter = [\n {\n valueString: (functionAtom.args?.[0] as LiteralAtom).value.value as string,\n },\n ];\n break;\n\n case 'translate':\n result.parameter = [{}];\n break;\n\n default:\n throw new Error('Unknown target function: ' + functionName);\n }\n }\n\n #parseRuleTargetLiteral(result: StructureMapGroupRuleTarget, literalAtom: LiteralAtom): void {\n switch (literalAtom.value.type) {\n case 'boolean':\n result.parameter = [{ valueBoolean: literalAtom.value.value as boolean }];\n break;\n case 'decimal':\n result.parameter = [{ valueDecimal: literalAtom.value.value as number }];\n break;\n case 'string':\n result.parameter = [{ valueString: literalAtom.value.value as string }];\n break;\n default:\n throw new Error('Unknown target literal type: ' + literalAtom.value.type);\n }\n }\n\n #parseRuleContext(): string {\n let identifier = this.parser.consume().value;\n while (this.parser.peek()?.value === '.') {\n this.parser.consume('.');\n identifier += '.' + this.parser.consume().value;\n }\n return identifier;\n }\n\n #parseRuleDependents(): StructureMapGroupRuleDependent[] | undefined {\n const atom = this.parser.consumeAndParse(OperatorPrecedence.Arrow) as FunctionAtom;\n return [\n {\n name: atom.name,\n variable: atom.args.map((arg) => (arg as SymbolAtom).name),\n },\n ];\n }\n\n #parseConceptMap(): void {\n while (this.parser.peek()?.value !== '}') {\n this.parser.consume();\n }\n this.parser.consume('}');\n }\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder()\n .registerInfix('->', { precedence: OperatorPrecedence.Arrow })\n .registerInfix(';', { precedence: OperatorPrecedence.Semicolon });\n\n/**\n * Parses a FHIR Mapping Language document into an AST.\n * @param input The FHIR Mapping Language document to parse.\n * @returns The AST representing the document.\n */\nexport function parseMappingLanguage(input: string): StructureMap {\n const parser = fhirPathParserBuilder.construct(tokenize(input));\n parser.removeComments();\n return new StructureMapParser(parser).parse();\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.mjs","sources":["../../../src/fhirmapper/parse.ts"],"sourcesContent":["import {\n StructureMap,\n StructureMapGroup,\n StructureMapGroupInput,\n StructureMapGroupRule,\n StructureMapGroupRuleDependent,\n StructureMapGroupRuleSource,\n StructureMapGroupRuleTarget,\n StructureMapStructure,\n} from '@medplum/fhirtypes';\nimport { Parser } from '../fhirlexer';\nimport { FunctionAtom, initFhirPathParserBuilder, LiteralAtom, OperatorPrecedence, SymbolAtom } from '../fhirpath';\nimport { tokenize } from './tokenize';\n\nclass StructureMapParser {\n readonly structureMap: StructureMap = { resourceType: 'StructureMap' };\n constructor(readonly parser: Parser) {}\n\n parse(): StructureMap {\n // 'map' url '=' identifier\n // map \"http://hl7.org/fhir/StructureMap/tutorial\" = tutorial\n this.parser.consume('Symbol', 'map');\n this.structureMap.url = this.parser.consume('String').value;\n this.parser.consume('=');\n this.structureMap.name = this.parser.consume().value;\n while (this.parser.hasMore()) {\n const next = this.parser.peek()?.value;\n switch (next) {\n case 'uses':\n this.#parseUses();\n break;\n case 'imports':\n this.#parseImport();\n break;\n case 'group':\n this.#parseGroup();\n break;\n case 'conceptmap':\n this.#parseConceptMap();\n break;\n default:\n throw new Error(`Unexpected token: ${next}`);\n }\n }\n return this.structureMap;\n }\n\n #parseUses(): void {\n // 'uses' url structureAlias? 'as' modelMode\n // uses \"http://hl7.org/fhir/StructureDefinition/tutorial-left\" as source\n this.parser.consume('Symbol', 'uses');\n const result: StructureMapStructure = {};\n result.url = this.parser.consume('String').value;\n if (this.parser.peek()?.value === 'alias') {\n this.parser.consume('Symbol', 'alias');\n result.alias = this.parser.consume('Symbol').value;\n }\n this.parser.consume('Symbol', 'as');\n result.mode = this.parser.consume().value as 'source' | 'queried' | 'target' | 'produced';\n if (!this.structureMap.structure) {\n this.structureMap.structure = [];\n }\n this.structureMap.structure.push(result);\n }\n\n #parseImport(): void {\n this.parser.consume('Symbol', 'imports');\n if (!this.structureMap.import) {\n this.structureMap.import = [];\n }\n this.structureMap.import.push(this.parser.consume('String').value);\n }\n\n #parseGroup(): void {\n // 'group' identifier parameters extends? typeMode? rules\n // group tutorial(source src : TLeft, target tgt : TRight) {\n const result: StructureMapGroup = {};\n this.parser.consume('Symbol', 'group');\n result.name = this.parser.consume('Symbol').value;\n result.input = this.#parseParameters();\n\n if (this.parser.peek()?.value === 'extends') {\n this.parser.consume('Symbol', 'extends');\n result.extends = this.parser.consume('Symbol').value;\n }\n\n if (this.parser.peek()?.value === '<<') {\n this.parser.consume('<<');\n result.typeMode = this.parser.consume().value as 'none' | 'types' | 'type-and-types';\n if (this.parser.peek()?.value === '+') {\n this.parser.consume('+');\n result.typeMode = 'type-and-types';\n }\n this.parser.consume('>>');\n } else {\n result.typeMode = 'none';\n }\n\n result.rule = this.#parseRules();\n\n if (!this.structureMap.group) {\n this.structureMap.group = [];\n }\n this.structureMap.group.push(result);\n }\n\n #parseParameters(): StructureMapGroupInput[] {\n const parameters: StructureMapGroupInput[] = [];\n this.parser.consume('(');\n while (this.parser.hasMore() && this.parser.peek()?.value !== ')') {\n parameters.push(this.#parseParameter());\n if (this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n }\n }\n this.parser.consume(')');\n return parameters;\n }\n\n #parseParameter(): StructureMapGroupInput {\n // inputMode identifier type?\n // ':' identifier\n // source src : TLeft\n const result: StructureMapGroupInput = {};\n result.mode = this.parser.consume().value as 'source' | 'target';\n result.name = this.parser.consume('Symbol').value;\n if (this.parser.peek()?.value === ':') {\n this.parser.consume(':');\n result.type = this.parser.consume('Symbol').value;\n }\n return result;\n }\n\n #parseRules(): StructureMapGroupRule[] {\n const rules = [];\n this.parser.consume('{');\n while (this.parser.hasMore() && this.parser.peek()?.value !== '}') {\n rules.push(this.#parseRule());\n }\n this.parser.consume('}');\n return rules;\n }\n\n #parseRule(): StructureMapGroupRule {\n const result: StructureMapGroupRule = {\n source: this.#parseRuleSources(),\n };\n\n if (this.parser.peek()?.value === '->') {\n this.parser.consume('->');\n result.target = this.#parseRuleTargets();\n }\n\n if (this.parser.peek()?.value === 'then') {\n this.parser.consume('Symbol', 'then');\n if (this.parser.peek()?.id === '{') {\n result.rule = this.#parseRules();\n } else {\n result.dependent = this.#parseRuleDependents();\n }\n }\n\n if (this.parser.peek()?.id === 'String') {\n result.name = this.parser.consume().value;\n } else {\n result.name = result.source?.[0]?.element;\n }\n\n this.parser.consume(';');\n return result;\n }\n\n #parseRuleSources(): StructureMapGroupRuleSource[] {\n const sources = [this.#parseRuleSource()];\n while (this.parser.hasMore() && this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n sources.push(this.#parseRuleSource());\n }\n return sources;\n }\n\n #parseRuleSource(): StructureMapGroupRuleSource {\n const result: StructureMapGroupRuleSource = {};\n\n const context = this.#parseRuleContext();\n if (context.includes('.')) {\n const parts = context.split('.');\n result.context = parts[0];\n result.element = parts[1];\n } else {\n result.context = context;\n }\n\n if (this.parser.hasMore() && this.parser.peek()?.value === ':') {\n this.parser.consume(':');\n result.type = this.parser.consume().value;\n }\n\n if (this.parser.hasMore() && this.parser.peek()?.value === 'default') {\n this.parser.consume('default');\n this.parser.consumeAndParse();\n }\n\n if (\n this.parser.peek()?.value === 'first' ||\n this.parser.peek()?.value === 'not_first' ||\n this.parser.peek()?.value === 'last' ||\n this.parser.peek()?.value === 'not_last' ||\n this.parser.peek()?.value === 'only_one'\n ) {\n result.listMode = this.parser.consume().value as 'first' | 'not_first' | 'last' | 'not_last' | 'only_one';\n }\n\n if (this.parser.peek()?.value === 'as') {\n this.parser.consume('Symbol', 'as');\n result.variable = this.parser.consume().value;\n }\n\n if (this.parser.peek()?.value === 'where') {\n this.parser.consume('Symbol', 'where');\n const whereFhirPath = this.parser.consumeAndParse(OperatorPrecedence.Arrow);\n result.condition = whereFhirPath.toString();\n }\n\n if (this.parser.peek()?.value === 'check') {\n this.parser.consume('Symbol', 'check');\n const checkFhirPath = this.parser.consumeAndParse(OperatorPrecedence.Arrow);\n result.check = checkFhirPath.toString();\n }\n\n return result;\n }\n\n #parseRuleTargets(): StructureMapGroupRuleTarget[] {\n const targets = [this.#parseRuleTarget()];\n while (this.parser.hasMore() && this.parser.peek()?.value === ',') {\n this.parser.consume(',');\n targets.push(this.#parseRuleTarget());\n }\n return targets;\n }\n\n #parseRuleTarget(): StructureMapGroupRuleTarget {\n const result: StructureMapGroupRuleTarget = {};\n\n const context = this.#parseRuleContext();\n if (context.includes('.')) {\n const parts = context.split('.');\n result.contextType = 'variable';\n result.context = parts[0];\n result.element = parts[1];\n } else {\n result.context = context;\n }\n\n if (this.parser.peek()?.value === '=') {\n this.parser.consume('=');\n this.#parseRuleTargetTransform(result);\n }\n\n if (this.parser.peek()?.value === 'as') {\n this.parser.consume('Symbol', 'as');\n result.variable = this.parser.consume().value;\n }\n\n if (\n this.parser.peek()?.value === 'first' ||\n this.parser.peek()?.value === 'share' ||\n this.parser.peek()?.value === 'last' ||\n this.parser.peek()?.value === 'collate'\n ) {\n result.listMode = [this.parser.consume().value as 'first' | 'share' | 'last' | 'collate'];\n }\n\n return result;\n }\n\n #parseRuleTargetTransform(result: StructureMapGroupRuleTarget): void {\n result.transform = 'copy';\n\n const transformFhirPath = this.parser.consumeAndParse(OperatorPrecedence.As);\n if (transformFhirPath instanceof SymbolAtom) {\n this.#parseRuleTargetSymbol(result, transformFhirPath);\n } else if (transformFhirPath instanceof FunctionAtom) {\n this.#parseRuleTargetFunction(result, transformFhirPath);\n } else if (transformFhirPath instanceof LiteralAtom) {\n this.#parseRuleTargetLiteral(result, transformFhirPath);\n } else {\n throw new Error(`Unexpected FHIRPath: ${transformFhirPath}`);\n }\n }\n\n #parseRuleTargetSymbol(result: StructureMapGroupRuleTarget, literalAtom: SymbolAtom): void {\n result.parameter = [{ valueId: literalAtom.name }];\n }\n\n #parseRuleTargetFunction(result: StructureMapGroupRuleTarget, functionAtom: FunctionAtom): void {\n const functionName = functionAtom.name;\n switch (functionName) {\n case 'create':\n result.parameter = [\n {\n valueString: (functionAtom.args?.[0] as LiteralAtom).value.value as string,\n },\n ];\n break;\n\n case 'translate':\n result.parameter = [{}];\n break;\n\n default:\n throw new Error('Unknown target function: ' + functionName);\n }\n }\n\n #parseRuleTargetLiteral(result: StructureMapGroupRuleTarget, literalAtom: LiteralAtom): void {\n switch (literalAtom.value.type) {\n case 'boolean':\n result.parameter = [{ valueBoolean: literalAtom.value.value as boolean }];\n break;\n case 'decimal':\n result.parameter = [{ valueDecimal: literalAtom.value.value as number }];\n break;\n case 'string':\n result.parameter = [{ valueString: literalAtom.value.value as string }];\n break;\n default:\n throw new Error('Unknown target literal type: ' + literalAtom.value.type);\n }\n }\n\n #parseRuleContext(): string {\n let identifier = this.parser.consume().value;\n while (this.parser.peek()?.value === '.') {\n this.parser.consume('.');\n identifier += '.' + this.parser.consume().value;\n }\n return identifier;\n }\n\n #parseRuleDependents(): StructureMapGroupRuleDependent[] | undefined {\n const atom = this.parser.consumeAndParse(OperatorPrecedence.Arrow) as FunctionAtom;\n return [\n {\n name: atom.name,\n variable: atom.args.map((arg) => (arg as SymbolAtom).name),\n },\n ];\n }\n\n #parseConceptMap(): void {\n while (this.parser.peek()?.value !== '}') {\n this.parser.consume();\n }\n this.parser.consume('}');\n }\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder()\n .registerInfix('->', { precedence: OperatorPrecedence.Arrow })\n .registerInfix(';', { precedence: OperatorPrecedence.Semicolon });\n\n/**\n * Parses a FHIR Mapping Language document into an AST.\n * @param input The FHIR Mapping Language document to parse.\n * @returns The AST representing the document.\n */\nexport function parseMappingLanguage(input: string): StructureMap {\n const parser = fhirPathParserBuilder.construct(tokenize(input));\n parser.removeComments();\n return new StructureMapParser(parser).parse();\n}\n"],"names":[],"mappings":"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"}
@@ -45,8 +45,8 @@ class LiteralAtom {
45
45
  }
46
46
  class SymbolAtom {
47
47
  constructor(name) {
48
- this.name = name;
49
48
  _SymbolAtom_instances.add(this);
49
+ this.name = name;
50
50
  }
51
51
  eval(context) {
52
52
  if (this.name === '$this') {
@@ -1 +1 @@
1
- {"version":3,"file":"atoms.mjs","sources":["../../../src/fhirpath/atoms.ts"],"sourcesContent":["import { Atom, InfixOperatorAtom, PrefixOperatorAtom } from '../fhirlexer';\nimport { isResource, PropertyType, TypedValue } from '../types';\nimport { functions } from './functions';\nimport {\n booleanToTypedValue,\n fhirPathArrayEquals,\n fhirPathArrayEquivalent,\n fhirPathIs,\n fhirPathNot,\n getTypedPropertyValue,\n isQuantity,\n removeDuplicates,\n toJsBoolean,\n toTypedValue,\n} from './utils';\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 toString(): string {\n return this.child.toString();\n }\n}\n\nexport class LiteralAtom implements Atom {\n constructor(public readonly value: TypedValue) {}\n eval(): TypedValue[] {\n return [this.value];\n }\n\n toString(): string {\n const value = this.value.value;\n if (typeof value === 'string') {\n return `'${value}'`;\n }\n return value.toString();\n }\n}\n\nexport class SymbolAtom implements Atom {\n constructor(public readonly name: string) {}\n eval(context: 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 (isResource(input) && input.resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n\n toString(): string {\n return this.name;\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n\n toString(): string {\n return '{}';\n }\n}\n\nexport class UnaryOperatorAtom extends PrefixOperatorAtom {\n constructor(operator: string, child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {\n super(operator, child);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(this.child.eval(context));\n }\n\n toString(): string {\n return this.child.toString();\n }\n}\n\nexport class AsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('as', left, right);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return functions.ofType(this.left.eval(context), this.right);\n }\n}\n\nexport class ArithemticOperatorAtom extends InfixOperatorAtom {\n constructor(\n operator: string,\n left: Atom,\n right: Atom,\n public readonly impl: (x: number, y: number) => number | boolean\n ) {\n super(operator, left, right);\n }\n\n eval(context: 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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('&', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('contains', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('in', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('.', left, right);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.right.eval(this.left.eval(context));\n }\n\n toString(): string {\n return `${this.left.toString()}.${this.right.toString()}`;\n }\n}\n\nexport class UnionAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('|', left, right);\n }\n\n eval(context: 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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('=', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!=', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('~', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!~', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('is', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('and', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('or', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('xor', left, right);\n }\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[]) {}\n eval(context: TypedValue[]): TypedValue[] {\n const impl = functions[this.name];\n if (!impl) {\n throw new Error('Unrecognized function: ' + this.name);\n }\n return impl(context, ...this.args);\n }\n\n toString(): string {\n return `${this.name}(${this.args.map((arg) => arg.toString()).join(', ')})`;\n }\n}\n\nexport class IndexerAtom implements Atom {\n constructor(public readonly left: Atom, public readonly expr: Atom) {}\n eval(context: 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 toString(): string {\n return `${this.left.toString()}[${this.expr.toString()}]`;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"atoms.mjs","sources":["../../../src/fhirpath/atoms.ts"],"sourcesContent":["import { Atom, InfixOperatorAtom, PrefixOperatorAtom } from '../fhirlexer';\nimport { isResource, PropertyType, TypedValue } from '../types';\nimport { functions } from './functions';\nimport {\n booleanToTypedValue,\n fhirPathArrayEquals,\n fhirPathArrayEquivalent,\n fhirPathIs,\n fhirPathNot,\n getTypedPropertyValue,\n isQuantity,\n removeDuplicates,\n toJsBoolean,\n toTypedValue,\n} from './utils';\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 toString(): string {\n return this.child.toString();\n }\n}\n\nexport class LiteralAtom implements Atom {\n constructor(public readonly value: TypedValue) {}\n eval(): TypedValue[] {\n return [this.value];\n }\n\n toString(): string {\n const value = this.value.value;\n if (typeof value === 'string') {\n return `'${value}'`;\n }\n return value.toString();\n }\n}\n\nexport class SymbolAtom implements Atom {\n constructor(public readonly name: string) {}\n eval(context: 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 (isResource(input) && input.resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n\n toString(): string {\n return this.name;\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n\n toString(): string {\n return '{}';\n }\n}\n\nexport class UnaryOperatorAtom extends PrefixOperatorAtom {\n constructor(operator: string, child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {\n super(operator, child);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.impl(this.child.eval(context));\n }\n\n toString(): string {\n return this.child.toString();\n }\n}\n\nexport class AsAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('as', left, right);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return functions.ofType(this.left.eval(context), this.right);\n }\n}\n\nexport class ArithemticOperatorAtom extends InfixOperatorAtom {\n constructor(\n operator: string,\n left: Atom,\n right: Atom,\n public readonly impl: (x: number, y: number) => number | boolean\n ) {\n super(operator, left, right);\n }\n\n eval(context: 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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('&', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('contains', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('in', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('.', left, right);\n }\n\n eval(context: TypedValue[]): TypedValue[] {\n return this.right.eval(this.left.eval(context));\n }\n\n toString(): string {\n return `${this.left.toString()}.${this.right.toString()}`;\n }\n}\n\nexport class UnionAtom extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('|', left, right);\n }\n\n eval(context: 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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('=', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!=', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('~', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('!~', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('is', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('and', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('or', left, right);\n }\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 extends InfixOperatorAtom {\n constructor(left: Atom, right: Atom) {\n super('xor', left, right);\n }\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[]) {}\n eval(context: TypedValue[]): TypedValue[] {\n const impl = functions[this.name];\n if (!impl) {\n throw new Error('Unrecognized function: ' + this.name);\n }\n return impl(context, ...this.args);\n }\n\n toString(): string {\n return `${this.name}(${this.args.map((arg) => arg.toString()).join(', ')})`;\n }\n}\n\nexport class IndexerAtom implements Atom {\n constructor(public readonly left: Atom, public readonly expr: Atom) {}\n eval(context: 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 toString(): string {\n return `${this.left.toString()}[${this.expr.toString()}]`;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1384,13 +1384,22 @@ const functions = {
1384
1384
  if (ref.resource) {
1385
1385
  return toTypedValue(ref.resource);
1386
1386
  }
1387
- refStr = ref.reference;
1387
+ if (ref.reference) {
1388
+ refStr = ref.reference;
1389
+ }
1390
+ else if (ref.type && ref.identifier) {
1391
+ refStr = `${ref.type}?identifier=${ref.identifier.system}|${ref.identifier.value}`;
1392
+ }
1393
+ }
1394
+ if (refStr?.includes('?')) {
1395
+ const [resourceType] = refStr.split('?');
1396
+ return { type: resourceType, value: { resourceType } };
1388
1397
  }
1389
- if (!refStr) {
1390
- return { type: PropertyType.BackboneElement, value: null };
1398
+ if (refStr?.includes('/')) {
1399
+ const [resourceType, id] = refStr.split('/');
1400
+ return { type: resourceType, value: { resourceType, id } };
1391
1401
  }
1392
- const [resourceType, id] = refStr.split('/');
1393
- return { type: PropertyType.BackboneElement, value: { resourceType, id } };
1402
+ return { type: PropertyType.BackboneElement, value: undefined };
1394
1403
  })
1395
1404
  .filter((e) => !!e.value);
1396
1405
  },