@medplum/core 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/cjs/index.cjs +1259 -1065
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.min.cjs +1 -1
  4. package/dist/esm/base64.mjs +33 -0
  5. package/dist/esm/base64.mjs.map +1 -0
  6. package/dist/esm/bundle.mjs +36 -0
  7. package/dist/esm/bundle.mjs.map +1 -0
  8. package/dist/esm/cache.mjs +17 -23
  9. package/dist/esm/cache.mjs.map +1 -1
  10. package/dist/esm/client.mjs +523 -385
  11. package/dist/esm/client.mjs.map +1 -1
  12. package/dist/esm/eventtarget.mjs +6 -11
  13. package/dist/esm/eventtarget.mjs.map +1 -1
  14. package/dist/esm/fhirlexer/parse.mjs +15 -23
  15. package/dist/esm/fhirlexer/parse.mjs.map +1 -1
  16. package/dist/esm/fhirlexer/tokenize.mjs +190 -180
  17. package/dist/esm/fhirlexer/tokenize.mjs.map +1 -1
  18. package/dist/esm/fhirmapper/parse.mjs +264 -252
  19. package/dist/esm/fhirmapper/parse.mjs.map +1 -1
  20. package/dist/esm/fhirmapper/tokenize.mjs +2 -4
  21. package/dist/esm/fhirmapper/tokenize.mjs.map +1 -1
  22. package/dist/esm/fhirpath/atoms.mjs +13 -20
  23. package/dist/esm/fhirpath/atoms.mjs.map +1 -1
  24. package/dist/esm/fhirpath/parse.mjs +0 -1
  25. package/dist/esm/fhirpath/parse.mjs.map +1 -1
  26. package/dist/esm/fhirpath/tokenize.mjs +0 -1
  27. package/dist/esm/fhirpath/tokenize.mjs.map +1 -1
  28. package/dist/esm/filter/parse.mjs +1 -4
  29. package/dist/esm/filter/parse.mjs.map +1 -1
  30. package/dist/esm/filter/tokenize.mjs +2 -4
  31. package/dist/esm/filter/tokenize.mjs.map +1 -1
  32. package/dist/esm/index.min.mjs +1 -1
  33. package/dist/esm/index.mjs +1 -0
  34. package/dist/esm/index.mjs.map +1 -1
  35. package/dist/esm/jwt.mjs +2 -9
  36. package/dist/esm/jwt.mjs.map +1 -1
  37. package/dist/esm/readablepromise.mjs +18 -23
  38. package/dist/esm/readablepromise.mjs.map +1 -1
  39. package/dist/esm/schema.mjs +149 -127
  40. package/dist/esm/schema.mjs.map +1 -1
  41. package/dist/esm/search/match.mjs +1 -4
  42. package/dist/esm/search/match.mjs.map +1 -1
  43. package/dist/esm/storage.mjs +13 -19
  44. package/dist/esm/storage.mjs.map +1 -1
  45. package/dist/types/base64.d.ts +14 -0
  46. package/dist/types/bundle.d.ts +11 -0
  47. package/dist/types/cache.d.ts +3 -1
  48. package/dist/types/client.d.ts +164 -1
  49. package/dist/types/eventtarget.d.ts +1 -1
  50. package/dist/types/fhirlexer/parse.d.ts +5 -2
  51. package/dist/types/fhirlexer/tokenize.d.ts +28 -1
  52. package/dist/types/fhirpath/atoms.d.ts +1 -1
  53. package/dist/types/index.d.ts +1 -0
  54. package/dist/types/readablepromise.d.ts +4 -1
  55. package/dist/types/schema.d.ts +33 -1
  56. package/dist/types/storage.d.ts +2 -2
  57. package/package.json +1 -1
  58. package/dist/esm/node_modules/tslib/tslib.es6.mjs +0 -30
  59. package/dist/esm/node_modules/tslib/tslib.es6.mjs.map +0 -1
