@medplum/core 0.9.37 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client.d.ts +6 -1
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/esm/client.d.ts +6 -1
- package/dist/esm/client.js +6 -1
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/fhirpath/parse.js +2 -1
- package/dist/esm/fhirpath/parse.js.map +1 -1
- package/dist/esm/fhirpath/tokenize.js +1 -0
- package/dist/esm/fhirpath/tokenize.js.map +1 -1
- package/dist/esm/index.js +4 -4
- package/dist/esm/index.min.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","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 { functions } from './functions';\nimport { tokenize } from './tokenize';\nimport { toTypedValue } from './utils';\n\n/**\n * Operator precedence\n * See: https://hl7.org/fhirpath/#operator-precedence\n */\nconst enum Precedence {\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}\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 `)`');\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: Precedence.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 if (!(left.name in functions)) {\n throw new Error('Unrecognized function: ' + left.name);\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: Precedence.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('+', Precedence.UnaryAdd, (_, right) => new UnaryOperatorAtom(right, (x) => x))\n .prefix('-', Precedence.UnarySubtract, (_, right) => new ArithemticOperatorAtom(right, right, (_, y) => -y))\n .infixLeft('.', Precedence.Dot, (left, _, right) => new DotAtom(left, right))\n .infixLeft('/', Precedence.Divide, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x / y))\n .infixLeft('*', Precedence.Multiply, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x * y))\n .infixLeft('+', Precedence.Add, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x + y))\n .infixLeft('-', Precedence.Subtract, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x - y))\n .infixLeft('|', Precedence.Union, (left, _, right) => new UnionAtom(left, right))\n .infixLeft('=', Precedence.Equals, (left, _, right) => new EqualsAtom(left, right))\n .infixLeft('!=', Precedence.Equals, (left, _, right) => new NotEqualsAtom(left, right))\n .infixLeft('~', Precedence.Equivalent, (left, _, right) => new EquivalentAtom(left, right))\n .infixLeft('!~', Precedence.NotEquivalent, (left, _, right) => new NotEquivalentAtom(left, right))\n .infixLeft('<', Precedence.LessThan, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x < y))\n .infixLeft(\n '<=',\n Precedence.LessThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x <= y)\n )\n .infixLeft(\n '>',\n Precedence.GreaterThan,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x > y)\n )\n .infixLeft(\n '>=',\n Precedence.GreaterThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x >= y)\n )\n .infixLeft('&', Precedence.Ampersand, (left, _, right) => new ConcatAtom(left, right))\n .infixLeft('and', Precedence.Is, (left, _, right) => new AndAtom(left, right))\n .infixLeft('as', Precedence.Is, (left, _, right) => new AsAtom(left, right))\n .infixLeft('contains', Precedence.Is, (left, _, right) => new ContainsAtom(left, right))\n .infixLeft('div', Precedence.Is, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => (x / y) | 0))\n .infixLeft('in', Precedence.Is, (left, _, right) => new InAtom(left, right))\n .infixLeft('is', Precedence.Is, (left, _, right) => new IsAtom(left, right))\n .infixLeft('mod', Precedence.Is, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x % y))\n .infixLeft('or', Precedence.Is, (left, _, right) => new OrAtom(left, right))\n .infixLeft('xor', Precedence.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.js","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 { functions } from './functions';\nimport { tokenize } from './tokenize';\nimport { toTypedValue } from './utils';\n\n/**\n * Operator precedence\n * See: https://hl7.org/fhirpath/#operator-precedence\n */\nconst enum Precedence {\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}\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 `)`');\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: Precedence.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 if (!(left.name in functions)) {\n throw new Error('Unrecognized function: ' + left.name);\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: Precedence.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('+', Precedence.UnaryAdd, (_, right) => new UnaryOperatorAtom(right, (x) => x))\n .prefix('-', Precedence.UnarySubtract, (_, right) => new ArithemticOperatorAtom(right, right, (_, y) => -y))\n .infixLeft('.', Precedence.Dot, (left, _, right) => new DotAtom(left, right))\n .infixLeft('/', Precedence.Divide, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x / y))\n .infixLeft('*', Precedence.Multiply, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x * y))\n .infixLeft('+', Precedence.Add, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x + y))\n .infixLeft('-', Precedence.Subtract, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x - y))\n .infixLeft('|', Precedence.Union, (left, _, right) => new UnionAtom(left, right))\n .infixLeft('=', Precedence.Equals, (left, _, right) => new EqualsAtom(left, right))\n .infixLeft('!=', Precedence.Equals, (left, _, right) => new NotEqualsAtom(left, right))\n .infixLeft('~', Precedence.Equivalent, (left, _, right) => new EquivalentAtom(left, right))\n .infixLeft('!~', Precedence.NotEquivalent, (left, _, right) => new NotEquivalentAtom(left, right))\n .infixLeft('<', Precedence.LessThan, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x < y))\n .infixLeft(\n '<=',\n Precedence.LessThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x <= y)\n )\n .infixLeft(\n '>',\n Precedence.GreaterThan,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x > y)\n )\n .infixLeft(\n '>=',\n Precedence.GreaterThanOrEquals,\n (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x >= y)\n )\n .infixLeft('&', Precedence.Ampersand, (left, _, right) => new ConcatAtom(left, right))\n .infixLeft('and', Precedence.Is, (left, _, right) => new AndAtom(left, right))\n .infixLeft('as', Precedence.Is, (left, _, right) => new AsAtom(left, right))\n .infixLeft('contains', Precedence.Is, (left, _, right) => new ContainsAtom(left, right))\n .infixLeft('div', Precedence.Is, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => (x / y) | 0))\n .infixLeft('in', Precedence.Is, (left, _, right) => new InAtom(left, right))\n .infixLeft('is', Precedence.Is, (left, _, right) => new IsAtom(left, right))\n .infixLeft('mod', Precedence.Is, (left, _, right) => new ArithemticOperatorAtom(left, right, (x, y) => x % y))\n .infixLeft('or', Precedence.Is, (left, _, right) => new OrAtom(left, right))\n .infixLeft('xor', Precedence.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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenize.js","sources":["../../../src/fhirpath/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\n\nexport const FHIRPATH_KEYWORDS = ['true', 'false', 'and', 'as', 'contains', 'div', 'in', 'is', 'mod', 'or', 'xor'];\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":"
|
|
1
|
+
{"version":3,"file":"tokenize.js","sources":["../../../src/fhirpath/tokenize.ts"],"sourcesContent":["import { Token, Tokenizer } from '../fhirlexer';\n\nexport const FHIRPATH_KEYWORDS = ['true', 'false', 'and', 'as', 'contains', 'div', 'in', 'is', 'mod', 'or', 'xor'];\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":";;;AAEa,MAAA,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACtG,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;;;;"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export { LRUCache } from './cache.js';
|
|
2
2
|
export { MedplumClient } from './client.js';
|
|
3
|
+
export { AndAtom, ArithemticOperatorAtom, AsAtom, ConcatAtom, ContainsAtom, DotAtom, EmptySetAtom, EqualsAtom, EquivalentAtom, FhirPathAtom, FunctionAtom, InAtom, IndexerAtom, IsAtom, LiteralAtom, NotEqualsAtom, NotEquivalentAtom, OrAtom, SymbolAtom, UnaryOperatorAtom, UnionAtom, XorAtom } from './fhirpath/atoms.js';
|
|
4
|
+
export { evalFhirPath, evalFhirPathTyped, initFhirPathParserBuilder, parseFhirPath } from './fhirpath/parse.js';
|
|
5
|
+
export { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS, tokenize } from './fhirpath/tokenize.js';
|
|
6
|
+
export { booleanToTypedValue, fhirPathArrayEquals, fhirPathArrayEquivalent, fhirPathEquals, fhirPathEquivalent, fhirPathIs, fhirPathNot, getTypedPropertyValue, isPeriod, isQuantity, isQuantityEquivalent, removeDuplicates, toJsBoolean, toTypedValue } from './fhirpath/utils.js';
|
|
3
7
|
export { formatAddress, formatDate, formatDateTime, formatFamilyName, formatGivenName, formatHumanName, formatPeriod, formatTime, formatTiming, isValidDate } from './format.js';
|
|
4
8
|
export { COMPONENT_SEPARATOR, FIELD_SEPARATOR, Hl7Field, Hl7Message, Hl7Segment, SEGMENT_SEPARATOR } from './hl7.js';
|
|
5
9
|
export { parseJWTPayload } from './jwt.js';
|
|
@@ -9,8 +13,4 @@ export { DEFAULT_SEARCH_COUNT, Operator, formatSearchQuery, parseSearchDefinitio
|
|
|
9
13
|
export { SearchParameterType, getExpressionForResourceType, getSearchParameterDetails } from './searchparams.js';
|
|
10
14
|
export { PropertyType, buildTypeName, createSchema, getElementDefinition, getPropertyDisplayName, globalSchema, indexSearchParameter, indexStructureDefinition, indexStructureDefinitionBundle } from './types.js';
|
|
11
15
|
export { arrayBufferToBase64, arrayBufferToHex, calculateAge, calculateAgeString, capitalize, createReference, deepClone, deepEquals, findObservationInterval, findObservationReferenceRange, getCodeBySystem, getDateProperty, getDisplayString, getExtensionValue, getIdentifier, getImageSrc, getQuestionnaireAnswers, getReferenceString, isEmpty, isLowerCase, isObject, isProfileResource, isStringArray, isUUID, matchesRange, preciseEquals, preciseGreaterThan, preciseGreaterThanOrEquals, preciseLessThan, preciseLessThanOrEquals, resolveId, setCodeBySystem, stringify } from './utils.js';
|
|
12
|
-
export { AndAtom, ArithemticOperatorAtom, AsAtom, ConcatAtom, ContainsAtom, DotAtom, EmptySetAtom, EqualsAtom, EquivalentAtom, FhirPathAtom, FunctionAtom, InAtom, IndexerAtom, IsAtom, LiteralAtom, NotEqualsAtom, NotEquivalentAtom, OrAtom, SymbolAtom, UnaryOperatorAtom, UnionAtom, XorAtom } from './fhirpath/atoms.js';
|
|
13
|
-
export { evalFhirPath, evalFhirPathTyped, initFhirPathParserBuilder, parseFhirPath } from './fhirpath/parse.js';
|
|
14
|
-
export { FHIRPATH_KEYWORDS, FHIRPATH_OPERATORS, tokenize } from './fhirpath/tokenize.js';
|
|
15
|
-
export { booleanToTypedValue, fhirPathArrayEquals, fhirPathArrayEquivalent, fhirPathEquals, fhirPathEquivalent, fhirPathIs, fhirPathNot, getTypedPropertyValue, isPeriod, isQuantity, isQuantityEquivalent, removeDuplicates, toJsBoolean, toTypedValue } from './fhirpath/utils.js';
|
|
16
16
|
//# sourceMappingURL=index.js.map
|