@@ -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":";;;;;;;;;;AAcA,MAAM,kBAAkB,CAAA;AAEtB,IAAA,WAAA,CAAqB,MAAc,EAAA;;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAD1B,QAAA,IAAA,CAAA,YAAY,GAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;KAChC;IAEvC,KAAK,GAAA;;;QAGH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AACvC,YAAA,QAAQ,IAAI;AACV,gBAAA,KAAK,MAAM;AACT,oBAAA,sBAAA,CAAA,IAAI,EAAA,6BAAA,EAAA,GAAA,EAAA,6BAAA,CAAW,CAAf,IAAA,CAAA,IAAI,CAAa,CAAC;oBAClB,MAAM;AACR,gBAAA,KAAK,SAAS;AACZ,oBAAA,sBAAA,CAAA,IAAI,EAAA,6BAAA,EAAA,GAAA,EAAA,+BAAA,CAAa,CAAjB,IAAA,CAAA,IAAI,CAAe,CAAC;oBACpB,MAAM;AACR,gBAAA,KAAK,OAAO;AACV,oBAAA,sBAAA,CAAA,IAAI,EAAA,6BAAA,EAAA,GAAA,EAAA,8BAAA,CAAY,CAAhB,IAAA,CAAA,IAAI,CAAc,CAAC;oBACnB,MAAM;AACR,gBAAA,KAAK,YAAY;AACf,oBAAA,sBAAA,CAAA,IAAI,EAAA,6BAAA,EAAA,GAAA,EAAA,mCAAA,CAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC;oBACxB,MAAM;AACR,gBAAA;AACE,oBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAA,CAAE,CAAC,CAAC;AAChD,aAAA;AACF,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAwTF,CAAA;;;;IAnTG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAA0B,EAAE,CAAC;AACzC,IAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACpD,KAAA;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAqD,CAAC;AAC1F,IAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAClC,KAAA;IACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC,EAAA,+BAAA,GAAA,SAAA,+BAAA,GAAA;IAGC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,IAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;AAC/B,KAAA;AACD,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC,EAAA,8BAAA,GAAA,SAAA,8BAAA,GAAA;;;IAKC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,CAAC,KAAK,GAAG,sBAAA,CAAA,IAAI,EAAiB,6BAAA,EAAA,GAAA,EAAA,mCAAA,CAAA,CAAA,IAAA,CAArB,IAAI,CAAmB,CAAC;IAEvC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EAAE;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACtD,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA4C,CAAC;QACrF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC1B,KAAA;IAED,MAAM,CAAC,IAAI,GAAG,sBAAA,CAAA,IAAI,EAAY,6BAAA,EAAA,GAAA,EAAA,8BAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,CAAc,CAAC;AAEjC,IAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;AAC9B,KAAA;IACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,EAAA,mCAAA,GAAA,SAAA,mCAAA,GAAA;IAGC,MAAM,UAAU,GAA6B,EAAE,CAAC;AAChD,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;QACjE,UAAU,CAAC,IAAI,CAAC,sBAAA,CAAA,IAAI,yEAAgB,CAApB,IAAA,CAAA,IAAI,CAAkB,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC,EAAA,kCAAA,GAAA,SAAA,kCAAA,GAAA;;;;IAMC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA4B,CAAC;AACjE,IAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACnD,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,EAAA,8BAAA,GAAA,SAAA,8BAAA,GAAA;IAGC,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;QACjE,KAAK,CAAC,IAAI,CAAC,sBAAA,CAAA,IAAI,oEAAW,CAAf,IAAA,CAAA,IAAI,CAAa,CAAC,CAAC;AAC/B,KAAA;AACD,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,EAAA,6BAAA,GAAA,SAAA,6BAAA,GAAA;AAGC,IAAA,MAAM,MAAM,GAA0B;AACpC,QAAA,MAAM,EAAE,sBAAA,CAAA,IAAI,EAAkB,6BAAA,EAAA,GAAA,EAAA,oCAAA,CAAA,CAAA,IAAA,CAAtB,IAAI,CAAoB;KACjC,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,GAAG,sBAAA,CAAA,IAAI,EAAkB,6BAAA,EAAA,GAAA,EAAA,oCAAA,CAAA,CAAA,IAAA,CAAtB,IAAI,CAAoB,CAAC;AAC1C,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE;YAClC,MAAM,CAAC,IAAI,GAAG,sBAAA,CAAA,IAAI,EAAY,6BAAA,EAAA,GAAA,EAAA,8BAAA,CAAA,CAAA,IAAA,CAAhB,IAAI,CAAc,CAAC;AAClC,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,SAAS,GAAG,sBAAA,CAAA,IAAI,EAAqB,6BAAA,EAAA,GAAA,EAAA,uCAAA,CAAA,CAAA,IAAA,CAAzB,IAAI,CAAuB,CAAC;AAChD,SAAA;AACF,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,QAAQ,EAAE;QACvC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC3C,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC3C,KAAA;AAED,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,EAAA,oCAAA,GAAA,SAAA,oCAAA,GAAA;IAGC,MAAM,OAAO,GAAG,CAAC,sBAAA,CAAA,IAAI,0EAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC,CAAC;AAC1C,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,sBAAA,CAAA,IAAI,0EAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC,CAAC;AACvC,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC,EAAA,mCAAA,GAAA,SAAA,mCAAA,GAAA;IAGC,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,MAAM,OAAO,GAAG,sBAAA,CAAA,IAAI,2EAAkB,CAAtB,IAAA,CAAA,IAAI,CAAoB,CAAC;AACzC,IAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,KAAA;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AAC9D,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC3C,KAAA;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EAAE;AACpE,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAC/B,KAAA;IAED,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,WAAW;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,UAAU;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,UAAU,EACxC;QACA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAiE,CAAC;AAC3G,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC/C,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0B,CAAC;AAC5E,QAAA,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC7C,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0B,CAAC;AAC5E,QAAA,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AACzC,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,EAAA,oCAAA,GAAA,SAAA,oCAAA,GAAA;IAGC,MAAM,OAAO,GAAG,CAAC,sBAAA,CAAA,IAAI,0EAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC,CAAC;AAC1C,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,sBAAA,CAAA,IAAI,0EAAiB,CAArB,IAAA,CAAA,IAAI,CAAmB,CAAC,CAAC;AACvC,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC,EAAA,mCAAA,GAAA,SAAA,mCAAA,GAAA;IAGC,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,MAAM,OAAO,GAAG,sBAAA,CAAA,IAAI,2EAAkB,CAAtB,IAAA,CAAA,IAAI,CAAoB,CAAC;AACzC,IAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;AAChC,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,sBAAA,CAAA,IAAI,EAA0B,6BAAA,EAAA,GAAA,EAAA,4CAAA,CAAA,CAAA,IAAA,CAA9B,IAAI,EAA2B,MAAM,CAAC,CAAC;AACxC,KAAA;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC/C,KAAA;IAED,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EACvC;AACA,QAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA+C,CAAC,CAAC;AAC3F,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,uGAEyB,MAAmC,EAAA;AAC3D,IAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;IAE1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,+BAAuB,CAAC;IAC7E,IAAI,iBAAiB,YAAY,UAAU,EAAE;QAC3C,sBAAA,CAAA,IAAI,gFAAuB,CAA3B,IAAA,CAAA,IAAI,EAAwB,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACxD,KAAA;SAAM,IAAI,iBAAiB,YAAY,YAAY,EAAE;QACpD,sBAAA,CAAA,IAAI,kFAAyB,CAA7B,IAAA,CAAA,IAAI,EAA0B,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC1D,KAAA;SAAM,IAAI,iBAAiB,YAAY,WAAW,EAAE;QACnD,sBAAA,CAAA,IAAI,iFAAwB,CAA5B,IAAA,CAAA,IAAI,EAAyB,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACzD,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,iBAAiB,CAAA,CAAE,CAAC,CAAC;AAC9D,KAAA;AACH,CAAC,EAAA,yCAAA,GAAA,SAAA,yCAAA,CAEsB,MAAmC,EAAE,WAAuB,EAAA;AACjF,IAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC,EAAA,2CAAA,GAAA,SAAA,2CAAA,CAEwB,MAAmC,EAAE,YAA0B,EAAA;AACtF,IAAA,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC;AACvC,IAAA,QAAQ,YAAY;AAClB,QAAA,KAAK,QAAQ;YACX,MAAM,CAAC,SAAS,GAAG;AACjB,gBAAA;AACE,oBAAA,WAAW,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAiB,EAAC,KAAK,CAAC,KAAe;AAC3E,iBAAA;aACF,CAAC;YACF,MAAM;AAER,QAAA,KAAK,WAAW;AACd,YAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,MAAM;AAER,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,YAAY,CAAC,CAAC;AAC/D,KAAA;AACH,CAAC,EAAA,0CAAA,GAAA,SAAA,0CAAA,CAEuB,MAAmC,EAAE,WAAwB,EAAA;AACnF,IAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,IAAI;AAC5B,QAAA,KAAK,SAAS;AACZ,YAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAgB,EAAE,CAAC,CAAC;YAC1E,MAAM;AACR,QAAA,KAAK,SAAS;AACZ,YAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAe,EAAE,CAAC,CAAC;YACzE,MAAM;AACR,QAAA,KAAK,QAAQ;AACX,YAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAe,EAAE,CAAC,CAAC;YACxE,MAAM;AACR,QAAA;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7E,KAAA;AACH,CAAC,EAAA,oCAAA,GAAA,SAAA,oCAAA,GAAA;IAGC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACjD,KAAA;AACD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC,EAAA,uCAAA,GAAA,SAAA,uCAAA,GAAA;IAGC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0C,CAAC;IACnF,OAAO;AACL,QAAA;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAM,GAAkB,CAAC,IAAI,CAAC;AAC3D,SAAA;KACF,CAAC;AACJ,CAAC,EAAA,mCAAA,GAAA,SAAA,mCAAA,GAAA;IAGC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,KAAA;AACD,IAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAA;AAGH,MAAM,qBAAqB,GAAG,yBAAyB,EAAE;AACtD,KAAA,aAAa,CAAC,IAAI,EAAE,EAAE,UAAU,EAAA,GAAA,iCAA4B,CAAC;KAC7D,aAAa,CAAC,GAAG,EAAE,EAAE,UAAU,EAA8B,GAAA,qCAAE,CAAC,CAAC;AAEpE;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AAChD;;;;"}
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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private 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 private parseRuleTargetSymbol(result: StructureMapGroupRuleTarget, literalAtom: SymbolAtom): void {\n result.parameter = [{ valueId: literalAtom.name }];\n }\n\n private 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 private 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 private 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 private 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 private 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":";;;;;;AAcA,MAAM,kBAAkB,CAAA;AAEtB,IAAA,WAAA,CAAqB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAD1B,QAAA,IAAA,CAAA,YAAY,GAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;KAChC;IAEvC,KAAK,GAAA;;;QAGH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AACvC,YAAA,QAAQ,IAAI;AACV,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,MAAM;AACR,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,MAAM;AACR,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,MAAM;AACR,gBAAA,KAAK,YAAY;oBACf,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,MAAM;AACR,gBAAA;AACE,oBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAA,CAAE,CAAC,CAAC;AAChD,aAAA;AACF,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAEO,SAAS,GAAA;;;QAGf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAA0B,EAAE,CAAC;AACzC,QAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACpD,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAqD,CAAC;AAC1F,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAClC,SAAA;QACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1C;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;AAC/B,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;KACpE;IAEO,UAAU,GAAA;;;QAGhB,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAClD,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACtD,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA4C,CAAC;YACrF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,gBAAA,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACpC,aAAA;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC1B,SAAA;AAED,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAEhC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;AAC9B,SAAA;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACtC;IAEO,eAAe,GAAA;QACrB,MAAM,UAAU,GAA6B,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;YACjE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,cAAc,GAAA;;;;QAIpB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA4B,CAAC;AACjE,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,UAAU,GAAA;QAChB,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;YACjE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,SAAS,GAAA;AACf,QAAA,MAAM,MAAM,GAA0B;AACpC,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE;SAChC,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzC,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE;AAClC,gBAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/C,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,QAAQ,EAAE;YACvC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC3C,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC3C,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACjE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;IAEO,eAAe,GAAA;QACrB,MAAM,MAAM,GAAgC,EAAE,CAAC;AAE/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AAC9D,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC3C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EAAE;AACpE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAC/B,SAAA;QAED,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,WAAW;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,UAAU;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,UAAU,EACxC;YACA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAiE,CAAC;AAC3G,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC/C,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0B,CAAC;AAC5E,YAAA,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AAC7C,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0B,CAAC;AAC5E,YAAA,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;AACzC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACjE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;IAEO,eAAe,GAAA;QACrB,MAAM,MAAM,GAAgC,EAAE,CAAC;AAE/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;AAChC,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACvC,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,IAAI,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AAC/C,SAAA;QAED,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,OAAO;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,SAAS,EACvC;AACA,YAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAA+C,CAAC,CAAC;AAC3F,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,wBAAwB,CAAC,MAAmC,EAAA;AAClE,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;QAE1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,+BAAuB,CAAC;QAC7E,IAAI,iBAAiB,YAAY,UAAU,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACvD,SAAA;aAAM,IAAI,iBAAiB,YAAY,YAAY,EAAE;AACpD,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACzD,SAAA;aAAM,IAAI,iBAAiB,YAAY,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,iBAAiB,CAAA,CAAE,CAAC,CAAC;AAC9D,SAAA;KACF;IAEO,qBAAqB,CAAC,MAAmC,EAAE,WAAuB,EAAA;AACxF,QAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;KACpD;IAEO,uBAAuB,CAAC,MAAmC,EAAE,YAA0B,EAAA;AAC7F,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC;AACvC,QAAA,QAAQ,YAAY;AAClB,YAAA,KAAK,QAAQ;gBACX,MAAM,CAAC,SAAS,GAAG;AACjB,oBAAA;AACE,wBAAA,WAAW,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAiB,EAAC,KAAK,CAAC,KAAe;AAC3E,qBAAA;iBACF,CAAC;gBACF,MAAM;AAER,YAAA,KAAK,WAAW;AACd,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM;AAER,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,YAAY,CAAC,CAAC;AAC/D,SAAA;KACF;IAEO,sBAAsB,CAAC,MAAmC,EAAE,WAAwB,EAAA;AAC1F,QAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,IAAI;AAC5B,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAgB,EAAE,CAAC,CAAC;gBAC1E,MAAM;AACR,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,KAAe,EAAE,CAAC,CAAC;gBACzE,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAe,EAAE,CAAC,CAAC;gBACxE,MAAM;AACR,YAAA;gBACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7E,SAAA;KACF;IAEO,gBAAgB,GAAA;QACtB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,mBAAmB,GAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,oCAA0C,CAAC;QACnF,OAAO;AACL,YAAA;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAM,GAAkB,CAAC,IAAI,CAAC;AAC3D,aAAA;SACF,CAAC;KACH;IAEO,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1B;AACF,CAAA;AAED,MAAM,qBAAqB,GAAG,yBAAyB,EAAE;AACtD,KAAA,aAAa,CAAC,IAAI,EAAE,EAAE,UAAU,EAAA,GAAA,iCAA4B,CAAC;KAC7D,aAAa,CAAC,GAAG,EAAE,EAAE,UAAU,EAA8B,GAAA,qCAAE,CAAC,CAAC;AAEpE;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AAChD;;;;"}
@@ -1,10 +1,8 @@
1
- import '../fhirlexer/parse.mjs';
2
1
  import { Tokenizer } from '../fhirlexer/tokenize.mjs';
3
- import '../fhirpath/atoms.mjs';
4
- import '../fhirpath/parse.mjs';
5
- import { FHIRPATH_OPERATORS, FHIRPATH_KEYWORDS } from '../fhirpath/tokenize.mjs';
6
2
  import '../types.mjs';
7
3
  import '../utils.mjs';
4
+ import '../fhirpath/parse.mjs';
5
+ import { FHIRPATH_OPERATORS, FHIRPATH_KEYWORDS } from '../fhirpath/tokenize.mjs';
8
6
 
9
7
  const MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, '->', '<<', '>>'];
10
8
  function tokenize(str) {
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.mjs","sources":["../../../src/fhirmapper/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\nimport { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS } from '../fhirpath';\n\nconst MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, '->', '<<', '>>'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, MAPPING_LANGUAGE_OPERATORS).tokenize();\n}\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,0BAA0B,GAAG,CAAC,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtF;;;;"}
1
+ {"version":3,"file":"tokenize.mjs","sources":["../../../src/fhirmapper/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\nimport { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS } from '../fhirpath';\n\nconst MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, '->', '<<', '>>'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, MAPPING_LANGUAGE_OPERATORS).tokenize();\n}\n"],"names":[],"mappings":";;;;;;AAGA,MAAM,0BAA0B,GAAG,CAAC,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtF;;;;"}
@@ -1,11 +1,8 @@
1
- import { __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
2
1
  import { PrefixOperatorAtom, InfixOperatorAtom } from '../fhirlexer/parse.mjs';
3
- import '../fhirlexer/tokenize.mjs';
4
- import { PropertyType, isResource } from '../types.mjs';
2
+ import { isResource, PropertyType } from '../types.mjs';
5
3
  import { functions } from './functions.mjs';
6
- import { isQuantity, booleanToTypedValue, toTypedValue, removeDuplicates, fhirPathArrayEquals, fhirPathNot, fhirPathArrayEquivalent, fhirPathIs, toJsBoolean, getTypedPropertyValue } from './utils.mjs';
4
+ import { getTypedPropertyValue, isQuantity, booleanToTypedValue, toTypedValue, removeDuplicates, fhirPathArrayEquals, fhirPathNot, fhirPathArrayEquivalent, fhirPathIs, toJsBoolean } from './utils.mjs';
7
5
 
8
- var _SymbolAtom_instances, _SymbolAtom_evalValue;
9
6
  class FhirPathAtom {
10
7
  constructor(original, child) {
11
8
  this.original = original;
@@ -45,32 +42,28 @@ class LiteralAtom {
45
42
  }
46
43
  class SymbolAtom {
47
44
  constructor(name) {
48
- _SymbolAtom_instances.add(this);
49
45
  this.name = name;
50
46
  }
51
47
  eval(context) {
52
48
  if (this.name === '$this') {
53
49
  return context;
54
50
  }
55
- return context
56
- .map((e) => __classPrivateFieldGet(this, _SymbolAtom_instances, "m", _SymbolAtom_evalValue).call(this, e))
57
- .flat()
58
- .filter((e) => e?.value !== undefined);
51
+ return context.flatMap((e) => this.evalValue(e)).filter((e) => e?.value !== undefined);
52
+ }
53
+ evalValue(typedValue) {
54
+ const input = typedValue.value;
55
+ if (!input || typeof input !== 'object') {
56
+ return undefined;
57
+ }
58
+ if (isResource(input) && input.resourceType === this.name) {
59
+ return typedValue;
60
+ }
61
+ return getTypedPropertyValue(typedValue, this.name);
59
62
  }
60
63
  toString() {
61
64
  return this.name;
62
65
  }
63
66
  }
64
- _SymbolAtom_instances = new WeakSet(), _SymbolAtom_evalValue = function _SymbolAtom_evalValue(typedValue) {
65
- const input = typedValue.value;
66
- if (!input || typeof input !== 'object') {
67
- return undefined;
68
- }
69
- if (isResource(input) && input.resourceType === this.name) {
70
- return typedValue;
71
- }
72
- return getTypedPropertyValue(typedValue, this.name);
73
- };
74
67
  class EmptySetAtom {
75
68
  eval() {
76
69
  return [];
@@ -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 { PropertyType, TypedValue, isResource } from '../types';\nimport { functions } from './functions';\nimport {\n booleanToTypedValue,\n fhirPathArrayEquals,\n fhirPathArrayEquivalent,\n fhirPathIs,\n fhirPathNot,\n getTypedPropertyValue,\n isQuantity,\n removeDuplicates,\n toJsBoolean,\n toTypedValue,\n} from './utils';\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.flatMap((e) => this.evalValue(e)).filter((e) => e?.value !== undefined) as TypedValue[];\n }\n\n private evalValue(typedValue: TypedValue): TypedValue[] | TypedValue | undefined {\n const input = typedValue.value;\n if (!input || typeof input !== 'object') {\n return undefined;\n }\n\n if (isResource(input) && input.resourceType === this.name) {\n return typedValue;\n }\n\n return getTypedPropertyValue(typedValue, this.name);\n }\n\n toString(): string {\n return this.name;\n }\n}\n\nexport class EmptySetAtom implements Atom {\n eval(): [] {\n return [];\n }\n\n toString(): string {\n return '{}';\n }\n}\n\nexport class UnaryOperatorAtom extends PrefixOperatorAtom {\n constructor(operator: string, child: Atom, public readonly impl: (x: TypedValue[]) => TypedValue[]) {\n super(operator, child);\n }\n\n eval(context: 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,5 +1,4 @@
1
1
  import { ParserBuilder } from '../fhirlexer/parse.mjs';
2
- import '../fhirlexer/tokenize.mjs';
3
2
  import { PropertyType } from '../types.mjs';
4
3
  import { LiteralAtom, SymbolAtom, EmptySetAtom, UnaryOperatorAtom, ArithemticOperatorAtom, DotAtom, UnionAtom, EqualsAtom, NotEqualsAtom, EquivalentAtom, NotEquivalentAtom, ConcatAtom, AndAtom, AsAtom, ContainsAtom, InAtom, IsAtom, OrAtom, XorAtom, FhirPathAtom, IndexerAtom, FunctionAtom } from './atoms.mjs';
5
4
  import { parseDateString } from './date.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"parse.mjs","sources":["../../../src/fhirpath/parse.ts"],"sourcesContent":["import { Quantity } from '@medplum/fhirtypes';\nimport { Atom, InfixParselet, Parser, ParserBuilder, PrefixParselet } from '../fhirlexer';\nimport { PropertyType, TypedValue } from '../types';\nimport {\n AndAtom,\n ArithemticOperatorAtom,\n AsAtom,\n ConcatAtom,\n ContainsAtom,\n DotAtom,\n EmptySetAtom,\n EqualsAtom,\n EquivalentAtom,\n FhirPathAtom,\n FunctionAtom,\n InAtom,\n IndexerAtom,\n IsAtom,\n LiteralAtom,\n NotEqualsAtom,\n NotEquivalentAtom,\n OrAtom,\n SymbolAtom,\n UnaryOperatorAtom,\n UnionAtom,\n XorAtom,\n} from './atoms';\nimport { parseDateString } from './date';\nimport { tokenize } from './tokenize';\nimport { toTypedValue } from './utils';\n\n/**\n * Operator precedence\n * See: https://hl7.org/fhirpath/#operator-precedence\n */\nexport const enum OperatorPrecedence {\n FunctionCall = 0,\n Dot = 1,\n Indexer = 2,\n UnaryAdd = 3,\n UnarySubtract = 3,\n Multiply = 4,\n Divide = 4,\n IntegerDivide = 4,\n Modulo = 4,\n Add = 5,\n Subtract = 5,\n Ampersand = 5,\n Is = 6,\n As = 6,\n Union = 7,\n GreaterThan = 8,\n GreaterThanOrEquals = 8,\n LessThan = 8,\n LessThanOrEquals = 8,\n Equals = 9,\n Equivalent = 9,\n NotEquals = 9,\n NotEquivalent = 9,\n In = 10,\n Contains = 10,\n And = 11,\n Xor = 12,\n Or = 12,\n Implies = 13,\n Arrow = 100,\n Semicolon = 200,\n}\n\nconst PARENTHESES_PARSELET: PrefixParselet = {\n parse(parser: Parser) {\n const expr = parser.consumeAndParse();\n if (!parser.match(')')) {\n throw new Error('Parse error: expected `)` got `' + parser.peek()?.value + '`');\n }\n return expr;\n },\n};\n\nconst INDEXER_PARSELET: InfixParselet = {\n parse(parser: Parser, left: Atom) {\n const expr = parser.consumeAndParse();\n if (!parser.match(']')) {\n throw new Error('Parse error: expected `]`');\n }\n return new IndexerAtom(left, expr);\n },\n\n precedence: OperatorPrecedence.Indexer,\n};\n\nconst FUNCTION_CALL_PARSELET: InfixParselet = {\n parse(parser: Parser, left: Atom) {\n if (!(left instanceof SymbolAtom)) {\n throw new Error('Unexpected parentheses');\n }\n\n const args = [];\n while (!parser.match(')')) {\n args.push(parser.consumeAndParse());\n parser.match(',');\n }\n\n return new FunctionAtom(left.name, args); //, functions[left.name]);\n },\n precedence: OperatorPrecedence.FunctionCall,\n};\n\nfunction parseQuantity(str: string): Quantity {\n const parts = str.split(' ');\n const value = parseFloat(parts[0]);\n let unit = parts[1];\n if (unit && unit.startsWith(\"'\") && unit.endsWith(\"'\")) {\n unit = unit.substring(1, unit.length - 1);\n } else {\n unit = '{' + unit + '}';\n }\n return { value, unit };\n}\n\nexport function initFhirPathParserBuilder(): ParserBuilder {\n return new ParserBuilder()\n .registerPrefix('String', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.string, value: token.value }),\n })\n .registerPrefix('DateTime', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.dateTime, value: parseDateString(token.value) }),\n })\n .registerPrefix('Quantity', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.Quantity, value: parseQuantity(token.value) }),\n })\n .registerPrefix('Number', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.decimal, value: parseFloat(token.value) }),\n })\n .registerPrefix('true', { parse: () => new LiteralAtom({ type: PropertyType.boolean, value: true }) })\n .registerPrefix('false', { parse: () => new LiteralAtom({ type: PropertyType.boolean, value: false }) })\n .registerPrefix('Symbol', { parse: (_, token) => new SymbolAtom(token.value) })\n .registerPrefix('{}', { parse: () => new EmptySetAtom() })\n .registerPrefix('(', PARENTHESES_PARSELET)\n .registerInfix('[', INDEXER_PARSELET)\n .registerInfix('(', FUNCTION_CALL_PARSELET)\n .prefix('+', OperatorPrecedence.UnaryAdd, (_, right) => new UnaryOperatorAtom('+', right, (x) => x))\n .prefix(\n '-',\n OperatorPrecedence.UnarySubtract,\n (_, right) => new ArithemticOperatorAtom('-', right, right, (_, y) => -y)\n )\n .infixLeft('.', OperatorPrecedence.Dot, (left, _, right) => new DotAtom(left, right))\n .infixLeft(\n '/',\n OperatorPrecedence.Divide,\n (left, _, right) => new ArithemticOperatorAtom('/', left, right, (x, y) => x / y)\n )\n .infixLeft(\n '*',\n OperatorPrecedence.Multiply,\n (left, _, right) => new ArithemticOperatorAtom('*', left, right, (x, y) => x * y)\n )\n .infixLeft(\n '+',\n OperatorPrecedence.Add,\n (left, _, right) => new ArithemticOperatorAtom('+', left, right, (x, y) => x + y)\n )\n .infixLeft(\n '-',\n OperatorPrecedence.Subtract,\n (left, _, right) => new ArithemticOperatorAtom('-', left, right, (x, y) => x - y)\n )\n .infixLeft('|', OperatorPrecedence.Union, (left, _, right) => new UnionAtom(left, right))\n .infixLeft('=', OperatorPrecedence.Equals, (left, _, right) => new EqualsAtom(left, right))\n .infixLeft('!=', OperatorPrecedence.Equals, (left, _, right) => new NotEqualsAtom(left, right))\n .infixLeft('~', OperatorPrecedence.Equivalent, (left, _, right) => new EquivalentAtom(left, right))\n .infixLeft('!~', OperatorPrecedence.NotEquivalent, (left, _, right) => new NotEquivalentAtom(left, right))\n .infixLeft(\n '<',\n OperatorPrecedence.LessThan,\n (left, _, right) => new ArithemticOperatorAtom('<', left, right, (x, y) => x < y)\n )\n .infixLeft(\n '<=',\n OperatorPrecedence.LessThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom('<=', left, right, (x, y) => x <= y)\n )\n .infixLeft(\n '>',\n OperatorPrecedence.GreaterThan,\n (left, _, right) => new ArithemticOperatorAtom('>', left, right, (x, y) => x > y)\n )\n .infixLeft(\n '>=',\n OperatorPrecedence.GreaterThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom('>=', left, right, (x, y) => x >= y)\n )\n .infixLeft('&', OperatorPrecedence.Ampersand, (left, _, right) => new ConcatAtom(left, right))\n .infixLeft('and', OperatorPrecedence.Is, (left, _, right) => new AndAtom(left, right))\n .infixLeft('as', OperatorPrecedence.Is, (left, _, right) => new AsAtom(left, right))\n .infixLeft('contains', OperatorPrecedence.Is, (left, _, right) => new ContainsAtom(left, right))\n .infixLeft(\n 'div',\n OperatorPrecedence.Is,\n (left, _, right) => new ArithemticOperatorAtom('div', left, right, (x, y) => (x / y) | 0)\n )\n .infixLeft('in', OperatorPrecedence.Is, (left, _, right) => new InAtom(left, right))\n .infixLeft('is', OperatorPrecedence.Is, (left, _, right) => new IsAtom(left, right))\n .infixLeft(\n 'mod',\n OperatorPrecedence.Is,\n (left, _, right) => new ArithemticOperatorAtom('mod', left, right, (x, y) => x % y)\n )\n .infixLeft('or', OperatorPrecedence.Is, (left, _, right) => new OrAtom(left, right))\n .infixLeft('xor', OperatorPrecedence.Is, (left, _, right) => new XorAtom(left, right));\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder();\n\n/**\n * Parses a FHIRPath expression into an AST.\n * The result can be used to evaluate the expression against a resource or other object.\n * This method is useful if you know that you will evaluate the same expression many times\n * against different resources.\n * @param input The FHIRPath expression to parse.\n * @returns The AST representing the expression.\n */\nexport function parseFhirPath(input: string): FhirPathAtom {\n return new FhirPathAtom(input, fhirPathParserBuilder.construct(tokenize(input)).consumeAndParse());\n}\n\n/**\n * Evaluates a FHIRPath expression against a resource or other object.\n * @param expression The FHIRPath expression to parse.\n * @param input The resource or object to evaluate the expression against.\n * @returns The result of the FHIRPath expression against the resource or object.\n */\nexport function evalFhirPath(expression: string, input: unknown): unknown[] {\n // eval requires a TypedValue array\n // As a convenience, we can accept array or non-array, and TypedValue or unknown value\n const array = Array.isArray(input) ? input : [input];\n for (let i = 0; i < array.length; i++) {\n const el = array[i];\n if (!(typeof el === 'object' && 'type' in el && 'value' in el)) {\n array[i] = toTypedValue(array[i]);\n }\n }\n return evalFhirPathTyped(expression, array).map((e) => e.value);\n}\n\n/**\n * Evaluates a FHIRPath expression against a resource or other object.\n * @param expression The FHIRPath expression to parse.\n * @param input The resource or object to evaluate the expression against.\n * @returns The result of the FHIRPath expression against the resource or object.\n */\nexport function evalFhirPathTyped(expression: string, input: TypedValue[]): TypedValue[] {\n return parseFhirPath(expression).eval(input);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.mjs","sources":["../../../src/fhirpath/parse.ts"],"sourcesContent":["import { Quantity } from '@medplum/fhirtypes';\nimport { Atom, InfixParselet, Parser, ParserBuilder, PrefixParselet } from '../fhirlexer';\nimport { PropertyType, TypedValue } from '../types';\nimport {\n AndAtom,\n ArithemticOperatorAtom,\n AsAtom,\n ConcatAtom,\n ContainsAtom,\n DotAtom,\n EmptySetAtom,\n EqualsAtom,\n EquivalentAtom,\n FhirPathAtom,\n FunctionAtom,\n InAtom,\n IndexerAtom,\n IsAtom,\n LiteralAtom,\n NotEqualsAtom,\n NotEquivalentAtom,\n OrAtom,\n SymbolAtom,\n UnaryOperatorAtom,\n UnionAtom,\n XorAtom,\n} from './atoms';\nimport { parseDateString } from './date';\nimport { tokenize } from './tokenize';\nimport { toTypedValue } from './utils';\n\n/**\n * Operator precedence\n * See: https://hl7.org/fhirpath/#operator-precedence\n */\nexport const enum OperatorPrecedence {\n FunctionCall = 0,\n Dot = 1,\n Indexer = 2,\n UnaryAdd = 3,\n UnarySubtract = 3,\n Multiply = 4,\n Divide = 4,\n IntegerDivide = 4,\n Modulo = 4,\n Add = 5,\n Subtract = 5,\n Ampersand = 5,\n Is = 6,\n As = 6,\n Union = 7,\n GreaterThan = 8,\n GreaterThanOrEquals = 8,\n LessThan = 8,\n LessThanOrEquals = 8,\n Equals = 9,\n Equivalent = 9,\n NotEquals = 9,\n NotEquivalent = 9,\n In = 10,\n Contains = 10,\n And = 11,\n Xor = 12,\n Or = 12,\n Implies = 13,\n Arrow = 100,\n Semicolon = 200,\n}\n\nconst PARENTHESES_PARSELET: PrefixParselet = {\n parse(parser: Parser) {\n const expr = parser.consumeAndParse();\n if (!parser.match(')')) {\n throw new Error('Parse error: expected `)` got `' + parser.peek()?.value + '`');\n }\n return expr;\n },\n};\n\nconst INDEXER_PARSELET: InfixParselet = {\n parse(parser: Parser, left: Atom) {\n const expr = parser.consumeAndParse();\n if (!parser.match(']')) {\n throw new Error('Parse error: expected `]`');\n }\n return new IndexerAtom(left, expr);\n },\n\n precedence: OperatorPrecedence.Indexer,\n};\n\nconst FUNCTION_CALL_PARSELET: InfixParselet = {\n parse(parser: Parser, left: Atom) {\n if (!(left instanceof SymbolAtom)) {\n throw new Error('Unexpected parentheses');\n }\n\n const args = [];\n while (!parser.match(')')) {\n args.push(parser.consumeAndParse());\n parser.match(',');\n }\n\n return new FunctionAtom(left.name, args); //, functions[left.name]);\n },\n precedence: OperatorPrecedence.FunctionCall,\n};\n\nfunction parseQuantity(str: string): Quantity {\n const parts = str.split(' ');\n const value = parseFloat(parts[0]);\n let unit = parts[1];\n if (unit && unit.startsWith(\"'\") && unit.endsWith(\"'\")) {\n unit = unit.substring(1, unit.length - 1);\n } else {\n unit = '{' + unit + '}';\n }\n return { value, unit };\n}\n\nexport function initFhirPathParserBuilder(): ParserBuilder {\n return new ParserBuilder()\n .registerPrefix('String', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.string, value: token.value }),\n })\n .registerPrefix('DateTime', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.dateTime, value: parseDateString(token.value) }),\n })\n .registerPrefix('Quantity', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.Quantity, value: parseQuantity(token.value) }),\n })\n .registerPrefix('Number', {\n parse: (_, token) => new LiteralAtom({ type: PropertyType.decimal, value: parseFloat(token.value) }),\n })\n .registerPrefix('true', { parse: () => new LiteralAtom({ type: PropertyType.boolean, value: true }) })\n .registerPrefix('false', { parse: () => new LiteralAtom({ type: PropertyType.boolean, value: false }) })\n .registerPrefix('Symbol', { parse: (_, token) => new SymbolAtom(token.value) })\n .registerPrefix('{}', { parse: () => new EmptySetAtom() })\n .registerPrefix('(', PARENTHESES_PARSELET)\n .registerInfix('[', INDEXER_PARSELET)\n .registerInfix('(', FUNCTION_CALL_PARSELET)\n .prefix('+', OperatorPrecedence.UnaryAdd, (_, right) => new UnaryOperatorAtom('+', right, (x) => x))\n .prefix(\n '-',\n OperatorPrecedence.UnarySubtract,\n (_, right) => new ArithemticOperatorAtom('-', right, right, (_, y) => -y)\n )\n .infixLeft('.', OperatorPrecedence.Dot, (left, _, right) => new DotAtom(left, right))\n .infixLeft(\n '/',\n OperatorPrecedence.Divide,\n (left, _, right) => new ArithemticOperatorAtom('/', left, right, (x, y) => x / y)\n )\n .infixLeft(\n '*',\n OperatorPrecedence.Multiply,\n (left, _, right) => new ArithemticOperatorAtom('*', left, right, (x, y) => x * y)\n )\n .infixLeft(\n '+',\n OperatorPrecedence.Add,\n (left, _, right) => new ArithemticOperatorAtom('+', left, right, (x, y) => x + y)\n )\n .infixLeft(\n '-',\n OperatorPrecedence.Subtract,\n (left, _, right) => new ArithemticOperatorAtom('-', left, right, (x, y) => x - y)\n )\n .infixLeft('|', OperatorPrecedence.Union, (left, _, right) => new UnionAtom(left, right))\n .infixLeft('=', OperatorPrecedence.Equals, (left, _, right) => new EqualsAtom(left, right))\n .infixLeft('!=', OperatorPrecedence.Equals, (left, _, right) => new NotEqualsAtom(left, right))\n .infixLeft('~', OperatorPrecedence.Equivalent, (left, _, right) => new EquivalentAtom(left, right))\n .infixLeft('!~', OperatorPrecedence.NotEquivalent, (left, _, right) => new NotEquivalentAtom(left, right))\n .infixLeft(\n '<',\n OperatorPrecedence.LessThan,\n (left, _, right) => new ArithemticOperatorAtom('<', left, right, (x, y) => x < y)\n )\n .infixLeft(\n '<=',\n OperatorPrecedence.LessThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom('<=', left, right, (x, y) => x <= y)\n )\n .infixLeft(\n '>',\n OperatorPrecedence.GreaterThan,\n (left, _, right) => new ArithemticOperatorAtom('>', left, right, (x, y) => x > y)\n )\n .infixLeft(\n '>=',\n OperatorPrecedence.GreaterThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom('>=', left, right, (x, y) => x >= y)\n )\n .infixLeft('&', OperatorPrecedence.Ampersand, (left, _, right) => new ConcatAtom(left, right))\n .infixLeft('and', OperatorPrecedence.Is, (left, _, right) => new AndAtom(left, right))\n .infixLeft('as', OperatorPrecedence.Is, (left, _, right) => new AsAtom(left, right))\n .infixLeft('contains', OperatorPrecedence.Is, (left, _, right) => new ContainsAtom(left, right))\n .infixLeft(\n 'div',\n OperatorPrecedence.Is,\n (left, _, right) => new ArithemticOperatorAtom('div', left, right, (x, y) => (x / y) | 0)\n )\n .infixLeft('in', OperatorPrecedence.Is, (left, _, right) => new InAtom(left, right))\n .infixLeft('is', OperatorPrecedence.Is, (left, _, right) => new IsAtom(left, right))\n .infixLeft(\n 'mod',\n OperatorPrecedence.Is,\n (left, _, right) => new ArithemticOperatorAtom('mod', left, right, (x, y) => x % y)\n )\n .infixLeft('or', OperatorPrecedence.Is, (left, _, right) => new OrAtom(left, right))\n .infixLeft('xor', OperatorPrecedence.Is, (left, _, right) => new XorAtom(left, right));\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder();\n\n/**\n * Parses a FHIRPath expression into an AST.\n * The result can be used to evaluate the expression against a resource or other object.\n * This method is useful if you know that you will evaluate the same expression many times\n * against different resources.\n * @param input The FHIRPath expression to parse.\n * @returns The AST representing the expression.\n */\nexport function parseFhirPath(input: string): FhirPathAtom {\n return new FhirPathAtom(input, fhirPathParserBuilder.construct(tokenize(input)).consumeAndParse());\n}\n\n/**\n * Evaluates a FHIRPath expression against a resource or other object.\n * @param expression The FHIRPath expression to parse.\n * @param input The resource or object to evaluate the expression against.\n * @returns The result of the FHIRPath expression against the resource or object.\n */\nexport function evalFhirPath(expression: string, input: unknown): unknown[] {\n // eval requires a TypedValue array\n // As a convenience, we can accept array or non-array, and TypedValue or unknown value\n const array = Array.isArray(input) ? input : [input];\n for (let i = 0; i < array.length; i++) {\n const el = array[i];\n if (!(typeof el === 'object' && 'type' in el && 'value' in el)) {\n array[i] = toTypedValue(array[i]);\n }\n }\n return evalFhirPathTyped(expression, array).map((e) => e.value);\n}\n\n/**\n * Evaluates a FHIRPath expression against a resource or other object.\n * @param expression The FHIRPath expression to parse.\n * @param input The resource or object to evaluate the expression against.\n * @returns The result of the FHIRPath expression against the resource or object.\n */\nexport function evalFhirPathTyped(expression: string, input: TypedValue[]): TypedValue[] {\n return parseFhirPath(expression).eval(input);\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import '../fhirlexer/parse.mjs';
2
1
  import { Tokenizer } from '../fhirlexer/tokenize.mjs';
3
2
 
4
3
  const FHIRPATH_KEYWORDS = ['true', 'false'];
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.mjs","sources":["../../../src/fhirpath/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\n\nexport const FHIRPATH_KEYWORDS = ['true', 'false'];\nexport const FHIRPATH_OPERATORS = ['!=', '!~', '<=', '>=', '{}', '->'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS).tokenize();\n}\n"],"names":[],"mappings":";;;MAEa,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE;AACtC,MAAA,kBAAkB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAEjE,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9E;;;;"}
1
+ {"version":3,"file":"tokenize.mjs","sources":["../../../src/fhirpath/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\n\nexport const FHIRPATH_KEYWORDS = ['true', 'false'];\nexport const FHIRPATH_OPERATORS = ['!=', '!~', '<=', '>=', '{}', '->'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS).tokenize();\n}\n"],"names":[],"mappings":";;MAEa,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE;AACtC,MAAA,kBAAkB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAEjE,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9E;;;;"}
@@ -1,9 +1,6 @@
1
- import '../fhirpath/atoms.mjs';
2
- import { initFhirPathParserBuilder } from '../fhirpath/parse.mjs';
3
- import '../fhirlexer/parse.mjs';
4
- import '../fhirlexer/tokenize.mjs';
5
1
  import '../types.mjs';
6
2
  import '../utils.mjs';
3
+ import { initFhirPathParserBuilder } from '../fhirpath/parse.mjs';
7
4
  import { tokenize } from './tokenize.mjs';
8
5
  import { FhirFilterNegation, FhirFilterComparison, FhirFilterConnective } from './types.mjs';
9
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"parse.mjs","sources":["../../../src/filter/parse.ts"],"sourcesContent":["import { Parser } from '../fhirlexer';\nimport { initFhirPathParserBuilder } from '../fhirpath';\nimport { tokenize } from './tokenize';\nimport { FhirFilterComparison, FhirFilterConnective, FhirFilterExpression, FhirFilterNegation } from './types';\n\nclass FilterParameterParser {\n constructor(readonly parser: Parser) {}\n\n parse(): FhirFilterExpression {\n let result: FhirFilterExpression;\n\n if (this.parser.peek()?.value === '(') {\n this.parser.consume('(');\n result = this.parse();\n this.parser.consume(')');\n } else if (this.parser.peek()?.value === 'not') {\n this.parser.consume('Symbol', 'not');\n this.parser.consume('(');\n result = new FhirFilterNegation(this.parse());\n this.parser.consume(')');\n } else {\n result = new FhirFilterComparison(\n this.parser.consume('Symbol').value,\n this.parser.consume('Symbol').value,\n this.parser.consume().value\n );\n }\n\n const next = this.parser.peek()?.value;\n if (next === 'and' || next === 'or') {\n this.parser.consume('Symbol', next);\n return new FhirFilterConnective(next, result, this.parse());\n }\n\n return result;\n }\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder();\n\n/**\n * Parses a FHIR _filter parameter expression into an AST.\n * @param input The FHIR _filter parameter expression.\n * @returns The AST representing the filters.\n */\nexport function parseFilterParameter(input: string): FhirFilterExpression {\n const parser = fhirPathParserBuilder.construct(tokenize(input));\n parser.removeComments();\n return new FilterParameterParser(parser).parse();\n}\n"],"names":[],"mappings":";;;;;;;;;AAKA,MAAM,qBAAqB,CAAA;AACzB,IAAA,WAAA,CAAqB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAEvC,KAAK,GAAA;AACH,QAAA,IAAI,MAA4B,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,KAAK,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,IAAI,oBAAoB,CAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAC5B,CAAC;AACH,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AACvC,QAAA,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpC,YAAA,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7D,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AACF,CAAA;AAED,MAAM,qBAAqB,GAAG,yBAAyB,EAAE,CAAC;AAE1D;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AACnD;;;;"}
1
+ {"version":3,"file":"parse.mjs","sources":["../../../src/filter/parse.ts"],"sourcesContent":["import { Parser } from '../fhirlexer';\nimport { initFhirPathParserBuilder } from '../fhirpath';\nimport { tokenize } from './tokenize';\nimport { FhirFilterComparison, FhirFilterConnective, FhirFilterExpression, FhirFilterNegation } from './types';\n\nclass FilterParameterParser {\n constructor(readonly parser: Parser) {}\n\n parse(): FhirFilterExpression {\n let result: FhirFilterExpression;\n\n if (this.parser.peek()?.value === '(') {\n this.parser.consume('(');\n result = this.parse();\n this.parser.consume(')');\n } else if (this.parser.peek()?.value === 'not') {\n this.parser.consume('Symbol', 'not');\n this.parser.consume('(');\n result = new FhirFilterNegation(this.parse());\n this.parser.consume(')');\n } else {\n result = new FhirFilterComparison(\n this.parser.consume('Symbol').value,\n this.parser.consume('Symbol').value,\n this.parser.consume().value\n );\n }\n\n const next = this.parser.peek()?.value;\n if (next === 'and' || next === 'or') {\n this.parser.consume('Symbol', next);\n return new FhirFilterConnective(next, result, this.parse());\n }\n\n return result;\n }\n}\n\nconst fhirPathParserBuilder = initFhirPathParserBuilder();\n\n/**\n * Parses a FHIR _filter parameter expression into an AST.\n * @param input The FHIR _filter parameter expression.\n * @returns The AST representing the filters.\n */\nexport function parseFilterParameter(input: string): FhirFilterExpression {\n const parser = fhirPathParserBuilder.construct(tokenize(input));\n parser.removeComments();\n return new FilterParameterParser(parser).parse();\n}\n"],"names":[],"mappings":";;;;;;AAKA,MAAM,qBAAqB,CAAA;AACzB,IAAA,WAAA,CAAqB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAEvC,KAAK,GAAA;AACH,QAAA,IAAI,MAA4B,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,KAAK,KAAK,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,IAAI,oBAAoB,CAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAC5B,CAAC;AACH,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AACvC,QAAA,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpC,YAAA,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7D,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AACF,CAAA;AAED,MAAM,qBAAqB,GAAG,yBAAyB,EAAE,CAAC;AAE1D;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;IAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AACnD;;;;"}
@@ -1,10 +1,8 @@
1
- import '../fhirlexer/parse.mjs';
2
1
  import { Tokenizer } from '../fhirlexer/tokenize.mjs';
3
- import '../fhirpath/atoms.mjs';
4
- import '../fhirpath/parse.mjs';
5
- import { FHIRPATH_OPERATORS, FHIRPATH_KEYWORDS } from '../fhirpath/tokenize.mjs';
6
2
  import '../types.mjs';
7
3
  import '../utils.mjs';
4
+ import '../fhirpath/parse.mjs';
5
+ import { FHIRPATH_OPERATORS, FHIRPATH_KEYWORDS } from '../fhirpath/tokenize.mjs';
8
6
 
9
7
  const MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, 'eq', 'ne', 'co'];
10
8
  function tokenize(str) {
@@ -1 +1 @@
1
- {"version":3,"file":"tokenize.mjs","sources":["../../../src/filter/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\nimport { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS } from '../fhirpath';\n\nconst MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, 'eq', 'ne', 'co'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, MAPPING_LANGUAGE_OPERATORS, {\n dateTimeLiterals: true,\n symbolRegex: /[^\\s\\])]/,\n }).tokenize();\n}\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,0BAA0B,GAAG,CAAC,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,SAAU,QAAQ,CAAC,GAAW,EAAA;IAClC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,EAAE;AACvE,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,WAAW,EAAE,UAAU;KACxB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChB;;;;"}
1
+ {"version":3,"file":"tokenize.mjs","sources":["../../../src/filter/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\nimport { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS } from '../fhirpath';\n\nconst MAPPING_LANGUAGE_OPERATORS = [...FHIRPATH_OPERATORS, 'eq', 'ne', 'co'];\n\nexport function tokenize(str: string): Token[] {\n return new Tokenizer(str, FHIRPATH_KEYWORDS, MAPPING_LANGUAGE_OPERATORS, {\n dateTimeLiterals: true,\n symbolRegex: /[^\\s\\])]/,\n }).tokenize();\n}\n"],"names":[],"mappings":";;;;;;AAGA,MAAM,0BAA0B,GAAG,CAAC,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,SAAU,QAAQ,CAAC,GAAW,EAAA;IAClC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,0BAA0B,EAAE;AACvE,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,WAAW,EAAE,UAAU;KACxB,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChB;;;;"}