@atomic-ehr/fhirpath 0.0.1-canary.0c6931e.20250727185306

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 (85) hide show
  1. package/README.md +473 -0
  2. package/dist/index.d.ts +462 -0
  3. package/dist/index.js +10307 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +58 -0
  6. package/src/analyzer/analyzer.ts +499 -0
  7. package/src/analyzer/model-provider.ts +244 -0
  8. package/src/analyzer/schemas/index.ts +2 -0
  9. package/src/analyzer/schemas/types.ts +40 -0
  10. package/src/analyzer/types.ts +142 -0
  11. package/src/api/builder.ts +157 -0
  12. package/src/api/errors.ts +145 -0
  13. package/src/api/expression.ts +156 -0
  14. package/src/api/index.ts +122 -0
  15. package/src/api/inspect.ts +99 -0
  16. package/src/api/registry.ts +128 -0
  17. package/src/api/types.ts +210 -0
  18. package/src/compiler/compiler.ts +546 -0
  19. package/src/compiler/index.ts +2 -0
  20. package/src/compiler/prototype-context-adapter.ts +99 -0
  21. package/src/compiler/types.ts +24 -0
  22. package/src/index.ts +107 -0
  23. package/src/interpreter/README.md +78 -0
  24. package/src/interpreter/interpreter.ts +475 -0
  25. package/src/interpreter/types.ts +108 -0
  26. package/src/lexer/char-tables.ts +37 -0
  27. package/src/lexer/errors.ts +31 -0
  28. package/src/lexer/index.ts +5 -0
  29. package/src/lexer/lexer.ts +745 -0
  30. package/src/lexer/token.ts +104 -0
  31. package/src/lexer2/index.md +232 -0
  32. package/src/lexer2/index.perf.test.ts +68 -0
  33. package/src/lexer2/index.test.ts +549 -0
  34. package/src/lexer2/index.ts +1251 -0
  35. package/src/lexer2/notes.md +173 -0
  36. package/src/lexer2/optimization-summary.md +718 -0
  37. package/src/parser/ast-factory.ts +220 -0
  38. package/src/parser/ast.ts +144 -0
  39. package/src/parser/collection-parser.ts +89 -0
  40. package/src/parser/diagnostic-messages.ts +216 -0
  41. package/src/parser/diagnostics.ts +85 -0
  42. package/src/parser/error-reporter.ts +230 -0
  43. package/src/parser/index.ts +3 -0
  44. package/src/parser/literal-parser.ts +103 -0
  45. package/src/parser/parse-error.ts +16 -0
  46. package/src/parser/parser-error-factory.ts +141 -0
  47. package/src/parser/parser-state.ts +134 -0
  48. package/src/parser/parser.ts +1272 -0
  49. package/src/parser/pprint.ts +169 -0
  50. package/src/parser/precedence-manager.ts +64 -0
  51. package/src/parser/source-mapper.ts +248 -0
  52. package/src/parser/special-constructs.ts +142 -0
  53. package/src/parser/token-navigator.ts +110 -0
  54. package/src/parser/types.ts +60 -0
  55. package/src/parser2/index.md +177 -0
  56. package/src/parser2/index.perf.test.ts +184 -0
  57. package/src/parser2/index.test.ts +305 -0
  58. package/src/parser2/index.ts +578 -0
  59. package/src/parser2/optimization-summary.md +176 -0
  60. package/src/registry/default-analyzers.ts +257 -0
  61. package/src/registry/default-compilers.ts +31 -0
  62. package/src/registry/index.ts +96 -0
  63. package/src/registry/operations/arithmetic.ts +506 -0
  64. package/src/registry/operations/collection.ts +425 -0
  65. package/src/registry/operations/comparison.ts +432 -0
  66. package/src/registry/operations/existence.ts +703 -0
  67. package/src/registry/operations/filtering.ts +358 -0
  68. package/src/registry/operations/literals.ts +341 -0
  69. package/src/registry/operations/logical.ts +439 -0
  70. package/src/registry/operations/math.ts +128 -0
  71. package/src/registry/operations/membership.ts +132 -0
  72. package/src/registry/operations/navigation.ts +52 -0
  73. package/src/registry/operations/string.ts +507 -0
  74. package/src/registry/operations/subsetting.ts +174 -0
  75. package/src/registry/operations/type-checking.ts +162 -0
  76. package/src/registry/operations/type-conversion.ts +404 -0
  77. package/src/registry/operations/type-operators.ts +308 -0
  78. package/src/registry/operations/utility.ts +644 -0
  79. package/src/registry/registry.ts +146 -0
  80. package/src/registry/types.ts +161 -0
  81. package/src/registry/utils/evaluation-helpers.ts +93 -0
  82. package/src/registry/utils/index.ts +3 -0
  83. package/src/registry/utils/type-system.ts +173 -0
  84. package/src/runtime/context.ts +158 -0
  85. package/src/runtime/debug-context.ts +135 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lexer/token.ts","../src/registry/registry.ts","../src/registry/default-analyzers.ts","../src/registry/utils/type-system.ts","../src/interpreter/types.ts","../src/registry/utils/evaluation-helpers.ts","../src/registry/utils/index.ts","../src/registry/operations/arithmetic.ts","../src/registry/operations/logical.ts","../src/registry/default-compilers.ts","../src/registry/operations/comparison.ts","../src/registry/operations/membership.ts","../src/runtime/context.ts","../src/registry/operations/type-operators.ts","../src/registry/operations/literals.ts","../src/registry/operations/existence.ts","../src/registry/operations/navigation.ts","../src/runtime/debug-context.ts","../src/registry/operations/utility.ts","../src/registry/operations/type-checking.ts","../src/registry/operations/math.ts","../src/registry/operations/filtering.ts","../src/registry/operations/string.ts","../src/registry/operations/type-conversion.ts","../src/registry/operations/subsetting.ts","../src/registry/operations/collection.ts","../src/registry/types.ts","../src/registry/index.ts","../src/lexer/char-tables.ts","../src/lexer/errors.ts","../src/lexer/lexer.ts","../src/parser/ast.ts","../src/parser/types.ts","../src/parser/diagnostics.ts","../src/parser/source-mapper.ts","../src/api/errors.ts","../src/parser/error-reporter.ts","../src/parser/diagnostic-messages.ts","../src/parser/token-navigator.ts","../src/parser/ast-factory.ts","../src/parser/parser-error-factory.ts","../src/parser/parser-state.ts","../src/parser/precedence-manager.ts","../src/parser/parse-error.ts","../src/parser/literal-parser.ts","../src/parser/collection-parser.ts","../src/parser/special-constructs.ts","../src/parser/parser.ts","../src/parser/pprint.ts","../src/index.ts","../src/api/index.ts","../src/interpreter/interpreter.ts","../src/compiler/compiler.ts","../src/analyzer/analyzer.ts","../src/api/expression.ts","../src/api/registry.ts","../src/api/inspect.ts","../src/api/builder.ts"],"names":["TokenType","PrimitiveType","rightBool","TypeSystem","children","init_types","init_registry","op","NodeType","init_errors","ErrorCode","result","precedence","token","right","leftResult","rightResult","evaluatedArgs","left","inspect"],"mappings":"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","file":"index.js","sourcesContent":["export enum TokenType {\n // Literals\n LITERAL = 'LITERAL', // Generic literal token for registry-based literals\n NULL = 'NULL', // {} (nullLiteral in grammar)\n TRUE = 'TRUE', // true\n FALSE = 'FALSE', // false\n STRING = 'STRING', // 'string value'\n NUMBER = 'NUMBER', // 123, 45.67, 0123 (allows leading zeros)\n DATE = 'DATE', // @2024, @2024-01, @2024-01-15\n DATETIME = 'DATETIME', // @2024-01-15T10:30:00Z\n TIME = 'TIME', // @T14:30:00\n \n // Identifiers\n IDENTIFIER = 'IDENTIFIER', // [A-Za-z_][A-Za-z0-9_]*\n DELIMITED_IDENTIFIER = 'DELIMITED_IDENTIFIER', // `identifier`\n \n // Special variables\n THIS = 'THIS', // $this\n INDEX = 'INDEX', // $index\n TOTAL = 'TOTAL', // $total\n \n // Environment variables\n ENV_VAR = 'ENV_VAR', // %context, %`vs-name`\n \n // Operators (by precedence)\n DOT = 'DOT', // .\n LBRACKET = 'LBRACKET', // [\n RBRACKET = 'RBRACKET', // ]\n LPAREN = 'LPAREN', // (\n RPAREN = 'RPAREN', // )\n \n // Arithmetic\n PLUS = 'PLUS', // +\n MINUS = 'MINUS', // -\n STAR = 'STAR', // *\n SLASH = 'SLASH', // /\n DIV = 'DIV', // div\n MOD = 'MOD', // mod\n CONCAT = 'CONCAT', // &\n \n // Type operators\n IS = 'IS', // is\n AS = 'AS', // as\n \n // Union\n PIPE = 'PIPE', // |\n \n // Comparison\n LT = 'LT', // <\n LTE = 'LTE', // <=\n GT = 'GT', // >\n GTE = 'GTE', // >=\n EQ = 'EQ', // =\n NEQ = 'NEQ', // !=\n EQUIV = 'EQUIV', // ~\n NEQUIV = 'NEQUIV', // !~\n \n // Membership\n IN = 'IN', // in\n CONTAINS = 'CONTAINS', // contains\n \n // Boolean\n AND = 'AND', // and\n OR = 'OR', // or\n XOR = 'XOR', // xor\n IMPLIES = 'IMPLIES', // implies\n NOT = 'NOT', // not\n \n // Collection\n LBRACE = 'LBRACE', // {\n RBRACE = 'RBRACE', // }\n \n // Other\n COMMA = 'COMMA', // ,\n EOF = 'EOF',\n \n // Units (for quantities)\n UNIT = 'UNIT', // year, month, 'mg', etc.\n \n // Trivia tokens (when preserving whitespace/comments)\n WS = 'WS', // Whitespace\n COMMENT = 'COMMENT', // /* Multi-line comment */\n LINE_COMMENT = 'LINE_COMMENT', // // Single-line comment\n}\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\nexport enum Channel {\n DEFAULT = 0,\n HIDDEN = 1 // For whitespace and comments\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n position: Position;\n channel?: Channel; // Optional channel for trivia\n operation?: any; // Operation from registry (using any to avoid circular dependency)\n literalValue?: any; // Parsed literal value for LITERAL tokens\n}","import { TokenType } from '../lexer/token';\nimport type { Operation, Operator, Function, Literal } from './types';\n\nexport class Registry {\n private static operations = new Map<string, Operation>();\n private static tokenToOperation = new Map<TokenType, Operation>();\n private static prefixOperators = new Map<TokenType, Operator>();\n private static infixOperators = new Map<TokenType, Operator>();\n private static postfixOperators = new Map<TokenType, Operator>();\n private static precedenceTable = new Map<TokenType, number>();\n private static literals: Literal[] = [];\n private static keywords = new Set<string>();\n \n static register(op: Operation) {\n this.operations.set(op.name, op);\n \n // Type-based registration\n switch (op.kind) {\n case 'operator':\n // Register by form to handle operators with same token but different forms\n if (op.syntax.form === 'prefix') {\n this.prefixOperators.set(op.syntax.token, op);\n } else if (op.syntax.form === 'infix') {\n this.infixOperators.set(op.syntax.token, op);\n } else if (op.syntax.form === 'postfix') {\n this.postfixOperators.set(op.syntax.token, op);\n }\n \n // For backward compatibility, store in tokenToOperation (prioritize infix)\n if (op.syntax.form === 'infix' || !this.tokenToOperation.has(op.syntax.token)) {\n this.tokenToOperation.set(op.syntax.token, op);\n }\n \n // Only set precedence for infix operators in the precedence table\n // Prefix and postfix operators have their own precedence but don't affect the infix precedence table\n if (op.syntax.form === 'infix') {\n this.precedenceTable.set(op.syntax.token, op.syntax.precedence);\n }\n // Register keyword operators (and, or, not, etc.)\n if (/^[a-z]+$/.test(op.name)) {\n this.keywords.add(op.name);\n }\n break;\n \n case 'literal':\n this.literals.push(op);\n // Register keyword literals\n if (op.syntax.keywords) {\n op.syntax.keywords.forEach(kw => this.keywords.add(kw));\n }\n break;\n \n case 'function':\n // Functions don't need special registration\n break;\n }\n }\n \n static get(name: string): Operation | undefined {\n return this.operations.get(name);\n }\n \n static getByToken(token: TokenType, form?: 'prefix' | 'infix' | 'postfix'): Operation | undefined {\n if (form === 'prefix') {\n return this.prefixOperators.get(token);\n } else if (form === 'infix') {\n return this.infixOperators.get(token);\n } else if (form === 'postfix') {\n return this.postfixOperators.get(token);\n }\n // Default fallback\n return this.tokenToOperation.get(token);\n }\n \n static getPrecedence(token: TokenType): number {\n return this.precedenceTable.get(token) ?? 0;\n }\n \n static isKeyword(word: string): boolean {\n return this.keywords.has(word);\n }\n \n static getLiterals(): Literal[] {\n return this.literals;\n }\n \n static matchLiteral(text: string): { operation: Literal; value: any } | null {\n for (const literal of this.literals) {\n if (literal.syntax.pattern && literal.syntax.pattern.test(text)) {\n return {\n operation: literal,\n value: literal.parse(text)\n };\n }\n if (literal.syntax.keywords && literal.syntax.keywords.includes(text)) {\n return {\n operation: literal,\n value: literal.parse(text)\n };\n }\n }\n return null;\n }\n \n // For special forms\n static getSpecialForms(): Operator[] {\n return Array.from(this.operations.values())\n .filter((op): op is Operator => op.kind === 'operator' && op.syntax.special === true);\n }\n \n // Check if token starts a composite operator\n static isCompositeOperatorStart(token: TokenType): boolean {\n // Used by lexer to know when to look ahead\n return [TokenType.LT, TokenType.GT, TokenType.NEQ, TokenType.NEQUIV]\n .includes(token);\n }\n \n // Clear registry (useful for testing)\n static clear() {\n this.operations.clear();\n this.tokenToOperation.clear();\n this.prefixOperators.clear();\n this.infixOperators.clear();\n this.postfixOperators.clear();\n this.precedenceTable.clear();\n this.literals = [];\n this.keywords.clear();\n }\n \n // Get all registered operations\n static getAllOperations(): Operation[] {\n return Array.from(this.operations.values());\n }\n \n // Get operators by form\n static getOperatorsByForm(form: 'prefix' | 'infix' | 'postfix'): Operator[] {\n return Array.from(this.operations.values())\n .filter((op): op is Operator => op.kind === 'operator' && op.syntax.form === form);\n }\n \n // Get all functions\n static getAllFunctions(): Function[] {\n return Array.from(this.operations.values())\n .filter((op): op is Function => op.kind === 'function');\n }\n}","import type { \n Analyzer, \n TypeInfo, \n TypeRef,\n Operator, \n Function, \n Literal,\n TypeConstraint,\n TypeInferenceRule,\n CardinalityInferenceRule\n} from './types';\nimport type { ModelProvider } from '../analyzer/types';\n\n// Helper to check if type matches constraint\nexport function matchesConstraint(type: TypeRef, constraint: TypeConstraint): boolean {\n if (constraint.kind === 'any') return true;\n \n if (!constraint.types) return true;\n \n // For now, simple type name matching\n // TODO: Handle inheritance and complex types\n let typeName = typeof type === 'string' ? type : (type as any).type || (type as any).name || 'unknown';\n \n // Normalize case - constraint types are capitalized, but actual types might be lowercase\n const normalizedTypeName = typeName.charAt(0).toUpperCase() + typeName.slice(1);\n \n return constraint.types.includes(normalizedTypeName) || constraint.types.includes(typeName);\n}\n\n// Helper to format constraint for error messages\nexport function formatConstraint(constraint: TypeConstraint): string {\n if (constraint.kind === 'any') return 'any type';\n if (!constraint.types || constraint.types.length === 0) return 'any type';\n if (constraint.types.length === 1) return constraint.types[0]!;\n return constraint.types.join(' or ');\n}\n\n// Helper to resolve type inference rule\nexport function resolveTypeInferenceRule(\n rule: TypeInferenceRule,\n input: TypeRef,\n args: TypeRef[],\n analyzer: Analyzer\n): TypeRef {\n if (typeof rule === 'string') {\n if (rule === 'preserve-input') return input;\n if (rule === 'promote-numeric') {\n // Check if we have numeric types\n const types = [input, ...args].map(t => {\n const rawType = typeof t === 'string' ? t : (t as any).type || (t as any).name || 'unknown';\n // Normalize to uppercase first letter\n return rawType.charAt(0).toUpperCase() + rawType.slice(1);\n });\n if (types.includes('Decimal')) return analyzer.resolveType('Decimal');\n if (types.includes('Integer')) return analyzer.resolveType('Integer');\n return input; // fallback\n }\n return analyzer.resolveType(rule); // Fixed type name - resolve through analyzer\n }\n \n if (typeof rule === 'function') {\n // TODO: We need to pass ModelProvider to the rule function\n // For now, just return input\n return input;\n }\n \n return input; // fallback\n}\n\n// Helper to resolve cardinality inference rule\nexport function resolveCardinalityInferenceRule(\n rule: CardinalityInferenceRule,\n inputIsSingleton: boolean,\n argsAreSingleton: boolean[]\n): boolean {\n if (rule === 'singleton') return true;\n if (rule === 'collection') return false;\n if (rule === 'preserve-input') return inputIsSingleton;\n if (rule === 'all-singleton') return inputIsSingleton && argsAreSingleton.every(s => s);\n \n if (typeof rule === 'function') {\n return rule(inputIsSingleton, argsAreSingleton);\n }\n \n return inputIsSingleton; // fallback\n}\n\n// Default analyzer for operators\nexport function defaultOperatorAnalyze(\n this: Operator,\n analyzer: Analyzer, \n input: TypeInfo, \n args: TypeInfo[]\n): TypeInfo {\n const { signature } = this;\n \n // Validate parameter count\n const expectedParams = signature.parameters.length;\n if (args.length !== expectedParams) {\n analyzer.error(`Operator '${this.name}' expects ${expectedParams} parameter(s) but got ${args.length}`);\n }\n \n // Validate parameter types and cardinality\n signature.parameters.forEach((param, i) => {\n const arg = args[i];\n if (!arg) return;\n \n // Check type constraint\n if (param.types && !matchesConstraint(arg.type, param.types)) {\n const argTypeName = typeof arg.type === 'string' \n ? arg.type \n : (arg.type as any).type || (arg.type as any).name || 'unknown';\n analyzer.error(\n `Operator '${this.name}' parameter '${param.name}' expects ${formatConstraint(param.types)} but got ${argTypeName}`\n );\n }\n \n // Check cardinality constraint\n if (param.cardinality) {\n if (param.cardinality === 'singleton' && !arg.isSingleton) {\n analyzer.error(\n `Operator '${this.name}' parameter '${param.name}' requires singleton value but got collection`\n );\n } else if (param.cardinality === 'collection' && arg.isSingleton) {\n analyzer.error(\n `Operator '${this.name}' parameter '${param.name}' requires collection but got singleton`\n );\n }\n // 'any' accepts both\n }\n });\n \n // Determine output type\n const outputType = resolveTypeInferenceRule(\n signature.output.type,\n input.type,\n args.map(a => a.type),\n analyzer\n );\n \n // Determine output cardinality\n const isSingleton = resolveCardinalityInferenceRule(\n signature.output.cardinality,\n input.isSingleton,\n args.map(a => a.isSingleton)\n );\n \n return { type: outputType, isSingleton };\n}\n\n// Default analyzer for functions\nexport function defaultFunctionAnalyze(\n this: Function,\n analyzer: Analyzer, \n input: TypeInfo, \n args: TypeInfo[]\n): TypeInfo {\n const { signature } = this;\n \n // Check input constraints if specified\n if (signature.input) {\n if (signature.input.types && !matchesConstraint(input.type, signature.input.types)) {\n const inputTypeName = typeof input.type === 'string' \n ? input.type \n : (input.type as any).type || (input.type as any).name || 'unknown';\n analyzer.error(\n `Function '${this.name}' expects input of type ${formatConstraint(signature.input.types)} but got ${inputTypeName}`\n );\n }\n \n if (signature.input.cardinality) {\n if (signature.input.cardinality === 'singleton' && !input.isSingleton) {\n analyzer.error(`Function '${this.name}' requires singleton input but got collection`);\n } else if (signature.input.cardinality === 'collection' && input.isSingleton) {\n analyzer.error(`Function '${this.name}' requires collection input but got singleton`);\n }\n }\n }\n \n // Validate parameters\n const requiredParams = signature.parameters.filter(p => !p.optional);\n if (args.length < requiredParams.length) {\n analyzer.error(\n `Function '${this.name}' requires at least ${requiredParams.length} parameter(s) but got ${args.length}`\n );\n }\n \n if (args.length > signature.parameters.length) {\n analyzer.error(\n `Function '${this.name}' expects at most ${signature.parameters.length} parameter(s) but got ${args.length}`\n );\n }\n \n // Check each parameter\n signature.parameters.forEach((param, i) => {\n const arg = args[i];\n if (!arg && !param.optional) {\n analyzer.error(`Function '${this.name}' parameter '${param.name}' is required`);\n return;\n }\n if (!arg) return; // Optional parameter not provided\n \n // Check type constraint\n if (param.types && !matchesConstraint(arg.type, param.types)) {\n const argTypeName = typeof arg.type === 'string' \n ? arg.type \n : (arg.type as any).type || (arg.type as any).name || 'unknown';\n analyzer.error(\n `Function '${this.name}' parameter '${param.name}' expects ${formatConstraint(param.types)} but got ${argTypeName}`\n );\n }\n \n // Check cardinality constraint\n if (param.cardinality) {\n if (param.cardinality === 'singleton' && !arg.isSingleton) {\n analyzer.error(\n `Function '${this.name}' parameter '${param.name}' requires singleton value but got collection`\n );\n } else if (param.cardinality === 'collection' && arg.isSingleton) {\n analyzer.error(\n `Function '${this.name}' parameter '${param.name}' requires collection but got singleton`\n );\n }\n }\n });\n \n // Determine output type\n const outputType = resolveTypeInferenceRule(\n signature.output.type,\n input.type,\n args.map(a => a.type),\n analyzer\n );\n \n // Determine output cardinality\n const isSingleton = resolveCardinalityInferenceRule(\n signature.output.cardinality,\n input.isSingleton,\n args.map(a => a.isSingleton)\n );\n \n return { type: outputType, isSingleton };\n}\n\n// Default analyzer for literals\nexport function defaultLiteralAnalyze(\n this: Literal,\n analyzer: Analyzer, \n input: TypeInfo, \n args: TypeInfo[]\n): TypeInfo {\n // Literals have fixed output type and cardinality\n return {\n type: analyzer.resolveType(this.signature.output.type),\n isSingleton: true\n };\n}","/**\n * FHIRPath Type System\n * \n * Handles type checking and casting for FHIRPath expressions.\n * Supports primitive types and FHIR resource types.\n */\n\nexport enum PrimitiveType {\n Boolean = 'Boolean',\n String = 'String',\n Integer = 'Integer',\n Decimal = 'Decimal',\n Date = 'Date',\n DateTime = 'DateTime',\n Time = 'Time',\n Quantity = 'Quantity'\n}\n\n/**\n * Type information for a value\n */\nexport interface TypeInfo {\n name: string;\n isPrimitive: boolean;\n isResource?: boolean;\n isList?: boolean;\n}\n\n/**\n * Type registry for checking and casting\n */\nexport class TypeSystem {\n private static primitiveTypes = new Set<string>(Object.values(PrimitiveType));\n \n /**\n * Check if a value is of a specific type\n */\n static isType(value: any, typeName: string): boolean {\n // Handle primitive types\n if (this.primitiveTypes.has(typeName)) {\n return this.isPrimitiveType(value, typeName as PrimitiveType);\n }\n \n // Handle FHIR resource types\n // For now, check if the object has a resourceType property matching the type name\n if (typeof value === 'object' && value !== null) {\n return value.resourceType === typeName;\n }\n \n return false;\n }\n \n /**\n * Check if a value is a primitive type\n */\n private static isPrimitiveType(value: any, type: PrimitiveType): boolean {\n switch (type) {\n case PrimitiveType.Boolean:\n return typeof value === 'boolean';\n \n case PrimitiveType.String:\n return typeof value === 'string';\n \n case PrimitiveType.Integer:\n return typeof value === 'number' && Number.isInteger(value);\n \n case PrimitiveType.Decimal:\n return typeof value === 'number';\n \n case PrimitiveType.Date:\n // Check if it's a date string in FHIR format (YYYY-MM-DD)\n if (typeof value === 'string') {\n return /^\\d{4}(-\\d{2}(-\\d{2})?)?$/.test(value);\n }\n return false;\n \n case PrimitiveType.DateTime:\n // Check if it's a datetime string in FHIR format\n if (typeof value === 'string') {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?(Z|[+-]\\d{2}:\\d{2})?$/.test(value);\n }\n return false;\n \n case PrimitiveType.Time:\n // Check if it's a time string in FHIR format (HH:MM:SS)\n if (typeof value === 'string') {\n return /^\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?$/.test(value);\n }\n return false;\n \n case PrimitiveType.Quantity:\n // Check if it's a quantity object with value and optional unit\n if (typeof value === 'object' && value !== null) {\n return typeof value.value === 'number' && \n (value.unit === undefined || typeof value.unit === 'string');\n }\n return false;\n \n default:\n return false;\n }\n }\n \n /**\n * Cast a value to a specific type (returns empty if cast fails)\n */\n static cast(value: any, typeName: string): any | null {\n // If already the correct type, return as-is\n if (this.isType(value, typeName)) {\n return value;\n }\n \n // Handle FHIR resource casting\n if (!this.primitiveTypes.has(typeName)) {\n // Can't cast between different resource types\n return null;\n }\n \n // Handle primitive type casting\n return this.castToPrimitive(value, typeName as PrimitiveType);\n }\n \n /**\n * Cast to primitive type\n */\n private static castToPrimitive(value: any, type: PrimitiveType): any | null {\n // For now, return null for failed casts\n // Later we can implement actual conversions (e.g., string to number)\n return null;\n }\n \n /**\n * Get type information for a value\n */\n static getType(value: any): TypeInfo {\n // Check primitive types\n if (typeof value === 'boolean') {\n return { name: PrimitiveType.Boolean, isPrimitive: true };\n }\n if (typeof value === 'string') {\n // Check for specific string formats\n if (/^\\d{4}(-\\d{2}(-\\d{2})?)?$/.test(value)) {\n return { name: PrimitiveType.Date, isPrimitive: true };\n }\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(value)) {\n return { name: PrimitiveType.DateTime, isPrimitive: true };\n }\n if (/^\\d{2}:\\d{2}:\\d{2}/.test(value)) {\n return { name: PrimitiveType.Time, isPrimitive: true };\n }\n return { name: PrimitiveType.String, isPrimitive: true };\n }\n if (typeof value === 'number') {\n return { \n name: Number.isInteger(value) ? PrimitiveType.Integer : PrimitiveType.Decimal, \n isPrimitive: true \n };\n }\n \n // Check for FHIR resources\n if (typeof value === 'object' && value !== null) {\n if (value.resourceType) {\n return { name: value.resourceType, isPrimitive: false, isResource: true };\n }\n if (typeof value.value === 'number' && (value.unit || value.code)) {\n return { name: PrimitiveType.Quantity, isPrimitive: true };\n }\n }\n \n // Unknown type\n return { name: 'Unknown', isPrimitive: false };\n }\n}","// Core types for FHIRPath interpreter following the stream-processing mental model\n\n/**\n * The result of evaluating any FHIRPath expression.\n * Every expression returns a collection and potentially modified context.\n */\nimport type { RuntimeContext } from '../runtime/context';\n\nexport interface EvaluationResult {\n value: any[]; // Always a collection (even single values are collections of one)\n context: RuntimeContext;\n}\n\n\n/**\n * Error thrown during evaluation with position information\n */\nexport class EvaluationError extends Error {\n constructor(\n message: string,\n public position?: { line: number; column: number; offset: number }\n ) {\n super(message);\n this.name = 'EvaluationError';\n }\n}\n\n/**\n * Type information for runtime type checking\n */\nexport interface TypeInfo {\n namespace: string; // 'System' or 'FHIR'\n name: string; // Type name like 'String', 'Patient'\n isCollection?: boolean;\n}\n\n/**\n * Helper type for ensuring we always work with collections\n */\nexport type Collection<T = any> = T[];\n\n/**\n * Singleton conversion result\n */\nexport type SingletonResult<T = any> = T | undefined;\n\n/**\n * Helper functions for working with collections\n */\nexport const CollectionUtils = {\n /**\n * Convert any value to a collection\n */\n toCollection(value: any): any[] {\n if (value === null || value === undefined) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n },\n\n /**\n * Apply singleton evaluation rules\n * @returns The single value or undefined if rules don't apply\n * @throws Error if multiple items when single expected\n */\n toSingleton(collection: any[], expectedType?: string): SingletonResult {\n if (collection.length === 0) {\n return undefined; // Empty propagates\n }\n \n if (collection.length === 1) {\n const value = collection[0];\n \n // Rule 2: Collection with one item, expecting Boolean → true\n if (expectedType === 'boolean' && typeof value !== 'boolean') {\n return true;\n }\n \n // Rule 1: Collection with one item convertible to expected type → use it\n return value;\n }\n \n // Rule 4: Multiple items → ERROR\n throw new EvaluationError(`Expected single value but got ${collection.length} items`);\n },\n\n /**\n * Check if a collection is empty\n */\n isEmpty(collection: any[]): boolean {\n return collection.length === 0;\n },\n\n /**\n * Flatten nested collections\n */\n flatten(collection: any[]): any[] {\n const result: any[] = [];\n for (const item of collection) {\n if (Array.isArray(item)) {\n result.push(...item);\n } else {\n result.push(item);\n }\n }\n return result;\n }\n};","import { CollectionUtils } from '../../interpreter/types';\n\n/**\n * Convert collection to singleton value\n */\nexport function toSingleton(collection: any[]): any {\n return CollectionUtils.toSingleton(collection);\n}\n\n/**\n * Convert value to boolean according to FHIRPath rules\n */\nexport function toBoolean(value: any): boolean {\n // Handle direct boolean\n if (typeof value === 'boolean') {\n return value;\n }\n \n // Handle null/undefined as false\n if (value == null) {\n return false;\n }\n \n // Handle empty string as false\n if (value === '') {\n return false;\n }\n \n // Handle zero as false\n if (value === 0) {\n return false;\n }\n \n // Everything else is true\n return true;\n}\n\n/**\n * Determines if a value is truthy according to FHIRPath rules\n */\nexport function isTruthy(value: any[]): boolean {\n if (value.length === 0) {\n return false;\n }\n \n // Convert to singleton\n const singleton = toSingleton(value);\n \n // Rule: true if singleton is true, false if singleton is false\n if (typeof singleton === 'boolean') {\n return singleton;\n }\n \n // Rule: singleton exists and is not false = true\n return singleton !== undefined;\n}\n\n/**\n * Checks if two values are equivalent for FHIRPath comparison\n */\nexport function isEquivalent(a: any, b: any): boolean {\n // Handle null/undefined\n if (a === b) return true;\n if (a == null || b == null) return false;\n \n // Handle different types\n if (typeof a !== typeof b) return false;\n \n // Handle primitives\n if (typeof a !== 'object') return a === b;\n \n // Handle arrays\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isEquivalent(a[i], b[i])) return false;\n }\n return true;\n }\n \n // Handle objects (deep comparison)\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n \n if (keysA.length !== keysB.length) return false;\n \n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!isEquivalent(a[key], b[key])) return false;\n }\n \n return true;\n}","export { TypeSystem } from './type-system';\nexport { isTruthy, isEquivalent, toSingleton, toBoolean } from './evaluation-helpers';\nexport type { TypeInfo, PrimitiveType } from './type-system';","import { TokenType } from '../../lexer/token';\nimport type { Operator, TypeRef } from '../types';\nimport { defaultOperatorAnalyze } from '../default-analyzers';\nimport { toSingleton } from '../utils';\n\n// Helper to promote numeric types\nfunction promoteNumericType(left: TypeRef, right: TypeRef): TypeRef {\n const leftName = typeof left === 'string' ? left : (left as any).name;\n const rightName = typeof right === 'string' ? right : (right as any).name;\n \n if (leftName === 'Decimal' || rightName === 'Decimal') return 'Decimal';\n if (leftName === 'Integer' && rightName === 'Integer') return 'Integer';\n return 'Decimal'; // Default to Decimal for safety\n}\n\nexport const plusOperator: Operator = {\n name: '+',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.PLUS,\n precedence: 9, // ADDITIVE precedence\n associativity: 'left',\n notation: 'a + b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal', 'String', 'Date', 'DateTime', 'Time'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal', 'String', 'Quantity'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'promote-numeric',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: function(analyzer, input, args) {\n // First run default validation\n const result = defaultOperatorAnalyze.call(this, analyzer, input, args);\n \n // Additional validation: both operands should be same \"category\" (numeric vs string)\n const leftType = args[0]?.type;\n const rightType = args[1]?.type;\n \n const leftTypeName = typeof leftType === 'string' ? leftType : (leftType as any).type || (leftType as any).name || 'unknown';\n const rightTypeName = typeof rightType === 'string' ? rightType : (rightType as any).type || (rightType as any).name || 'unknown';\n \n const isLeftString = leftTypeName === 'String' || leftTypeName === 'string';\n const isRightString = rightTypeName === 'String' || rightTypeName === 'string';\n const isLeftNumeric = ['Integer', 'Decimal', 'integer', 'decimal'].includes(leftTypeName);\n const isRightNumeric = ['Integer', 'Decimal', 'integer', 'decimal'].includes(rightTypeName);\n \n // If one is string and other is numeric, that's an error\n if ((isLeftString && isRightNumeric) || (isLeftNumeric && isRightString)) {\n analyzer.error(`Operator '+' cannot be applied to types ${leftTypeName} and ${rightTypeName}`);\n }\n \n return result;\n },\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n // String concatenation\n if (typeof l === 'string' || typeof r === 'string') {\n return { value: [String(l) + String(r)], context };\n }\n \n // Numeric addition\n return { value: [l + r], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n if (typeof l === 'string' || typeof r === 'string') {\n return [String(l) + String(r)];\n }\n \n return [l + r];\n },\n type: promoteNumericType(args[0]?.type, args[1]?.type),\n isSingleton: true,\n source: `${args[0]?.source || ''} + ${args[1]?.source || ''}`\n })\n};\n\nexport const minusOperator: Operator = {\n name: '-',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.MINUS,\n precedence: 9, // ADDITIVE precedence\n associativity: 'left',\n notation: 'a - b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal', 'Date', 'DateTime', 'Time'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal', 'Quantity'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'promote-numeric',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n return { value: [l - r], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n return [toSingleton(left) - toSingleton(right)];\n },\n type: promoteNumericType(args[0]?.type, args[1]?.type),\n isSingleton: true,\n source: `${args[0]?.source || ''} - ${args[1]?.source || ''}`\n })\n};\n\nexport const multiplyOperator: Operator = {\n name: '*',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.STAR,\n precedence: 10, // MULTIPLICATIVE precedence\n associativity: 'left',\n notation: 'a * b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'promote-numeric',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n return { value: [l * r], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n return [toSingleton(left) * toSingleton(right)];\n },\n type: promoteNumericType(args[0]?.type, args[1]?.type),\n isSingleton: true,\n source: `${args[0]?.source || ''} * ${args[1]?.source || ''}`\n })\n};\n\nexport const divideOperator: Operator = {\n name: '/',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.SLASH,\n precedence: 10, // MULTIPLICATIVE precedence\n associativity: 'left',\n notation: 'a / b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'Decimal', // Division always returns Decimal\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n if (r === 0) return { value: [], context }; // Division by zero returns empty\n \n return { value: [l / r], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n const r = toSingleton(right);\n if (r === 0) return [];\n \n return [toSingleton(left) / r];\n },\n type: compiler.resolveType('Decimal'),\n isSingleton: true,\n source: `${args[0]?.source || ''} / ${args[1]?.source || ''}`\n })\n};\n\nexport const modOperator: Operator = {\n name: 'mod',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.MOD,\n precedence: 10, // MULTIPLICATIVE precedence\n associativity: 'left',\n notation: 'a mod b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'promote-numeric',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n if (r === 0) return { value: [], context }; // Modulo by zero returns empty\n \n return { value: [l % r], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n const r = toSingleton(right);\n if (r === 0) return [];\n \n return [toSingleton(left) % r];\n },\n type: promoteNumericType(args[0]?.type, args[1]?.type),\n isSingleton: true,\n source: `${args[0]?.source || ''} mod ${args[1]?.source || ''}`\n })\n};\n\nexport const divOperator: Operator = {\n name: 'div',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.DIV,\n precedence: 10, // MULTIPLICATIVE precedence\n associativity: 'left',\n notation: 'a div b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'Integer', // Integer division\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const l = toSingleton(left);\n const r = toSingleton(right);\n \n if (r === 0) return { value: [], context }; // Division by zero returns empty\n \n return { value: [Math.floor(l / r)], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n const r = toSingleton(right);\n if (r === 0) return [];\n \n return [Math.floor(toSingleton(left) / r)];\n },\n type: compiler.resolveType('Integer'),\n isSingleton: true,\n source: `${args[0]?.source || ''} div ${args[1]?.source || ''}`\n })\n};\n\nexport const unaryPlusOperator: Operator = {\n name: 'unary+',\n kind: 'operator',\n \n syntax: {\n form: 'prefix',\n token: TokenType.PLUS,\n precedence: 11, // UNARY precedence\n notation: '+a'\n },\n \n signature: {\n parameters: [\n { name: 'operand', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, operand) => {\n if (operand.length === 0) return { value: [], context };\n return { value: operand, context }; // Unary plus is identity\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => args[0]?.fn(ctx) || [],\n type: args[0]?.type,\n isSingleton: true,\n source: `+${args[0]?.source || ''}`\n })\n};\n\nexport const unaryMinusOperator: Operator = {\n name: 'unary-',\n kind: 'operator',\n \n syntax: {\n form: 'prefix',\n token: TokenType.MINUS,\n precedence: 11, // UNARY precedence\n notation: '-a'\n },\n \n signature: {\n parameters: [\n { name: 'operand', types: { kind: 'union', types: ['Integer', 'Decimal'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, operand) => {\n if (operand.length === 0) return { value: [], context };\n \n const val = toSingleton(operand);\n return { value: [-val], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const operand = args[0]?.fn(ctx) || [];\n if (operand.length === 0) return [];\n return [-toSingleton(operand)];\n },\n type: args[0]?.type,\n isSingleton: true,\n source: `-${args[0]?.source || ''}`\n })\n};\n\nexport const concatOperator: Operator = {\n name: '&',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.CONCAT,\n precedence: 9, // ADDITIVE precedence\n associativity: 'left',\n notation: 'a & b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'primitive', types: ['String'] }, cardinality: 'singleton' },\n { name: 'right', types: { kind: 'primitive', types: ['String'] }, cardinality: 'singleton' }\n ],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n // String concatenation requires both operands to be singletons\n if (left.length > 1 || right.length > 1) return { value: [], context };\n \n const l = left[0];\n const r = right[0];\n \n return { value: [String(l) + String(r)], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n // String concatenation requires both operands to be singletons\n if (left.length > 1 || right.length > 1) return [];\n \n return [String(left[0]) + String(right[0])];\n },\n type: compiler.resolveType('String'),\n isSingleton: true,\n source: `${args[0]?.source || ''} & ${args[1]?.source || ''}`\n })\n};\n\n// Export all arithmetic operators\nexport const arithmeticOperators = [\n plusOperator,\n minusOperator,\n multiplyOperator,\n divideOperator,\n modOperator,\n divOperator,\n concatOperator,\n unaryPlusOperator,\n unaryMinusOperator\n];","import { TokenType } from '../../lexer/token';\nimport type { Operator, Function } from '../types';\nimport { defaultOperatorAnalyze, defaultFunctionAnalyze } from '../default-analyzers';\nimport { toBoolean, toSingleton } from '../utils';\n\nexport const andOperator: Operator = {\n name: 'and',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.AND,\n precedence: 3, // AND precedence\n associativity: 'left',\n notation: 'a and b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'any' }, cardinality: 'any' },\n { name: 'right', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false // Special three-valued logic\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n // Three-valued logic for and:\n // true and true = true\n // true and false = false\n // true and empty = empty\n // false and anything = false\n // empty and true = empty\n // empty and false = false\n // empty and empty = empty\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (!leftBool) {\n // false and anything = false\n return { value: [false], context };\n }\n // left is true\n if (rightEmpty) {\n // true and empty = empty\n return { value: [], context };\n }\n // true and right\n const rightBool = toBoolean(toSingleton(right));\n return { value: [rightBool], context };\n }\n \n // left is empty\n if (rightEmpty) {\n // empty and empty = empty\n return { value: [], context };\n }\n \n const rightBool = toBoolean(toSingleton(right));\n if (!rightBool) {\n // empty and false = false\n return { value: [false], context };\n }\n // empty and true = empty\n return { value: [], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (!leftBool) return [false];\n if (rightEmpty) return [];\n return [toBoolean(toSingleton(right))];\n }\n \n if (rightEmpty) return [];\n const rightBool = toBoolean(toSingleton(right));\n if (!rightBool) return [false];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${args[0]?.source || ''} and ${args[1]?.source || ''}`\n })\n};\n\nexport const orOperator: Operator = {\n name: 'or',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.OR,\n precedence: 2, // OR precedence\n associativity: 'left',\n notation: 'a or b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'any' }, cardinality: 'any' },\n { name: 'right', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false // Special three-valued logic\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n // Three-valued logic for or:\n // true or anything = true\n // false or true = true\n // false or false = false\n // false or empty = empty\n // empty or true = true\n // empty or false = empty\n // empty or empty = empty\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (leftBool) {\n // true or anything = true\n return { value: [true], context };\n }\n // left is false\n if (rightEmpty) {\n // false or empty = empty\n return { value: [], context };\n }\n // false or right\n const rightBool = toBoolean(toSingleton(right));\n return { value: [rightBool], context };\n }\n \n // left is empty\n if (rightEmpty) {\n // empty or empty = empty\n return { value: [], context };\n }\n \n const rightBool = toBoolean(toSingleton(right));\n if (rightBool) {\n // empty or true = true\n return { value: [true], context };\n }\n // empty or false = empty\n return { value: [], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (leftBool) return [true];\n if (rightEmpty) return [];\n return [toBoolean(toSingleton(right))];\n }\n \n if (rightEmpty) return [];\n const rightBool = toBoolean(toSingleton(right));\n if (rightBool) return [true];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${args[0]?.source || ''} or ${args[1]?.source || ''}`\n })\n};\n\nexport const notFunction: Function = {\n name: 'not',\n kind: 'function',\n \n syntax: {\n notation: 'not()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [], // not() takes no parameters\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false, // not() on empty returns true\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n // not() should not accept any parameters\n if (args.length > 0) {\n throw new Error('not() function does not accept any parameters');\n }\n \n // not() behavior per spec:\n // not(true) = false\n // not(false) = true \n // not(empty) = true\n // not(single non-boolean) = false\n // not(multiple values) = empty\n \n if (input.length === 0) {\n // not empty = true\n return { value: [true], context };\n }\n \n if (input.length > 1) {\n // not(multiple values) = empty\n return { value: [], context };\n }\n \n // Single value - check if it's a boolean\n const singleValue = input[0];\n if (typeof singleValue === 'boolean') {\n // Negate boolean value\n return { value: [!singleValue], context };\n }\n \n // Non-boolean single value returns false\n return { value: [false], context };\n },\n \n compile: (compiler, input) => ({\n fn: (ctx) => {\n const inputValue = input?.fn(ctx) || [];\n \n // Match interpreter behavior\n if (inputValue.length === 0) return [true];\n if (inputValue.length > 1) return [];\n \n const singleValue = inputValue[0];\n if (typeof singleValue === 'boolean') {\n return [!singleValue];\n }\n \n // Non-boolean single value returns false\n return [false];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input?.source || ''}.not()`\n })\n};\n\nexport const xorOperator: Operator = {\n name: 'xor',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.XOR,\n precedence: 2, // OR precedence\n associativity: 'left',\n notation: 'a xor b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'any' }, cardinality: 'any' },\n { name: 'right', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n const leftBool = toBoolean(toSingleton(left));\n const rightBool = toBoolean(toSingleton(right));\n \n // XOR: true when exactly one is true\n return { value: [leftBool !== rightBool], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n \n if (left.length === 0 || right.length === 0) return [];\n \n const leftBool = toBoolean(toSingleton(left));\n const rightBool = toBoolean(toSingleton(right));\n \n return [leftBool !== rightBool];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${args[0]?.source || ''} xor ${args[1]?.source || ''}`\n })\n};\n\nexport const impliesOperator: Operator = {\n name: 'implies',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.IMPLIES,\n precedence: 1, // IMPLIES - lowest precedence\n associativity: 'left',\n notation: 'a implies b'\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'any' }, cardinality: 'any' },\n { name: 'right', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false // Special three-valued logic\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, left, right) => {\n // Implies truth table:\n // true implies true = true\n // true implies false = false\n // true implies empty = empty\n // false implies anything = true\n // empty implies true = true\n // empty implies false = empty\n // empty implies empty = empty\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (!leftBool) {\n // false implies anything = true\n return { value: [true], context };\n }\n // left is true\n if (rightEmpty) {\n // true implies empty = empty\n return { value: [], context };\n }\n // true implies right\n const rightBool = toBoolean(toSingleton(right));\n return { value: [rightBool], context };\n }\n \n // left is empty\n if (rightEmpty) {\n // empty implies empty = empty\n return { value: [], context };\n }\n \n const rightBool = toBoolean(toSingleton(right));\n if (rightBool) {\n // empty implies true = true\n return { value: [true], context };\n }\n // empty implies false = empty\n return { value: [], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const left = args[0]?.fn(ctx) || [];\n const right = args[1]?.fn(ctx) || [];\n \n const leftEmpty = left.length === 0;\n const rightEmpty = right.length === 0;\n \n if (!leftEmpty) {\n const leftBool = toBoolean(toSingleton(left));\n if (!leftBool) return [true];\n if (rightEmpty) return [];\n return [toBoolean(toSingleton(right))];\n }\n \n if (rightEmpty) return [];\n const rightBool = toBoolean(toSingleton(right));\n if (rightBool) return [true];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${args[0]?.source || ''} implies ${args[1]?.source || ''}`\n })\n};\n\n// Export all logical operators\nexport const logicalOperators = [\n andOperator,\n orOperator,\n xorOperator,\n impliesOperator\n];\n\n// Export logical functions\nexport const logicalFunctions = [\n notFunction\n];","import type { Compiler, CompiledExpression } from './types';\n\nexport function defaultFunctionCompile(\n compiler: Compiler,\n input: CompiledExpression,\n args: CompiledExpression[]\n): CompiledExpression {\n // Default implementation returns a simple pass-through\n return {\n fn: (ctx) => {\n throw new Error('Function compile not implemented');\n },\n type: compiler.resolveType('Any'),\n isSingleton: false\n };\n}\n\nexport function defaultOperatorCompile(\n compiler: Compiler,\n left: CompiledExpression,\n right: CompiledExpression[]\n): CompiledExpression {\n // Default implementation returns a simple pass-through\n return {\n fn: (ctx) => {\n throw new Error('Operator compile not implemented');\n },\n type: compiler.resolveType('Any'),\n isSingleton: false\n };\n}","import { TokenType } from '../../lexer/token';\nimport type { Operator } from '../types';\nimport { defaultOperatorAnalyze } from '../default-analyzers';\nimport { defaultOperatorCompile } from '../default-compilers';\n\n// Helper function for equality comparison\nfunction isEqual(left: any, right: any): boolean {\n if (left === right) return true;\n if (left == null || right == null) return false;\n \n // Array comparison\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) return false;\n return left.every((v, i) => isEqual(v, right[i]));\n }\n \n // Object comparison (for complex types)\n if (typeof left === 'object' && typeof right === 'object') {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n return leftKeys.every(key => isEqual(left[key], right[key]));\n }\n \n return false;\n}\n\n// Comparison operators\nexport const eqOperator: Operator = {\n name: '=',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.EQ,\n precedence: 5, // EQUALITY precedence\n associativity: 'left',\n notation: 'a = b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n // FHIRPath equality compares entire collections if both have multiple items\n if (left.length > 1 || right.length > 1) {\n // Collection equality\n return { value: [isEqual(left, right)], context };\n }\n \n // Singleton comparison\n return { value: [isEqual(left[0], right[0])], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n // FHIRPath equality compares entire collections if both have multiple items\n if (left.length > 1 || right.length > 1) {\n return [isEqual(left, right)];\n }\n \n return [isEqual(left[0], right[0])];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const neqOperator: Operator = {\n name: '!=',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.NEQ,\n precedence: 5, // EQUALITY precedence\n associativity: 'left',\n notation: 'a != b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n \n // FHIRPath inequality compares entire collections if both have multiple items\n if (left.length > 1 || right.length > 1) {\n return { value: [!isEqual(left, right)], context };\n }\n \n return { value: [!isEqual(left[0], right[0])], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n \n // FHIRPath inequality compares entire collections if both have multiple items\n if (left.length > 1 || right.length > 1) {\n return [!isEqual(left, right)];\n }\n \n return [!isEqual(left[0], right[0])];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const ltOperator: Operator = {\n name: '<',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.LT,\n precedence: 6, // RELATIONAL precedence\n associativity: 'left',\n notation: 'a < b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return { value: [l < r], context };\n if (typeof l === 'string' && typeof r === 'string') return { value: [l < r], context };\n if (l instanceof Date && r instanceof Date) return { value: [l < r], context };\n return { value: [], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return [l < r];\n if (typeof l === 'string' && typeof r === 'string') return [l < r];\n if (l instanceof Date && r instanceof Date) return [l < r];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const gtOperator: Operator = {\n name: '>',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.GT,\n precedence: 6, // RELATIONAL precedence\n associativity: 'left',\n notation: 'a > b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return { value: [l > r], context };\n if (typeof l === 'string' && typeof r === 'string') return { value: [l > r], context };\n if (l instanceof Date && r instanceof Date) return { value: [l > r], context };\n return { value: [], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return [l > r];\n if (typeof l === 'string' && typeof r === 'string') return [l > r];\n if (l instanceof Date && r instanceof Date) return [l > r];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const lteOperator: Operator = {\n name: '<=',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.LTE,\n precedence: 6, // RELATIONAL precedence\n associativity: 'left',\n notation: 'a <= b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return { value: [l <= r], context };\n if (typeof l === 'string' && typeof r === 'string') return { value: [l <= r], context };\n if (l instanceof Date && r instanceof Date) return { value: [l <= r], context };\n return { value: [], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return [l <= r];\n if (typeof l === 'string' && typeof r === 'string') return [l <= r];\n if (l instanceof Date && r instanceof Date) return [l <= r];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const gteOperator: Operator = {\n name: '>=',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.GTE,\n precedence: 6, // RELATIONAL precedence\n associativity: 'left',\n notation: 'a >= b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return { value: [l >= r], context };\n if (typeof l === 'string' && typeof r === 'string') return { value: [l >= r], context };\n if (l instanceof Date && r instanceof Date) return { value: [l >= r], context };\n return { value: [], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (typeof l === 'number' && typeof r === 'number') return [l >= r];\n if (typeof l === 'string' && typeof r === 'string') return [l >= r];\n if (l instanceof Date && r instanceof Date) return [l >= r];\n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const equivOperator: Operator = {\n name: '~',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.EQUIV,\n precedence: 5, // EQUALITY precedence\n associativity: 'left',\n notation: 'a ~ b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n if (left.length === 0 || right.length === 0) return { value: [], context };\n // Equivalence is more lenient than equality\n const l = left[0];\n const r = right[0];\n if (l == null && r == null) return { value: [true], context };\n if (l == null || r == null) return { value: [false], context };\n // For strings, case-insensitive comparison\n if (typeof l === 'string' && typeof r === 'string') {\n return { value: [l.toLowerCase() === r.toLowerCase()], context };\n }\n return { value: [isEqual(l, r)], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (l == null && r == null) return [true];\n if (l == null || r == null) return [false];\n if (typeof l === 'string' && typeof r === 'string') {\n return [l.toLowerCase() === r.toLowerCase()];\n }\n return [isEqual(l, r)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const nequivOperator: Operator = {\n name: '!~',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.NEQUIV,\n precedence: 5, // EQUALITY precedence\n associativity: 'left',\n notation: 'a !~ b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (interpreter, context, input, left, right) => {\n const equivResult = equivOperator.evaluate(interpreter, context, input, left, right);\n return equivResult.value.length > 0 ? { value: [!equivResult.value[0]], context } : { value: [], context };\n },\n compile: (compiler, input, args) => {\n const [leftExpr, rightExpr] = args;\n return {\n fn: (ctx) => {\n const left = leftExpr?.fn(ctx) || [];\n const right = rightExpr?.fn(ctx) || [];\n if (left.length === 0 || right.length === 0) return [];\n const l = left[0];\n const r = right[0];\n if (l == null && r == null) return [false];\n if (l == null || r == null) return [true];\n if (typeof l === 'string' && typeof r === 'string') {\n return [l.toLowerCase() !== r.toLowerCase()];\n }\n return [!isEqual(l, r)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\n// Export all comparison operators\nexport const comparisonOperators = [\n eqOperator,\n neqOperator,\n ltOperator,\n gtOperator,\n lteOperator,\n gteOperator,\n equivOperator,\n nequivOperator\n];","import { TokenType } from '../../lexer/token';\nimport type { Operator } from '../types';\nimport { defaultOperatorAnalyze } from '../default-analyzers';\nimport { defaultOperatorCompile } from '../default-compilers';\n\n// Helper function to check if value is in collection\nfunction isIn(value: any, collection: any[]): boolean {\n return collection.some(item => {\n if (value === item) return true;\n if (value == null || item == null) return false;\n \n // Handle complex equality\n if (typeof value === 'object' && typeof item === 'object') {\n return JSON.stringify(value) === JSON.stringify(item);\n }\n \n return false;\n });\n}\n\n\nexport const inOperator: Operator = {\n name: 'in',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.IN,\n precedence: 4, // MEMBERSHIP precedence\n associativity: 'left',\n notation: 'a in b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n propagatesEmpty: false,\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n }\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (_interpreter, context, _input, element, collection) => {\n if (element.length === 0 || collection.length === 0) return { value: [], context };\n \n // Handle string substring check\n if (collection.length === 1 && typeof collection[0] === 'string' && typeof element[0] === 'string') {\n return { value: [collection[0].includes(element[0])], context };\n }\n \n return { value: [isIn(element[0], collection)], context };\n },\n compile: (compiler, _input, args) => {\n const [leftExpr, rightExpr] = args;\n if (!leftExpr || !rightExpr) {\n throw new Error('in operator requires two arguments');\n }\n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n const right = rightExpr.fn(ctx);\n if (left.length === 0 || right.length === 0) return [];\n \n // Handle string substring check\n if (right.length === 1 && typeof right[0] === 'string' && typeof left[0] === 'string') {\n return [right[0].includes(left[0])];\n }\n \n return [isIn(left[0], right)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const containsOperator: Operator = {\n name: 'contains',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.CONTAINS,\n precedence: 4, // MEMBERSHIP precedence\n associativity: 'left',\n notation: 'a contains b'\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n propagatesEmpty: false,\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n }\n },\n analyze: defaultOperatorAnalyze,\n evaluate: (_interpreter, context, _input, collection, element) => {\n if (collection.length === 0 || element.length === 0) return { value: [], context };\n \n // Handle string substring check\n if (collection.length === 1 && typeof collection[0] === 'string' && typeof element[0] === 'string') {\n return { value: [collection[0].includes(element[0])], context };\n }\n \n return { value: [isIn(element[0], collection)], context };\n },\n compile: (compiler, _input, args) => {\n const [leftExpr, rightExpr] = args;\n if (!leftExpr || !rightExpr) {\n throw new Error('contains operator requires two arguments');\n }\n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n const right = rightExpr.fn(ctx);\n if (left.length === 0 || right.length === 0) return [];\n \n // Handle string substring check\n if (left.length === 1 && typeof left[0] === 'string' && typeof right[0] === 'string') {\n return [left[0].includes(right[0])];\n }\n \n return [isIn(right[0], left)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\n// Export membership operators\nexport const membershipOperators = [\n inOperator,\n containsOperator\n];","\n/**\n * Unified runtime context that works with both interpreter and compiler.\n * Uses prototype-based inheritance for efficient context copying.\n * \n * Variable Storage Convention:\n * - Special variables: $this, $index, $total (prefixed with $)\n * - Environment variables: %context, %resource, %rootResource (stored with % prefix)\n * - User-defined variables: stored with % prefix (e.g., %x, %y)\n */\nexport interface RuntimeContext {\n input: any[];\n focus: any[];\n variables: Record<string, any>;\n}\n\n/**\n * Runtime context manager that provides efficient prototype-based context operations\n * for both interpreter and compiler.\n */\nexport class RuntimeContextManager {\n /**\n * Create a new runtime context\n */\n static create(input: any[], initialVariables?: Record<string, any>): RuntimeContext {\n const context = Object.create(null) as RuntimeContext;\n \n context.input = input;\n context.focus = input;\n \n // Create variables object with null prototype to avoid pollution\n context.variables = Object.create(null);\n \n // Set root context variables with % prefix\n context.variables['%context'] = input;\n context.variables['%resource'] = input;\n context.variables['%rootResource'] = input;\n \n // Add any initial variables (with % prefix for user-defined)\n if (initialVariables) {\n for (const [key, value] of Object.entries(initialVariables)) {\n // Add % prefix if not already present and not a special variable\n const varKey = key.startsWith('$') || key.startsWith('%') ? key : `%${key}`;\n context.variables[varKey] = value;\n }\n }\n \n return context;\n }\n\n /**\n * Create a child context using prototype inheritance\n * O(1) operation - no copying needed\n */\n static copy(context: RuntimeContext): RuntimeContext {\n // Create child context with parent as prototype\n const newContext = Object.create(context) as RuntimeContext;\n \n // Create child variables that inherit from parent's variables\n newContext.variables = Object.create(context.variables);\n \n // input and focus are inherited through prototype chain\n // Only set them if they need to change\n \n return newContext;\n }\n\n /**\n * Create a new context with updated input/focus\n */\n static withInput(context: RuntimeContext, input: any[], focus?: any[]): RuntimeContext {\n const newContext = this.copy(context);\n newContext.input = input;\n newContext.focus = focus ?? input;\n return newContext;\n }\n\n /**\n * Set special variable ($this, $index, $total)\n */\n static setSpecialVariable(context: RuntimeContext, name: string, value: any): RuntimeContext {\n const newContext = this.copy(context);\n const varKey = `$${name}`;\n newContext.variables[varKey] = value;\n \n // Update input/focus for $this\n if (name === 'this' && Array.isArray(value) && value.length === 1) {\n newContext.input = value;\n newContext.focus = value;\n }\n \n return newContext;\n }\n\n /**\n * Set iterator context ($this, $index)\n */\n static withIterator(\n context: RuntimeContext, \n item: any, \n index: number\n ): RuntimeContext {\n let newContext = this.setSpecialVariable(context, 'this', [item]);\n newContext = this.setSpecialVariable(newContext, 'index', index);\n return newContext;\n }\n\n /**\n * Set a user-defined variable in the context\n */\n static setVariable(context: RuntimeContext, name: string, value: any[], allowRedefinition: boolean = false): RuntimeContext {\n // Check for system variables\n const systemVariables = ['context', 'resource', 'rootResource', 'ucum', 'sct', 'loinc'];\n if (systemVariables.includes(name)) {\n // Silently return original context for system variable redefinition\n return context;\n }\n \n // Add % prefix for user-defined variables\n const varKey = name.startsWith('%') ? name : `%${name}`;\n \n // Check if variable already exists (unless redefinition is allowed)\n if (!allowRedefinition && context.variables && Object.prototype.hasOwnProperty.call(context.variables, varKey)) {\n // Silently return original context for variable redefinition\n return context;\n }\n \n const newContext = this.copy(context);\n newContext.variables[varKey] = value;\n return newContext;\n }\n\n /**\n * Get a variable from context\n */\n static getVariable(context: RuntimeContext, name: string): any | undefined {\n // Handle special cases\n if (name === '$this' || name === '$index' || name === '$total') {\n return context.variables[name];\n }\n \n // Handle environment variables (with or without % prefix)\n if (name === 'context' || name === '%context') {\n return context.variables['%context'];\n }\n if (name === 'resource' || name === '%resource') {\n return context.variables['%resource'];\n }\n if (name === 'rootResource' || name === '%rootResource') {\n return context.variables['%rootResource'];\n }\n \n // Handle user-defined variables (add % prefix if not present)\n const varKey = name.startsWith('%') ? name : `%${name}`;\n return context.variables[varKey];\n }\n\n}","import { TokenType } from '../../lexer/token';\nimport type { Operator } from '../types';\nimport type { Analyzer, TypeInfo } from '../types';\nimport { EvaluationError } from '../../interpreter/types';\nimport type { EvaluationResult } from '../../interpreter/types';\nimport type { CompiledExpression } from '../../compiler/types';\nimport { RuntimeContextManager } from '../../runtime/context';\n\n// Type operators (is, as) need special handling in the parser\n// They are included here for precedence lookup and keyword registration\n\nexport const isOperator: Operator = {\n name: 'is',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.IS,\n precedence: 8, // TYPE precedence\n associativity: 'left',\n notation: 'a is Type',\n special: true // Requires special parsing\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false\n },\n analyze: (analyzer: Analyzer, input: TypeInfo, args: TypeInfo[]): TypeInfo => {\n // Always returns boolean\n return {\n type: analyzer.resolveType('Boolean'),\n isSingleton: input.isSingleton\n };\n },\n evaluate: (interpreter, context, input, leftValue, rightNode) => {\n // For 'is' operator, the right side should be a type name\n // It might come as a TypeOrIdentifierNode or as an array with the type name\n let typeName: string;\n \n if (typeof rightNode === 'string') {\n typeName = rightNode;\n } else if (Array.isArray(rightNode) && rightNode.length === 1) {\n typeName = rightNode[0];\n } else if (rightNode && typeof rightNode === 'object' && 'name' in rightNode) {\n // TypeOrIdentifier node\n typeName = rightNode.name;\n } else {\n throw new Error('is operator requires a type name');\n }\n \n // Import TypeSystem locally to avoid circular dependency\n const { TypeSystem } = require('../utils/type-system');\n \n if (leftValue.length === 0) {\n return { value: [], context };\n }\n \n // Check if all values in the collection match the type\n for (const item of leftValue) {\n if (!TypeSystem.isType(item, typeName)) {\n return { value: [false], context };\n }\n }\n \n return { value: [true], context };\n },\n compile: (compiler, input, args) => {\n // For operators, input is the left expression and args contains [left, right]\n const leftExpr = input;\n const rightExpr = args?.[1];\n \n if (!leftExpr) {\n throw new Error('is operator requires left operand');\n }\n \n if (!rightExpr) {\n throw new Error('is operator requires right operand (type name)');\n }\n \n // Import TypeSystem locally to avoid circular dependency\n const { TypeSystem } = require('../utils/type-system');\n \n // The right side of 'is' should be a type identifier\n // Since type identifiers don't evaluate to values, we need to handle this specially\n \n // Try to determine the type name at compile time\n let staticTypeName: string | undefined;\n \n // Check various possible structures for the type name\n // Check if it has source that looks like a type name\n if ((rightExpr as any).source && /^[A-Z][a-zA-Z]*$/.test((rightExpr as any).source)) {\n staticTypeName = (rightExpr as any).source;\n }\n // If it evaluates to a constant type name\n else {\n // Try to execute it with empty context to see if it returns a type name\n try {\n const result = rightExpr.fn(RuntimeContextManager.create([]));\n if (result.length === 1 && typeof result[0] === 'string' && /^[A-Z]/.test(result[0])) {\n staticTypeName = result[0];\n }\n } catch (e) {\n // Ignore errors, fall through to runtime handling\n }\n }\n \n if (staticTypeName) {\n // We know the type name at compile time\n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n \n if (left.length === 0) return [];\n \n // Check if all values in the collection match the type\n for (const item of left) {\n if (!TypeSystem.isType(item, staticTypeName)) {\n return [false];\n }\n }\n \n return [true];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n \n // Fallback: evaluate type name at runtime\n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n \n if (left.length === 0) return [];\n \n // Try to evaluate the right expression to get the type name\n let typeName: string;\n try {\n const rightResult = rightExpr.fn(ctx);\n if (rightResult.length === 1 && typeof rightResult[0] === 'string') {\n typeName = rightResult[0];\n } else {\n throw new Error('Type name must be a string');\n }\n } catch (e) {\n // If evaluation fails, it might be because TypeOrIdentifier \n // is trying to access a non-existent property\n // In that case, assume the identifier name is the type name\n const source = (rightExpr as any).source;\n if (source && /^[A-Z]/.test(source)) {\n typeName = source;\n } else {\n throw new Error(`Cannot determine type name: ${(e as Error).message}`);\n }\n }\n \n // Check if all values in the collection match the type\n for (const item of left) {\n if (!TypeSystem.isType(item, typeName)) {\n return [false];\n }\n }\n \n return [true];\n },\n type: compiler.resolveType('Boolean'), \n isSingleton: true\n };\n }\n};\n\nexport const asOperator: Operator = {\n name: 'as',\n kind: 'operator',\n syntax: {\n form: 'infix',\n token: TokenType.AS,\n precedence: 8, // TYPE precedence\n associativity: 'left',\n notation: 'a as Type',\n special: true // Requires special parsing\n },\n signature: {\n parameters: [{ name: 'left' }, { name: 'right' }],\n output: {\n type: 'preserve-input',\n cardinality: 'preserve-input'\n },\n propagatesEmpty: true\n },\n analyze: (analyzer: Analyzer, input: TypeInfo, args: TypeInfo[]): TypeInfo => {\n // Returns the target type (determined by parser)\n // This is a placeholder - actual type is set by parser\n return {\n type: analyzer.resolveType('Any'),\n isSingleton: input.isSingleton\n };\n },\n evaluate: (interpreter, context, input, leftValue, rightNode) => {\n // For 'as' operator, the right side should be a type name\n let typeName: string;\n \n if (typeof rightNode === 'string') {\n typeName = rightNode;\n } else if (Array.isArray(rightNode) && rightNode.length === 1) {\n typeName = rightNode[0];\n } else if (rightNode && typeof rightNode === 'object' && 'name' in rightNode) {\n // TypeOrIdentifier node\n typeName = rightNode.name;\n } else {\n throw new Error('as operator requires a type name');\n }\n \n // Import TypeSystem locally to avoid circular dependency\n const { TypeSystem } = require('../utils/type-system');\n \n // Filter values that match the type\n const results: any[] = [];\n for (const item of leftValue) {\n if (TypeSystem.isType(item, typeName)) {\n results.push(item);\n }\n }\n \n return { value: results, context };\n },\n compile: (compiler, input, args) => {\n // For operators, input is the left expression and args contains [left, right]\n const leftExpr = input;\n const rightExpr = args?.[1];\n \n if (!leftExpr || !rightExpr) {\n throw new Error('as operator requires two arguments');\n }\n \n // Similar to 'is', extract type name\n let typeName: string | undefined;\n \n if ((rightExpr as any).typeName) {\n typeName = (rightExpr as any).typeName;\n } else if ((rightExpr as any).source && (rightExpr as any).source.match(/^[A-Z]\\w*$/)) {\n typeName = (rightExpr as any).source;\n }\n \n if (typeName) {\n // Import TypeSystem locally to avoid circular dependency\n const { TypeSystem } = require('../utils/type-system');\n \n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n \n // Filter values that match the type\n const results: any[] = [];\n for (const item of left) {\n if (TypeSystem.isType(item, typeName)) {\n results.push(item);\n }\n }\n \n return results;\n },\n type: compiler.resolveType(typeName),\n isSingleton: false\n };\n }\n \n // Fallback: dynamic type checking\n return {\n fn: (ctx) => {\n const left = leftExpr.fn(ctx);\n const right = rightExpr.fn(ctx);\n \n // Extract type name from right result\n let typeNameValue: string;\n if (right.length === 1 && typeof right[0] === 'string') {\n typeNameValue = right[0];\n } else {\n throw new Error('as operator requires a type name');\n }\n \n // Import TypeSystem locally to avoid circular dependency\n const { TypeSystem } = require('../utils/type-system');\n \n // Filter values that match the type\n const results: any[] = [];\n for (const item of left) {\n if (TypeSystem.isType(item, typeNameValue)) {\n results.push(item);\n }\n }\n \n return results;\n },\n type: leftExpr.type,\n isSingleton: false\n };\n }\n};\n\n// Export type operators\nexport const typeOperators = [\n isOperator,\n asOperator\n];","import type { Literal } from '../types';\nimport { defaultLiteralAnalyze } from '../default-analyzers';\n\nexport const integerLiteral: Literal = {\n name: 'integer-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /^-?\\d+$/,\n notation: '123'\n },\n \n signature: {\n output: {\n type: 'Integer',\n cardinality: 'singleton'\n }\n },\n \n parse: (value: string) => parseInt(value, 10),\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n // Value is passed as first argument from parser\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n // Value is captured from parser\n const value = (input as any).value || 0; // Parser stores parsed value\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('Integer'),\n isSingleton: true,\n source: value.toString()\n };\n }\n};\n\nexport const decimalLiteral: Literal = {\n name: 'decimal-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /^-?\\d+\\.\\d+$/,\n notation: '123.45'\n },\n \n signature: {\n output: {\n type: 'Decimal',\n cardinality: 'singleton'\n }\n },\n \n parse: (value: string) => parseFloat(value),\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n const value = (input as any).value || 0.0;\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('Decimal'),\n isSingleton: true,\n source: value.toString()\n };\n }\n};\n\nexport const trueLiteral: Literal = {\n name: 'true',\n kind: 'literal',\n \n syntax: {\n keywords: ['true'],\n notation: 'true'\n },\n \n signature: {\n output: { \n type: 'Boolean', \n cardinality: 'singleton' \n }\n },\n \n parse: () => true,\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context) => ({ value: [true], context }),\n \n compile: (compiler) => ({\n fn: (ctx) => [true],\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: 'true'\n })\n};\n\nexport const falseLiteral: Literal = {\n name: 'false',\n kind: 'literal',\n \n syntax: {\n keywords: ['false'],\n notation: 'false'\n },\n \n signature: {\n output: { \n type: 'Boolean', \n cardinality: 'singleton' \n }\n },\n \n parse: () => false,\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context) => ({ value: [false], context }),\n \n compile: (compiler) => ({\n fn: (ctx) => [false],\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: 'false'\n })\n};\n\nexport const stringLiteral: Literal = {\n name: 'string-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /^'([^'\\\\]|\\\\.)*'$/,\n notation: \"'hello'\"\n },\n \n signature: {\n output: {\n type: 'String',\n cardinality: 'singleton'\n }\n },\n \n parse: (value: string) => {\n // Remove quotes and unescape\n const content = value.slice(1, -1);\n return content\n .replace(/\\\\'/g, \"'\")\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\r\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\f/g, \"\\f\")\n .replace(/\\\\u([0-9a-fA-F]{4})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));\n },\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n const value = (input as any).value || '';\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('String'),\n isSingleton: true,\n source: `'${value.replace(/'/g, \"\\\\'\")}'`\n };\n }\n};\n\nexport const dateTimeLiteral: Literal = {\n name: 'datetime-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /@\\d{4}(-\\d{2}(-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?)?)?/,\n notation: '@2023-01-01T12:00:00Z'\n },\n \n signature: {\n output: { \n type: 'DateTime', \n cardinality: 'singleton' \n }\n },\n \n parse: (value: string) => {\n // Remove @ prefix\n const dateStr = value.substring(1);\n \n // Parse partial dates by padding with defaults\n const parts = dateStr.match(/^(\\d{4})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d+))?)?(Z|[+-]\\d{2}:\\d{2})?)?)?)?$/);\n if (!parts) throw new Error(`Invalid DateTime literal: ${value}`);\n \n const [, year, month = '01', day = '01', hour = '00', minute = '00', second = '00', ms = '0', tz = ''] = parts;\n \n const isoString = `${year}-${month}-${day}T${hour}:${minute}:${second}.${ms.padEnd(3, '0')}${tz || 'Z'}`;\n return new Date(isoString);\n },\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n const value = (input as any).value || new Date();\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('DateTime'),\n isSingleton: true,\n source: `@${value.toISOString()}`\n };\n }\n};\n\nexport const timeLiteral: Literal = {\n name: 'time-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /@T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?/,\n notation: '@T12:00:00'\n },\n \n signature: {\n output: { \n type: 'Time', \n cardinality: 'singleton' \n }\n },\n \n parse: (value: string) => {\n // Remove @T prefix\n const timeStr = value.substring(2);\n \n // Parse time components\n const parts = timeStr.match(/^(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d+))?)?$/);\n if (!parts) throw new Error(`Invalid Time literal: ${value}`);\n \n const [, hour, minute, second = '00', ms = '0'] = parts as string[];\n \n // Store as object with time components\n return {\n hour: parseInt(hour || '0', 10),\n minute: parseInt(minute || '0', 10),\n second: parseInt(second || '0', 10),\n millisecond: parseInt(ms.padEnd(3, '0'), 10)\n };\n },\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n const value = (input as any).value || { hour: 0, minute: 0, second: 0 };\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('Time'),\n isSingleton: true,\n source: `@T${String(value.hour).padStart(2, '0')}:${String(value.minute).padStart(2, '0')}:${String(value.second).padStart(2, '0')}`\n };\n }\n};\n\nexport const quantityLiteral: Literal = {\n name: 'quantity-literal',\n kind: 'literal',\n \n syntax: {\n pattern: /^-?\\d+(\\.\\d+)?\\s*'[^']+'$/,\n notation: \"5.4 'mg'\"\n },\n \n signature: {\n output: {\n type: 'Quantity',\n cardinality: 'singleton'\n }\n },\n \n parse: (value: string) => {\n const match = value.match(/^(-?\\d+(?:\\.\\d+)?)\\s*'([^']+)'$/);\n if (!match) throw new Error(`Invalid Quantity literal: ${value}`);\n \n const [, num, unit] = match as [string, string, string];\n return {\n value: parseFloat(num || '0'),\n unit: unit || ''\n };\n },\n \n analyze: defaultLiteralAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const value = args[0];\n return { value: [value], context };\n },\n \n compile: (compiler, input, args) => {\n const value = (input as any).value || { value: 0, unit: '' };\n return {\n fn: (ctx) => [value],\n type: compiler.resolveType('Quantity'),\n isSingleton: true,\n source: `${value.value} '${value.unit}'`\n };\n }\n};\n\n// Export all literals\nexport const literals = [\n integerLiteral,\n decimalLiteral,\n trueLiteral,\n falseLiteral,\n stringLiteral,\n dateTimeLiteral,\n timeLiteral,\n quantityLiteral\n];","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { isTruthy, toSingleton } from '../utils';\nimport { RuntimeContextManager } from '../../runtime/context';\n\nexport const existsFunction: Function = {\n name: 'exists',\n kind: 'function',\n \n syntax: {\n notation: 'exists([criteria])'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'criteria',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: true\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false, // exists() on empty returns false\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, ...args) => {\n const criteria = args[0];\n if (!criteria) {\n // No criteria: check if input is non-empty\n return { value: [input.length > 0], context };\n }\n \n // With criteria: check if any element matches\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const iterContext = RuntimeContextManager.withIterator(context, item, i);\n const result = interpreter.evaluate(criteria, [item], iterContext);\n if (result.value.length > 0 && toSingleton(result.value)) {\n return { value: [true], context: result.context };\n }\n }\n \n return { value: [false], context };\n },\n \n compile: (compiler, input, args) => {\n if (args.length === 0) {\n // No criteria\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.length > 0];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.exists()`\n };\n }\n \n // With criteria\n const criteria = args[0];\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n for (let i = 0; i < inputVal.length; i++) {\n const item = inputVal[i];\n const newCtx = RuntimeContextManager.withIterator(ctx, item, i);\n const result = criteria?.fn(newCtx) || [];\n if (result.length > 0 && toSingleton(result)) {\n return [true];\n }\n }\n return [false];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.exists(${criteria?.source || ''})`\n };\n }\n};\n\nexport const emptyFunction: Function = {\n name: 'empty',\n kind: 'function',\n \n syntax: {\n notation: 'empty()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false, // empty() on empty returns true\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.length === 0], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.length === 0];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.empty()`\n })\n};\n\nexport const countFunction: Function = {\n name: 'count',\n kind: 'function',\n \n syntax: {\n notation: 'count()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Integer',\n cardinality: 'singleton'\n },\n propagatesEmpty: false, // count() on empty returns 0\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.length], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.length];\n },\n type: compiler.resolveType('Integer'),\n isSingleton: true,\n source: `${input.source || ''}.count()`\n })\n};\n\nexport const firstFunction: Function = {\n name: 'first',\n kind: 'function',\n \n syntax: {\n notation: 'first()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) return { value: [], context };\n return { value: [input[0]], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n if (inputVal.length === 0) return [];\n return [inputVal[0]];\n },\n type: input.type,\n isSingleton: true,\n source: `${input.source || ''}.first()`\n })\n};\n\nexport const lastFunction: Function = {\n name: 'last',\n kind: 'function',\n \n syntax: {\n notation: 'last()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) return { value: [], context };\n return { value: [input[input.length - 1]], context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n if (inputVal.length === 0) return [];\n return [inputVal[inputVal.length - 1]];\n },\n type: input.type,\n isSingleton: true,\n source: `${input.source || ''}.last()`\n })\n};\n\nexport const singleFunction: Function = {\n name: 'single',\n kind: 'function',\n \n syntax: {\n notation: 'single()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) return { value: [], context };\n if (input.length !== 1) {\n throw new Error('single() requires collection to have exactly one item');\n }\n return { value: input, context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n if (inputVal.length === 0) return [];\n if (inputVal.length !== 1) {\n throw new Error('single() requires collection to have exactly one item');\n }\n return inputVal;\n },\n type: input.type,\n isSingleton: true,\n source: `${input.source || ''}.single()`\n })\n};\n\nexport const allFunction: Function = {\n name: 'all',\n kind: 'function',\n \n syntax: {\n notation: 'all([criteria])'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'criteria',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: true\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, criteria) => {\n if (input.length === 0) {\n return { value: [true], context };\n }\n \n if (!criteria) {\n return { value: [input.every(item => item === true)], context };\n }\n \n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const iterContext = RuntimeContextManager.withIterator(context, item, i);\n const result = interpreter.evaluate(criteria, [item], iterContext);\n \n if (!isTruthy(result.value)) {\n return { value: [false], context };\n }\n }\n \n return { value: [true], context };\n },\n \n compile: (compiler, input, args) => {\n if (args.length === 0 || !args[0]) {\n // No criteria - check if all items are true\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n if (inputVal.length === 0) {\n return [true];\n }\n return [inputVal.every(item => item === true)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.all()`\n };\n }\n \n // With criteria\n const criteria = args[0];\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n if (inputVal.length === 0) {\n return [true];\n }\n \n for (let i = 0; i < inputVal.length; i++) {\n const item = inputVal[i];\n const newCtx = RuntimeContextManager.withIterator(ctx, item, i);\n const result = criteria?.fn(newCtx) || [];\n \n if (!isTruthy(result)) {\n return [false];\n }\n }\n \n return [true];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.all(${criteria.source || ''})`\n };\n }\n};\n\nexport const allTrueFunction: Function = {\n name: 'allTrue',\n kind: 'function',\n \n syntax: {\n notation: 'allTrue()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['Boolean'] },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.every(item => item === true)], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.every(item => item === true)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.allTrue()`\n };\n }\n};\n\nexport const anyTrueFunction: Function = {\n name: 'anyTrue',\n kind: 'function',\n \n syntax: {\n notation: 'anyTrue()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['Boolean'] },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.some(item => item === true)], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.some(item => item === true)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.anyTrue()`\n };\n }\n};\n\nexport const allFalseFunction: Function = {\n name: 'allFalse',\n kind: 'function',\n \n syntax: {\n notation: 'allFalse()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['Boolean'] },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.every(item => item === false)], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.every(item => item === false)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.allFalse()`\n };\n }\n};\n\nexport const anyFalseFunction: Function = {\n name: 'anyFalse',\n kind: 'function',\n \n syntax: {\n notation: 'anyFalse()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['Boolean'] },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: [input.some(item => item === false)], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return [inputVal.some(item => item === false)];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.anyFalse()`\n };\n }\n};\n\nexport const distinctFunction: Function = {\n name: 'distinct',\n kind: 'function',\n \n syntax: {\n notation: 'distinct()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const seen = new Set();\n const result: any[] = [];\n \n for (const item of input) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n \n return { value: result, context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const seen = new Set();\n const result: any[] = [];\n \n for (const item of inputVal) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n \n return result;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.distinct()`\n };\n }\n};\n\nexport const isDistinctFunction: Function = {\n name: 'isDistinct',\n kind: 'function',\n \n syntax: {\n notation: 'isDistinct()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const seen = new Set();\n \n for (const item of input) {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n return { value: [false], context };\n }\n seen.add(key);\n }\n \n return { value: [true], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const seen = new Set();\n \n for (const item of inputVal) {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n return [false];\n }\n seen.add(key);\n }\n \n return [true];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true,\n source: `${input.source || ''}.isDistinct()`\n };\n }\n};\n\n// Export all existence functions\nexport const existenceFunctions = [\n existsFunction,\n emptyFunction,\n countFunction,\n firstFunction,\n lastFunction,\n singleFunction,\n allFunction,\n allTrueFunction,\n anyTrueFunction,\n allFalseFunction,\n anyFalseFunction,\n distinctFunction,\n isDistinctFunction\n];","import { TokenType } from '../../lexer/token';\nimport type { Operator } from '../types';\n\nexport const dotOperator: Operator = {\n name: '.',\n kind: 'operator',\n \n syntax: {\n form: 'infix',\n token: TokenType.DOT,\n precedence: 13, // INVOCATION - highest precedence\n associativity: 'left',\n notation: 'a.b',\n special: true // Special handling in parser\n },\n \n signature: {\n parameters: [\n { name: 'left', types: { kind: 'any' }, cardinality: 'any' },\n { name: 'right', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'preserve-input', // Type depends on navigation\n cardinality: 'preserve-input'\n },\n propagatesEmpty: true\n },\n \n analyze: function(analyzer, input, args) {\n // Navigation analysis is complex and handled by the analyzer itself\n // This is a placeholder\n return {\n type: 'Any',\n isSingleton: false\n };\n },\n \n evaluate: function(interpreter, context, input, left, right) {\n // Navigation evaluation is handled by the interpreter\n // This is a placeholder\n return { value: [], context };\n },\n \n compile: function(compiler, input, args) {\n // Navigation compilation is handled by the compiler\n // This is a placeholder\n return input;\n }\n};\n\n// Export for registry\nexport const navigationOperators = [dotOperator];","import type { RuntimeContext } from './context';\nimport type { TraceEntry, EvaluationStep, InspectOptions } from '../api/types';\n\n/**\n * Debug-enabled runtime context that extends RuntimeContext\n * with debugging capabilities for inspect() function\n */\nexport interface DebugRuntimeContext extends RuntimeContext {\n debugMode: true;\n traces: TraceEntry[];\n steps?: EvaluationStep[];\n startTime: number;\n callStack: CallStackEntry[];\n inspectOptions?: InspectOptions;\n}\n\ninterface CallStackEntry {\n expression: string;\n nodeType: string;\n timestamp: number;\n}\n\n/**\n * Check if a context is a debug context\n */\nexport function isDebugContext(context: RuntimeContext): context is DebugRuntimeContext {\n return 'debugMode' in context && context.debugMode === true;\n}\n\n/**\n * Create a debug context from a regular context\n */\nexport function createDebugContext(\n context: RuntimeContext,\n options?: InspectOptions\n): DebugRuntimeContext {\n const debugContext = Object.create(context) as DebugRuntimeContext;\n debugContext.debugMode = true;\n debugContext.traces = [];\n debugContext.startTime = performance.now();\n debugContext.callStack = [];\n debugContext.inspectOptions = options;\n \n if (options?.recordSteps) {\n debugContext.steps = [];\n }\n \n return debugContext;\n}\n\n/**\n * Add a trace entry to the debug context\n */\nexport function addTrace(\n context: DebugRuntimeContext,\n name: string,\n values: any[]\n): void {\n // Check trace limit\n if (context.inspectOptions?.maxTraces && \n context.traces.length >= context.inspectOptions.maxTraces) {\n return;\n }\n \n const trace: TraceEntry = {\n name,\n values,\n timestamp: performance.now() - context.startTime,\n depth: context.callStack.length\n };\n \n context.traces.push(trace);\n}\n\n/**\n * Record an evaluation step\n */\nexport function recordStep(\n context: DebugRuntimeContext,\n nodeType: string,\n expression: string,\n input: any[],\n output: any[]\n): void {\n if (!context.steps) return;\n \n // Check step limit\n if (context.inspectOptions?.maxSteps && \n context.steps.length >= context.inspectOptions.maxSteps) {\n return;\n }\n \n const stepStart = performance.now();\n \n const step: EvaluationStep = {\n nodeType,\n expression,\n input,\n output,\n variables: { ...context.variables }, // Snapshot current variables\n timestamp: stepStart - context.startTime,\n duration: 0 // Will be calculated when step completes\n };\n \n context.steps.push(step);\n}\n\n/**\n * Push an entry onto the call stack\n */\nexport function pushCallStack(\n context: DebugRuntimeContext,\n expression: string,\n nodeType: string\n): void {\n context.callStack.push({\n expression,\n nodeType,\n timestamp: performance.now() - context.startTime\n });\n}\n\n/**\n * Pop an entry from the call stack\n */\nexport function popCallStack(context: DebugRuntimeContext): void {\n context.callStack.pop();\n}\n\n/**\n * Get the current call stack depth\n */\nexport function getCallDepth(context: DebugRuntimeContext): number {\n return context.callStack.length;\n}","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\nimport { RuntimeContextManager } from '../../runtime/context';\nimport { isTruthy } from '../utils';\nimport { isDebugContext, addTrace } from '../../runtime/debug-context';\n\nexport const aggregateFunction: Function = {\n name: 'aggregate',\n kind: 'function',\n \n syntax: {\n notation: 'aggregate(aggregator, init)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'aggregator',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: false\n },\n {\n name: 'init',\n kind: 'value',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: true\n }\n ],\n output: {\n type: 'any',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, aggregatorExpr, init) => {\n if (!aggregatorExpr) {\n throw new Error('aggregate() requires an aggregator expression');\n }\n \n let total = init !== undefined ? init : [];\n \n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n let iterContext = RuntimeContextManager.withIterator(context, item, i);\n iterContext = RuntimeContextManager.setSpecialVariable(iterContext, 'total', total);\n \n const result = interpreter.evaluate(aggregatorExpr, [item], iterContext);\n total = result.value;\n }\n \n return { value: total, context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const childrenFunction: Function = {\n name: 'children',\n kind: 'function',\n \n syntax: {\n notation: 'children()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const results: any[] = [];\n \n for (const item of input) {\n if (item && typeof item === 'object') {\n for (const key of Object.keys(item)) {\n if (!key.startsWith('_')) {\n const value = item[key];\n if (Array.isArray(value)) {\n results.push(...value);\n } else if (value !== null && value !== undefined) {\n results.push(value);\n }\n }\n }\n }\n }\n \n return { value: results, context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const descendantsFunction: Function = {\n name: 'descendants',\n kind: 'function',\n \n syntax: {\n notation: 'descendants()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const results: any[] = [];\n const seen = new Set();\n \n function collectDescendants(items: any[]) {\n for (const item of items) {\n if (item && typeof item === 'object') {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(item);\n \n const children: any[] = [];\n for (const prop of Object.keys(item)) {\n if (!prop.startsWith('_')) {\n const value = item[prop];\n if (Array.isArray(value)) {\n children.push(...value);\n } else if (value !== null && value !== undefined && typeof value === 'object') {\n children.push(value);\n }\n }\n }\n collectDescendants(children);\n }\n }\n }\n }\n \n const children: any[] = [];\n for (const item of input) {\n if (item && typeof item === 'object') {\n for (const key of Object.keys(item)) {\n if (!key.startsWith('_')) {\n const value = item[key];\n if (Array.isArray(value)) {\n children.push(...value);\n } else if (value !== null && value !== undefined) {\n children.push(value);\n }\n }\n }\n }\n }\n \n collectDescendants(children);\n return { value: results, context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const iifFunction: Function = {\n name: 'iif',\n kind: 'function',\n \n syntax: {\n notation: 'iif(condition, then [, else])'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'condition',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: false\n },\n {\n name: 'then',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: false\n },\n {\n name: 'else',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: true\n }\n ],\n output: {\n type: 'any',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, condition, thenBranch, elseBranch) => {\n // Per spec: if input has multiple values, return empty\n if (input.length > 1) {\n return { value: [], context };\n }\n \n // Set up context with $this = input\n let condContext = RuntimeContextManager.copy(context);\n if (input.length === 1) {\n condContext = RuntimeContextManager.setSpecialVariable(condContext, 'this', input[0]);\n }\n \n const condResult = interpreter.evaluate(condition, input, condContext);\n \n // Per spec: if condition is empty, treat as false\n if (condResult.value.length === 0) {\n if (elseBranch) {\n return interpreter.evaluate(elseBranch, input, condResult.context);\n } else {\n // Two-parameter form: no else branch means return empty\n return { value: [], context };\n }\n }\n \n // Per spec: if condition is not boolean singleton, return empty\n if (condResult.value.length !== 1 || typeof condResult.value[0] !== 'boolean') {\n return { value: [], context };\n }\n \n if (condResult.value[0] === true) {\n return interpreter.evaluate(thenBranch, input, condResult.context);\n } else {\n if (elseBranch) {\n return interpreter.evaluate(elseBranch, input, condResult.context);\n } else {\n // Two-parameter form: no else branch means return empty\n return { value: [], context };\n }\n }\n },\n \n compile: (compiler, input, args) => {\n const [condExpr, thenExpr, elseExpr] = args;\n \n if (!condExpr || !thenExpr) {\n throw new Error('iif() requires at least condition and then expressions');\n }\n \n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n \n // Per spec: if input has multiple values, return empty\n if (inputVal.length > 1) {\n return [];\n }\n \n // Set up context with $this = input\n let condCtx = RuntimeContextManager.withInput(ctx, inputVal);\n if (inputVal.length === 1) {\n condCtx = RuntimeContextManager.setSpecialVariable(condCtx, 'this', inputVal[0]);\n }\n \n const condResult = condExpr.fn(condCtx);\n \n // Per spec: if condition is empty, treat as false\n if (condResult.length === 0) {\n if (elseExpr) {\n const elseCtx = RuntimeContextManager.withInput(ctx, inputVal);\n return elseExpr.fn(elseCtx);\n } else {\n // Two-parameter form: no else branch means return empty\n return [];\n }\n }\n \n // Per spec: if condition is not boolean singleton, return empty\n if (condResult.length !== 1 || typeof condResult[0] !== 'boolean') {\n return [];\n }\n \n if (condResult[0] === true) {\n const thenCtx = RuntimeContextManager.withInput(ctx, inputVal);\n return thenExpr.fn(thenCtx);\n } else {\n if (elseExpr) {\n const elseCtx = RuntimeContextManager.withInput(ctx, inputVal);\n return elseExpr.fn(elseCtx);\n } else {\n // Two-parameter form: no else branch means return empty\n return [];\n }\n }\n },\n type: compiler.resolveType('Any'),\n isSingleton: false,\n source: elseExpr \n ? `${input.source || ''}.iif(${condExpr.source || ''}, ${thenExpr.source || ''}, ${elseExpr.source || ''})`\n : `${input.source || ''}.iif(${condExpr.source || ''}, ${thenExpr.source || ''})`\n };\n }\n};\n\nexport const defineVariableFunction: Function = {\n name: 'defineVariable',\n kind: 'function',\n \n syntax: {\n notation: 'defineVariable(name [, value])'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'name',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n },\n {\n name: 'value',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: true\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, nameValue, valueExpr) => {\n // Extract the string value from the name parameter\n let varName: string;\n \n // nameValue comes as evaluated value (array) when param.kind !== 'expression'\n if (Array.isArray(nameValue) && nameValue.length === 1 && typeof nameValue[0] === 'string') {\n varName = nameValue[0];\n } else if (typeof nameValue === 'string') {\n varName = nameValue;\n } else {\n throw new Error('defineVariable() requires a string literal as the first parameter');\n }\n \n let value: any[];\n \n if (valueExpr) {\n // Create a new context where $this refers to the input\n let valueContext = RuntimeContextManager.copy(context);\n valueContext = RuntimeContextManager.setSpecialVariable(valueContext, 'this', input);\n \n const result = interpreter.evaluate(valueExpr, input, valueContext);\n value = result.value;\n } else {\n // If no value expression is provided, use the input collection\n value = input;\n }\n \n // Try to set the variable - setVariable will handle redefinition check\n const newContext = RuntimeContextManager.setVariable(context, varName, value);\n \n // If context didn't change, it means redefinition was attempted\n if (newContext === context) {\n return { value: [], context };\n }\n \n return { value: input, context: newContext };\n },\n \n compile: (compiler, input, args) => {\n const [nameExpr, valueExpr] = args;\n \n // For defineVariable, the name should be a literal string\n // Try to extract it at compile time\n let varName: string | undefined;\n \n // The name parameter should evaluate to a constant string\n try {\n const nameResult = nameExpr?.fn(RuntimeContextManager.create([])) || [];\n if (nameResult.length === 1 && typeof nameResult[0] === 'string') {\n varName = nameResult[0];\n }\n } catch (e) {\n // If we can't evaluate it at compile time, it might be invalid\n throw new Error('defineVariable() requires a string literal as the first parameter');\n }\n \n if (!varName) {\n throw new Error('defineVariable() requires a string literal as the first parameter');\n }\n \n // Return a compiled expression that modifies the context\n return {\n fn: (ctx) => {\n // Check if variable is already defined before evaluating expressions\n const existingValue = RuntimeContextManager.getVariable(ctx, varName);\n if (existingValue !== undefined) {\n // Variable already exists, return empty\n return [];\n }\n \n // Evaluate the input expression\n const inputVal = input.fn(ctx);\n \n let value: any[];\n \n if (valueExpr) {\n // Create context for evaluating the value expression\n // Set $this to the input value\n let valueCtx = RuntimeContextManager.withInput(ctx, inputVal);\n valueCtx = RuntimeContextManager.setSpecialVariable(valueCtx, 'this', inputVal);\n \n // Evaluate the value expression\n value = valueExpr.fn(valueCtx);\n } else {\n // If no value expression is provided, use the input collection\n value = inputVal;\n }\n \n // Set the variable - we already checked it doesn't exist\n const newCtx = RuntimeContextManager.setVariable(ctx, varName, value, true); // allow setting since we checked\n \n // IMPORTANT: For the compiler version, we need to propagate the variable\n // to the parent context by copying the variables object\n Object.assign(ctx.variables, newCtx.variables);\n \n // Return the original input (not the value)\n return inputVal;\n },\n type: input.type,\n isSingleton: input.isSingleton,\n source: valueExpr \n ? `${input.source || ''}.defineVariable('${varName}', ${valueExpr.source || ''})`\n : `${input.source || ''}.defineVariable('${varName}')`\n };\n }\n};\n\nexport const traceFunction: Function = {\n name: 'trace',\n kind: 'function',\n \n syntax: {\n notation: 'trace(name, selector)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'name',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: true\n },\n {\n name: 'selector',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: true\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: false\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, nameValue, selectorExpr) => {\n // Extract the name from the parameter (it comes as an array when kind is 'value')\n let traceName = 'trace';\n if (nameValue && Array.isArray(nameValue) && nameValue.length > 0) {\n traceName = String(nameValue[0]);\n } else if (typeof nameValue === 'string') {\n traceName = nameValue;\n }\n \n let values = input;\n \n if (selectorExpr) {\n const result = interpreter.evaluate(selectorExpr, input, context);\n values = result.value;\n }\n \n // Check if we're in debug mode\n if (isDebugContext(context)) {\n addTrace(context, traceName, values);\n } else {\n console.log(`[TRACE] ${traceName}:`, values);\n }\n \n return { value: input, context };\n },\n \n compile: (compiler, input, args) => {\n const [nameExpr, selectorExpr] = args;\n \n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n \n // Extract the name\n let traceName = 'trace';\n if (nameExpr) {\n const nameResult = nameExpr.fn(ctx);\n if (nameResult.length > 0) {\n traceName = String(nameResult[0]);\n }\n }\n \n let values = inputVal;\n \n if (selectorExpr) {\n // Create context with input for selector evaluation\n const selectorCtx = RuntimeContextManager.withInput(ctx, inputVal);\n values = selectorExpr.fn(selectorCtx);\n }\n \n console.log(`[TRACE] ${traceName}:`, values);\n \n return inputVal;\n },\n type: input.type,\n isSingleton: input.isSingleton,\n source: selectorExpr \n ? `${input.source || ''}.trace('${nameExpr?.source || ''}', ${selectorExpr.source || ''})`\n : nameExpr\n ? `${input.source || ''}.trace('${nameExpr.source || ''}')`\n : `${input.source || ''}.trace()`\n };\n }\n};\n\nexport const checkFunction: Function = {\n name: 'check',\n kind: 'function',\n \n syntax: {\n notation: 'check(error, condition)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'error',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: false\n },\n {\n name: 'condition',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'collection',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, errorExpr, conditionExpr) => {\n const condResult = interpreter.evaluate(conditionExpr, input, context);\n \n if (!isTruthy(condResult.value)) {\n const errorResult = interpreter.evaluate(errorExpr, input, condResult.context);\n const errorMessage = errorResult.value.join('');\n throw new Error(`Check failed: ${errorMessage}`);\n }\n \n return { value: input, context: condResult.context };\n },\n \n compile: defaultFunctionCompile\n};","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\nimport { TypeSystem } from '../utils/type-system';\n\nexport const typeFunction: Function = {\n name: 'type',\n kind: 'function',\n \n syntax: {\n notation: 'type()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const types = new Set<string>();\n \n for (const item of input) {\n types.add(TypeSystem.getType(item).name);\n }\n \n return { value: Array.from(types), context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const isFunction: Function = {\n name: 'is',\n kind: 'function',\n \n syntax: {\n notation: 'is(type)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'type',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, typeNameOrNode) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n // Handle case where type is passed as an AST node (e.g., is(String))\n let typeName: string;\n if (typeof typeNameOrNode === 'string') {\n typeName = typeNameOrNode;\n } else if (Array.isArray(typeNameOrNode) && typeNameOrNode.length === 1) {\n typeName = typeNameOrNode[0];\n } else if (typeNameOrNode && typeof typeNameOrNode === 'object' && 'name' in typeNameOrNode) {\n // TypeOrIdentifier node\n typeName = typeNameOrNode.name;\n } else {\n throw new Error('is() requires a type name');\n }\n \n for (const item of input) {\n if (!TypeSystem.isType(item, typeName)) {\n return { value: [false], context };\n }\n }\n \n return { value: [true], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const asFunction: Function = {\n name: 'as',\n kind: 'function',\n \n syntax: {\n notation: 'as(type)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'type',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, typeNameOrNode) => {\n // Handle case where type is passed as an AST node (e.g., as(String))\n let typeName: string;\n if (typeof typeNameOrNode === 'string') {\n typeName = typeNameOrNode;\n } else if (Array.isArray(typeNameOrNode) && typeNameOrNode.length === 1) {\n typeName = typeNameOrNode[0];\n } else if (typeNameOrNode && typeof typeNameOrNode === 'object' && 'name' in typeNameOrNode) {\n // TypeOrIdentifier node\n typeName = typeNameOrNode.name;\n } else {\n throw new Error('as() requires a type name');\n }\n \n const results: any[] = [];\n for (const item of input) {\n if (TypeSystem.isType(item, typeName)) {\n results.push(item);\n }\n }\n \n return { value: results, context };\n },\n \n compile: defaultFunctionCompile\n};","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\nimport { CollectionUtils } from '../../interpreter/types';\n\nexport const absFunction: Function = {\n name: 'abs',\n kind: 'function',\n \n syntax: {\n notation: 'abs()'\n },\n \n signature: {\n input: {\n types: { kind: 'union', types: ['Integer', 'Decimal', 'Quantity'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n const num = CollectionUtils.toSingleton(input);\n return { value: [Math.abs(num)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const roundFunction: Function = {\n name: 'round',\n kind: 'function',\n \n syntax: {\n notation: 'round(precision)'\n },\n \n signature: {\n input: {\n types: { kind: 'union', types: ['Decimal'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'precision',\n kind: 'value',\n types: { kind: 'primitive', types: ['Integer'] },\n cardinality: 'singleton',\n optional: true\n }\n ],\n output: {\n type: 'Decimal',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, precision) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n const num = CollectionUtils.toSingleton(input);\n \n if (precision === undefined) {\n return { value: [Math.round(num)], context };\n }\n \n const factor = Math.pow(10, precision);\n return { value: [Math.round(num * factor) / factor], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const sqrtFunction: Function = {\n name: 'sqrt',\n kind: 'function',\n \n syntax: {\n notation: 'sqrt()'\n },\n \n signature: {\n input: {\n types: { kind: 'union', types: ['Decimal'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'Decimal',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n const num = CollectionUtils.toSingleton(input);\n \n if (num < 0) {\n return { value: [], context };\n }\n \n return { value: [Math.sqrt(num)], context };\n },\n \n compile: defaultFunctionCompile\n};","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\nimport { RuntimeContextManager } from '../../runtime/context';\nimport { isTruthy } from '../utils';\n\nexport const whereFunction: Function = {\n name: 'where',\n kind: 'function',\n \n syntax: {\n notation: 'where(criteria)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'criteria',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, criteria) => {\n const results: any[] = [];\n if (!criteria) {\n throw new Error('where() requires a predicate expression');\n }\n\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const iterContext = RuntimeContextManager.withIterator(context, item, i);\n const result = interpreter.evaluate(criteria, [item], iterContext);\n \n if (isTruthy(result.value)) {\n results.push(item);\n }\n }\n\n return { value: results, context };\n },\n \n compile: (compiler, input, args) => {\n const criteria = args[0];\n if (!criteria) {\n throw new Error('where() requires a predicate expression');\n }\n \n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n const results: any[] = [];\n \n for (let i = 0; i < inputValue.length; i++) {\n const item = inputValue[i];\n const iterCtx = RuntimeContextManager.withIterator(ctx, item, i);\n const predicateResult = criteria.fn(iterCtx);\n \n if (isTruthy(predicateResult)) {\n results.push(item);\n }\n }\n \n return results;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.where(${criteria.source || ''})`\n };\n }\n};\n\nexport const selectFunction: Function = {\n name: 'select',\n kind: 'function',\n \n syntax: {\n notation: 'select(expression)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'expression',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'any',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: function(analyzer, input, args) {\n // First run default validation\n defaultFunctionAnalyze.call(this, analyzer, input, args);\n \n // For select(), the output type is determined by the expression result\n const expressionInfo = args[0];\n if (!expressionInfo) {\n return { type: analyzer.resolveType('Any'), isSingleton: false };\n }\n \n // select() always returns a collection\n return { type: expressionInfo.type, isSingleton: false };\n },\n \n evaluate: (interpreter, context, input, expression) => {\n const results: any[] = [];\n if (!expression) {\n throw new Error('select() requires an expression');\n }\n\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const iterContext = RuntimeContextManager.withIterator(context, item, i);\n const result = interpreter.evaluate(expression, [item], iterContext);\n results.push(...result.value);\n }\n\n return { value: results, context };\n },\n \n compile: (compiler, input, args) => {\n const expression = args[0];\n if (!expression) {\n throw new Error('select() requires an expression');\n }\n \n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n const results: any[] = [];\n \n for (let i = 0; i < inputValue.length; i++) {\n const item = inputValue[i];\n const iterCtx = RuntimeContextManager.withIterator(ctx, item, i);\n const exprResult = expression.fn(iterCtx);\n results.push(...exprResult);\n }\n \n return results;\n },\n type: expression.type,\n isSingleton: false,\n source: `${input.source || ''}.select(${expression.source || ''})`\n };\n }\n};\n\nexport const ofTypeFunction: Function = {\n name: 'ofType',\n kind: 'function',\n \n syntax: {\n notation: 'ofType(type)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'type',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, typeNode) => {\n const results: any[] = [];\n \n // Extract type name from AST node\n let typeName: string;\n if (typeNode && typeNode.type === 11) { // TypeReference (correct enum value)\n typeName = typeNode.typeName;\n } else if (typeNode && typeNode.type === 1) { // TypeOrIdentifier\n typeName = typeNode.name;\n } else {\n throw new Error('ofType() requires a type reference');\n }\n \n for (const item of input) {\n if (isOfType(item, typeName)) {\n results.push(item);\n }\n }\n \n return { value: results, context };\n },\n \n compile: (compiler, input, args) => {\n // The TypeSystem module with isOfType helper\n const { TypeSystem } = require('../utils/type-system');\n \n // The argument should be a TypeReference node compiled to return the type name\n const typeArg = args[0];\n if (!typeArg) {\n throw new Error('ofType() requires a type reference');\n }\n \n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n const results: any[] = [];\n \n // Get the type name\n let typeName: string;\n try {\n const typeResult = typeArg.fn(ctx);\n if (typeResult.length === 1 && typeof typeResult[0] === 'string') {\n typeName = typeResult[0];\n } else {\n throw new Error('Type reference must evaluate to a string');\n }\n } catch (e: any) {\n // If it's a type reference that cannot be evaluated, extract from source\n if (typeArg.source && /^[A-Z]/.test(typeArg.source)) {\n typeName = typeArg.source;\n } else {\n throw new Error(`Cannot determine type name: ${e.message}`);\n }\n }\n \n // Filter by type\n for (const item of inputValue) {\n if (TypeSystem.isType(item, typeName)) {\n results.push(item);\n }\n }\n \n return results;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.ofType(${typeArg.source || ''})`\n };\n }\n};\n\nexport const repeatFunction: Function = {\n name: 'repeat',\n kind: 'function',\n \n syntax: {\n notation: 'repeat(expression)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'expression',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, expression) => {\n let current = input;\n const seen = new Set();\n \n while (current.length > 0) {\n const nextResults: any[] = [];\n \n for (let i = 0; i < current.length; i++) {\n const item = current[i];\n const itemKey = JSON.stringify(item);\n \n if (!seen.has(itemKey)) {\n seen.add(itemKey);\n const iterContext = RuntimeContextManager.withIterator(context, item, i);\n const result = interpreter.evaluate(expression, [item], iterContext);\n nextResults.push(...result.value);\n }\n }\n \n current = nextResults;\n }\n \n return { value: Array.from(seen).map(key => JSON.parse(key as string)), context };\n },\n \n compile: defaultFunctionCompile\n};\n\n// Helper function for type checking\nfunction isOfType(item: any, typeName: string): boolean {\n // Handle FHIR resource types\n if (item && typeof item === 'object' && item.resourceType === typeName) {\n return true;\n }\n \n // Handle primitive types\n switch (typeName) {\n case 'String':\n return typeof item === 'string';\n case 'Boolean':\n return typeof item === 'boolean';\n case 'Integer':\n return typeof item === 'number' && Number.isInteger(item);\n case 'Decimal':\n return typeof item === 'number';\n default:\n return false;\n }\n}","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\n\nexport const containsFunction: Function = {\n name: 'contains',\n kind: 'function',\n \n syntax: {\n notation: 'contains(substring)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'substring',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, substring) => {\n const str = input[0];\n return { value: [str.includes(substring)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const lengthFunction: Function = {\n name: 'length',\n kind: 'function',\n \n syntax: {\n notation: 'length()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'Integer',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const str = input[0];\n return { value: [str.length], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const substringFunction: Function = {\n name: 'substring',\n kind: 'function',\n \n syntax: {\n notation: 'substring(start, length)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'start',\n kind: 'value',\n types: { kind: 'primitive', types: ['Integer'] },\n cardinality: 'singleton',\n optional: false\n },\n {\n name: 'length',\n kind: 'value',\n types: { kind: 'primitive', types: ['Integer'] },\n cardinality: 'singleton',\n optional: true\n }\n ],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, start, length) => {\n const str = input[0];\n \n if (start >= str.length) {\n return { value: [''], context };\n }\n \n const result = length !== undefined \n ? str.substring(start, start + length)\n : str.substring(start);\n \n return { value: [result], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const startsWithFunction: Function = {\n name: 'startsWith',\n kind: 'function',\n \n syntax: {\n notation: 'startsWith(prefix)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'prefix',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, prefix) => {\n const str = input[0];\n return { value: [str.startsWith(prefix)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const endsWithFunction: Function = {\n name: 'endsWith',\n kind: 'function',\n \n syntax: {\n notation: 'endsWith(suffix)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'suffix',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, suffix) => {\n const str = input[0];\n return { value: [str.endsWith(suffix)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const upperFunction: Function = {\n name: 'upper',\n kind: 'function',\n \n syntax: {\n notation: 'upper()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const str = input[0];\n return { value: [str.toUpperCase()], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const lowerFunction: Function = {\n name: 'lower',\n kind: 'function',\n \n syntax: {\n notation: 'lower()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const str = input[0];\n return { value: [str.toLowerCase()], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const indexOfFunction: Function = {\n name: 'indexOf',\n kind: 'function',\n \n syntax: {\n notation: 'indexOf(substring)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'substring',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'Integer',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, substring) => {\n const str = input[0];\n const index = str.indexOf(substring);\n return { value: index === -1 ? [] : [index], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const replaceFunction: Function = {\n name: 'replace',\n kind: 'function',\n \n syntax: {\n notation: 'replace(pattern, substitution)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'pattern',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n },\n {\n name: 'substitution',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, pattern, substitution) => {\n const str = input[0];\n // Replace all occurrences\n return { value: [str.split(pattern).join(substitution)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const splitFunction: Function = {\n name: 'split',\n kind: 'function',\n \n syntax: {\n notation: 'split(separator)'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'separator',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'String',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, separator) => {\n const str = input[0];\n return { value: str.split(separator), context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const joinFunction: Function = {\n name: 'join',\n kind: 'function',\n \n syntax: {\n notation: 'join(separator)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'collection'\n },\n parameters: [\n {\n name: 'separator',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, separator) => {\n return { value: [input.join(separator)], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const trimFunction: Function = {\n name: 'trim',\n kind: 'function',\n \n syntax: {\n notation: 'trim()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const str = input[0];\n return { value: [str.trim()], context };\n },\n \n compile: defaultFunctionCompile\n};\n\nexport const toCharsFunction: Function = {\n name: 'toChars',\n kind: 'function',\n \n syntax: {\n notation: 'toChars()'\n },\n \n signature: {\n input: {\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n const str = input[0];\n return { value: Array.from(str), context };\n },\n \n compile: defaultFunctionCompile\n};","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\nimport { CollectionUtils } from '../../interpreter/types';\n\nexport const toStringFunction: Function = {\n name: 'toString',\n kind: 'function',\n \n syntax: {\n notation: 'toString()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'String',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n const value = CollectionUtils.toSingleton(input);\n \n if (value === null || value === undefined) {\n return { value: [], context };\n }\n \n if (typeof value === 'boolean') {\n return { value: [value ? 'true' : 'false'], context };\n }\n \n return { value: [String(value)], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n \n if (inputValue.length === 0) {\n return [];\n }\n \n const value = inputValue[0]; // toSingleton\n \n if (value === null || value === undefined) {\n return [];\n }\n \n if (typeof value === 'boolean') {\n return [value ? 'true' : 'false'];\n }\n \n return [String(value)];\n },\n type: compiler.resolveType('String'),\n isSingleton: true\n };\n }\n};\n\nexport const toIntegerFunction: Function = {\n name: 'toInteger',\n kind: 'function',\n \n syntax: {\n notation: 'toInteger()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'Integer',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n const value = CollectionUtils.toSingleton(input);\n \n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n return { value: [value], context };\n }\n return { value: [Math.trunc(value)], context };\n }\n \n if (typeof value === 'boolean') {\n return { value: [value ? 1 : 0], context };\n }\n \n if (typeof value === 'string') {\n const num = parseInt(value, 10);\n if (!isNaN(num)) {\n return { value: [num], context };\n }\n }\n \n return { value: [], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n \n if (inputValue.length === 0) {\n return [];\n }\n \n const value = inputValue[0]; // toSingleton\n \n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n return [value];\n }\n return [Math.trunc(value)];\n }\n \n if (typeof value === 'boolean') {\n return [value ? 1 : 0];\n }\n \n if (typeof value === 'string') {\n const num = parseInt(value, 10);\n if (!isNaN(num)) {\n return [num];\n }\n }\n \n return [];\n },\n type: compiler.resolveType('Integer'),\n isSingleton: true\n };\n }\n};\n\nexport const toDecimalFunction: Function = {\n name: 'toDecimal',\n kind: 'function',\n \n syntax: {\n notation: 'toDecimal()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'Decimal',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n const value = CollectionUtils.toSingleton(input);\n \n if (typeof value === 'number') {\n return { value: [value], context };\n }\n \n if (typeof value === 'boolean') {\n return { value: [value ? 1.0 : 0.0], context };\n }\n \n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) {\n return { value: [num], context };\n }\n }\n \n return { value: [], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n \n if (inputValue.length === 0) {\n return [];\n }\n \n const value = inputValue[0]; // toSingleton\n \n if (typeof value === 'number') {\n return [value];\n }\n \n if (typeof value === 'boolean') {\n return [value ? 1.0 : 0.0];\n }\n \n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) {\n return [num];\n }\n }\n \n return [];\n },\n type: compiler.resolveType('Decimal'),\n isSingleton: true\n };\n }\n};\n\nexport const toBooleanFunction: Function = {\n name: 'toBoolean',\n kind: 'function',\n \n syntax: {\n notation: 'toBoolean()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'singleton'\n },\n parameters: [],\n output: {\n type: 'Boolean',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n const value = CollectionUtils.toSingleton(input);\n \n if (typeof value === 'boolean') {\n return { value: [value], context };\n }\n \n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 't' || lower === 'yes' || lower === 'y' || lower === '1') {\n return { value: [true], context };\n }\n if (lower === 'false' || lower === 'f' || lower === 'no' || lower === 'n' || lower === '0') {\n return { value: [false], context };\n }\n }\n \n if (typeof value === 'number') {\n if (value === 1) return { value: [true], context };\n if (value === 0) return { value: [false], context };\n }\n \n return { value: [], context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputValue = input.fn(ctx);\n \n if (inputValue.length === 0) {\n return [];\n }\n \n const value = inputValue[0]; // toSingleton\n \n if (typeof value === 'boolean') {\n return [value];\n }\n \n if (typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 't' || lower === 'yes' || lower === 'y' || lower === '1') {\n return [true];\n }\n if (lower === 'false' || lower === 'f' || lower === 'no' || lower === 'n' || lower === '0') {\n return [false];\n }\n }\n \n if (typeof value === 'number') {\n if (value === 1) return [true];\n if (value === 0) return [false];\n }\n \n return [];\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: true\n };\n }\n};\n\nexport const toQuantityFunction: Function = {\n name: 'toQuantity',\n kind: 'function',\n \n syntax: {\n notation: 'toQuantity(unit)'\n },\n \n signature: {\n input: {\n types: { kind: 'union', types: ['Integer', 'Decimal', 'String'] },\n cardinality: 'singleton'\n },\n parameters: [\n {\n name: 'unit',\n kind: 'value',\n types: { kind: 'primitive', types: ['String'] },\n cardinality: 'singleton',\n optional: true\n }\n ],\n output: {\n type: 'Quantity',\n cardinality: 'singleton'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, unit) => {\n if (input.length === 0) {\n return { value: [], context };\n }\n \n const value = CollectionUtils.toSingleton(input);\n \n if (typeof value === 'number') {\n const quantity = {\n value: value,\n unit: unit || '1',\n system: 'http://unitsofmeasure.org',\n code: unit || '1'\n };\n return { value: [quantity], context };\n }\n \n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) {\n const quantity = {\n value: num,\n unit: unit || '1',\n system: 'http://unitsofmeasure.org',\n code: unit || '1'\n };\n return { value: [quantity], context };\n }\n }\n \n return { value: [], context };\n },\n \n compile: defaultFunctionCompile\n};","import type { Function } from '../types';\nimport { defaultFunctionAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile } from '../default-compilers';\n\nexport const tailFunction: Function = {\n name: 'tail',\n kind: 'function',\n \n syntax: {\n notation: 'tail()'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input) => {\n return { value: input.slice(1), context };\n },\n \n compile: (compiler, input, args) => {\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n return inputVal.slice(1);\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.tail()`\n };\n }\n};\n\nexport const skipFunction: Function = {\n name: 'skip',\n kind: 'function',\n \n syntax: {\n notation: 'skip(count)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'count',\n kind: 'value',\n types: { kind: 'primitive', types: ['Integer'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, count) => {\n return { value: input.slice(count), context };\n },\n \n compile: (compiler, input, args) => {\n const countExpr = args[0];\n if (!countExpr) {\n throw new Error('skip() requires a count parameter');\n }\n \n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const countResult = countExpr.fn(ctx);\n \n if (countResult.length === 0) {\n return inputVal;\n }\n \n const count = countResult[0];\n if (typeof count !== 'number' || !Number.isInteger(count)) {\n throw new Error('skip() count must be an integer');\n }\n \n return inputVal.slice(count);\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.skip(${countExpr.source || ''})`\n };\n }\n};\n\nexport const takeFunction: Function = {\n name: 'take',\n kind: 'function',\n \n syntax: {\n notation: 'take(count)'\n },\n \n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'count',\n kind: 'value',\n types: { kind: 'primitive', types: ['Integer'] },\n cardinality: 'singleton',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n \n analyze: defaultFunctionAnalyze,\n \n evaluate: (interpreter, context, input, count) => {\n return { value: input.slice(0, count), context };\n },\n \n compile: (compiler, input, args) => {\n const countExpr = args[0];\n if (!countExpr) {\n throw new Error('take() requires a count parameter');\n }\n \n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const countResult = countExpr.fn(ctx);\n \n if (countResult.length === 0) {\n return [];\n }\n \n const count = countResult[0];\n if (typeof count !== 'number' || !Number.isInteger(count)) {\n throw new Error('take() count must be an integer');\n }\n \n return inputVal.slice(0, count);\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.take(${countExpr.source || ''})`\n };\n }\n};","import type { Function, Operator } from '../types';\nimport { defaultFunctionAnalyze, defaultOperatorAnalyze } from '../default-analyzers';\nimport { defaultFunctionCompile, defaultOperatorCompile } from '../default-compilers';\nimport { TokenType } from '../../lexer/token';\nimport { RuntimeContextManager } from '../../runtime/context';\n\nexport const unionFunction: Function = {\n name: 'union',\n kind: 'function',\n\n syntax: {\n notation: 'union(other)'\n },\n\n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'other',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n\n analyze: defaultFunctionAnalyze,\n\n evaluate: (interpreter, context, input, otherExpr) => {\n const otherResult = interpreter.evaluate(otherExpr, input, context);\n const other = otherResult.value;\n\n const seen = new Set();\n const result: any[] = [];\n\n for (const item of input) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n for (const item of other) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return { value: result, context: otherResult.context };\n },\n\n compile: (compiler, input, args) => {\n const otherExpr = args[0];\n if (!otherExpr) {\n throw new Error('union() requires an argument');\n }\n\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const otherVal = otherExpr.fn(ctx);\n\n const seen = new Set();\n const result: any[] = [];\n\n for (const item of inputVal) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n for (const item of otherVal) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.union(${otherExpr.source || ''})`\n };\n }\n};\n\nexport const combineFunction: Function = {\n name: 'combine',\n kind: 'function',\n\n syntax: {\n notation: 'combine(other)'\n },\n\n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'other',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: false,\n deterministic: true\n },\n\n analyze: defaultFunctionAnalyze,\n\n evaluate: (interpreter, context, input, otherExpr) => {\n const otherResult = interpreter.evaluate(otherExpr, input, context);\n const other = otherResult.value;\n\n return { value: [...input, ...other], context: otherResult.context };\n },\n\n compile: (compiler, input, args) => {\n const otherExpr = args[0];\n if (!otherExpr) {\n throw new Error('combine() requires an argument');\n }\n\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const otherVal = otherExpr.fn(ctx);\n return [...inputVal, ...otherVal];\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.combine(${otherExpr.source || ''})`\n };\n }\n};\n\nexport const intersectFunction: Function = {\n name: 'intersect',\n kind: 'function',\n\n syntax: {\n notation: 'intersect(other)'\n },\n\n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'other',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n\n analyze: defaultFunctionAnalyze,\n\n evaluate: (interpreter, context, input, otherExpr) => {\n const otherResult = interpreter.evaluate(otherExpr, input, context);\n const other = otherResult.value;\n\n const otherSet = new Set(other.map((item: any) => JSON.stringify(item)));\n const result: any[] = [];\n const seen = new Set();\n\n for (const item of input) {\n const key = JSON.stringify(item);\n if (otherSet.has(key) && !seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return { value: result, context: otherResult.context };\n },\n\n compile: (compiler, input, args) => {\n const otherExpr = args[0];\n if (!otherExpr) {\n throw new Error('intersect() requires an argument');\n }\n\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const otherVal = otherExpr.fn(ctx);\n\n const otherSet = new Set(otherVal.map((item: any) => JSON.stringify(item)));\n const result: any[] = [];\n const seen = new Set();\n\n for (const item of inputVal) {\n const key = JSON.stringify(item);\n if (otherSet.has(key) && !seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.intersect(${otherExpr.source || ''})`\n };\n }\n};\n\nexport const excludeFunction: Function = {\n name: 'exclude',\n kind: 'function',\n\n syntax: {\n notation: 'exclude(other)'\n },\n\n signature: {\n input: {\n types: { kind: 'any' },\n cardinality: 'any'\n },\n parameters: [\n {\n name: 'other',\n kind: 'expression',\n types: { kind: 'any' },\n cardinality: 'any',\n optional: false\n }\n ],\n output: {\n type: 'preserve-input',\n cardinality: 'collection'\n },\n propagatesEmpty: true,\n deterministic: true\n },\n\n analyze: defaultFunctionAnalyze,\n\n evaluate: (interpreter, context, input, otherExpr) => {\n const otherResult = interpreter.evaluate(otherExpr, input, context);\n const other = otherResult.value;\n\n const excludeSet = new Set(other.map((item: any) => JSON.stringify(item)));\n const result: any[] = [];\n const seen = new Set();\n\n for (const item of input) {\n const key = JSON.stringify(item);\n if (!excludeSet.has(key) && !seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return { value: result, context: otherResult.context };\n },\n\n compile: (compiler, input, args) => {\n const otherExpr = args[0];\n if (!otherExpr) {\n throw new Error('exclude() requires an argument');\n }\n\n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const otherVal = otherExpr.fn(ctx);\n\n const excludeSet = new Set(otherVal.map((item: any) => JSON.stringify(item)));\n const result: any[] = [];\n const seen = new Set();\n\n for (const item of inputVal) {\n const key = JSON.stringify(item);\n if (!excludeSet.has(key) && !seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n },\n type: input.type,\n isSingleton: false,\n source: `${input.source || ''}.exclude(${otherExpr.source || ''})`\n };\n }\n};\n\n// Union operator (|) - combines collections removing duplicates\nexport const unionOperator: Operator = {\n name: '|',\n kind: 'operator',\n\n syntax: {\n form: 'infix',\n token: TokenType.PIPE,\n precedence: 7, // UNION precedence\n associativity: 'left',\n notation: 'a | b'\n },\n\n signature: {\n parameters: [\n { name: 'left' },\n { name: 'right' }\n ],\n output: {\n type: 'preserve-left',\n cardinality: 'collection'\n },\n propagatesEmpty: false\n },\n\n analyze: defaultOperatorAnalyze,\n\n evaluate: (interpreter, context, input, left, right) => {\n // Union removes duplicates\n const seen = new Set();\n const result: any[] = [];\n\n for (const item of left) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n for (const item of right) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return { value: result, context };\n },\n \n compile: (compiler, input, args) => {\n const [left, right] = args;\n if (!left || !right) {\n throw new Error('Union operator requires two operands');\n }\n return {\n fn: (ctx) => {\n // Evaluate both sides with SEPARATE context copies\n // This prevents variable definitions from leaking between branches\n const leftCtx = RuntimeContextManager.copy(ctx);\n const rightCtx = RuntimeContextManager.copy(ctx);\n const leftVal = left.fn(leftCtx);\n const rightVal = right.fn(rightCtx);\n\n // Union removes duplicates\n const seen = new Set();\n const result: any[] = [];\n\n for (const item of leftVal) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n for (const item of rightVal) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n },\n type: left.type,\n isSingleton: false,\n source: `${left.source || ''} | ${right.source || ''}`\n };\n }\n};\n\n// Export all collection operations\nexport const collectionOperators = [\n unionOperator\n];\n","import type { TokenType } from '../lexer/token';\nimport type { TypeRef, ModelProvider } from '../analyzer/types';\nimport type { EvaluationResult } from '../interpreter/types';\nimport type { RuntimeContext } from '../runtime/context';\n\n// Type information returned by analyze\nexport interface TypeInfo {\n type: TypeRef;\n isSingleton: boolean;\n}\n\n// Base interface for all operations\nexport interface BaseOperation {\n name: string;\n \n // Common lifecycle methods\n analyze: (analyzer: Analyzer, input: TypeInfo, args: TypeInfo[]) => TypeInfo;\n evaluate: (interpreter: Interpreter, context: RuntimeContext, input: any[], ...args: any[]) => EvaluationResult;\n compile: (compiler: Compiler, input: CompiledExpression, args: CompiledExpression[]) => CompiledExpression;\n}\n\n// Operator-specific interface\nexport interface Operator extends BaseOperation {\n kind: 'operator';\n \n syntax: {\n form: 'prefix' | 'infix' | 'postfix';\n token: TokenType;\n precedence: number;\n associativity?: 'left' | 'right'; // For infix operators\n notation: string; // e.g., \"a + b\", \"not a\"\n special?: boolean; // For special forms like . and []\n endToken?: TokenType; // For bracketed operators like []\n };\n \n signature: {\n parameters: [OperatorParameter] | [OperatorParameter, OperatorParameter]; // Unary or binary\n output: {\n type: TypeInferenceRule;\n cardinality: CardinalityInferenceRule;\n };\n propagatesEmpty?: boolean;\n };\n}\n\n// Function-specific interface\nexport interface Function extends BaseOperation {\n kind: 'function';\n \n syntax: {\n notation: string; // e.g., \"substring(start [, length])\"\n };\n \n signature: {\n input?: {\n types?: TypeConstraint;\n cardinality?: 'singleton' | 'collection' | 'any';\n };\n parameters: FunctionParameter[];\n output: {\n type: TypeInferenceRule;\n cardinality: CardinalityInferenceRule;\n };\n propagatesEmpty?: boolean;\n deterministic?: boolean;\n };\n}\n\n// Literal-specific interface\nexport interface Literal extends BaseOperation {\n kind: 'literal';\n \n syntax: {\n pattern?: RegExp; // For complex literals like dates\n keywords?: string[]; // For keyword literals like 'true', 'false'\n notation: string; // Example: \"123\", \"@2023-01-01\"\n };\n \n // Literals have fixed output type\n signature: {\n output: {\n type: string; // Always a specific type\n cardinality: 'singleton'; // Literals are always singleton\n };\n };\n \n // Parse the literal value from source text\n parse: (value: string) => any;\n}\n\n// Union type for registry\nexport type Operation = Operator | Function | Literal;\n\n// Specialized parameter types\nexport interface OperatorParameter {\n name: 'left' | 'right' | 'operand';\n types?: TypeConstraint;\n cardinality?: 'singleton' | 'collection' | 'any'; // Required cardinality for this parameter\n}\n\nexport interface FunctionParameter {\n name: string;\n kind: 'value' | 'expression' | 'type-specifier';\n types?: TypeConstraint;\n cardinality?: 'singleton' | 'collection' | 'any';\n optional?: boolean;\n default?: any;\n}\n\nexport interface TypeConstraint {\n kind: 'primitive' | 'class' | 'union' | 'any';\n types?: string[]; // ['Integer', 'Decimal'] for numeric, ['Resource'] for FHIR types\n}\n\nexport type TypeInferenceRule = \n | string // Fixed type like 'Boolean'\n | 'preserve-input' // Returns input type\n | 'promote-numeric' // Integer + Decimal = Decimal\n | ((input: TypeRef, args: TypeRef[], provider: ModelProvider) => TypeRef);\n\nexport type CardinalityInferenceRule = \n | 'singleton' | 'collection'\n | 'preserve-input' // Same as input\n | 'all-singleton' // Singleton only if all inputs are singleton\n | ((input: boolean, args: boolean[]) => boolean);\n\n// Closure-based compiled expression\nexport interface CompiledExpression {\n // The compiled function\n fn: (context: RuntimeContext) => any[];\n \n // Type information for optimization\n type: TypeRef;\n isSingleton: boolean;\n \n // For debugging/tracing\n source?: string;\n}\n\n\n// Interfaces for components that use the registry\nexport interface Analyzer {\n error(message: string): void;\n warning(message: string): void;\n resolveType(typeName: string): TypeRef;\n}\n\nexport interface Interpreter {\n evaluate(node: any, input: any[], context: RuntimeContext): EvaluationResult;\n}\n\nexport interface Compiler {\n compile(node: any, input: CompiledExpression): CompiledExpression;\n resolveType(typeName: string): TypeRef;\n}\n\n// Re-export TypeRef from analyzer\nexport type { TypeRef } from '../analyzer/types';\n\n// Re-export RuntimeContext for use in other modules\nexport type { RuntimeContext } from '../runtime/context';","import { Registry } from './registry';\nimport { arithmeticOperators } from './operations/arithmetic';\nimport { logicalOperators, logicalFunctions } from './operations/logical';\nimport { comparisonOperators } from './operations/comparison';\nimport { membershipOperators } from './operations/membership';\nimport { typeOperators } from './operations/type-operators';\nimport { literals } from './operations/literals';\nimport { existenceFunctions } from './operations/existence';\nimport { navigationOperators } from './operations/navigation';\nimport { \n aggregateFunction, \n childrenFunction, \n descendantsFunction, \n iifFunction, \n defineVariableFunction, \n traceFunction, \n checkFunction \n} from './operations/utility';\nimport { typeFunction, isFunction, asFunction } from './operations/type-checking';\nimport { absFunction, roundFunction, sqrtFunction } from './operations/math';\nimport { whereFunction, selectFunction, ofTypeFunction, repeatFunction } from './operations/filtering';\nimport { \n containsFunction, lengthFunction, substringFunction, startsWithFunction, \n endsWithFunction, upperFunction, lowerFunction, indexOfFunction,\n replaceFunction, splitFunction, joinFunction, trimFunction, toCharsFunction\n} from './operations/string';\nimport { \n toStringFunction, toIntegerFunction, toDecimalFunction, \n toBooleanFunction, toQuantityFunction \n} from './operations/type-conversion';\nimport { tailFunction, skipFunction, takeFunction } from './operations/subsetting';\nimport { unionFunction, combineFunction, intersectFunction, excludeFunction, collectionOperators } from './operations/collection';\n\n// Export types\nexport * from './types';\nexport { Registry } from './registry';\nexport * from './default-analyzers';\n\n// Register all operations on module load\n[\n ...arithmeticOperators,\n ...logicalOperators,\n ...logicalFunctions,\n ...comparisonOperators,\n ...membershipOperators,\n ...typeOperators,\n ...collectionOperators,\n ...navigationOperators,\n ...literals,\n ...existenceFunctions,\n aggregateFunction,\n childrenFunction,\n descendantsFunction,\n iifFunction,\n defineVariableFunction,\n traceFunction,\n checkFunction,\n typeFunction,\n isFunction,\n asFunction,\n absFunction,\n roundFunction,\n sqrtFunction,\n whereFunction,\n selectFunction,\n ofTypeFunction,\n repeatFunction,\n containsFunction,\n lengthFunction,\n substringFunction,\n startsWithFunction,\n endsWithFunction,\n upperFunction,\n lowerFunction,\n indexOfFunction,\n replaceFunction,\n splitFunction,\n joinFunction,\n trimFunction,\n toCharsFunction,\n toStringFunction,\n toIntegerFunction,\n toDecimalFunction,\n toBooleanFunction,\n toQuantityFunction,\n tailFunction,\n skipFunction,\n takeFunction,\n unionFunction,\n combineFunction,\n intersectFunction,\n excludeFunction\n].forEach(op => Registry.register(op));\n\n// Export default registry instance\nexport default Registry;","// Character classification lookup table for O(1) checks\nexport const CHAR_FLAGS = new Uint8Array(128);\n\n// Bit flags for character properties\nexport const FLAG_DIGIT = 1 << 0;\nexport const FLAG_ALPHA = 1 << 1;\nexport const FLAG_WHITESPACE = 1 << 2;\nexport const FLAG_IDENTIFIER_START = 1 << 3;\nexport const FLAG_IDENTIFIER_CONT = 1 << 4;\n\n// Initialize lookup table (called once at startup)\nexport function initCharTables(): void {\n // Digits\n for (let i = 48; i <= 57; i++) {\n CHAR_FLAGS[i]! |= FLAG_DIGIT | FLAG_IDENTIFIER_CONT;\n }\n \n // Letters\n for (let i = 65; i <= 90; i++) {\n CHAR_FLAGS[i]! |= FLAG_ALPHA | FLAG_IDENTIFIER_START | FLAG_IDENTIFIER_CONT;\n }\n for (let i = 97; i <= 122; i++) {\n CHAR_FLAGS[i]! |= FLAG_ALPHA | FLAG_IDENTIFIER_START | FLAG_IDENTIFIER_CONT;\n }\n \n // Underscore\n CHAR_FLAGS[95]! |= FLAG_IDENTIFIER_START | FLAG_IDENTIFIER_CONT;\n \n // Whitespace\n CHAR_FLAGS[32]! |= FLAG_WHITESPACE; // space\n CHAR_FLAGS[9]! |= FLAG_WHITESPACE; // tab\n CHAR_FLAGS[10]! |= FLAG_WHITESPACE; // newline\n CHAR_FLAGS[13]! |= FLAG_WHITESPACE; // carriage return\n}\n\n// Initialize the table immediately\ninitCharTables();","import type { Position } from './token';\n\nexport class LexerError extends Error {\n constructor(\n message: string,\n public position: Position,\n public char?: string\n ) {\n super(message);\n this.name = 'LexerError';\n }\n\n override toString(): string {\n const location = `${this.position.line}:${this.position.column}`;\n const charInfo = this.char ? ` (found '${this.char}')` : '';\n return `${this.name}: ${this.message} at ${location}${charInfo}`;\n }\n}\n\nexport function formatError(error: LexerError, input: string): string {\n const lines = input.split('\\n');\n const line = lines[error.position.line - 1] || '';\n const pointer = ' '.repeat(error.position.column - 1) + '^';\n \n return [\n error.toString(),\n '',\n line,\n pointer\n ].join('\\n');\n}","import type { Token, Position } from './token';\nimport { TokenType, Channel } from './token';\nimport { CHAR_FLAGS, FLAG_DIGIT, FLAG_IDENTIFIER_START, FLAG_IDENTIFIER_CONT, FLAG_WHITESPACE } from './char-tables';\nimport { LexerError } from './errors';\nimport { Registry } from '../registry';\nimport type { Operation, Literal } from '../registry';\n\n// Token object pool to reduce allocations\nclass TokenPool {\n private pool: Token[] = [];\n private poolIndex: number = 0;\n \n getToken(type: TokenType, value: string, position: Position): Token {\n if (this.poolIndex < this.pool.length) {\n const token = this.pool[this.poolIndex++]!;\n token.type = type;\n token.value = value;\n token.position = position;\n token.channel = Channel.DEFAULT;\n return token;\n } else {\n const token = { type, value, position, channel: Channel.DEFAULT };\n this.pool.push(token);\n this.poolIndex++;\n return token;\n }\n }\n \n reset() {\n this.poolIndex = 0;\n }\n}\n\nexport class FHIRPathLexer {\n private chars: string[]; // Character array for O(1) access\n private length: number;\n private position: number = 0;\n private line: number = 1;\n private column: number = 1;\n private tokenPool = new TokenPool();\n \n // String interning for common tokens\n private readonly internedStrings = new Map<string, string>();\n \n constructor(input: string) {\n this.chars = Array.from(input);\n this.length = this.chars.length;\n \n // Pre-intern common strings\n const common = ['true', 'false', 'and', 'or', 'where', 'select', 'exists'];\n for (const str of common) {\n this.internedStrings.set(str, str);\n }\n }\n \n tokenize(): Token[] {\n const tokens: Token[] = [];\n this.tokenPool.reset();\n \n while (!this.isAtEnd()) {\n this.skipWhitespaceAndComments();\n if (this.isAtEnd()) break;\n \n const token = this.nextToken();\n if (token) {\n tokens.push(token);\n }\n }\n \n tokens.push(this.tokenPool.getToken(TokenType.EOF, '', this.getCurrentPosition()));\n return tokens;\n }\n \n private nextToken(): Token | null {\n const start = this.savePosition();\n \n const char = this.peek();\n const code = char.charCodeAt(0);\n \n // Fast path for ASCII characters using switch\n if (code < 128) {\n switch (code) {\n // Whitespace (should have been skipped, but just in case)\n case 32: case 9: case 10: case 13:\n this.advance();\n return null;\n \n // Single character tokens\n case 46: return this.makeTokenAndAdvance(TokenType.DOT, '.'); // .\n case 44: return this.makeTokenAndAdvance(TokenType.COMMA, ','); // ,\n case 40: return this.makeTokenAndAdvance(TokenType.LPAREN, '('); // (\n case 41: return this.makeTokenAndAdvance(TokenType.RPAREN, ')'); // )\n case 91: return this.makeTokenAndAdvance(TokenType.LBRACKET, '['); // [\n case 93: return this.makeTokenAndAdvance(TokenType.RBRACKET, ']'); // ]\n case 43: return this.makeTokenAndAdvance(TokenType.PLUS, '+'); // +\n case 45: return this.makeTokenAndAdvance(TokenType.MINUS, '-'); // -\n case 42: return this.makeTokenAndAdvance(TokenType.STAR, '*'); // *\n case 47: return this.scanSlashOrComment(); // /\n case 38: return this.makeTokenAndAdvance(TokenType.CONCAT, '&'); // &\n case 124: return this.makeTokenAndAdvance(TokenType.PIPE, '|'); // |\n case 61: return this.makeTokenAndAdvance(TokenType.EQ, '='); // =\n case 126: return this.makeTokenAndAdvance(TokenType.EQUIV, '~'); // ~\n \n // Multi-character tokens\n case 60: return this.scanLessThan(); // < or <=\n case 62: return this.scanGreaterThan(); // > or >=\n case 33: return this.scanExclamation(); // != or !~\n \n // Complex tokens\n case 39: return this.scanString(); // '\n case 96: return this.scanDelimitedIdentifier(); // `\n case 64: return this.scanDateTime(); // @\n case 37: return this.scanEnvironmentVariable(); // %\n case 36: return this.scanSpecialVariable(); // $\n case 123: return this.makeTokenAndAdvance(TokenType.LBRACE, '{'); // {\n case 125: return this.makeTokenAndAdvance(TokenType.RBRACE, '}'); // }\n \n default:\n // Use lookup table for classification\n if ((CHAR_FLAGS[code]! & FLAG_DIGIT) !== 0) {\n return this.scanNumber();\n }\n if ((CHAR_FLAGS[code]! & FLAG_IDENTIFIER_START) !== 0) {\n return this.scanIdentifierOrKeyword();\n }\n }\n }\n \n // Fallback for non-ASCII\n if (this.isIdentifierStart(char)) {\n return this.scanIdentifierOrKeyword();\n }\n \n throw this.error(`Unexpected character: ${char}`);\n }\n \n // Multi-character operator scanners\n private scanSlashOrComment(): Token | null {\n if (this.peekNext() === '/') {\n // Single-line comment - skip it\n this.skipWhitespaceAndComments();\n return null;\n } else if (this.peekNext() === '*') {\n // Multi-line comment - skip it\n this.skipWhitespaceAndComments();\n return null;\n } else {\n // Division operator\n return this.makeTokenAndAdvance(TokenType.SLASH, '/');\n }\n }\n \n private scanLessThan(): Token {\n const start = this.savePosition();\n this.advance(); // <\n \n if (this.peek() === '=') {\n this.advance(); // =\n return this.makeToken(TokenType.LTE, '<=', start);\n }\n \n return this.makeToken(TokenType.LT, '<', start);\n }\n \n private scanGreaterThan(): Token {\n const start = this.savePosition();\n this.advance(); // >\n \n if (this.peek() === '=') {\n this.advance(); // =\n return this.makeToken(TokenType.GTE, '>=', start);\n }\n \n return this.makeToken(TokenType.GT, '>', start);\n }\n \n private scanExclamation(): Token {\n const start = this.savePosition();\n this.advance(); // !\n \n if (this.peek() === '=') {\n this.advance(); // =\n return this.makeToken(TokenType.NEQ, '!=', start);\n } else if (this.peek() === '~') {\n this.advance(); // ~\n return this.makeToken(TokenType.NEQUIV, '!~', start);\n }\n \n throw this.error('Expected \"=\" or \"~\" after \"!\"');\n }\n \n // Fast character classification using lookup table\n private isDigit(char: string): boolean {\n const code = char.charCodeAt(0);\n return code < 128 && (CHAR_FLAGS[code]! & FLAG_DIGIT) !== 0;\n }\n \n private isIdentifierStart(char: string): boolean {\n const code = char.charCodeAt(0);\n if (code < 128) {\n return (CHAR_FLAGS[code]! & FLAG_IDENTIFIER_START) !== 0;\n }\n return this.isUnicodeIdentifierStart(char);\n }\n \n private isWhitespace(char: string): boolean {\n const code = char.charCodeAt(0);\n return code < 128 && (CHAR_FLAGS[code]! & FLAG_WHITESPACE) !== 0;\n }\n \n // O(1) character access\n private peek(offset: number = 0): string {\n const pos = this.position + offset;\n return pos < this.length ? this.chars[pos]! : '\\0';\n }\n \n // String interning for memory efficiency\n private intern(str: string): string {\n if (str.length <= 10) {\n const interned = this.internedStrings.get(str);\n if (interned) return interned;\n this.internedStrings.set(str, str);\n }\n return str;\n }\n \n // Helper Methods\n \n // Position and Character Navigation\n private savePosition(): Position {\n return {\n line: this.line,\n column: this.column,\n offset: this.position\n };\n }\n \n private getCurrentPosition(): Position {\n return this.savePosition();\n }\n \n private advance(): string {\n const char = this.chars[this.position++]!;\n \n // Update line/column for newlines\n if (char === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n \n return char;\n }\n \n private isAtEnd(): boolean {\n return this.position >= this.length;\n }\n \n private peekNext(): string {\n return this.peek(1);\n }\n \n // Scanning Utilities\n private scanDigits(count?: number): string | null {\n const start = this.position;\n let scanned = 0;\n \n while (!this.isAtEnd() && this.isDigit(this.peek())) {\n this.advance();\n scanned++;\n if (count !== undefined && scanned >= count) break;\n }\n \n if (count !== undefined && scanned < count) {\n return null; // Didn't get required number of digits\n }\n \n return this.chars.slice(start, this.position).join('');\n }\n \n private scanIdentifier(): string {\n const start = this.position;\n \n while (!this.isAtEnd()) {\n const char = this.peek();\n const code = char.charCodeAt(0);\n \n if (code < 128) {\n if ((CHAR_FLAGS[code]! & FLAG_IDENTIFIER_CONT) === 0) break;\n } else {\n // Handle non-ASCII Unicode letters/digits\n if (!this.isUnicodeIdentifierCont(char)) break;\n }\n \n this.advance();\n }\n \n return this.chars.slice(start, this.position).join('');\n }\n \n private scanUntil(target: string): string {\n const start = this.position;\n \n while (!this.isAtEnd() && this.peek() !== target) {\n this.advance();\n }\n \n return this.chars.slice(start, this.position).join('');\n }\n \n private getTextFromPosition(start: Position): string {\n return this.chars.slice(start.offset, this.position).join('');\n }\n \n // Token Creation\n private makeToken(\n type: TokenType, \n value: string, \n start: Position, \n channel: Channel = Channel.DEFAULT\n ): Token {\n const token = this.tokenPool.getToken(type, value, start);\n token.channel = channel;\n return token;\n }\n \n private makeTokenAndAdvance(type: TokenType, value: string): Token {\n const start = this.savePosition();\n this.advance();\n return this.makeToken(type, value, start);\n }\n \n // Complex Token Scanners\n \n private scanString(): Token {\n const start = this.savePosition();\n this.advance(); // consume opening '\n \n let value = '';\n while (!this.isAtEnd() && this.peek() !== \"'\") {\n if (this.peek() === '\\\\') {\n this.advance();\n value += this.scanEscapeSequence();\n } else {\n value += this.advance();\n }\n }\n \n if (this.isAtEnd()) {\n throw this.error('Unterminated string');\n }\n \n this.advance(); // consume closing '\n return this.makeToken(TokenType.STRING, value, start);\n }\n \n private scanEscapeSequence(): string {\n const char = this.advance();\n switch (char) {\n case '`': return '`';\n case \"'\": return \"'\";\n case '\\\\': return '\\\\';\n case '/': return '/';\n case 'f': return '\\f';\n case 'n': return '\\n';\n case 'r': return '\\r';\n case 't': return '\\t';\n case 'u': return this.scanUnicodeEscape();\n default: throw this.error(`Invalid escape sequence: \\\\${char}`);\n }\n }\n \n private scanUnicodeEscape(): string {\n // \\uXXXX - exactly 4 hex digits\n let code = 0;\n for (let i = 0; i < 4; i++) {\n const char = this.peek();\n const digit = this.hexDigitValue(char);\n if (digit === -1) {\n throw this.error(`Invalid unicode escape sequence: expected hex digit, got '${char}'`);\n }\n code = code * 16 + digit;\n this.advance();\n }\n return String.fromCharCode(code);\n }\n \n private hexDigitValue(char: string): number {\n const code = char.charCodeAt(0);\n if (code >= 48 && code <= 57) return code - 48; // 0-9\n if (code >= 65 && code <= 70) return code - 65 + 10; // A-F\n if (code >= 97 && code <= 102) return code - 97 + 10; // a-f\n return -1;\n }\n \n // Special Variables\n private scanSpecialVariable(): Token {\n const start = this.savePosition();\n this.advance(); // consume $\n \n const name = this.scanIdentifier();\n const fullName = '$' + name;\n \n if (name === 'this') {\n return this.makeToken(TokenType.THIS, fullName, start);\n } else if (name === 'index') {\n return this.makeToken(TokenType.INDEX, fullName, start);\n } else if (name === 'total') {\n return this.makeToken(TokenType.TOTAL, fullName, start);\n } else {\n throw this.error(`Invalid special variable: ${fullName}`);\n }\n }\n \n // Date/Time Literals\n private scanDateTime(): Token {\n const start = this.savePosition();\n this.advance(); // consume @\n \n // Check for time-only literal: @T14:30:00\n if (this.peek() === 'T') {\n this.advance(); // consume T\n const timeFormat = this.scanTimeFormat();\n if (!timeFormat) {\n throw this.error('Invalid time format: expected time after @T');\n }\n return this.makeToken(TokenType.TIME, '@T' + timeFormat, start);\n }\n \n // Date, DateTime, or partial date literal\n let value = '@';\n \n // Year is required\n const year = this.scanDigits(4);\n if (!year) throw this.error('Invalid date/time format: expected 4-digit year');\n value += year;\n \n // Month is optional\n if (this.peek() === '-') {\n value += this.advance(); // -\n const month = this.scanDigits(2);\n if (!month) throw this.error('Invalid month');\n value += month;\n \n // Day is optional if month is present\n if (this.peek() === '-') {\n value += this.advance(); // -\n const day = this.scanDigits(2);\n if (!day) throw this.error('Invalid day');\n value += day;\n \n // Time component is optional\n if (this.peek() === 'T') {\n value += this.advance(); // T\n const timeFormat = this.scanTimeFormat();\n if (timeFormat) {\n value += timeFormat;\n }\n }\n } else if (this.peek() === 'T') {\n // Month without day but with time (rare but allowed)\n value += this.advance(); // T\n const timeFormat = this.scanTimeFormat();\n if (timeFormat) {\n value += timeFormat;\n }\n }\n } else if (this.peek() === 'T') {\n // Year with time but no month/day (also rare but allowed)\n value += this.advance(); // T\n const timeFormat = this.scanTimeFormat();\n if (timeFormat) {\n value += timeFormat;\n }\n }\n \n // Timezone is optional\n if (this.peek() === 'Z' || this.peek() === '+' || this.peek() === '-') {\n value += this.scanTimezone();\n }\n \n // Determine token type based on content\n const tokenType = value.includes('T') ? TokenType.DATETIME : TokenType.DATE;\n return this.makeToken(tokenType, value, start);\n }\n \n private scanTimeFormat(): string {\n // TIMEFORMAT: [0-9][0-9] (':'[0-9][0-9] (':'[0-9][0-9] ('.'[0-9]+)?)?)?\n let time = '';\n \n // Hour is required\n const hour = this.scanDigits(2);\n if (!hour) return ''; // Empty time allowed in some contexts\n time += hour;\n \n // Minutes optional\n if (this.peek() === ':') {\n time += this.advance(); // :\n const minute = this.scanDigits(2);\n if (!minute) throw this.error('Invalid time format: expected 2-digit minute');\n time += minute;\n \n // Seconds optional\n if (this.peek() === ':') {\n time += this.advance(); // :\n const second = this.scanDigits(2);\n if (!second) throw this.error('Invalid time format: expected 2-digit second');\n time += second;\n \n // Fractional seconds optional\n if (this.peek() === '.') {\n time += this.advance(); // .\n const fraction = this.scanDigits();\n if (!fraction) throw this.error('Invalid time format: expected fractional seconds');\n time += fraction;\n }\n }\n }\n \n return time;\n }\n \n private scanTimezone(): string {\n const char = this.peek();\n \n if (char === 'Z') {\n this.advance();\n return 'Z';\n }\n \n if (char === '+' || char === '-') {\n let tz = this.advance(); // + or -\n const hour = this.scanDigits(2);\n if (!hour) throw this.error('Invalid timezone: expected 2-digit hour');\n tz += hour;\n \n if (this.peek() !== ':') {\n throw this.error('Invalid timezone: expected \":\" after hour');\n }\n tz += this.advance(); // :\n \n const minute = this.scanDigits(2);\n if (!minute) throw this.error('Invalid timezone: expected 2-digit minute');\n tz += minute;\n \n return tz;\n }\n \n return '';\n }\n \n // Number Literals\n private scanNumber(): Token {\n const start = this.savePosition();\n \n // Allow leading zeros (e.g., 0123)\n while (this.isDigit(this.peek())) {\n this.advance();\n }\n \n // Check for decimal point\n if (this.peek() === '.' && this.isDigit(this.peekNext())) {\n this.advance(); // consume .\n while (this.isDigit(this.peek())) {\n this.advance();\n }\n }\n \n const value = this.getTextFromPosition(start);\n return this.makeToken(TokenType.NUMBER, value, start);\n }\n \n // Delimited Identifiers\n private scanDelimitedIdentifier(): Token {\n const start = this.savePosition();\n this.advance(); // consume opening `\n \n let value = '';\n while (!this.isAtEnd() && this.peek() !== '`') {\n if (this.peek() === '\\\\') {\n this.advance();\n value += this.scanEscapeSequence();\n } else {\n value += this.advance();\n }\n }\n \n if (this.isAtEnd()) {\n throw this.error('Unterminated delimited identifier');\n }\n \n this.advance(); // consume closing `\n return this.makeToken(TokenType.DELIMITED_IDENTIFIER, value, start);\n }\n \n // Environment Variables\n private scanEnvironmentVariable(): Token {\n const start = this.savePosition();\n this.advance(); // consume %\n \n let name: string;\n if (this.peek() === '`') {\n // Delimited: %`vs-name`\n this.advance(); // consume `\n name = this.scanUntil('`');\n this.advance(); // consume closing `\n } else if (this.peek() === \"'\") {\n // String form: %'string value'\n const stringToken = this.scanString();\n name = stringToken.value;\n } else {\n // Simple: %context\n name = this.scanIdentifier();\n }\n \n return this.makeToken(TokenType.ENV_VAR, name, start);\n }\n \n // Identifiers and Keywords\n private scanIdentifierOrKeyword(): Token {\n const start = this.savePosition();\n const value = this.scanIdentifier();\n \n // Intern the string for efficient comparison\n const internedValue = this.intern(value);\n \n // Special handling for boolean literals (to maintain compatibility)\n if (internedValue === 'true') {\n return this.tokenPool.getToken(TokenType.TRUE, internedValue, start);\n }\n if (internedValue === 'false') {\n return this.tokenPool.getToken(TokenType.FALSE, internedValue, start);\n }\n \n // Check if it's a keyword using registry\n if (Registry.isKeyword(internedValue)) {\n // First try to find an operator with this name\n const operators = [TokenType.CONTAINS, TokenType.IN, TokenType.AND, TokenType.OR, \n TokenType.XOR, TokenType.IMPLIES, TokenType.AS, TokenType.IS,\n TokenType.NOT, TokenType.MOD, TokenType.DIV];\n \n for (const tokenType of operators) {\n const op = Registry.getByToken(tokenType, 'infix') || Registry.getByToken(tokenType, 'prefix');\n if (op && op.name === internedValue) {\n return this.tokenPool.getToken(tokenType, internedValue, start);\n }\n }\n \n // Fallback to general lookup\n const op = Registry.get(internedValue);\n if (op && op.kind === 'operator' && op.syntax.token) {\n return this.tokenPool.getToken(op.syntax.token, internedValue, start);\n }\n }\n \n // Check for time units (these are handled as UNIT tokens)\n const timeUnits = ['year', 'years', 'month', 'months', 'week', 'weeks', \n 'day', 'days', 'hour', 'hours', 'minute', 'minutes', \n 'second', 'seconds', 'millisecond', 'milliseconds'];\n if (timeUnits.includes(internedValue)) {\n return this.tokenPool.getToken(TokenType.UNIT, internedValue, start);\n }\n \n return this.tokenPool.getToken(TokenType.IDENTIFIER, internedValue, start);\n }\n \n // Unicode Support\n private isUnicodeIdentifierStart(char: string): boolean {\n // Unicode categories: Letter (L*), Letter Number (Nl)\n return /\\p{L}|\\p{Nl}/u.test(char);\n }\n \n private isUnicodeIdentifierCont(char: string): boolean {\n // Unicode categories: Letter (L*), Number (N*), Mark (M*), Connector Punctuation (Pc)\n return /\\p{L}|\\p{N}|\\p{M}|\\p{Pc}/u.test(char);\n }\n \n // Comment and Whitespace Handling\n private skipWhitespaceAndComments(preserveTrivia: boolean = false): Token[] {\n const trivia: Token[] = [];\n \n while (!this.isAtEnd()) {\n const start = this.savePosition();\n const char = this.peek();\n \n if (this.isWhitespace(char)) {\n const ws = this.scanWhitespace();\n if (preserveTrivia) {\n trivia.push(this.makeToken(TokenType.WS, ws, start, Channel.HIDDEN));\n }\n } else if (char === '/' && this.peekNext() === '/') {\n // Single-line comment\n this.advance(); // /\n this.advance(); // /\n const comment = '//' + this.scanUntil('\\n');\n if (preserveTrivia) {\n trivia.push(this.makeToken(TokenType.LINE_COMMENT, comment, start, Channel.HIDDEN));\n }\n } else if (char === '/' && this.peekNext() === '*') {\n // Multi-line comment\n this.advance(); // /\n this.advance(); // *\n let comment = '/*';\n while (!this.isAtEnd() && !(this.peek() === '*' && this.peekNext() === '/')) {\n comment += this.advance();\n }\n if (!this.isAtEnd()) {\n comment += this.advance(); // *\n comment += this.advance(); // /\n }\n if (preserveTrivia) {\n trivia.push(this.makeToken(TokenType.COMMENT, comment, start, Channel.HIDDEN));\n }\n } else {\n break;\n }\n }\n \n return trivia;\n }\n \n private scanWhitespace(): string {\n const start = this.position;\n while (!this.isAtEnd() && this.isWhitespace(this.peek())) {\n this.advance();\n }\n return this.chars.slice(start, this.position).join('');\n }\n \n // Error handling\n private error(message: string): LexerError {\n return new LexerError(\n message,\n this.getCurrentPosition(),\n this.peek()\n );\n }\n}\n\n// Export convenience function\nexport function lex(input: string): Token[] {\n const lexer = new FHIRPathLexer(input);\n return lexer.tokenize();\n}","import type { TokenType, Token } from '../lexer/token';\nimport type { TextRange } from './types';\nimport type { ParseDiagnostic } from './types';\n\n// Core AST Node Interface\nexport interface ASTNode {\n type: NodeType;\n position: Position;\n range?: TextRange; // Full text range (populated in diagnostic modes)\n // Type analysis fields (optional - added by analyzer)\n resultType?: unknown; // Opaque type reference\n isSingleton?: boolean; // Whether this expression returns a single value\n}\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\n// Node types\nexport enum NodeType {\n // Navigation\n Identifier,\n TypeOrIdentifier, // Uppercase identifiers that could be types (Patient, Observation)\n \n // Operators\n Binary, // All binary operators including dot\n Unary, // unary +, -, not\n Union, // | operator (special handling for multiple operands)\n \n // Functions\n Function, // Function calls\n \n // Literals\n Literal, // numbers, strings, booleans, dates, null\n Variable, // $this, $index, $total, %var\n Collection, // {} empty collection or {expr1, expr2, ...}\n \n // Type operations\n MembershipTest, // 'is' operator\n TypeCast, // 'as' operator\n TypeReference, // Type name in ofType()\n \n // Special\n Index, // [] indexing\n \n // Error recovery\n Error = 'Error', // Error recovery node\n Incomplete = 'Incomplete' // Incomplete expression node\n}\n\n// Specific node types\nexport interface IdentifierNode extends ASTNode {\n type: NodeType.Identifier;\n name: string;\n}\n\nexport interface TypeOrIdentifierNode extends ASTNode {\n type: NodeType.TypeOrIdentifier;\n name: string;\n}\n\nexport interface LiteralNode extends ASTNode {\n type: NodeType.Literal;\n value: any;\n valueType: 'string' | 'number' | 'boolean' | 'date' | 'time' | 'datetime' | 'null';\n raw?: string; // Raw string representation\n operation?: any; // Operation from registry (using any to avoid circular dependency)\n}\n\nexport interface BinaryNode extends ASTNode {\n type: NodeType.Binary;\n operator: TokenType;\n operation?: any; // Operation from registry (using any to avoid circular dependency)\n left: ASTNode;\n right: ASTNode;\n}\n\nexport interface UnaryNode extends ASTNode {\n type: NodeType.Unary;\n operator: TokenType;\n operation?: any; // Operation from registry (using any to avoid circular dependency)\n operand: ASTNode;\n}\n\nexport interface FunctionNode extends ASTNode {\n type: NodeType.Function;\n name: ASTNode; // Usually an identifier\n arguments: ASTNode[];\n operation?: any; // Operation from registry (using any to avoid circular dependency)\n}\n\nexport interface VariableNode extends ASTNode {\n type: NodeType.Variable;\n name: string;\n}\n\nexport interface IndexNode extends ASTNode {\n type: NodeType.Index;\n expression: ASTNode;\n index: ASTNode;\n}\n\nexport interface UnionNode extends ASTNode {\n type: NodeType.Union;\n operands: ASTNode[];\n}\n\nexport interface MembershipTestNode extends ASTNode {\n type: NodeType.MembershipTest;\n expression: ASTNode;\n targetType: string;\n}\n\nexport interface TypeCastNode extends ASTNode {\n type: NodeType.TypeCast;\n expression: ASTNode;\n targetType: string;\n}\n\nexport interface CollectionNode extends ASTNode {\n type: NodeType.Collection;\n elements: ASTNode[];\n}\n\nexport interface TypeReferenceNode extends ASTNode {\n type: NodeType.TypeReference;\n typeName: string;\n}\n\n// Error recovery nodes\nexport interface ErrorNode extends ASTNode {\n type: NodeType.Error;\n expectedTokens?: TokenType[];\n actualToken?: Token;\n diagnostic: ParseDiagnostic;\n}\n\nexport interface IncompleteNode extends ASTNode {\n type: NodeType.Incomplete;\n partialNode?: ASTNode;\n missingParts: string[];\n}","import type { ASTNode } from './ast';\nimport type { ErrorCode } from '../api/errors';\n\nexport interface ParserOptions {\n maxErrors?: number;\n throwOnError?: boolean; // When true, throws on first error instead of collecting diagnostics\n trackRanges?: boolean; // Enable source range tracking for each AST node (useful for IDEs)\n errorRecovery?: boolean; // Enable error recovery to continue parsing after errors (useful for IDEs)\n}\n\nexport interface ParseResult {\n ast: ASTNode;\n diagnostics: ParseDiagnostic[];\n hasErrors: boolean;\n isPartial?: boolean; // Present when errorRecovery is enabled\n ranges?: Map<ASTNode, TextRange>; // Present when trackRanges is enabled\n}\n\nexport interface ParseDiagnostic {\n range: TextRange;\n severity: DiagnosticSeverity;\n code: ErrorCode;\n message: string;\n source: 'fhirpath-parser';\n relatedInformation?: RelatedInformation[];\n}\n\nexport enum DiagnosticSeverity {\n Error = 1,\n Warning = 2,\n Information = 3,\n Hint = 4\n}\n\nexport interface TextRange {\n start: Position;\n end: Position;\n}\n\nexport interface Position {\n line: number;\n character: number;\n offset: number;\n}\n\nexport interface RelatedInformation {\n location: TextRange;\n message: string;\n}\n\nexport enum ParseContext {\n Expression,\n FunctionCall,\n IndexExpression,\n BinaryExpression,\n UnaryExpression,\n CollectionLiteral,\n TypeCast,\n MembershipTest\n}","import type { ParseDiagnostic, DiagnosticSeverity, TextRange } from './types';\nimport type { ErrorCode } from '../api/errors';\n\nexport class DiagnosticCollector {\n private diagnostics: ParseDiagnostic[] = [];\n private errorCount = 0;\n private warningCount = 0;\n private maxErrors: number;\n \n constructor(maxErrors: number = Number.MAX_SAFE_INTEGER) {\n this.maxErrors = maxErrors;\n }\n \n addError(range: TextRange, message: string, code: ErrorCode): void {\n if (this.errorCount >= this.maxErrors) {\n return;\n }\n \n this.diagnostics.push({\n range,\n severity: 1 as DiagnosticSeverity.Error,\n code,\n message,\n source: 'fhirpath-parser'\n });\n this.errorCount++;\n }\n \n addWarning(range: TextRange, message: string, code: ErrorCode): void {\n this.diagnostics.push({\n range,\n severity: 2 as DiagnosticSeverity.Warning,\n code,\n message,\n source: 'fhirpath-parser'\n });\n this.warningCount++;\n }\n \n addInfo(range: TextRange, message: string, code: ErrorCode): void {\n this.diagnostics.push({\n range,\n severity: 3 as DiagnosticSeverity.Information,\n code,\n message,\n source: 'fhirpath-parser'\n });\n }\n \n addHint(range: TextRange, message: string, code: ErrorCode): void {\n this.diagnostics.push({\n range,\n severity: 4 as DiagnosticSeverity.Hint,\n code,\n message,\n source: 'fhirpath-parser'\n });\n }\n \n getDiagnostics(): ParseDiagnostic[] {\n return [...this.diagnostics];\n }\n \n hasErrors(): boolean {\n return this.errorCount > 0;\n }\n \n hasWarnings(): boolean {\n return this.warningCount > 0;\n }\n \n getErrorCount(): number {\n return this.errorCount;\n }\n \n getWarningCount(): number {\n return this.warningCount;\n }\n \n clear(): void {\n this.diagnostics = [];\n this.errorCount = 0;\n this.warningCount = 0;\n }\n}","import type { Token } from '../lexer/token';\nimport type { ASTNode } from './ast';\nimport { NodeType } from './ast';\nimport type { TextRange, Position } from './types';\n\nexport class SourceMapper {\n private source: string;\n private lineOffsets: number[] = [];\n \n constructor(source: string) {\n this.source = source;\n this.calculateLineOffsets();\n }\n \n private calculateLineOffsets(): void {\n this.lineOffsets = [0];\n for (let i = 0; i < this.source.length; i++) {\n if (this.source[i] === '\\n') {\n this.lineOffsets.push(i + 1);\n }\n }\n }\n \n tokenToRange(token: Token): TextRange {\n const start = this.offsetToPosition(token.position.offset);\n const end = this.offsetToPosition(token.position.offset + token.value.length);\n \n return {\n start,\n end\n };\n }\n \n offsetToPosition(offset: number): Position {\n let line = 0;\n \n for (let i = 0; i < this.lineOffsets.length - 1; i++) {\n if (offset >= this.lineOffsets[i]! && offset < this.lineOffsets[i + 1]!) {\n line = i;\n break;\n }\n }\n \n if (offset >= this.lineOffsets[this.lineOffsets.length - 1]!) {\n line = this.lineOffsets.length - 1;\n }\n \n const character = offset - this.lineOffsets[line]!;\n \n return {\n line,\n character,\n offset\n };\n }\n \n positionToOffset(line: number, character: number): number {\n if (line < 0 || line >= this.lineOffsets.length) {\n return -1;\n }\n \n return this.lineOffsets[line]! + character;\n }\n \n nodeToRange(node: ASTNode): TextRange {\n // If the node already has a range (from diagnostic mode), use it\n if (node.range) {\n return node.range;\n }\n \n const start = this.offsetToPosition(node.position.offset);\n const end = this.calculateNodeEnd(node);\n \n return {\n start,\n end\n };\n }\n \n private calculateNodeEnd(node: ASTNode): Position {\n let endOffset = node.position.offset;\n \n switch (node.type) {\n case NodeType.Literal: {\n const literalNode = node as any;\n if (literalNode.raw) {\n endOffset += literalNode.raw.length;\n } else if (typeof literalNode.value === 'string') {\n endOffset += literalNode.value.length + 2; // +2 for quotes\n } else if (typeof literalNode.value === 'number') {\n endOffset += literalNode.value.toString().length;\n } else if (typeof literalNode.value === 'boolean') {\n endOffset += literalNode.value ? 4 : 5; // true/false\n } else if (literalNode.value === null) {\n endOffset += 4; // null\n }\n break;\n }\n \n case NodeType.Identifier:\n case NodeType.TypeOrIdentifier: {\n const identifierNode = node as any;\n endOffset += identifierNode.name.length;\n break;\n }\n \n case NodeType.Variable: {\n const variableNode = node as any;\n endOffset += variableNode.name.length + 1; // +1 for $ or %\n break;\n }\n \n case NodeType.Binary: {\n const binaryNode = node as any;\n if (binaryNode.right && binaryNode.right.range) {\n return binaryNode.right.range.end;\n } else if (binaryNode.right) {\n return this.calculateNodeEnd(binaryNode.right);\n }\n break;\n }\n \n case NodeType.Unary: {\n const unaryNode = node as any;\n if (unaryNode.operand && unaryNode.operand.range) {\n return unaryNode.operand.range.end;\n } else if (unaryNode.operand) {\n return this.calculateNodeEnd(unaryNode.operand);\n }\n break;\n }\n \n case NodeType.Function: {\n const functionNode = node as any;\n // Estimate end as after the closing parenthesis\n // This is approximate - proper implementation would track tokens\n if (functionNode.arguments && functionNode.arguments.length > 0) {\n const lastArg = functionNode.arguments[functionNode.arguments.length - 1];\n if (lastArg.range) {\n endOffset = lastArg.range.end.offset + 1; // +1 for )\n } else {\n endOffset = this.calculateNodeEnd(lastArg).offset + 1;\n }\n } else {\n // Empty function call - estimate\n endOffset += 2; // ()\n }\n break;\n }\n \n case NodeType.Index: {\n const indexNode = node as any;\n if (indexNode.index && indexNode.index.range) {\n return this.offsetToPosition(indexNode.index.range.end.offset + 1); // +1 for ]\n } else if (indexNode.index) {\n const indexEnd = this.calculateNodeEnd(indexNode.index);\n return this.offsetToPosition(indexEnd.offset + 1); // +1 for ]\n }\n break;\n }\n \n case NodeType.Collection: {\n const collectionNode = node as any;\n if (collectionNode.elements && collectionNode.elements.length > 0) {\n const lastElement = collectionNode.elements[collectionNode.elements.length - 1];\n if (lastElement.range) {\n endOffset = lastElement.range.end.offset + 1; // +1 for }\n } else {\n endOffset = this.calculateNodeEnd(lastElement).offset + 1;\n }\n } else {\n endOffset += 2; // {}\n }\n break;\n }\n \n case NodeType.Union: {\n const unionNode = node as any;\n if (unionNode.operands && unionNode.operands.length > 0) {\n const lastOperand = unionNode.operands[unionNode.operands.length - 1];\n if (lastOperand.range) {\n return lastOperand.range.end;\n } else {\n return this.calculateNodeEnd(lastOperand);\n }\n }\n break;\n }\n \n case NodeType.TypeCast:\n case NodeType.MembershipTest: {\n const typedNode = node as any;\n if (typedNode.targetType) {\n endOffset += typedNode.targetType.length;\n }\n break;\n }\n \n case NodeType.TypeReference: {\n const typeRefNode = node as any;\n endOffset += typeRefNode.typeName.length;\n break;\n }\n \n case NodeType.Error:\n case NodeType.Incomplete: {\n // Error nodes should have their range set during creation\n const errorNode = node as any;\n if (errorNode.actualToken) {\n endOffset += errorNode.actualToken.value.length;\n } else {\n endOffset += 1; // Minimal range\n }\n break;\n }\n \n default:\n // For unknown nodes, minimal range\n endOffset += 1;\n }\n \n return this.offsetToPosition(endOffset);\n }\n \n getRangeText(range: TextRange): string {\n return this.source.substring(range.start.offset, range.end.offset);\n }\n \n getLineText(line: number): string {\n if (line < 0 || line >= this.lineOffsets.length) {\n return '';\n }\n \n const start = this.lineOffsets[line]!;\n const end = line < this.lineOffsets.length - 1 \n ? this.lineOffsets[line + 1]! - 1 \n : this.source.length;\n \n return this.source.substring(start, end).replace(/[\\r\\n]+$/, '');\n }\n \n mergeRanges(range1: TextRange, range2: TextRange): TextRange {\n return {\n start: range1.start.offset <= range2.start.offset ? range1.start : range2.start,\n end: range1.end.offset >= range2.end.offset ? range1.end : range2.end\n };\n }\n}","import type { Location } from './types';\n\nexport enum ErrorCode {\n // Parse errors\n PARSE_ERROR = 'PARSE_ERROR',\n SYNTAX_ERROR = 'SYNTAX_ERROR',\n UNEXPECTED_TOKEN = 'UNEXPECTED_TOKEN',\n UNTERMINATED_STRING = 'UNTERMINATED_STRING',\n INVALID_ESCAPE = 'INVALID_ESCAPE',\n \n // Parser-specific error codes\n UNCLOSED_PARENTHESIS = 'UNCLOSED_PARENTHESIS',\n UNCLOSED_BRACKET = 'UNCLOSED_BRACKET',\n UNCLOSED_BRACE = 'UNCLOSED_BRACE',\n MISSING_ARGUMENTS = 'MISSING_ARGUMENTS',\n INVALID_OPERATOR = 'INVALID_OPERATOR',\n EXPECTED_EXPRESSION = 'EXPECTED_EXPRESSION',\n EXPECTED_IDENTIFIER = 'EXPECTED_IDENTIFIER',\n MULTIPLE_ERRORS = 'MULTIPLE_ERRORS',\n INVALID_CHARACTER = 'INVALID_CHARACTER',\n \n // Type errors\n TYPE_ERROR = 'TYPE_ERROR',\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n UNKNOWN_TYPE = 'UNKNOWN_TYPE',\n CARDINALITY_ERROR = 'CARDINALITY_ERROR',\n \n // Runtime errors\n RUNTIME_ERROR = 'RUNTIME_ERROR',\n UNDEFINED_VARIABLE = 'UNDEFINED_VARIABLE',\n UNDEFINED_FUNCTION = 'UNDEFINED_FUNCTION',\n INVALID_ARGUMENT = 'INVALID_ARGUMENT',\n DIVISION_BY_ZERO = 'DIVISION_BY_ZERO',\n \n // Analysis errors\n ANALYSIS_ERROR = 'ANALYSIS_ERROR',\n UNREACHABLE_CODE = 'UNREACHABLE_CODE',\n AMBIGUOUS_TYPE = 'AMBIGUOUS_TYPE',\n}\n\nexport class FHIRPathError extends Error {\n constructor(\n message: string,\n public code: ErrorCode,\n public location?: Location,\n public expression?: string\n ) {\n super(message);\n this.name = 'FHIRPathError';\n \n // Ensure proper prototype chain\n Object.setPrototypeOf(this, FHIRPathError.prototype);\n }\n \n override toString(): string {\n let result = `${this.name}: ${this.message}`;\n \n if (this.expression && this.location) {\n result += `\\n\\n${this.expression}`;\n if (this.location.offset >= 0 && this.location.length > 0) {\n const indent = ' '.repeat(this.location.offset);\n const marker = '^'.repeat(this.location.length);\n result += `\\n${indent}${marker}`;\n }\n }\n \n if (this.location) {\n result += `\\n\\nAt line ${this.location.line}, column ${this.location.column}`;\n }\n \n return result;\n }\n}\n\n// Error factory functions\nexport function parseError(\n message: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(message, ErrorCode.PARSE_ERROR, location, expression);\n}\n\nexport function syntaxError(\n message: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(message, ErrorCode.SYNTAX_ERROR, location, expression);\n}\n\nexport function typeError(\n message: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(message, ErrorCode.TYPE_ERROR, location, expression);\n}\n\nexport function runtimeError(\n message: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(message, ErrorCode.RUNTIME_ERROR, location, expression);\n}\n\nexport function undefinedVariable(\n name: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(\n `Undefined variable: ${name}`,\n ErrorCode.UNDEFINED_VARIABLE,\n location,\n expression\n );\n}\n\nexport function undefinedFunction(\n name: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(\n `Undefined function: ${name}`,\n ErrorCode.UNDEFINED_FUNCTION,\n location,\n expression\n );\n}\n\nexport function invalidArgument(\n message: string,\n location?: Location,\n expression?: string\n): FHIRPathError {\n return new FHIRPathError(\n `Invalid argument: ${message}`,\n ErrorCode.INVALID_ARGUMENT,\n location,\n expression\n );\n}","import { TokenType, type Token } from '../lexer/token';\nimport type { SourceMapper } from './source-mapper';\nimport type { DiagnosticCollector } from './diagnostics';\nimport { ErrorCode } from '../api/errors';\n\nexport enum ParseContext {\n Expression = 'Expression',\n FunctionCall = 'FunctionCall',\n IndexExpression = 'IndexExpression',\n BinaryExpression = 'BinaryExpression',\n UnaryExpression = 'UnaryExpression',\n CollectionLiteral = 'CollectionLiteral',\n TypeCast = 'TypeCast',\n MembershipTest = 'MembershipTest'\n}\n\nexport class ContextualErrorReporter {\n constructor(\n private sourceMapper: SourceMapper,\n private collector: DiagnosticCollector\n ) {}\n \n reportExpectedToken(\n expected: TokenType[],\n actual: Token,\n context: ParseContext\n ): void {\n const message = this.buildContextualMessage(expected, actual, context);\n const range = this.sourceMapper.tokenToRange(actual);\n \n this.collector.addError(range, message, ErrorCode.UNEXPECTED_TOKEN);\n }\n \n reportUnclosedDelimiter(openToken: Token, expectedClose: string): void {\n const range = this.sourceMapper.tokenToRange(openToken);\n let message: string;\n let code: ErrorCode;\n \n switch (expectedClose) {\n case ')':\n code = ErrorCode.UNCLOSED_PARENTHESIS;\n message = \"Unclosed parenthesis - missing ')' to close function call\";\n break;\n case ']':\n code = ErrorCode.UNCLOSED_BRACKET;\n message = \"Expected ']' after index expression\";\n break;\n case '}':\n code = ErrorCode.UNCLOSED_BRACE;\n message = \"Expected '}' to close collection literal\";\n break;\n default:\n code = ErrorCode.SYNTAX_ERROR;\n message = `Unclosed delimiter - missing '${expectedClose}' to close '${openToken.value}'`;\n }\n \n this.collector.addError(range, message, code);\n }\n \n reportInvalidOperator(operator: Token, message: string): void {\n const range = this.sourceMapper.tokenToRange(operator);\n this.collector.addError(range, message, ErrorCode.INVALID_OPERATOR);\n }\n \n reportMissingExpression(token: Token, context: ParseContext): void {\n const range = this.sourceMapper.tokenToRange(token);\n const contextDesc = this.getContextDescription(context);\n const message = `Expected expression ${contextDesc}`;\n \n this.collector.addError(range, message, ErrorCode.EXPECTED_EXPRESSION);\n }\n \n reportMissingIdentifier(token: Token, context: string): void {\n const range = this.sourceMapper.tokenToRange(token);\n const message = `Expected identifier ${context}`;\n \n this.collector.addError(range, message, ErrorCode.EXPECTED_IDENTIFIER);\n }\n \n reportMissingArguments(functionName: string, token: Token): void {\n const range = this.sourceMapper.tokenToRange(token);\n const message = `Function '${functionName}' requires arguments`;\n \n this.collector.addError(range, message, ErrorCode.MISSING_ARGUMENTS);\n }\n \n private buildContextualMessage(\n expected: TokenType[],\n actual: Token,\n context: ParseContext\n ): string {\n const expectedDesc = this.describeTokens(expected);\n const actualDesc = this.describeToken(actual);\n \n switch (context) {\n case ParseContext.FunctionCall:\n return `Expected ${expectedDesc} in function call, found ${actualDesc}`;\n case ParseContext.IndexExpression:\n return `Expected ${expectedDesc} in index expression, found ${actualDesc}`;\n case ParseContext.BinaryExpression:\n return `Expected ${expectedDesc} after operator, found ${actualDesc}`;\n case ParseContext.CollectionLiteral:\n return `Expected ${expectedDesc} in collection literal, found ${actualDesc}`;\n case ParseContext.TypeCast:\n return `Expected ${expectedDesc} after 'as', found ${actualDesc}`;\n case ParseContext.MembershipTest:\n return `Expected ${expectedDesc} after 'is', found ${actualDesc}`;\n default:\n return `Expected ${expectedDesc}, found ${actualDesc}`;\n }\n }\n \n private getContextDescription(context: ParseContext): string {\n switch (context) {\n case ParseContext.FunctionCall:\n return \"in function call\";\n case ParseContext.IndexExpression:\n return \"in index expression\";\n case ParseContext.BinaryExpression:\n return \"after operator\";\n case ParseContext.CollectionLiteral:\n return \"in collection literal\";\n case ParseContext.TypeCast:\n return \"after 'as'\";\n case ParseContext.MembershipTest:\n return \"after 'is'\";\n default:\n return \"\";\n }\n }\n \n private describeTokens(tokens: TokenType[]): string {\n if (tokens.length === 0) return \"token\";\n if (tokens.length === 1) return this.getTokenDescription(tokens[0]!);\n \n const descriptions = tokens.map(t => this.getTokenDescription(t));\n const last = descriptions.pop();\n return descriptions.join(', ') + ' or ' + last;\n }\n \n private describeToken(token: Token): string {\n if (token.type === TokenType.IDENTIFIER) {\n return `identifier '${token.value}'`;\n }\n if (token.type === TokenType.NUMBER || token.type === TokenType.STRING) {\n return `${this.getTokenDescription(token.type)} '${token.value}'`;\n }\n if (token.type === TokenType.EOF) {\n return \"end of expression\";\n }\n return `'${token.value}'`;\n }\n \n private getTokenDescription(tokenType: TokenType): string {\n switch (tokenType) {\n case TokenType.IDENTIFIER:\n return \"identifier\";\n case TokenType.NUMBER:\n return \"number\";\n case TokenType.STRING:\n return \"string\";\n case TokenType.LPAREN:\n return \"'('\";\n case TokenType.RPAREN:\n return \"')'\";\n case TokenType.LBRACKET:\n return \"'['\";\n case TokenType.RBRACKET:\n return \"']'\";\n case TokenType.LBRACE:\n return \"'{'\";\n case TokenType.RBRACE:\n return \"'}'\";\n case TokenType.COMMA:\n return \"','\";\n case TokenType.DOT:\n return \"'.'\";\n case TokenType.PLUS:\n return \"'+'\";\n case TokenType.MINUS:\n return \"'-'\";\n case TokenType.STAR:\n return \"'*'\";\n case TokenType.SLASH:\n return \"'/'\";\n case TokenType.MOD:\n return \"'mod'\";\n case TokenType.EQ:\n return \"'='\";\n case TokenType.NEQ:\n return \"'!='\";\n case TokenType.LT:\n return \"'<'\";\n case TokenType.GT:\n return \"'>'\";\n case TokenType.LTE:\n return \"'<='\";\n case TokenType.GTE:\n return \"'>='\";\n case TokenType.AND:\n return \"'and'\";\n case TokenType.OR:\n return \"'or'\";\n case TokenType.XOR:\n return \"'xor'\";\n case TokenType.IMPLIES:\n return \"'implies'\";\n case TokenType.NOT:\n return \"'not'\";\n case TokenType.IS:\n return \"'is'\";\n case TokenType.AS:\n return \"'as'\";\n case TokenType.IN:\n return \"'in'\";\n case TokenType.CONTAINS:\n return \"'contains'\";\n case TokenType.TRUE:\n return \"'true'\";\n case TokenType.FALSE:\n return \"'false'\";\n case TokenType.NULL:\n return \"'null'\";\n case TokenType.EOF:\n return \"end of expression\";\n default:\n return \"token\";\n }\n }\n}","import type { Token } from '../lexer/token';\nimport type { SourceMapper } from './source-mapper';\nimport type { ParseDiagnostic, TextRange, RelatedInformation } from './types';\nimport type { FunctionNode } from './ast';\nimport { ErrorCode } from '../api/errors';\nimport { DiagnosticSeverity } from './types';\n\n/**\n * Factory for creating common FHIRPath diagnostic messages\n */\nexport class FHIRPathDiagnostics {\n static unclosedParenthesis(openParen: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(openParen);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.UNCLOSED_PARENTHESIS,\n message: \"Unclosed parenthesis - missing ')' to close function call\",\n source: 'fhirpath-parser'\n };\n }\n \n static unclosedBracket(openBracket: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(openBracket);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.UNCLOSED_BRACKET,\n message: \"Expected ']' after index expression\",\n source: 'fhirpath-parser'\n };\n }\n \n static unclosedBrace(openBrace: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(openBrace);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.UNCLOSED_BRACE,\n message: \"Expected '}' to close collection literal\",\n source: 'fhirpath-parser'\n };\n }\n \n static missingFunctionArguments(\n functionName: string,\n position: TextRange,\n functionDefinitionLocation?: TextRange\n ): ParseDiagnostic {\n const diagnostic: ParseDiagnostic = {\n range: position,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.MISSING_ARGUMENTS,\n message: `Function '${functionName}' requires arguments`,\n source: 'fhirpath-parser'\n };\n \n if (functionDefinitionLocation) {\n diagnostic.relatedInformation = [{\n location: functionDefinitionLocation,\n message: `Function '${functionName}' defined here`\n }];\n }\n \n return diagnostic;\n }\n \n static doubleDotOperator(firstDot: Token, secondDot: Token, mapper: SourceMapper): ParseDiagnostic {\n const startPos = mapper.tokenToRange(firstDot).start;\n const endPos = mapper.tokenToRange(secondDot).end;\n const range: TextRange = { start: startPos, end: endPos };\n \n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.INVALID_OPERATOR,\n message: \"Invalid '..' operator - use single '.' for navigation\",\n source: 'fhirpath-parser'\n };\n }\n \n static unexpectedToken(\n token: Token,\n expected: string[],\n mapper: SourceMapper\n ): ParseDiagnostic {\n const range = mapper.tokenToRange(token);\n const expectedText = expected.length === 1 \n ? expected[0]\n : expected.slice(0, -1).join(', ') + ' or ' + expected[expected.length - 1];\n \n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.UNEXPECTED_TOKEN,\n message: `Expected ${expectedText}, found '${token.value}'`,\n source: 'fhirpath-parser'\n };\n }\n \n static invalidEscapeSequence(\n escapeToken: Token,\n escapeSequence: string,\n mapper: SourceMapper\n ): ParseDiagnostic {\n const range = mapper.tokenToRange(escapeToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.INVALID_ESCAPE,\n message: `Invalid escape sequence '${escapeSequence}'`,\n source: 'fhirpath-parser'\n };\n }\n \n static unterminatedString(stringStart: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(stringStart);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.UNTERMINATED_STRING,\n message: \"Unterminated string literal\",\n source: 'fhirpath-parser'\n };\n }\n \n static invalidCharacter(position: TextRange, character: string): ParseDiagnostic {\n return {\n range: position,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.INVALID_CHARACTER,\n message: `Invalid character '${character}'`,\n source: 'fhirpath-parser'\n };\n }\n \n static trailingComma(commaToken: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(commaToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_EXPRESSION,\n message: \"Expected expression after ','\",\n source: 'fhirpath-parser'\n };\n }\n \n static missingOperand(\n operatorToken: Token,\n side: 'left' | 'right',\n mapper: SourceMapper\n ): ParseDiagnostic {\n const range = mapper.tokenToRange(operatorToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_EXPRESSION,\n message: `Expected expression ${side === 'left' ? 'before' : 'after'} '${operatorToken.value}'`,\n source: 'fhirpath-parser'\n };\n }\n \n static emptyBrackets(openBracket: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(openBracket);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_EXPRESSION,\n message: \"Expected expression in index\",\n source: 'fhirpath-parser'\n };\n }\n \n static spaceInDotNavigation(dotToken: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(dotToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_IDENTIFIER,\n message: \"Expected property name immediately after '.'\",\n source: 'fhirpath-parser'\n };\n }\n \n static incompleteTypeCast(asToken: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(asToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_IDENTIFIER,\n message: \"Expected type name after 'as'\",\n source: 'fhirpath-parser'\n };\n }\n \n static incompleteMembershipTest(isToken: Token, mapper: SourceMapper): ParseDiagnostic {\n const range = mapper.tokenToRange(isToken);\n return {\n range,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.EXPECTED_IDENTIFIER,\n message: \"Expected type name after 'is'\",\n source: 'fhirpath-parser'\n };\n }\n \n static multipleErrors(errorCount: number, position: TextRange): ParseDiagnostic {\n return {\n range: position,\n severity: DiagnosticSeverity.Error,\n code: ErrorCode.MULTIPLE_ERRORS,\n message: `Expression contains ${errorCount} errors`,\n source: 'fhirpath-parser'\n };\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\n\n/**\n * Handles token navigation and lookahead operations for the parser\n */\nexport class TokenNavigator {\n private tokens: Token[];\n private current: number = 0;\n\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n\n /**\n * Check if the current token matches any of the given types\n */\n match(...types: TokenType[]): boolean {\n for (const type of types) {\n if (this.check(type)) {\n this.advance();\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if the current token is of the given type\n */\n check(type: TokenType): boolean {\n if (this.isAtEnd()) return false;\n return this.peek().type === type;\n }\n\n /**\n * Advance to the next token and return the previous one\n */\n advance(): Token {\n if (!this.isAtEnd()) this.current++;\n return this.previous();\n }\n\n /**\n * Check if we've reached the end of tokens\n */\n isAtEnd(): boolean {\n return this.peek().type === TokenType.EOF;\n }\n\n /**\n * Get the current token without advancing\n */\n peek(): Token {\n if (this.tokens.length === 0) {\n // Return a synthetic EOF token when there are no tokens\n return {\n type: TokenType.EOF,\n value: '',\n position: { line: 1, column: 1, offset: 0 }\n } as Token;\n }\n return this.tokens[this.current] ?? this.tokens[this.tokens.length - 1]!;\n }\n\n /**\n * Get the previous token\n */\n previous(): Token {\n return this.tokens[this.current - 1]!;\n }\n\n /**\n * Get current position in token stream\n */\n getCurrentPosition(): number {\n return this.current;\n }\n\n /**\n * Restore position in token stream\n */\n restorePosition(position: number): void {\n this.current = position;\n }\n\n /**\n * Consume a token of the expected type or throw an error\n */\n consume(type: TokenType, errorCallback: (token: Token) => Error): Token {\n if (this.check(type)) return this.advance();\n throw errorCallback(this.peek());\n }\n\n /**\n * Skip tokens while a condition is true\n */\n skipWhile(condition: (token: Token) => boolean): void {\n while (!this.isAtEnd() && condition(this.peek())) {\n this.advance();\n }\n }\n\n /**\n * Check if any of the token types match current token\n */\n checkAny(types: TokenType[]): boolean {\n return types.some(type => this.check(type));\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport type { Position } from './ast';\nimport {\n type ASTNode,\n type BinaryNode,\n type UnaryNode,\n type LiteralNode,\n type IdentifierNode,\n type TypeOrIdentifierNode,\n type FunctionNode,\n type VariableNode,\n type IndexNode,\n type UnionNode,\n type MembershipTestNode,\n type TypeCastNode,\n type CollectionNode,\n type TypeReferenceNode,\n type ErrorNode,\n type IncompleteNode,\n NodeType\n} from './ast';\nimport type { ParseDiagnostic as Diagnostic } from './types';\nimport type { Operation } from '../registry/types';\n\n/**\n * Factory for creating AST nodes with consistent structure\n */\nexport class ASTFactory {\n static createLiteral(\n value: any, \n valueType: 'string' | 'number' | 'boolean' | 'date' | 'time' | 'datetime' | 'null',\n position: Position,\n raw?: string,\n operation?: Operation\n ): LiteralNode {\n return {\n type: NodeType.Literal,\n value,\n valueType,\n raw,\n operation,\n position\n };\n }\n\n static createIdentifier(name: string, position: Position): IdentifierNode {\n return {\n type: NodeType.Identifier,\n name,\n position\n };\n }\n\n static createTypeOrIdentifier(name: string, position: Position): TypeOrIdentifierNode {\n return {\n type: NodeType.TypeOrIdentifier,\n name,\n position\n };\n }\n\n static createVariable(name: string, isSpecial: boolean, position: Position): VariableNode {\n return {\n type: NodeType.Variable,\n name,\n position\n };\n }\n\n static createBinary(\n operator: TokenType,\n left: ASTNode,\n right: ASTNode,\n position: Position,\n operation?: Operation\n ): BinaryNode {\n return {\n type: NodeType.Binary,\n operator,\n operation,\n left,\n right,\n position\n };\n }\n\n static createUnary(\n operator: TokenType,\n operand: ASTNode,\n position: Position,\n operation?: Operation\n ): UnaryNode {\n return {\n type: NodeType.Unary,\n operator,\n operation,\n operand,\n position\n };\n }\n\n static createFunction(\n name: ASTNode,\n args: ASTNode[],\n position: Position,\n operation?: Operation\n ): FunctionNode {\n return {\n type: NodeType.Function,\n name,\n arguments: args,\n operation,\n position\n };\n }\n\n static createUnion(operands: ASTNode[], position: Position): UnionNode {\n return {\n type: NodeType.Union,\n operands,\n position\n };\n }\n\n static createIndex(expression: ASTNode, index: ASTNode, position: Position): IndexNode {\n return {\n type: NodeType.Index,\n expression,\n index,\n position\n };\n }\n\n static createCollection(elements: ASTNode[], position: Position): CollectionNode {\n return {\n type: NodeType.Collection,\n elements,\n position\n };\n }\n\n static createMembershipTest(\n expression: ASTNode,\n targetType: string,\n position: Position\n ): MembershipTestNode {\n return {\n type: NodeType.MembershipTest,\n expression,\n targetType,\n position\n };\n }\n\n static createTypeCast(\n expression: ASTNode,\n targetType: string,\n position: Position\n ): TypeCastNode {\n return {\n type: NodeType.TypeCast,\n expression,\n targetType,\n position\n };\n }\n\n static createTypeReference(name: string, position: Position): TypeReferenceNode {\n return {\n type: NodeType.TypeReference,\n typeName: name,\n position\n };\n }\n\n static createError(\n position: Position,\n expectedTokens: TokenType[],\n diagnostic: Diagnostic\n ): ErrorNode {\n return {\n type: NodeType.Error,\n position,\n expectedTokens,\n diagnostic\n };\n }\n\n static createIncomplete(\n partialNode: ASTNode | undefined,\n missingParts: string[],\n position: Position\n ): IncompleteNode {\n return {\n type: NodeType.Incomplete,\n partialNode,\n missingParts,\n position\n };\n }\n\n /**\n * Infer literal type from value\n */\n static inferLiteralType(value: any): 'string' | 'number' | 'boolean' | 'date' | 'time' | 'datetime' | 'null' {\n if (value === null) return 'null';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'string') return 'string';\n if (value instanceof Date) {\n // Check if it has time component\n const hasTime = value.getHours() !== 0 || value.getMinutes() !== 0 || value.getSeconds() !== 0;\n return hasTime ? 'datetime' : 'date';\n }\n // Check for time-only values (stored as strings like \"14:30:00\")\n if (typeof value === 'object' && value.type === 'time') return 'time';\n return 'string'; // default\n }\n}","import type { Token } from '../lexer/token';\nimport type { Position } from './ast';\nimport { ParseError } from './parser';\nimport { ErrorCode } from '../api/errors';\nimport type { DiagnosticCollector } from './diagnostics';\nimport type { SourceMapper } from './source-mapper';\n\n/**\n * Factory for creating parser errors with consistent formatting\n */\nexport class ParserErrorFactory {\n constructor(\n private throwOnError: boolean,\n private diagnostics?: DiagnosticCollector,\n private sourceMapper?: SourceMapper\n ) {}\n\n /**\n * Create a parse error with proper formatting\n */\n createError(message: string, token: Token, code: ErrorCode = ErrorCode.PARSE_ERROR): ParseError {\n if (this.diagnostics && this.sourceMapper && !this.throwOnError) {\n // In diagnostic mode, add to diagnostics and return error\n const range = this.sourceMapper.tokenToRange(token);\n this.diagnostics.addError(range, message, code);\n }\n \n const pos = token.position;\n const fullMessage = `${message} at line ${pos.line}, column ${pos.column}`;\n return new ParseError(fullMessage, pos, token);\n }\n\n /**\n * Create error for unexpected token\n */\n unexpectedToken(token: Token, expected?: string): ParseError {\n const message = expected \n ? `Expected ${expected}, found '${token.value}'`\n : `Unexpected token '${token.value}'`;\n return this.createError(message, token, ErrorCode.UNEXPECTED_TOKEN);\n }\n\n /**\n * Create error for missing token\n */\n missingToken(expected: string, token: Token, code: ErrorCode = ErrorCode.UNEXPECTED_TOKEN): ParseError {\n return this.createError(`Expected ${expected}`, token, code);\n }\n\n /**\n * Create error for unclosed delimiter\n */\n unclosedDelimiter(openToken: Token, expected: string): ParseError {\n const code = expected === ')' ? ErrorCode.UNCLOSED_PARENTHESIS :\n expected === ']' ? ErrorCode.UNCLOSED_BRACKET :\n expected === '}' ? ErrorCode.UNCLOSED_BRACE :\n ErrorCode.SYNTAX_ERROR;\n \n return this.createError(\n `Unclosed ${this.getDelimiterName(expected)} - missing '${expected}'`,\n openToken,\n code\n );\n }\n\n /**\n * Create error for invalid operator\n */\n invalidOperator(token: Token): ParseError {\n return this.createError(`Unknown operator: ${token.value}`, token, ErrorCode.INVALID_OPERATOR);\n }\n\n /**\n * Create error for missing arguments\n */\n missingArguments(functionName: string, token: Token): ParseError {\n return this.createError(\n `Function '${functionName}' requires arguments`,\n token,\n ErrorCode.MISSING_ARGUMENTS\n );\n }\n\n /**\n * Create error for expected identifier\n */\n expectedIdentifier(token: Token, context?: string): ParseError {\n const message = context \n ? `Expected identifier ${context}`\n : `Expected identifier`;\n return this.createError(message, token, ErrorCode.EXPECTED_IDENTIFIER);\n }\n\n /**\n * Create error for expected expression\n */\n expectedExpression(token: Token, context?: string): ParseError {\n const message = context \n ? `Expected expression ${context}`\n : `Expected expression`;\n return this.createError(message, token, ErrorCode.EXPECTED_EXPRESSION);\n }\n\n /**\n * Create error for double dot operator\n */\n doubleDotOperator(firstDot: Token, secondDot: Token): ParseError {\n const message = `Invalid '..' operator - use a single '.' for navigation`;\n if (this.diagnostics && this.sourceMapper) {\n const range = this.sourceMapper.mergeRanges(\n this.sourceMapper.tokenToRange(firstDot),\n this.sourceMapper.tokenToRange(secondDot)\n );\n this.diagnostics.addError(range, message, ErrorCode.INVALID_OPERATOR);\n }\n return this.createError(message, firstDot, ErrorCode.INVALID_OPERATOR);\n }\n\n /**\n * Create error for invalid escape sequence\n */\n invalidEscape(token: Token, sequence: string): ParseError {\n return this.createError(\n `Invalid escape sequence: ${sequence}`,\n token,\n ErrorCode.INVALID_ESCAPE\n );\n }\n\n /**\n * Get human-readable name for delimiter\n */\n private getDelimiterName(delimiter: string): string {\n switch (delimiter) {\n case ')': return 'parenthesis';\n case ']': return 'bracket';\n case '}': return 'brace';\n default: return 'delimiter';\n }\n }\n}","import { TokenType } from '../lexer/token';\nimport type { Token } from '../lexer/token';\n\n/**\n * Manages parser state and recovery operations\n */\nexport class ParserState {\n private isPartial: boolean = false;\n private currentContext: string = 'Expression';\n\n /**\n * Mark the parse result as partial (incomplete due to errors)\n */\n markPartial(): void {\n this.isPartial = true;\n }\n\n /**\n * Check if the parse result is partial\n */\n getIsPartial(): boolean {\n return this.isPartial;\n }\n\n /**\n * Set current parsing context for better error messages\n */\n setContext(context: string): void {\n this.currentContext = context;\n }\n\n /**\n * Get current parsing context\n */\n getContext(): string {\n return this.currentContext;\n }\n\n /**\n * Check if a token is a synchronization point for error recovery\n */\n static isSyncPoint(token: Token): boolean {\n const syncTokens = new Set([\n TokenType.COMMA,\n TokenType.RPAREN,\n TokenType.RBRACKET,\n TokenType.RBRACE,\n TokenType.EOF,\n TokenType.EOF\n ]);\n return syncTokens.has(token.type);\n }\n\n /**\n * Check if a token represents a statement boundary\n */\n static isStatementBoundary(token: Token): boolean {\n return token.type === TokenType.EOF ||\n token.type === TokenType.RBRACE;\n }\n\n /**\n * Check if a token type is an operator keyword\n */\n static isOperatorKeyword(type: TokenType): boolean {\n const operatorKeywords = new Set([\n TokenType.AND,\n TokenType.OR,\n TokenType.XOR,\n TokenType.IMPLIES,\n TokenType.AS,\n TokenType.IS,\n TokenType.MOD,\n TokenType.DIV,\n TokenType.IN,\n TokenType.CONTAINS\n ]);\n return operatorKeywords.has(type);\n }\n\n /**\n * Check if a token type is a literal\n */\n static isLiteral(type: TokenType): boolean {\n return type === TokenType.NUMBER ||\n type === TokenType.STRING ||\n type === TokenType.TRUE ||\n type === TokenType.FALSE ||\n type === TokenType.LITERAL;\n }\n\n /**\n * Check if a token can start an expression\n */\n static canStartExpression(token: Token): boolean {\n const startTokens = new Set([\n TokenType.IDENTIFIER,\n TokenType.NUMBER,\n TokenType.STRING,\n TokenType.TRUE,\n TokenType.FALSE,\n TokenType.LPAREN,\n TokenType.LBRACE,\n TokenType.LBRACKET,\n TokenType.PLUS,\n TokenType.MINUS,\n TokenType.NOT,\n TokenType.ENV_VAR,\n TokenType.LITERAL\n ]);\n return startTokens.has(token.type);\n }\n\n /**\n * Get expected tokens for a given context\n */\n static getExpectedTokens(context: string): TokenType[] {\n switch (context) {\n case 'FunctionCall':\n return [TokenType.IDENTIFIER, TokenType.NUMBER, TokenType.STRING, \n TokenType.LPAREN, TokenType.LBRACE];\n case 'TypeCast':\n case 'MembershipTest':\n return [TokenType.IDENTIFIER];\n case 'Collection':\n return [TokenType.IDENTIFIER, TokenType.NUMBER, TokenType.STRING, \n TokenType.TRUE, TokenType.FALSE, TokenType.RBRACE];\n case 'Index':\n return [TokenType.NUMBER, TokenType.IDENTIFIER, TokenType.RBRACKET];\n default:\n return [TokenType.EOF];\n }\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport { Registry } from '../registry';\n\n/**\n * Manages operator precedence for the parser\n */\nexport class PrecedenceManager {\n /**\n * Get precedence for a token\n * Higher number = higher precedence\n */\n static getPrecedence(token: Token): number {\n // Special case for DOT which might not be in registry yet\n if (token.type === TokenType.DOT) return 13;\n \n // Use registry directly - both now use standard convention\n return Registry.getPrecedence(token.type);\n }\n\n /**\n * Check if an operator is right-associative\n */\n static isRightAssociative(op: Token): boolean {\n // FHIRPath doesn't have right-associative operators\n return false;\n }\n\n /**\n * Get associativity adjustment for parsing\n * For left-associative operators, we parse right side with precedence + 1\n * For right-associative operators, we parse with same precedence\n */\n static getAssociativityAdjustment(op: Token): number {\n return this.isRightAssociative(op) ? 0 : 1;\n }\n\n /**\n * Check if precedence allows continuation of expression parsing\n */\n static shouldContinueParsing(tokenPrecedence: number, minPrecedence: number): boolean {\n return tokenPrecedence !== 0 && tokenPrecedence >= minPrecedence;\n }\n\n /**\n * Standard precedence levels for reference\n */\n static readonly PRECEDENCE_LEVELS = {\n NONE: 0,\n IMPLIES: 1, // implies - lowest precedence\n OR: 2, // or, xor\n AND: 3, // and\n MEMBERSHIP: 4, // in, contains\n EQUALITY: 5, // =, ~, !=, !~\n RELATIONAL: 6, // <, >, <=, >=\n UNION: 7, // |\n TYPE: 8, // is, as\n ADDITIVE: 9, // +, -, &\n MULTIPLICATIVE: 10, // *, /, div, mod\n UNARY: 11, // unary +, -, not\n POSTFIX: 12, // [] indexing\n INVOCATION: 13 // . (dot), function calls - highest precedence\n };\n}","import type { Token } from '../lexer/token';\nimport type { Position } from './ast';\n\n/**\n * Error thrown during parsing\n */\nexport class ParseError extends Error {\n constructor(\n message: string,\n public position: Position,\n public token: Token\n ) {\n super(message);\n this.name = 'ParseError';\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport type { ASTNode, LiteralNode, VariableNode } from './ast';\nimport { ASTFactory } from './ast-factory';\nimport type { TokenNavigator } from './token-navigator';\n\n/**\n * Handles parsing of literals and variables\n */\nexport class LiteralParser {\n /**\n * Parse all types of literals\n */\n static parseLiteral(navigator: TokenNavigator): ASTNode | null {\n // Handle registry-based literals\n if (navigator.match(TokenType.LITERAL)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n token.literalValue ?? token.value,\n ASTFactory.inferLiteralType(token.literalValue ?? token.value),\n token.position,\n token.value,\n token.operation\n );\n }\n \n // Handle legacy literals\n if (navigator.match(TokenType.NUMBER)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n parseFloat(token.value),\n 'number',\n token.position\n );\n }\n \n if (navigator.match(TokenType.STRING)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n token.value,\n 'string',\n token.position\n );\n }\n \n if (navigator.match(TokenType.TRUE, TokenType.FALSE)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n token.type === TokenType.TRUE,\n 'boolean',\n token.position\n );\n }\n \n if (navigator.match(TokenType.NULL)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n null,\n 'null',\n token.position\n );\n }\n \n // Date/time literals\n if (navigator.match(TokenType.DATE, TokenType.TIME, TokenType.DATETIME)) {\n const token = navigator.previous();\n return ASTFactory.createLiteral(\n token.value,\n token.type === TokenType.DATE ? 'date' : \n token.type === TokenType.TIME ? 'time' : 'datetime',\n token.position\n );\n }\n \n return null;\n }\n \n /**\n * Parse special variables\n */\n static parseVariable(navigator: TokenNavigator): ASTNode | null {\n if (navigator.match(TokenType.THIS)) {\n return ASTFactory.createVariable('$this', true, navigator.previous().position);\n }\n \n if (navigator.match(TokenType.INDEX)) {\n return ASTFactory.createVariable('$index', true, navigator.previous().position);\n }\n \n if (navigator.match(TokenType.TOTAL)) {\n return ASTFactory.createVariable('$total', true, navigator.previous().position);\n }\n \n if (navigator.match(TokenType.ENV_VAR)) {\n const token = navigator.previous();\n return ASTFactory.createVariable(token.value, false, token.position);\n }\n \n // Variables starting with $ or % are handled by ENV_VAR token type\n \n return null;\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport type { ASTNode } from './ast';\nimport { ASTFactory } from './ast-factory';\nimport type { TokenNavigator } from './token-navigator';\nimport { ParseError } from './parse-error';\nimport { ErrorCode } from '../api/errors';\n\n/**\n * Handles parsing of collections and parenthesized expressions\n */\nexport class CollectionParser {\n /**\n * Parse collection literal {...}\n */\n static parseCollection(\n navigator: TokenNavigator,\n parseExpression: () => ASTNode,\n errorCallback: (msg: string, code?: ErrorCode) => ParseError,\n errorRecovery: boolean,\n createErrorNode: (token: Token, msg: string) => ASTNode\n ): ASTNode {\n const lbrace = navigator.previous();\n const elements: ASTNode[] = [];\n \n // Empty collection\n if (navigator.match(TokenType.RBRACE)) {\n return ASTFactory.createCollection([], lbrace.position);\n }\n \n // Parse elements\n do {\n // Check for trailing comma\n if (navigator.check(TokenType.RBRACE)) {\n break;\n }\n \n try {\n elements.push(parseExpression());\n } catch (error) {\n if (error instanceof ParseError && errorRecovery) {\n elements.push(createErrorNode(error.token, error.message));\n // Skip to next comma or closing brace\n navigator.skipWhile(token => \n token.type !== TokenType.COMMA && \n token.type !== TokenType.RBRACE\n );\n } else {\n throw error;\n }\n }\n } while (navigator.match(TokenType.COMMA));\n \n // Check for trailing comma error\n if (elements.length > 0 && navigator.previous().type === TokenType.COMMA) {\n throw errorCallback(\"Expected expression after ','\", ErrorCode.EXPECTED_EXPRESSION);\n }\n \n navigator.consume(TokenType.RBRACE, () => \n errorCallback(\"Expected '}' after collection elements\", ErrorCode.UNCLOSED_BRACE)\n );\n \n return ASTFactory.createCollection(elements, lbrace.position);\n }\n \n /**\n * Parse parenthesized expression\n */\n static parseParenthesized(\n navigator: TokenNavigator,\n parseExpression: () => ASTNode,\n errorCallback: (msg: string, code?: ErrorCode) => ParseError\n ): ASTNode {\n const lparen = navigator.previous();\n \n // Handle empty parentheses ()\n if (navigator.check(TokenType.RPAREN)) {\n throw errorCallback(\"Empty parentheses are not allowed\", ErrorCode.EXPECTED_EXPRESSION);\n }\n \n const expr = parseExpression();\n \n navigator.consume(TokenType.RPAREN, () => \n errorCallback(\"Expected ')' after expression\", ErrorCode.UNCLOSED_PARENTHESIS)\n );\n \n return expr;\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport type { ASTNode, IdentifierNode, FunctionNode, TypeReferenceNode } from './ast';\nimport { NodeType } from './ast';\nimport { ASTFactory } from './ast-factory';\nimport type { TokenNavigator } from './token-navigator';\nimport { ErrorCode } from '../api/errors';\n\n/**\n * Handles parsing of special FHIRPath constructs\n */\nexport class SpecialConstructs {\n /**\n * Parse special function syntax like ofType(Type)\n */\n static parseOfType(navigator: TokenNavigator, errorCallback: (msg: string) => Error): ASTNode {\n const ofTypeToken = navigator.previous();\n \n // Expect (\n navigator.consume(TokenType.LPAREN, () => \n errorCallback(\"Expected '(' after 'ofType'\")\n );\n \n // Expect type name\n const typeToken = navigator.consume(TokenType.IDENTIFIER, () => \n errorCallback(\"Expected type name in ofType()\")\n );\n \n // Expect )\n navigator.consume(TokenType.RPAREN, () => \n errorCallback(\"Expected ')' after type name\")\n );\n \n return ASTFactory.createFunction(\n ASTFactory.createIdentifier('ofType', ofTypeToken.position),\n [ASTFactory.createTypeReference(typeToken.value, typeToken.position)],\n ofTypeToken.position\n );\n }\n\n /**\n * Parse type operators (is/as) with their special syntax\n */\n static parseTypeOperator(\n navigator: TokenNavigator, \n left: ASTNode,\n op: Token,\n errorCallback: (msg: string, code?: ErrorCode) => Error\n ): ASTNode {\n // Type name can be either a simple identifier or in parentheses (for is() function syntax)\n let typeName: string;\n \n if (navigator.check(TokenType.LPAREN)) {\n // Handle is(TypeName) syntax\n navigator.advance(); // consume (\n const typeToken = navigator.consume(TokenType.IDENTIFIER, () => \n errorCallback(\"Expected type name\", ErrorCode.EXPECTED_IDENTIFIER)\n );\n typeName = typeToken.value;\n navigator.consume(TokenType.RPAREN, () => \n errorCallback(\"Expected ')' after type name\", ErrorCode.UNCLOSED_PARENTHESIS)\n );\n } else {\n // Regular is TypeName syntax\n const typeToken = navigator.consume(TokenType.IDENTIFIER, () => \n errorCallback(`Expected type name after '${op.value}'`, ErrorCode.EXPECTED_IDENTIFIER)\n );\n typeName = typeToken.value;\n }\n \n if (op.type === TokenType.IS) {\n return ASTFactory.createMembershipTest(left, typeName, op.position);\n } else {\n return ASTFactory.createTypeCast(left, typeName, op.position);\n }\n }\n\n /**\n * Parse union operator which can chain multiple operands\n */\n static parseUnion(left: ASTNode, precedence: number, parseExpression: (p: number) => ASTNode): ASTNode {\n const right = parseExpression(precedence + 1);\n \n // If left is already a union, add to it\n if (left.type === NodeType.Union) {\n (left as any).operands.push(right);\n return left;\n }\n \n // Create new union node\n return ASTFactory.createUnion([left, right], (left as any).position);\n }\n\n /**\n * Check for common mistakes like == instead of =\n */\n static checkDoubleEquals(\n navigator: TokenNavigator,\n op: Token,\n diagnosticsCallback?: (start: Token, end: Token, message: string, code: ErrorCode) => void\n ): void {\n if (op.type === TokenType.EQ && navigator.check(TokenType.EQ)) {\n const secondEq = navigator.peek();\n if (diagnosticsCallback) {\n diagnosticsCallback(\n op,\n secondEq,\n \"'==' is not valid in FHIRPath, use '=' for equality\",\n ErrorCode.INVALID_OPERATOR\n );\n // Skip the extra = to avoid cascading errors\n navigator.advance();\n }\n }\n }\n\n /**\n * Check for double dot error\n */\n static checkDoubleDot(\n navigator: TokenNavigator,\n firstDot: Token,\n markPartial: () => void,\n diagnosticsCallback?: (start: Token, end: Token, message: string, code: ErrorCode) => void\n ): void {\n if (navigator.check(TokenType.DOT)) {\n const secondDot = navigator.peek();\n if (diagnosticsCallback) {\n diagnosticsCallback(\n firstDot,\n secondDot,\n \"Invalid '..' operator - use a single '.' for navigation\",\n ErrorCode.INVALID_OPERATOR\n );\n }\n \n // Skip the extra dot to avoid cascading errors\n navigator.advance();\n markPartial();\n }\n }\n}","import type { Token } from '../lexer/token';\nimport { TokenType } from '../lexer/token';\nimport { lex } from '../lexer/lexer';\nimport type { Position } from './ast';\nimport {\n type ASTNode,\n type BinaryNode,\n type UnaryNode,\n type LiteralNode,\n type IdentifierNode,\n type TypeOrIdentifierNode,\n type FunctionNode,\n type VariableNode,\n type IndexNode,\n type UnionNode,\n type MembershipTestNode,\n type TypeCastNode,\n type CollectionNode,\n type TypeReferenceNode,\n type ErrorNode,\n type IncompleteNode,\n NodeType\n} from './ast';\nimport { Registry } from '../registry';\nimport { \n type ParserOptions, \n type ParseResult, \n type TextRange\n} from './types';\nimport { DiagnosticCollector } from './diagnostics';\nimport { SourceMapper } from './source-mapper';\nimport { ContextualErrorReporter, ParseContext } from './error-reporter';\nimport { FHIRPathDiagnostics } from './diagnostic-messages';\nimport { ErrorCode } from '../api/errors';\nimport { TokenNavigator } from './token-navigator';\nimport { ASTFactory } from './ast-factory';\nimport { ParserErrorFactory } from './parser-error-factory';\nimport { ParserState } from './parser-state';\nimport { PrecedenceManager } from './precedence-manager';\nimport { ParseError } from './parse-error';\nimport { LiteralParser } from './literal-parser';\nimport { CollectionParser } from './collection-parser';\nimport { SpecialConstructs } from './special-constructs';\n\n// Re-export ParseError for backward compatibility\nexport { ParseError } from './parse-error';\n\n// Precedence levels for reference (from spec)\n// Parser uses standard precedence (higher number = higher precedence)\n// IMPLIES: 1, // implies - lowest precedence\n// OR: 2, // or, xor\n// AND: 3, // and\n// MEMBERSHIP: 4, // in, contains\n// EQUALITY: 5, // =, ~, !=, !~\n// RELATIONAL: 6, // <, >, <=, >=\n// UNION: 7, // |\n// TYPE: 8, // is, as\n// ADDITIVE: 9, // +, -, &\n// MULTIPLICATIVE: 10, // *, /, div, mod\n// UNARY: 11, // unary +, -, not\n// POSTFIX: 12, // [] indexing\n// INVOCATION: 13, // . (dot), function calls - highest precedence\n\nexport class FHIRPathParser {\n private navigator: TokenNavigator;\n private throwOnError: boolean;\n private trackRanges: boolean;\n private errorRecovery: boolean;\n private diagnostics?: DiagnosticCollector;\n private sourceMapper?: SourceMapper;\n private errorReporter?: ContextualErrorReporter;\n private errorFactory: ParserErrorFactory;\n private state: ParserState;\n private input: string;\n private tokens: Token[];\n \n constructor(input: string | Token[], options: ParserOptions = {}) {\n this.throwOnError = options.throwOnError ?? false;\n this.trackRanges = options.trackRanges ?? false;\n this.errorRecovery = options.errorRecovery ?? false;\n \n if (typeof input === 'string') {\n this.input = input;\n try {\n this.tokens = lex(input);\n } catch (error: any) {\n // If throwOnError is true, re-throw lexer errors\n if (this.throwOnError) {\n throw error;\n }\n // Otherwise, we'll handle lexer errors in parse()\n this.tokens = [];\n // Store the lexer error for later processing\n (this as any).lexerError = error;\n }\n } else {\n this.tokens = input;\n // For token array input, we'll construct a minimal input string\n this.input = input.map(t => t.value).join(' ');\n }\n \n this.navigator = new TokenNavigator(this.tokens);\n this.state = new ParserState();\n this.initializeForMode(this.input, options);\n // Create error factory after diagnostics and sourceMapper are initialized\n this.errorFactory = new ParserErrorFactory(this.throwOnError, this.diagnostics, this.sourceMapper);\n }\n \n private initializeForMode(input: string, options: ParserOptions): void {\n // Always create diagnostic collector unless throwOnError is true\n if (!this.throwOnError) {\n this.diagnostics = new DiagnosticCollector(options.maxErrors);\n }\n \n // Only create source mapper if needed\n if (this.trackRanges || !this.throwOnError) {\n this.sourceMapper = new SourceMapper(input);\n }\n \n // Only create error reporter if error recovery is enabled\n if (this.errorRecovery && this.diagnostics && this.sourceMapper) {\n this.errorReporter = new ContextualErrorReporter(this.sourceMapper, this.diagnostics);\n }\n }\n \n // Main entry point\n parse(): ParseResult {\n if (this.errorRecovery) {\n return this.parseWithRecovery();\n } else {\n return this.parseStandard();\n }\n }\n \n \n private parseStandard(): ParseResult {\n let ast: ASTNode;\n \n // Check for lexer errors first\n if ((this as any).lexerError) {\n const error = (this as any).lexerError;\n \n // If throwOnError is true, throw immediately\n if (this.throwOnError) {\n throw error;\n }\n \n // Map lexer error positions to our range format\n const range: TextRange = {\n start: { \n line: error.position.line - 1, // Lexer uses 1-based lines, we use 0-based\n character: error.position.column - 1, // Lexer uses 1-based columns, we use 0-based\n offset: error.position.offset \n },\n end: { \n line: error.position.line - 1, \n character: error.position.column, // One character after the error\n offset: error.position.offset + 1 \n }\n };\n \n // Map specific lexer errors to appropriate error codes\n let errorCode = ErrorCode.SYNTAX_ERROR;\n if (error.message.includes('Invalid escape sequence')) {\n errorCode = ErrorCode.INVALID_ESCAPE;\n } else if (error.message.includes('Unterminated string')) {\n errorCode = ErrorCode.UNTERMINATED_STRING;\n }\n \n this.diagnostics!.addError(range, error.message, errorCode);\n \n // Return minimal AST with error\n return {\n ast: {\n type: NodeType.Literal,\n value: null,\n valueType: 'null',\n position: { line: 1, column: 1, offset: 0 }\n } as LiteralNode,\n diagnostics: this.diagnostics!.getDiagnostics(),\n hasErrors: true\n };\n }\n \n try {\n ast = this.expression();\n \n if (!this.isAtEnd()) {\n if (this.throwOnError) {\n throw this.error(\"Unexpected token after expression\", ErrorCode.UNEXPECTED_TOKEN);\n }\n // Otherwise, report as diagnostic\n const unexpectedToken = this.peek();\n const range = this.sourceMapper!.tokenToRange(unexpectedToken);\n this.diagnostics!.addError(\n range,\n `Unexpected token '${unexpectedToken.value}' after expression`,\n ErrorCode.UNEXPECTED_TOKEN\n );\n }\n } catch (error) {\n if (this.throwOnError) {\n throw error;\n }\n // Otherwise, try to recover and report diagnostic\n if (error instanceof ParseError) {\n // Don't add the error again - it was already added in the error() method\n // Just create a minimal error AST node\n ast = {\n type: NodeType.Literal,\n value: null,\n valueType: 'null',\n position: error.position\n } as LiteralNode;\n } else {\n throw error;\n }\n }\n \n const result: ParseResult = {\n ast,\n diagnostics: this.diagnostics ? this.diagnostics.getDiagnostics() : [],\n hasErrors: this.diagnostics ? this.diagnostics.hasErrors() : false\n };\n \n // Add ranges if tracking is enabled\n if (this.trackRanges && this.sourceMapper) {\n result.ranges = this.collectNodeRanges(ast);\n }\n \n return result;\n }\n \n private parseWithRecovery(): ParseResult {\n let ast: ASTNode;\n const ranges = this.trackRanges ? new Map<ASTNode, TextRange>() : undefined;\n \n // Check for lexer errors first\n if ((this as any).lexerError) {\n const error = (this as any).lexerError;\n // Map lexer error positions to our range format\n const range: TextRange = {\n start: { \n line: error.position.line - 1, // Lexer uses 1-based lines, we use 0-based\n character: error.position.column - 1, // Lexer uses 1-based columns, we use 0-based\n offset: error.position.offset \n },\n end: { \n line: error.position.line - 1, \n character: error.position.column, // One character after the error\n offset: error.position.offset + 1 \n }\n };\n \n // Map specific lexer errors to appropriate error codes\n let errorCode = ErrorCode.SYNTAX_ERROR;\n if (error.message.includes('Invalid escape sequence')) {\n errorCode = ErrorCode.INVALID_ESCAPE;\n } else if (error.message.includes('Unterminated string')) {\n errorCode = ErrorCode.UNTERMINATED_STRING;\n }\n \n this.diagnostics!.addError(range, error.message, errorCode);\n \n // Create error node\n ast = {\n type: NodeType.Error,\n position: { line: 1, column: 1, offset: 0 },\n expectedTokens: [],\n diagnostic: {\n severity: 1,\n range,\n message: error.message,\n code: errorCode,\n source: 'fhirpath-parser'\n }\n } as ErrorNode;\n \n const result: ParseResult = {\n ast,\n diagnostics: this.diagnostics!.getDiagnostics(),\n hasErrors: true,\n isPartial: true\n };\n if (this.trackRanges && ranges) {\n result.ranges = ranges;\n }\n return result;\n }\n \n try {\n ast = this.expressionWithRecovery();\n \n if (!this.isAtEnd()) {\n // In diagnostic mode, try to consume remaining tokens\n const unexpectedToken = this.peek();\n this.errorReporter!.reportExpectedToken(\n [TokenType.EOF],\n unexpectedToken,\n ParseContext.Expression\n );\n \n // Try to recover by consuming remaining tokens\n while (!this.isAtEnd()) {\n this.advance();\n }\n }\n } catch (error) {\n // In diagnostic mode, create error node and mark as partial\n if (error instanceof ParseError) {\n ast = this.createErrorNode(error.token, error.message);\n this.state.markPartial();\n } else {\n throw error;\n }\n }\n \n const result: ParseResult = {\n ast,\n diagnostics: this.diagnostics!.getDiagnostics(),\n hasErrors: this.diagnostics!.hasErrors()\n };\n \n if (this.errorRecovery) {\n result.isPartial = this.state.getIsPartial();\n }\n \n if (this.trackRanges && this.sourceMapper) {\n result.ranges = this.collectNodeRanges(ast);\n }\n \n return result;\n }\n \n // Pratt parser for expressions\n private expression(minPrecedence: number = 0): ASTNode {\n let left = this.primary();\n \n while (!this.isAtEnd()) {\n // Handle postfix operators first\n if (this.check(TokenType.LBRACKET) && minPrecedence <= 12) { // POSTFIX precedence\n left = this.parseIndex(left);\n continue;\n }\n \n // Handle function calls that come from primary() or after dots\n // This allows for chained method calls like exists().not()\n if (this.check(TokenType.DOT) && minPrecedence <= 13) { // INVOCATION precedence\n const dotToken = this.peek();\n const precedence = PrecedenceManager.getPrecedence(dotToken);\n if (precedence < minPrecedence) break;\n \n left = this.parseBinary(left, dotToken, precedence);\n continue;\n }\n \n const token = this.peek();\n const precedence = PrecedenceManager.getPrecedence(token);\n \n if (precedence === 0 || precedence < minPrecedence) break;\n \n left = this.parseBinary(left, token, precedence);\n }\n \n return left;\n }\n \n // Parse primary expressions (recursive descent)\n private primary(): ASTNode {\n // Try parsing literals\n const literal = LiteralParser.parseLiteral(this.navigator);\n if (literal) return literal;\n \n // Try parsing variables\n const variable = LiteralParser.parseVariable(this.navigator);\n if (variable) return variable;\n \n // Handle grouping\n if (this.match(TokenType.LPAREN)) {\n const expr = this.expression();\n this.consume(TokenType.RPAREN, \"Expected ')' after expression\", ErrorCode.UNCLOSED_PARENTHESIS);\n \n // Check for method calls after parentheses (e.g., (expr).method())\n let result = expr;\n while (this.check(TokenType.DOT)) {\n const dotToken = this.advance();\n \n // After a dot, handle keywords that can be method names\n let right: ASTNode;\n const next = this.peek();\n if (this.isOperatorKeyword(next.type)) {\n // Treat keyword as identifier\n this.advance();\n right = {\n type: NodeType.Identifier,\n name: next.value,\n position: next.position\n } as IdentifierNode;\n } else {\n right = this.primary();\n }\n \n // If the right side is a function call, handle it\n if (this.check(TokenType.LPAREN)) {\n const methodNode: BinaryNode = {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: Registry.getByToken(TokenType.DOT),\n left: result,\n right: right,\n position: dotToken.position\n };\n result = this.functionCall(methodNode);\n } else {\n // Regular property access\n result = {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: Registry.getByToken(TokenType.DOT),\n left: result,\n right: right,\n position: dotToken.position\n } as BinaryNode;\n }\n }\n \n return result;\n }\n \n // Handle identifiers (which might be followed by function calls)\n if (this.match(TokenType.IDENTIFIER)) {\n return this.identifierOrFunctionCall();\n }\n \n // Handle delimited identifiers\n if (this.match(TokenType.DELIMITED_IDENTIFIER)) {\n return this.identifierOrFunctionCall();\n }\n \n // Handle unary operators\n if (this.match(TokenType.PLUS, TokenType.MINUS, TokenType.NOT)) {\n const op = this.previous();\n const operation = op.operation || Registry.getByToken(op.type);\n const right = this.expression(3); // UNARY precedence\n return {\n type: NodeType.Unary,\n operator: op.type,\n operation: operation,\n operand: right,\n position: op.position\n } as UnaryNode;\n }\n \n // Handle empty collection {} or collection literals {expr1, expr2, ...}\n if (this.match(TokenType.LBRACE)) {\n const lbrace = this.previous();\n const startPos = lbrace.position;\n const elements: ASTNode[] = [];\n \n if (!this.check(TokenType.RBRACE)) {\n const previousContext = this.state.getContext();\n this.state.setContext('CollectionLiteral');\n \n do {\n // Check for trailing comma before trying to parse expression\n if (this.check(TokenType.RBRACE)) {\n // We have a trailing comma\n if (this.diagnostics) {\n const commaToken = this.previous(); // The comma we just consumed\n const diagnostic = FHIRPathDiagnostics.trailingComma(commaToken, this.sourceMapper!);\n this.diagnostics!.addError(diagnostic.range, diagnostic.message, diagnostic.code);\n }\n break;\n }\n \n try {\n elements.push(this.errorRecovery ? this.expressionWithRecovery() : this.expression());\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n elements.push(this.createErrorNode(error.token, error.message));\n // Skip to next comma or closing brace\n while (!this.isAtEnd() && !this.check(TokenType.COMMA) && !this.check(TokenType.RBRACE)) {\n this.advance();\n }\n if (this.check(TokenType.COMMA)) {\n continue;\n } else {\n break;\n }\n } else {\n throw error;\n }\n }\n } while (this.match(TokenType.COMMA));\n \n this.state.setContext(previousContext);\n }\n \n if (!this.match(TokenType.RBRACE)) {\n if (this.diagnostics) {\n this.errorReporter?.reportUnclosedDelimiter(lbrace, '}') ||\n this.diagnostics!.addError(\n this.sourceMapper!.tokenToRange(lbrace),\n \"Expected '}' to close collection literal\",\n ErrorCode.UNCLOSED_BRACE\n );\n this.state.markPartial();\n } else {\n throw this.error(\"Expected '}' after collection elements\", ErrorCode.UNCLOSED_BRACE);\n }\n }\n \n // Restore context if we set it earlier\n if (!this.check(TokenType.RBRACE)) {\n this.state.setContext('Expression');\n }\n \n return {\n type: NodeType.Collection,\n elements: elements,\n position: startPos\n } as CollectionNode;\n }\n \n // Handle operator keywords as identifiers/functions at expression start\n if (this.isOperatorKeyword(this.peek().type)) {\n const token = this.advance();\n const identifier: IdentifierNode = {\n type: NodeType.Identifier,\n name: token.value,\n position: token.position\n };\n \n // Check for function call\n if (this.check(TokenType.LPAREN)) {\n return this.functionCall(identifier);\n }\n \n return identifier;\n }\n \n const token = this.peek();\n let message = \"Expected expression\";\n \n // Add context-specific information\n const context = this.state.getContext();\n if (context === 'CollectionLiteral') {\n message = \"Expected expression in collection\";\n } else if (context === 'FunctionCall') {\n message = \"Expected expression in function call\";\n } else if (context === 'IndexExpression') {\n message = \"Expected expression in index\";\n }\n \n if (token.type !== TokenType.EOF) {\n message += `, found '${token.value}'`;\n }\n throw this.error(message, ErrorCode.EXPECTED_EXPRESSION);\n }\n \n // Parse binary operators with precedence\n private parseBinary(left: ASTNode, op: Token, precedence: number): ASTNode {\n const operation = op.operation || Registry.getByToken(op.type);\n if (!operation && op.type !== TokenType.DOT && op.type !== TokenType.IS && op.type !== TokenType.AS) {\n throw this.error(`Unknown operator: ${op.value}`, ErrorCode.INVALID_OPERATOR);\n }\n // Special handling for type operators\n if (op.type === TokenType.IS || op.type === TokenType.AS) {\n this.advance(); // consume operator\n \n // Type name can be either a simple identifier or in parentheses (for is() function syntax)\n let typeName: string;\n if (this.check(TokenType.LPAREN)) {\n // Handle is(TypeName) syntax\n this.advance(); // consume (\n typeName = this.consume(TokenType.IDENTIFIER, \"Expected type name\", ErrorCode.EXPECTED_IDENTIFIER).value;\n this.consume(TokenType.RPAREN, \"Expected ')' after type name\", ErrorCode.UNCLOSED_PARENTHESIS);\n } else {\n // Regular is TypeName syntax\n const typeToken = this.peek();\n if (!this.match(TokenType.IDENTIFIER)) {\n if (this.errorRecovery) {\n const context = op.type === TokenType.AS ? ParseContext.TypeCast : ParseContext.MembershipTest;\n this.errorReporter!.reportExpectedToken(\n [TokenType.IDENTIFIER],\n typeToken,\n context\n );\n // Create incomplete node\n return this.createIncompleteNode(left, ['type name']);\n } else if (!this.errorRecovery && this.diagnostics) {\n // In standard mode, add error once and throw\n const range = this.sourceMapper!.tokenToRange(typeToken);\n this.diagnostics!.addError(\n range,\n `Expected type name after '${op.value}'`,\n ErrorCode.EXPECTED_IDENTIFIER\n );\n // Throw without adding duplicate diagnostic\n const pos = typeToken.position;\n const fullMessage = `Expected type name at line ${pos.line}, column ${pos.column}`;\n throw new ParseError(fullMessage, pos, typeToken);\n }\n throw this.error(\"Expected type name\", ErrorCode.EXPECTED_IDENTIFIER);\n }\n typeName = this.previous().value;\n }\n \n return {\n type: op.type === TokenType.IS ? NodeType.MembershipTest : NodeType.TypeCast,\n expression: left,\n targetType: typeName,\n position: op.position\n } as MembershipTestNode | TypeCastNode;\n }\n \n this.advance(); // consume operator\n \n // Check for common mistake: == instead of =\n if (op.type === TokenType.EQ && this.check(TokenType.EQ)) {\n const secondEq = this.peek();\n if (this.diagnostics) {\n const range = this.sourceMapper!.mergeRanges(\n this.sourceMapper!.tokenToRange(op),\n this.sourceMapper!.tokenToRange(secondEq)\n );\n this.diagnostics!.addError(\n range,\n \"'==' is not valid in FHIRPath, use '=' for equality\",\n ErrorCode.INVALID_OPERATOR\n );\n // Skip the extra = to avoid cascading errors\n this.advance();\n } else if (this.throwOnError) {\n throw this.error(\"'==' is not valid in FHIRPath, use '=' for equality\", ErrorCode.INVALID_OPERATOR);\n }\n }\n \n // Special handling for union operator - can chain multiple\n if (op.type === TokenType.PIPE) {\n const right = this.expression(precedence + 1);\n \n // If left is already a union, add to it\n if (left.type === NodeType.Union) {\n (left as UnionNode).operands.push(right);\n return left;\n }\n \n // Create new union node\n return {\n type: NodeType.Union,\n operands: [left, right],\n position: op.position\n } as UnionNode;\n }\n \n // Special handling for dot operator (left-associative, pipelines data)\n if (op.type === TokenType.DOT) {\n // Check for double dot error\n if (this.check(TokenType.DOT)) {\n const secondDot = this.peek();\n if (this.diagnostics) {\n const diagnostic = FHIRPathDiagnostics.doubleDotOperator(op, secondDot, this.sourceMapper!);\n this.diagnostics!.addError(diagnostic.range, diagnostic.message, diagnostic.code);\n \n // Skip the extra dot to avoid cascading errors\n this.advance();\n \n if (this.errorRecovery) {\n this.state.markPartial();\n }\n }\n \n if (this.throwOnError) {\n throw this.error(\"Invalid '..' operator - use single '.' for navigation\", ErrorCode.INVALID_OPERATOR);\n }\n }\n \n // After a dot, we need to handle keywords that can be method names\n let right: ASTNode;\n \n // Check if next token is a keyword that can be used as a method name\n const next = this.peek();\n if (this.isOperatorKeyword(next.type)) {\n // Treat keyword as identifier\n this.advance();\n right = {\n type: NodeType.Identifier,\n name: next.value,\n position: next.position\n } as IdentifierNode;\n } else {\n // Check for invalid syntax like .[ or .123\n if (this.check(TokenType.LBRACKET) || this.check(TokenType.NUMBER)) {\n if (this.diagnostics) {\n this.errorReporter?.reportExpectedToken(\n [TokenType.IDENTIFIER],\n this.peek(),\n ParseContext.Expression\n ) || this.diagnostics!.addError(\n this.sourceMapper!.tokenToRange(this.peek()),\n \"Expected property name after '.'\",\n ErrorCode.EXPECTED_IDENTIFIER\n );\n \n if (this.errorRecovery) {\n // Create error node and continue to parse the index\n right = this.createErrorNode(this.peek(), \"Expected identifier\");\n return {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: operation,\n left: left,\n right: right,\n position: op.position\n } as BinaryNode;\n }\n }\n throw this.error(\"Expected property name after '.'\", ErrorCode.EXPECTED_IDENTIFIER);;\n }\n \n try {\n right = this.primary();\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n // Report missing identifier after dot\n this.errorReporter!.reportMissingIdentifier(this.peek(), \"after '.'\");\n return this.createIncompleteNode(left, ['property']);\n }\n throw error;\n }\n }\n \n // Check for function call after dot\n if (this.peek().type === TokenType.LPAREN) {\n const dotNode: BinaryNode = {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: operation,\n left: left,\n right: right,\n position: op.position\n };\n return this.functionCall(dotNode);\n }\n \n return {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: operation,\n left: left,\n right: right,\n position: op.position\n } as BinaryNode;\n }\n \n // Right-associative operators (none in FHIRPath currently)\n // For left-associative operators, we want same precedence to associate left\n // So we use precedence + 1 to ensure left-to-right evaluation\n const associativity = this.isRightAssociative(op) ? 0 : 1;\n \n let right: ASTNode;\n try {\n right = this.expression(precedence + associativity);\n } catch (error) {\n if (error instanceof ParseError && (this.diagnostics)) {\n // Report missing operand\n const diagnostic = FHIRPathDiagnostics.missingOperand(op, 'right', this.sourceMapper!);\n this.diagnostics!.addError(diagnostic.range, diagnostic.message, diagnostic.code);\n \n if (this.errorRecovery) {\n return this.createIncompleteNode(left, ['right operand']);\n }\n }\n throw error;\n }\n \n return {\n type: NodeType.Binary,\n operator: op.type,\n operation: operation,\n left: left,\n right: right,\n position: op.position\n } as BinaryNode;\n }\n \n // Parse function calls\n private functionCall(func: ASTNode): ASTNode {\n const lparen = this.peek();\n \n if (!this.match(TokenType.LPAREN)) {\n if (this.errorRecovery) {\n this.errorReporter!.reportExpectedToken(\n [TokenType.LPAREN],\n this.peek(),\n ParseContext.FunctionCall\n );\n return this.createIncompleteNode(func, ['function arguments']);\n }\n throw this.error(\"Expected '(' after function\", ErrorCode.MISSING_ARGUMENTS);\n }\n \n const args: ASTNode[] = [];\n \n if (!this.check(TokenType.RPAREN)) {\n const previousContext = this.state.getContext();\n this.state.setContext('FunctionCall');\n // Check for immediate unexpected tokens in function context\n if (this.check(TokenType.RBRACKET) || this.check(TokenType.RBRACE)) {\n if (this.errorRecovery) {\n this.errorReporter!.reportExpectedToken(\n [TokenType.IDENTIFIER, TokenType.NUMBER, TokenType.STRING, TokenType.LPAREN, TokenType.LBRACE],\n this.peek(),\n ParseContext.FunctionCall\n );\n // Skip the unexpected token\n this.advance();\n }\n }\n \n do {\n try {\n args.push(this.errorRecovery ? this.expressionWithRecovery() : this.expression());\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n // Report contextual error for function arguments\n this.errorReporter!.reportExpectedToken(\n [TokenType.IDENTIFIER, TokenType.NUMBER, TokenType.STRING, TokenType.LPAREN, TokenType.LBRACE],\n error.token,\n ParseContext.FunctionCall\n );\n args.push(this.createErrorNode(error.token, error.message));\n \n // Skip to next comma or closing paren\n while (!this.isAtEnd() && !this.check(TokenType.COMMA) && !this.check(TokenType.RPAREN)) {\n this.advance();\n }\n \n if (this.check(TokenType.COMMA)) {\n continue;\n } else {\n break;\n }\n } else {\n throw error;\n }\n }\n } while (this.match(TokenType.COMMA));\n \n this.state.setContext(previousContext);\n }\n \n // Check for empty function that requires arguments\n const funcName = func.type === NodeType.Identifier ? (func as IdentifierNode).name : '';\n if (args.length === 0 && funcName === 'where') {\n if (this.errorRecovery) {\n this.errorReporter!.reportMissingArguments(funcName, lparen);\n }\n }\n \n if (!this.match(TokenType.RPAREN)) {\n if (this.errorRecovery) {\n // Report unclosed parenthesis\n this.errorReporter!.reportUnclosedDelimiter(lparen, ')');\n this.state.markPartial();\n } else {\n throw this.error(\"Expected ')' after arguments\", ErrorCode.UNCLOSED_PARENTHESIS);\n }\n }\n \n let result: ASTNode = {\n type: NodeType.Function,\n name: func,\n arguments: args,\n position: func.position\n } as FunctionNode;\n \n // Check for method calls after the function (e.g., exists().not())\n while (this.check(TokenType.DOT)) {\n const dotToken = this.advance();\n \n // After a dot, handle keywords that can be method names\n let right: ASTNode;\n const next = this.peek();\n if (this.isOperatorKeyword(next.type)) {\n // Treat keyword as identifier\n this.advance();\n right = {\n type: NodeType.Identifier,\n name: next.value,\n position: next.position\n } as IdentifierNode;\n } else {\n right = this.primary();\n }\n \n // If the right side is a function call, handle it\n if (this.check(TokenType.LPAREN)) {\n const methodNode: BinaryNode = {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: Registry.getByToken(TokenType.DOT),\n left: result,\n right: right,\n position: dotToken.position\n };\n result = this.functionCall(methodNode);\n } else {\n // Regular property access\n result = {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n operation: Registry.getByToken(TokenType.DOT),\n left: result,\n right: right,\n position: dotToken.position\n } as BinaryNode;\n }\n }\n \n return result;\n }\n \n // Handle indexing\n private parseIndex(expr: ASTNode): ASTNode {\n const lbracket = this.peek();\n \n if (!this.match(TokenType.LBRACKET)) {\n throw this.error(\"Expected '['\", ErrorCode.UNEXPECTED_TOKEN);\n }\n \n // Check for empty brackets\n if (this.check(TokenType.RBRACKET)) {\n if (this.diagnostics) {\n const diagnostic = FHIRPathDiagnostics.emptyBrackets(lbracket, this.sourceMapper!);\n this.diagnostics!.addError(diagnostic.range, diagnostic.message, diagnostic.code);\n }\n if (this.throwOnError) {\n throw this.error(\"Expected expression in index\", ErrorCode.EXPECTED_EXPRESSION);\n }\n }\n \n let index: ASTNode;\n try {\n index = this.errorRecovery ? this.expressionWithRecovery() : this.expression();\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n index = this.createErrorNode(error.token, error.message);\n } else {\n throw error;\n }\n }\n \n if (!this.match(TokenType.RBRACKET)) {\n if (this.diagnostics) {\n this.errorReporter?.reportUnclosedDelimiter(lbracket, ']') ||\n this.diagnostics.addError(\n this.sourceMapper!.tokenToRange(lbracket),\n \"Expected ']' after index expression\",\n ErrorCode.UNCLOSED_BRACKET\n );\n this.state.markPartial();\n } else {\n throw this.error(\"Expected ']'\", ErrorCode.UNCLOSED_BRACKET);\n }\n }\n \n return {\n type: NodeType.Index,\n expression: expr,\n index: index,\n position: expr.position\n } as IndexNode;\n }\n \n private identifierOrFunctionCall(): ASTNode {\n const name = this.previous().value;\n const position = this.previous().position;\n \n // Check if identifier starts with uppercase (potential type)\n const firstChar = name.charAt(0);\n const isUpperCase = firstChar && firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase();\n \n const identifier: IdentifierNode | TypeOrIdentifierNode = isUpperCase ? {\n type: NodeType.TypeOrIdentifier,\n name: name,\n position: position\n } : {\n type: NodeType.Identifier,\n name: name,\n position: position\n };\n \n // Check for function call\n if (this.check(TokenType.LPAREN)) {\n // Special handling for ofType(TypeName)\n if (identifier.name === 'ofType') {\n return this.parseOfType();\n }\n // Special handling for is(TypeName) - treat as regular function\n if (identifier.name === 'is') {\n return this.functionCall(identifier);\n }\n return this.functionCall(identifier);\n }\n \n return identifier;\n }\n \n private parseOfType(): ASTNode {\n this.consume(TokenType.LPAREN, \"Expected '(' after ofType\", ErrorCode.MISSING_ARGUMENTS);\n const typeName = this.consume(TokenType.IDENTIFIER, \"Expected type name\", ErrorCode.EXPECTED_IDENTIFIER).value;\n this.consume(TokenType.RPAREN, \"Expected ')' after type name\");\n \n return {\n type: NodeType.Function,\n name: {\n type: NodeType.Identifier,\n name: 'ofType',\n position: this.previous().position\n } as IdentifierNode,\n arguments: [{\n type: NodeType.TypeReference,\n typeName: typeName,\n position: this.previous().position\n } as TypeReferenceNode],\n position: this.previous().position\n } as FunctionNode;\n }\n \n // Precedence lookup is now handled by PrecedenceManager\n \n // Type inference is now handled by ASTFactory.inferLiteralType\n \n // Helper methods\n private match(...types: TokenType[]): boolean {\n return this.navigator.match(...types);\n }\n \n private check(type: TokenType): boolean {\n return this.navigator.check(type);\n }\n \n private advance(): Token {\n return this.navigator.advance();\n }\n \n private isAtEnd(): boolean {\n return this.navigator.isAtEnd();\n }\n \n private peek(): Token {\n return this.navigator.peek();\n }\n \n private previous(): Token {\n return this.navigator.previous();\n }\n \n private consume(type: TokenType, message: string, code: ErrorCode = ErrorCode.UNEXPECTED_TOKEN): Token {\n if (this.check(type)) return this.advance();\n throw this.error(message, code);\n }\n \n private error(message: string, code: ErrorCode = ErrorCode.PARSE_ERROR): ParseError {\n const token = this.peek();\n return this.errorFactory.createError(message, token, code);\n }\n \n private isRightAssociative(op: Token): boolean {\n // FHIRPath doesn't have right-associative operators\n return false;\n }\n \n // Check if a token type is an operator keyword that can also be identifier/function\n private isOperatorKeyword(type: TokenType): boolean {\n return type === TokenType.DIV || \n type === TokenType.MOD ||\n type === TokenType.CONTAINS ||\n type === TokenType.IN ||\n type === TokenType.AND ||\n type === TokenType.OR ||\n type === TokenType.XOR ||\n type === TokenType.IMPLIES ||\n type === TokenType.IS ||\n type === TokenType.AS ||\n type === TokenType.NOT ||\n type === TokenType.TRUE ||\n type === TokenType.FALSE;\n }\n \n // Error recovery methods\n private expressionWithRecovery(minPrecedence: number = 0): ASTNode {\n try {\n return this.expression(minPrecedence);\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n const errorNode = this.createErrorNode(error.token, error.message);\n this.recoverToSyncPoint();\n \n // Try to continue parsing after recovery\n if (!this.isAtEnd() && !this.isAtSyncPoint()) {\n // Only try to recover if we're not already at a sync point\n try {\n const recovered = this.expression(minPrecedence); // Use regular expression, not recursive recovery\n // Create a binary node with error on left\n return {\n type: NodeType.Binary,\n operator: TokenType.DOT,\n left: errorNode,\n right: recovered,\n position: errorNode.position\n } as BinaryNode;\n } catch {\n // If recovery fails, just return the error node\n return errorNode;\n }\n }\n \n return errorNode;\n }\n throw error;\n }\n }\n \n private primaryWithRecovery(): ASTNode {\n try {\n return this.primary();\n } catch (error) {\n if (error instanceof ParseError && this.errorRecovery) {\n const errorNode = this.createErrorNode(error.token, error.message);\n this.recoverToSyncPoint();\n return errorNode;\n }\n throw error;\n }\n }\n \n private createErrorNode(token: Token, message: string): ErrorNode {\n const range = this.sourceMapper!.tokenToRange(token);\n const diagnostic = this.diagnostics!.getDiagnostics().slice(-1)[0];\n \n this.state.markPartial();\n \n return {\n type: NodeType.Error,\n position: token.position,\n range,\n expectedTokens: [], // Could be enhanced to track expected tokens\n actualToken: token,\n diagnostic: diagnostic || {\n range,\n severity: 1,\n code: ErrorCode.PARSE_ERROR,\n message,\n source: 'fhirpath-parser'\n }\n };\n }\n \n private createIncompleteNode(partialNode: ASTNode | undefined, missingParts: string[]): IncompleteNode {\n const position = partialNode?.position || this.peek().position;\n const range = partialNode?.range || this.sourceMapper!.tokenToRange(this.peek());\n \n this.state.markPartial();\n \n return {\n type: NodeType.Incomplete,\n position,\n range,\n partialNode,\n missingParts\n };\n }\n \n private recoverToSyncPoint(): void {\n while (!this.isAtEnd() && !this.isAtSyncPoint()) {\n this.advance();\n }\n }\n \n private isAtSyncPoint(): boolean {\n const token = this.peek();\n return token.type === TokenType.COMMA ||\n token.type === TokenType.RPAREN ||\n token.type === TokenType.RBRACKET ||\n token.type === TokenType.RBRACE ||\n token.type === TokenType.PIPE ||\n token.type === TokenType.AND ||\n token.type === TokenType.OR ||\n this.isStatementBoundary(token);\n }\n \n private isStatementBoundary(token: Token): boolean {\n // For future multi-statement support\n return token.type === TokenType.EOF;\n }\n \n // Synchronization points for error recovery\n private synchronize() {\n while (!this.isAtEnd()) {\n if (this.previous().type === TokenType.COMMA) return;\n if (this.previous().type === TokenType.RPAREN) return;\n \n switch (this.peek().type) {\n case TokenType.IDENTIFIER:\n return;\n }\n \n this.advance();\n }\n }\n\n // Add helper method to collect node ranges\n private collectNodeRanges(ast: ASTNode): Map<ASTNode, TextRange> {\n const ranges = new Map<ASTNode, TextRange>();\n \n const visit = (node: ASTNode) => {\n if (this.sourceMapper && node.position) {\n // Create range from node position\n const range: TextRange = {\n start: {\n line: node.position.line - 1,\n character: node.position.column - 1,\n offset: node.position.offset\n },\n end: {\n line: node.position.line - 1,\n character: node.position.column - 1,\n offset: node.position.offset\n }\n };\n ranges.set(node, range);\n }\n \n // Visit child nodes based on node type\n switch (node.type) {\n case NodeType.Binary:\n visit((node as BinaryNode).left);\n visit((node as BinaryNode).right);\n break;\n case NodeType.Unary:\n visit((node as UnaryNode).operand);\n break;\n case NodeType.Function:\n (node as FunctionNode).arguments.forEach(visit);\n break;\n case NodeType.Index:\n visit((node as IndexNode).expression);\n visit((node as IndexNode).index);\n break;\n case NodeType.Union:\n (node as UnionNode).operands.forEach(visit);\n break;\n case NodeType.Collection:\n (node as CollectionNode).elements.forEach(visit);\n break;\n case NodeType.MembershipTest:\n visit((node as MembershipTestNode).expression);\n break;\n case NodeType.TypeCast:\n visit((node as TypeCastNode).expression);\n break;\n }\n };\n \n visit(ast);\n return ranges;\n }\n}\n\n","import type { \n ASTNode, \n IdentifierNode, \n TypeOrIdentifierNode, \n VariableNode,\n TypeReferenceNode,\n BinaryNode,\n UnaryNode,\n UnionNode,\n FunctionNode,\n CollectionNode,\n MembershipTestNode,\n TypeCastNode,\n IndexNode,\n LiteralNode\n} from './ast';\nimport { NodeType } from './ast';\nimport { TokenType } from '../lexer/token';\n\n/**\n * Pretty print an AST node as an S-expression (without position information)\n */\nexport function pprint(node: ASTNode, multiline: boolean = false, indent: number = 0): string {\n const spaces = multiline ? ' '.repeat(indent) : '';\n const nl = multiline ? '\\n' : '';\n const childIndent = indent + 2;\n \n switch (node.type) {\n case NodeType.Literal:\n const lit = node as LiteralNode;\n return `${spaces}(${pprintLiteralValue(lit)}:${lit.valueType})`;\n \n case NodeType.Identifier:\n return `${spaces}(${(node as IdentifierNode).name}:id)`;\n \n case NodeType.TypeOrIdentifier:\n return `${spaces}(${(node as TypeOrIdentifierNode).name}:type-or-id)`;\n \n case NodeType.Variable:\n const varNode = node as VariableNode;\n const varName = varNode.name.startsWith('$') ? varNode.name : `%${varNode.name}`;\n return `${spaces}(${varName}:var)`;\n \n case NodeType.TypeReference:\n return `${spaces}(${(node as TypeReferenceNode).typeName}:type-ref)`;\n \n case NodeType.Binary:\n const binary = node as BinaryNode;\n const op = tokenToOp(binary.operator);\n if (multiline) {\n return `${spaces}(${op}${nl}${pprint(binary.left, multiline, childIndent)}${nl}${pprint(binary.right, multiline, childIndent)})`;\n } else {\n return `(${op} ${pprint(binary.left)} ${pprint(binary.right)})`;\n }\n \n case NodeType.Unary:\n const unary = node as UnaryNode;\n const unaryOp = tokenToOp(unary.operator);\n if (multiline) {\n return `${spaces}(${unaryOp}:unary${nl}${pprint(unary.operand, multiline, childIndent)})`;\n } else {\n return `(${unaryOp}:unary ${pprint(unary.operand)})`;\n }\n \n case NodeType.Union:\n const union = node as UnionNode;\n if (multiline) {\n const operands = union.operands.map(op => pprint(op, multiline, childIndent)).join(nl);\n return `${spaces}(|${nl}${operands})`;\n } else {\n return `(| ${union.operands.map(op => pprint(op)).join(' ')})`;\n }\n \n case NodeType.Function:\n const func = node as FunctionNode;\n const funcName = (func.name as IdentifierNode).name;\n if (multiline && func.arguments.length > 0) {\n const args = func.arguments.map(arg => pprint(arg, multiline, childIndent)).join(nl);\n return `${spaces}(${funcName}:fn${nl}${args})`;\n } else {\n const args = func.arguments.map(arg => pprint(arg)).join(' ');\n return args ? `${spaces}(${funcName}:fn ${args})` : `${spaces}(${funcName}:fn)`;\n }\n \n case NodeType.Collection:\n const coll = node as CollectionNode;\n if (multiline && coll.elements.length > 0) {\n const elements = coll.elements.map(el => pprint(el, multiline, childIndent)).join(nl);\n return `${spaces}({}:collection${nl}${elements})`;\n } else {\n const elements = coll.elements.map(el => pprint(el)).join(' ');\n return elements ? `${spaces}({}:collection ${elements})` : `${spaces}({}:collection)`;\n }\n \n case NodeType.MembershipTest:\n const memberTest = node as MembershipTestNode;\n if (multiline) {\n return `${spaces}(is${nl}${pprint(memberTest.expression, multiline, childIndent)}${nl}${' '.repeat(childIndent)}${memberTest.targetType})`;\n } else {\n return `(is ${pprint(memberTest.expression)} ${memberTest.targetType})`;\n }\n \n case NodeType.TypeCast:\n const typeCast = node as TypeCastNode;\n if (multiline) {\n return `${spaces}(as${nl}${pprint(typeCast.expression, multiline, childIndent)}${nl}${' '.repeat(childIndent)}${typeCast.targetType})`;\n } else {\n return `(as ${pprint(typeCast.expression)} ${typeCast.targetType})`;\n }\n \n case NodeType.Index:\n const index = node as IndexNode;\n if (multiline) {\n return `${spaces}([]${nl}${pprint(index.expression, multiline, childIndent)}${nl}${pprint(index.index, multiline, childIndent)})`;\n } else {\n return `([] ${pprint(index.expression)} ${pprint(index.index)})`;\n }\n \n default:\n return `${spaces}(unknown:${node.type})`;\n }\n}\n\nfunction pprintLiteralValue(node: LiteralNode): string {\n const value = node.value;\n const valueType = node.valueType;\n \n switch (valueType) {\n case 'string':\n return `'${value}'`;\n case 'number':\n return String(value);\n case 'boolean':\n return String(value);\n case 'null':\n return '{}';\n case 'date':\n case 'time':\n case 'datetime':\n return `@${value}`;\n default:\n return String(value);\n }\n}\n\nfunction tokenToOp(token: TokenType): string {\n switch (token) {\n case TokenType.PLUS: return '+';\n case TokenType.MINUS: return '-';\n case TokenType.STAR: return '*';\n case TokenType.DIV: return 'div';\n case TokenType.MOD: return 'mod';\n case TokenType.GT: return '>';\n case TokenType.LT: return '<';\n case TokenType.GTE: return '>=';\n case TokenType.LTE: return '<=';\n case TokenType.EQ: return '=';\n case TokenType.NEQ: return '!=';\n case TokenType.AND: return 'and';\n case TokenType.OR: return 'or';\n case TokenType.XOR: return 'xor';\n case TokenType.IMPLIES: return 'implies';\n case TokenType.NOT: return 'not';\n case TokenType.DOT: return '.';\n case TokenType.CONTAINS: return 'contains';\n case TokenType.IN: return 'in';\n default: return token;\n }\n}","// Import registry to trigger operation registration\nimport './registry';\n\n// Core API functions\nimport { \n parse, \n parseForEvaluation,\n evaluate, \n compile, \n analyze, \n registry,\n isStandardResult,\n isDiagnosticResult,\n validate\n} from './api';\n\n// Default export with common operations\nexport default {\n parse,\n parseForEvaluation,\n evaluate,\n compile,\n analyze,\n registry\n};\n\n// Named exports for core functions\nexport { \n parse, \n parseForEvaluation,\n evaluate, \n compile, \n analyze, \n registry,\n isStandardResult,\n isDiagnosticResult,\n validate\n};\n\n// Named exports for advanced usage\nexport { FHIRPath } from './api/builder';\nexport { FHIRPathError, ErrorCode } from './api/errors';\n\n// Export types\nexport type {\n // Core types\n FHIRPathExpression,\n CompiledExpression,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions,\n AnalysisResult,\n\n // Error types\n AnalysisError,\n AnalysisWarning,\n Location,\n\n // Extension types\n ModelProvider,\n PropertyDefinition,\n CustomFunction,\n CustomFunctionMap,\n\n // Registry types\n RegistryAPI,\n OperationMetadata,\n OperationInfo,\n\n // Builder types\n FHIRPathBuilder,\n FHIRPathAPI\n} from './api/types';\n\n// Export parser types\nexport type {\n ParserOptions,\n ParseResult,\n ParseDiagnostic,\n DiagnosticSeverity,\n TextRange,\n Position as TextPosition\n} from './api';\n\n// Export AST types for LSP server\nexport type {\n ASTNode,\n Position,\n IdentifierNode,\n BinaryNode,\n UnaryNode,\n UnionNode,\n FunctionNode,\n LiteralNode,\n VariableNode,\n CollectionNode,\n MembershipTestNode,\n TypeCastNode,\n TypeReferenceNode,\n IndexNode\n} from './parser/ast';\n\nexport { NodeType } from './parser/ast';\n\n// Export lexer types for LSP server\nexport { TokenType } from './lexer/token';\nexport type { Token } from './lexer/token';\n","import type {\n FHIRPathExpression,\n CompiledExpression,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions,\n AnalysisResult,\n InspectResult,\n InspectOptions\n} from './types';\nimport { FHIRPathParser } from '../parser/parser';\nimport { \n type ParserOptions,\n type ParseResult,\n type ParseDiagnostic,\n type TextRange\n} from '../parser/types';\nimport type { ASTNode } from '../parser/ast';\nimport { FHIRPathExpression as Expression } from './expression';\nimport { FHIRPathError, parseError } from './errors';\nimport { publicRegistry } from './registry';\nimport { inspect as inspectImpl } from './inspect';\n\n// Export parser types for API consumers\nexport { \n type ParserOptions,\n type ParseResult,\n type ParseDiagnostic,\n type DiagnosticSeverity,\n type TextRange,\n type Position\n} from '../parser/types';\n\n// New parse function with mode support\nexport function parse(expression: string, options: ParserOptions = {}): ParseResult {\n const parser = new FHIRPathParser(expression, options);\n return parser.parse();\n}\n\n// Convenience function for evaluation (throws on error)\nexport function parseForEvaluation(expression: string): ASTNode {\n try {\n const result = parse(expression, { throwOnError: true });\n return result.ast;\n } catch (error) {\n if (error instanceof Error) {\n throw parseError(error.message, undefined, expression);\n }\n throw parseError(String(error), undefined, expression);\n }\n}\n\n// Type guards for result types\n\nexport function isStandardResult(result: ParseResult): result is ParseResult {\n return 'ast' in result && 'diagnostics' in result && 'hasErrors' in result;\n}\n\nexport function isDiagnosticResult(result: ParseResult): result is ParseResult & { isPartial: boolean; ranges: Map<ASTNode, TextRange> } {\n return isStandardResult(result) && 'isPartial' in result && 'ranges' in result;\n}\n\n// Validate function - alternative to removed Validate mode\nexport function validate(expression: string): { valid: boolean; diagnostics: ParseDiagnostic[] } {\n const result = parse(expression);\n if (isStandardResult(result)) {\n return {\n valid: !result.hasErrors,\n diagnostics: result.diagnostics\n };\n }\n // Should not happen, but handle gracefully\n return { valid: true, diagnostics: [] };\n}\n\n\n// Evaluate expression directly\nexport function evaluate(\n expression: string | FHIRPathExpression,\n input?: any,\n context?: EvaluationContext\n): any[] {\n const expr = typeof expression === 'string' \n ? new Expression(parseForEvaluation(expression), expression)\n : expression;\n return expr.evaluate(input, context);\n}\n\n// Compile to optimized function\nexport function compile(\n expression: string | FHIRPathExpression,\n options?: CompileOptions\n): CompiledExpression {\n const expr = typeof expression === 'string' \n ? new Expression(parseForEvaluation(expression), expression)\n : expression;\n return expr.compile(options);\n}\n\n// Analyze expression for validation\nexport function analyze(\n expression: string | FHIRPathExpression,\n options?: AnalyzeOptions\n): AnalysisResult {\n const expr = typeof expression === 'string' \n ? new Expression(parseForEvaluation(expression), expression)\n : expression;\n return expr.analyze(options);\n}\n\n// Inspect expression with debugging information\nexport function inspect(\n expression: string | FHIRPathExpression,\n input?: any,\n context?: EvaluationContext,\n options?: InspectOptions\n): InspectResult {\n return inspectImpl(expression, input, context, options);\n}\n\n// Default registry instance\nexport const registry = publicRegistry;","import type {\n ASTNode,\n LiteralNode,\n IdentifierNode,\n VariableNode,\n BinaryNode,\n UnaryNode,\n FunctionNode,\n CollectionNode,\n IndexNode,\n UnionNode,\n MembershipTestNode,\n TypeCastNode,\n TypeReferenceNode,\n TypeOrIdentifierNode\n} from '../parser/ast';\nimport { NodeType } from '../parser/ast';\nimport { TokenType } from '../lexer/token';\nimport type { EvaluationResult } from './types';\nimport type { RuntimeContext } from '../runtime/context';\nimport { EvaluationError, CollectionUtils } from './types';\nimport { RuntimeContextManager } from '../runtime/context';\nimport { TypeSystem } from '../registry/utils/type-system';\nimport { Registry } from '../registry';\nimport type { Interpreter as IInterpreter } from '../registry/types';\n\n// Import registry to trigger operation registration\nimport '../registry';\n\n// Type for node evaluator functions\ntype NodeEvaluator = (node: any, input: any[], context: RuntimeContext) => EvaluationResult;\n\n/**\n * FHIRPath Interpreter - evaluates AST nodes following the stream-processing model.\n * Every node is a processing unit: (input, context) → (output, new context)\n *\n * This refactored version uses object lookup instead of switch statements.\n */\nexport class Interpreter implements IInterpreter {\n // Object lookup for node evaluators\n private readonly nodeEvaluators: Record<NodeType, NodeEvaluator> = {\n [NodeType.Literal]: this.evaluateLiteral.bind(this),\n [NodeType.Identifier]: this.evaluateIdentifier.bind(this),\n [NodeType.TypeOrIdentifier]: this.evaluateTypeOrIdentifier.bind(this),\n [NodeType.Variable]: this.evaluateVariable.bind(this),\n [NodeType.Binary]: this.evaluateBinary.bind(this),\n [NodeType.Unary]: this.evaluateUnary.bind(this),\n [NodeType.Function]: this.evaluateFunction.bind(this),\n [NodeType.Collection]: this.evaluateCollection.bind(this),\n [NodeType.Index]: this.evaluateIndex.bind(this),\n [NodeType.Union]: this.evaluateUnion.bind(this),\n [NodeType.MembershipTest]: this.evaluateMembershipTest.bind(this),\n [NodeType.TypeCast]: this.evaluateTypeCast.bind(this),\n [NodeType.TypeReference]: this.evaluateTypeReference.bind(this),\n [NodeType.Error]: this.evaluateError.bind(this),\n [NodeType.Incomplete]: this.evaluateIncomplete.bind(this),\n };\n\n /**\n * Main evaluation method - uses object lookup instead of switch\n */\n evaluate(node: ASTNode, input: any[], context: RuntimeContext): EvaluationResult {\n try {\n // Ensure $this is set in the context if not already present\n if (!RuntimeContextManager.getVariable(context, '$this')) {\n context = RuntimeContextManager.setSpecialVariable(context, 'this', input);\n }\n\n const evaluator = this.nodeEvaluators[node.type];\n\n if (!evaluator) {\n throw new EvaluationError(\n `Unknown node type: ${node.type}`,\n node.position\n );\n }\n\n return evaluator(node, input, context);\n } catch (error) {\n // Add position information if not already present\n if (error instanceof EvaluationError && !error.position && node.position) {\n error.position = node.position;\n }\n throw error;\n }\n }\n\n private evaluateLiteral(node: LiteralNode, input: any[], context: RuntimeContext): EvaluationResult {\n // If literal has operation reference from parser\n if (node.operation && node.operation.kind === 'literal') {\n return node.operation.evaluate(this, context, input);\n }\n\n // Fallback for legacy literals\n const value = node.value === null ? [] : [node.value];\n return { value, context };\n }\n\n private evaluateIdentifier(node: IdentifierNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Check if this identifier could be a resource type name\n // Resource types in FHIR typically start with uppercase\n if (node.name[0] === node?.name?.[0]?.toUpperCase()) {\n // Check if any input items have this as their resourceType\n const hasMatchingResourceType = input.some(item =>\n item && typeof item === 'object' && item.resourceType === node.name\n );\n\n if (hasMatchingResourceType) {\n // This is a type filter - return only items matching this resourceType\n const filtered = input.filter(item =>\n item && typeof item === 'object' && item.resourceType === node.name\n );\n return { value: filtered, context };\n }\n }\n\n // Regular property navigation\n const results: any[] = [];\n\n for (const item of input) {\n if (item == null || typeof item !== 'object') {\n // Primitives don't have properties - skip\n continue;\n }\n\n const value = item[node.name];\n if (value !== undefined) {\n // Add to results - flatten if array\n if (Array.isArray(value)) {\n results.push(...value);\n } else {\n results.push(value);\n }\n }\n // Missing properties return empty (not added to results)\n }\n\n return { value: results, context };\n }\n\n private evaluateTypeOrIdentifier(node: TypeOrIdentifierNode, input: any[], context: RuntimeContext): EvaluationResult {\n // TypeOrIdentifier can act as either a type reference or property navigation\n\n // First, check if this is a known type name (e.g., Patient, Observation)\n // In FHIR context, type names match resourceType values\n const possibleTypeName = node.name;\n\n // Check if any input items have this as their resourceType\n const hasMatchingResourceType = input.some(item =>\n item && typeof item === 'object' && item.resourceType === possibleTypeName\n );\n\n if (hasMatchingResourceType) {\n // This is a type filter - return only items matching this resourceType\n const filtered = input.filter(item =>\n item && typeof item === 'object' && item.resourceType === possibleTypeName\n );\n return { value: filtered, context };\n }\n\n // Not a type filter, treat as property navigation\n return this.evaluateIdentifier(node as any, input, context);\n }\n\n private evaluateVariable(node: VariableNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Variables ignore input and return value from context\n const value = RuntimeContextManager.getVariable(context, node.name);\n \n if (value === undefined) {\n // Special handling for unknown special variables\n if (node.name.startsWith('$') && !['$this', '$index', '$total'].includes(node.name)) {\n throw new EvaluationError(`Unknown special variable: ${node.name}`, node.position);\n }\n return { value: [], context };\n }\n \n // Ensure we always return an array\n const arrayValue = Array.isArray(value) ? value : [value];\n return { value: arrayValue, context };\n }\n\n private evaluateBinary(node: BinaryNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Special handling for dot operator - it's a pipeline\n if (node.operator === TokenType.DOT) {\n // Phase 1: Evaluate left with original input/context\n const leftResult = this.evaluate(node.left, input, context);\n\n // Phase 2: Evaluate right with left's output as input\n const rightResult = this.evaluate(node.right, leftResult.value, leftResult.context);\n\n return rightResult;\n }\n\n // Handle case where parser incorrectly creates BinaryNode for unary minus\n if (!node.left && !node.right && (node as any).operand) {\n // This is actually a unary operation\n const unaryOp = Registry.getByToken(node.operator, 'prefix');\n if (unaryOp && unaryOp.kind === 'operator') {\n const operandResult = this.evaluate((node as any).operand, input, context);\n return unaryOp.evaluate(this, operandResult.context, input, operandResult.value);\n }\n }\n\n // Get operation from registry (binary operators are infix)\n const operation = node.operation || Registry.getByToken(node.operator, 'infix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError(`Unknown operator: ${node.operator}`, node.position);\n }\n\n if (!node.left || !node.right) {\n throw new EvaluationError(`Binary operator ${node.operator} missing operands`, node.position);\n }\n\n // Special handling for union operator - both sides should use the same context\n if (node.operator === TokenType.PIPE) {\n const leftResult = this.evaluate(node.left, input, context);\n const rightResult = this.evaluate(node.right, input, context); // Use original context, not leftResult.context\n\n // Use operation's evaluate method\n return operation.evaluate(this, context, input, leftResult.value, rightResult.value);\n }\n\n // Normal operators - context flows from left to right\n const leftResult = this.evaluate(node.left, input, context);\n const rightResult = this.evaluate(node.right, input, leftResult.context);\n\n // Use operation's evaluate method\n return operation.evaluate(this, rightResult.context, input, leftResult.value, rightResult.value);\n }\n\n private evaluateUnary(node: UnaryNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Get operation from registry (unary operators are prefix)\n // Don't use node.operation as parser might have assigned wrong operation\n const operation = Registry.getByToken(node.operator, 'prefix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError(`Unknown unary operator: ${node.operator}`, node.position);\n }\n\n // Evaluate operand\n const operandResult = this.evaluate(node.operand, input, context);\n\n // Use operation's evaluate method\n return operation.evaluate(this, operandResult.context, input, operandResult.value);\n }\n\n private evaluateFunction(node: FunctionNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Extract function name and handle method call syntax\n let funcName: string;\n let functionInput = input;\n\n if (node.name.type === NodeType.Identifier) {\n funcName = (node.name as IdentifierNode).name;\n } else if (node.name.type === NodeType.Binary && (node.name as BinaryNode).operator === TokenType.DOT) {\n // Method call syntax: expression.function(args)\n const binaryNode = node.name as BinaryNode;\n\n // Evaluate the left side to get the input\n const leftResult = this.evaluate(binaryNode.left, input, context);\n functionInput = leftResult.value;\n context = leftResult.context;\n\n // Get the function name from the right side\n if (binaryNode.right.type === NodeType.Identifier) {\n funcName = (binaryNode.right as IdentifierNode).name;\n } else {\n throw new EvaluationError('Invalid method call syntax', node.position);\n }\n } else {\n throw new EvaluationError('Complex function names not yet supported', node.position);\n }\n\n // Check for custom functions first\n if ((context as any).customFunctions && funcName in (context as any).customFunctions) {\n const customFunc = (context as any).customFunctions[funcName];\n // Evaluate all arguments\n const evaluatedArgs: any[] = [];\n for (const arg of node.arguments) {\n const argResult = this.evaluate(arg, functionInput, context);\n evaluatedArgs.push(argResult.value);\n context = argResult.context;\n }\n\n // Call custom function\n const result = customFunc!(context, functionInput, ...evaluatedArgs);\n return { value: result, context };\n }\n\n // Get function from registry\n const operation = Registry.get(funcName);\n if (!operation || operation.kind !== 'function') {\n throw new EvaluationError(`Unknown function: ${funcName}`, node.position);\n }\n\n // Check propagateEmptyInput flag\n if (operation.signature.propagatesEmpty && functionInput.length === 0) {\n return { value: [], context };\n }\n\n // Evaluate arguments based on parameter definitions\n const evaluatedArgs: any[] = [];\n for (let i = 0; i < node.arguments.length; i++) {\n const arg = node.arguments[i];\n const param = operation.signature.parameters[i];\n\n if (param && param.kind === 'expression') {\n // Pass expression as-is, will be evaluated by the function\n evaluatedArgs.push(arg);\n } else {\n // Evaluate the argument to get its value\n const argResult = this.evaluate(arg!, functionInput, context);\n evaluatedArgs.push(argResult.value);\n context = argResult.context;\n }\n }\n\n // Use operation's evaluate method\n return operation.evaluate(this, context, functionInput, ...evaluatedArgs);\n }\n\n private evaluateCollection(node: CollectionNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Evaluate each element and combine results\n const results: any[] = [];\n let currentContext = context;\n\n for (const element of node.elements) {\n const result = this.evaluate(element, input, currentContext);\n results.push(...result.value);\n currentContext = result.context;\n }\n\n return { value: results, context: currentContext };\n }\n\n private evaluateIndex(node: IndexNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Evaluate the expression being indexed\n const exprResult = this.evaluate(node.expression, input, context);\n\n // Evaluate the index expression in the original context\n const indexResult = this.evaluate(node.index, input, context);\n\n // Index must be a single integer\n if (indexResult.value.length === 0) {\n return { value: [], context: indexResult.context };\n }\n\n const index = CollectionUtils.toSingleton(indexResult.value);\n if (typeof index !== 'number' || !Number.isInteger(index)) {\n throw new EvaluationError('Index must be an integer', node.position);\n }\n\n // FHIRPath uses 0-based indexing\n if (index < 0 || index >= exprResult.value.length) {\n // Out of bounds returns empty\n return { value: [], context: indexResult.context };\n }\n\n return { value: [exprResult.value[index]], context: indexResult.context };\n }\n\n private evaluateUnion(node: UnionNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Union combines results from all operands\n // Each operand should be evaluated with the SAME original context\n // to prevent variable definitions from leaking between branches\n const results: any[] = [];\n const seen = new Set();\n\n for (const operand of node.operands) {\n // Always use the original context for each operand\n const result = this.evaluate(operand, input, context);\n\n // Remove duplicates\n for (const item of result.value) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(item);\n }\n }\n }\n\n // Return the original context, not a modified one\n return { value: results, context };\n }\n\n private evaluateMembershipTest(node: MembershipTestNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Evaluate the expression to get values to test\n const exprResult = this.evaluate(node.expression, input, context);\n\n // Empty collection: is returns empty\n if (exprResult.value.length === 0) {\n return { value: [], context: exprResult.context };\n }\n\n // Check if ALL values match the type\n for (const value of exprResult.value) {\n if (!TypeSystem.isType(value, node.targetType)) {\n return { value: [false], context: exprResult.context };\n }\n }\n\n // All values match the type\n return { value: [true], context: exprResult.context };\n }\n\n private evaluateTypeCast(node: TypeCastNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Evaluate the expression to get values to cast\n const exprResult = this.evaluate(node.expression, input, context);\n\n // For each value, attempt to cast to the target type\n const results: any[] = [];\n for (const value of exprResult.value) {\n // If already the correct type, keep it\n if (TypeSystem.isType(value, node.targetType)) {\n results.push(value);\n }\n // Otherwise, try to cast (returns null if fails)\n else {\n const castValue = TypeSystem.cast(value, node.targetType);\n if (castValue !== null) {\n results.push(castValue);\n }\n // Failed casts are filtered out (not added to results)\n }\n }\n\n // Return filtered collection\n return { value: results, context: exprResult.context };\n }\n\n private evaluateTypeReference(node: TypeReferenceNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Type references don't evaluate to values directly\n throw new EvaluationError(`Type reference cannot be evaluated: ${node.typeName}`, node.position);\n }\n \n private evaluateError(node: ASTNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Error nodes evaluate to empty collection\n return { value: [], context };\n }\n \n private evaluateIncomplete(node: ASTNode, input: any[], context: RuntimeContext): EvaluationResult {\n // Incomplete nodes evaluate to empty collection\n return { value: [], context };\n }\n}\n\n/**\n * Helper function to evaluate a FHIRPath expression\n */\nexport function evaluateFHIRPath(\n expression: string | ASTNode, \n input: any, \n context?: RuntimeContext\n): any[] {\n // Parse if string\n const ast = typeof expression === 'string'\n ? require('../parser').parse(expression)\n : expression;\n\n // Convert input to collection\n const inputCollection = CollectionUtils.toCollection(input);\n\n // Create context if not provided\n let evalContext = context || RuntimeContextManager.create(inputCollection);\n \n // Set initial $this to the input collection if not already set\n if (!RuntimeContextManager.getVariable(evalContext, '$this')) {\n evalContext = RuntimeContextManager.setSpecialVariable(evalContext, 'this', inputCollection);\n }\n\n // Create interpreter and evaluate\n const interpreter = new Interpreter();\n const result = interpreter.evaluate(ast, inputCollection, evalContext);\n\n return result.value;\n}\n","import type { \n ASTNode, \n LiteralNode, \n IdentifierNode, \n VariableNode,\n BinaryNode,\n UnaryNode,\n FunctionNode,\n CollectionNode,\n IndexNode,\n UnionNode,\n MembershipTestNode,\n TypeCastNode,\n TypeReferenceNode,\n TypeOrIdentifierNode\n} from '../parser/ast';\nimport { NodeType } from '../parser/ast';\nimport { TokenType } from '../lexer/token';\nimport type { CompiledNode } from './types';\nimport type { EvaluationResult } from '../interpreter/types';\nimport { EvaluationError, CollectionUtils } from '../interpreter/types';\nimport { RuntimeContextManager } from '../runtime/context';\nimport { isTruthy, toSingleton } from '../registry/utils';\nimport type { Compiler as ICompiler, CompiledExpression, TypeRef } from '../registry/types';\nimport type { RuntimeContext } from '../runtime/context';\n// Import the global registry to ensure all operations are registered\nimport '../registry';\nimport { Registry } from '../registry';\n\n/**\n * FHIRPath to JavaScript Closure Compiler\n * \n * Transforms FHIRPath AST nodes into JavaScript functions that implement\n * the same stream-processing semantics as the interpreter.\n */\nexport class Compiler implements ICompiler {\n /**\n * Main entry point - compiles an AST into an executable function\n */\n compile(node: ASTNode, input?: CompiledExpression): CompiledExpression {\n const compiled = this.compileNode(node);\n \n // Wrap the compiled function to ensure $this is set\n return {\n ...compiled,\n fn: (ctx: RuntimeContext) => {\n // Ensure $this is set if not already present\n if (!RuntimeContextManager.getVariable(ctx, '$this')) {\n ctx = RuntimeContextManager.setSpecialVariable(ctx, 'this', ctx.input);\n }\n return compiled.fn(ctx);\n }\n };\n }\n \n /**\n * Resolve a type name to a TypeRef\n */\n resolveType(typeName: string): TypeRef {\n // For now, return a simple type reference\n // In the future, this should use a model provider\n return { type: typeName } as TypeRef;\n }\n\n /**\n * Dispatches to specific compilation methods based on node type\n */\n private compileNode(node: ASTNode): CompiledExpression {\n switch (node.type) {\n case NodeType.Literal:\n return this.compileLiteral(node as LiteralNode);\n case NodeType.Identifier:\n return this.compileIdentifier(node as IdentifierNode);\n case NodeType.TypeOrIdentifier:\n return this.compileTypeOrIdentifier(node as TypeOrIdentifierNode);\n case NodeType.Variable:\n return this.compileVariable(node as VariableNode);\n case NodeType.Binary:\n return this.compileBinary(node as BinaryNode);\n case NodeType.Unary:\n return this.compileUnary(node as UnaryNode);\n case NodeType.Function:\n return this.compileFunction(node as FunctionNode);\n case NodeType.Collection:\n return this.compileCollection(node as CollectionNode);\n case NodeType.Index:\n return this.compileIndex(node as IndexNode);\n case NodeType.Union:\n return this.compileUnion(node as UnionNode);\n case NodeType.MembershipTest:\n return this.compileMembershipTest(node as MembershipTestNode);\n case NodeType.TypeCast:\n return this.compileTypeCast(node as TypeCastNode);\n case NodeType.TypeReference:\n return this.compileTypeReference(node as TypeReferenceNode);\n default:\n throw new EvaluationError(\n `Unknown node type: ${(node as any).type}`,\n node.position\n );\n }\n }\n\n /**\n * Compiles a literal node - returns a constant value\n */\n private compileLiteral(node: LiteralNode): CompiledExpression {\n const value = node.value;\n \n // Check if literal is an operation reference\n if (typeof value === 'string') {\n const operation = Registry.get(value);\n if (operation && operation.kind === 'literal') {\n return operation.compile(this, { fn: () => [], type: this.resolveType('Any'), isSingleton: false }, []);\n }\n }\n \n // Return a compiled expression for the literal value\n return {\n fn: (ctx: RuntimeContext) => value === null ? [] : [value],\n type: this.resolveType(this.getLiteralType(value)),\n isSingleton: true,\n source: JSON.stringify(value)\n };\n }\n \n private getLiteralType(value: any): string {\n if (value === null || value === undefined) return 'Any';\n if (typeof value === 'boolean') return 'Boolean';\n if (typeof value === 'string') return 'String';\n if (typeof value === 'number') {\n return Number.isInteger(value) ? 'Integer' : 'Decimal';\n }\n return 'Any';\n }\n\n /**\n * Compiles an identifier node - performs property navigation\n */\n private compileIdentifier(node: IdentifierNode): CompiledExpression {\n const name = node.name;\n \n return {\n fn: (ctx: RuntimeContext) => {\n const input = ctx.focus || ctx.input || [];\n const results: any[] = [];\n \n for (const item of input) {\n if (item == null || typeof item !== 'object') {\n continue;\n }\n \n const value = item[name];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n results.push(...value);\n } else {\n results.push(value);\n }\n }\n }\n \n return results;\n },\n type: this.resolveType('Any'), // Would need type inference in a real implementation\n isSingleton: false,\n source: name\n };\n }\n\n /**\n * Compiles a TypeOrIdentifier node - handles both type filtering and property navigation\n */\n private compileTypeOrIdentifier(node: TypeOrIdentifierNode): CompiledExpression {\n const name = node.name;\n \n return {\n fn: (ctx: RuntimeContext) => {\n const input = ctx.focus || ctx.input || [];\n \n // First, check if this is a type filter (e.g., Patient in Patient.name)\n // Check if any input items have this as their resourceType\n const hasMatchingResourceType = input.some((item: any) => \n item && typeof item === 'object' && item.resourceType === name\n );\n \n if (hasMatchingResourceType) {\n // This is a type filter - return only items matching this resourceType\n return input.filter((item: any) =>\n item && typeof item === 'object' && item.resourceType === name\n );\n }\n \n // Not a type filter, treat as property navigation\n const results: any[] = [];\n \n for (const item of input) {\n if (item == null || typeof item !== 'object') {\n continue;\n }\n \n const value = item[name];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n results.push(...value);\n } else {\n results.push(value);\n }\n }\n }\n \n return results;\n },\n type: this.resolveType('Any'),\n isSingleton: false,\n source: name\n };\n }\n\n /**\n * Compiles a variable node - looks up value from context\n */\n private compileVariable(node: VariableNode): CompiledExpression {\n const name = node.name;\n \n return {\n fn: (ctx: RuntimeContext) => {\n const value = RuntimeContextManager.getVariable(ctx, name);\n \n if (value === undefined) {\n // Special handling for unknown special variables\n if (name.startsWith('$') && !['$this', '$index', '$total'].includes(name)) {\n throw new EvaluationError(`Unknown special variable: ${name}`, node.position);\n }\n return [];\n }\n \n // Ensure we always return an array\n return Array.isArray(value) ? value : [value];\n },\n type: this.resolveType('Any'),\n isSingleton: false,\n source: name\n };\n }\n\n /**\n * Compiles a binary operator node\n */\n private compileBinary(node: BinaryNode): CompiledExpression {\n const operator = node.operator;\n \n // Handle case where parser incorrectly creates BinaryNode for unary minus\n if (!node.left && !node.right && (node as any).operand) {\n // This is actually a unary operation\n return this.compileUnary(node as any);\n }\n \n // Special handling for dot operator - it's a pipeline\n if (operator === TokenType.DOT) {\n const left = this.compileNode(node.left);\n const right = this.compileNode(node.right);\n \n return {\n fn: (ctx: RuntimeContext) => {\n // Execute left side with the original context\n const leftResult = left.fn(ctx);\n \n // Execute right side with left's result as input\n // Use withInput to maintain prototype chain\n const rightCtx = RuntimeContextManager.withInput(ctx, leftResult);\n return right.fn(rightCtx);\n },\n type: right.type,\n isSingleton: right.isSingleton,\n source: `${left.source || ''}.${right.source || ''}`\n };\n }\n \n // Get operation from registry\n const operation = node.operation || Registry.getByToken(operator, 'infix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError(`Unknown operator: ${operator}`, node.position);\n }\n \n // Compile operands\n const left = this.compileNode(node.left);\n const right = this.compileNode(node.right);\n \n // Use operation's compile method\n // For operators, pass both operands in args array\n return operation.compile(this, left, [left, right]);\n }\n\n /**\n * Compiles a unary operator node\n */\n private compileUnary(node: UnaryNode): CompiledExpression {\n const operator = node.operator;\n \n // Get operation from registry\n // Don't use node.operation as parser might have assigned wrong operation\n const operation = Registry.getByToken(operator, 'prefix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError(`Unknown unary operator: ${operator}`, node.position);\n }\n \n // Compile operand\n const operand = this.compileNode(node.operand);\n \n // Use operation's compile method\n // For unary operators, pass operand in args array\n return operation.compile(this, operand, [operand]);\n }\n\n /**\n * Compiles a function call node\n */\n private compileFunction(node: FunctionNode): CompiledExpression {\n // For now, handle only identifier function names\n if (node.name.type !== NodeType.Identifier) {\n throw new EvaluationError('Dynamic function names not yet supported', node.position);\n }\n \n const functionName = (node.name as IdentifierNode).name;\n \n // Check if function is registered\n const operation = Registry.get(functionName);\n if (!operation || operation.kind !== 'function') {\n throw new EvaluationError(`Unknown function: ${functionName}`, node.position);\n }\n \n // Compile arguments\n const compiledArgs = node.arguments.map(arg => this.compileNode(arg));\n \n // Use operation's compile method\n // For functions, the input is passed as the first compiled expression\n const inputExpr: CompiledExpression = {\n fn: (ctx) => ctx.focus || ctx.input || [],\n type: this.resolveType('Any'),\n isSingleton: false\n };\n \n return operation.compile(this, inputExpr, compiledArgs);\n }\n\n /**\n * Compiles a collection node\n */\n private compileCollection(node: CollectionNode): CompiledExpression {\n const compiledElements = node.elements.map(elem => this.compileNode(elem));\n \n return {\n fn: (ctx: RuntimeContext) => {\n const results: any[] = [];\n \n for (const element of compiledElements) {\n const elementResult = element.fn(ctx);\n results.push(...elementResult);\n }\n \n return results;\n },\n type: this.resolveType('Any'),\n isSingleton: false,\n source: `{${compiledElements.map(e => e.source || '').join(', ')}}`\n };\n }\n\n /**\n * Compiles an index node\n */\n private compileIndex(node: IndexNode): CompiledExpression {\n const expression = this.compileNode(node.expression);\n const index = this.compileNode(node.index);\n \n return {\n fn: (ctx: RuntimeContext) => {\n const exprResult = expression.fn(ctx);\n // Evaluate index in the original context\n const indexResult = index.fn(ctx);\n \n if (indexResult.length === 0) {\n return [];\n }\n \n const idx = toSingleton(indexResult);\n if (typeof idx !== 'number' || !Number.isInteger(idx)) {\n throw new EvaluationError('Index must be an integer', node.position);\n }\n \n if (idx < 0 || idx >= exprResult.length) {\n return [];\n }\n \n return [exprResult[idx]];\n },\n type: expression.type,\n isSingleton: true,\n source: `${expression.source || ''}[${index.source || ''}]`\n };\n }\n\n /**\n * Compiles a union node\n */\n private compileUnion(node: UnionNode): CompiledExpression {\n const compiledOperands = node.operands.map(op => this.compileNode(op));\n \n return {\n fn: (ctx: RuntimeContext) => {\n const results: any[] = [];\n const seen = new Set();\n \n for (const operand of compiledOperands) {\n // Create a fresh context copy for each operand\n // This prevents variable definitions from leaking between branches\n const operandCtx = RuntimeContextManager.copy(ctx);\n const operandResult = operand.fn(operandCtx);\n \n // Remove duplicates\n for (const item of operandResult) {\n const key = JSON.stringify(item);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(item);\n }\n }\n }\n \n return results;\n },\n type: this.resolveType('Any'),\n isSingleton: false,\n source: compiledOperands.map(o => o.source || '').join(' | ')\n };\n }\n\n /**\n * Compiles membership test (is operator)\n */\n private compileMembershipTest(node: MembershipTestNode): CompiledExpression {\n // Get the 'is' operator from registry\n const operation = Registry.getByToken(TokenType.IS, 'infix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError('is operator not found in registry', node.position);\n }\n \n const expression = this.compileNode(node.expression);\n const typeExpr: CompiledExpression = {\n fn: () => [node.targetType],\n type: this.resolveType('String'),\n isSingleton: true,\n source: node.targetType\n };\n \n try {\n return operation.compile(this, expression, [expression, typeExpr]);\n } catch (error: any) {\n // If the error doesn't have position, add it from the node\n if (error instanceof EvaluationError && !error.position) {\n error.position = node.position;\n }\n throw error;\n }\n }\n\n /**\n * Compiles type cast (as operator)\n */\n private compileTypeCast(node: TypeCastNode): CompiledExpression {\n // Get the 'as' operator from registry\n const operation = Registry.getByToken(TokenType.AS, 'infix');\n if (!operation || operation.kind !== 'operator') {\n throw new EvaluationError('as operator not found in registry', node.position);\n }\n \n const expression = this.compileNode(node.expression);\n const typeExpr: CompiledExpression = {\n fn: () => [node.targetType],\n type: this.resolveType('String'),\n isSingleton: true,\n source: node.targetType\n };\n \n try {\n return operation.compile(this, expression, [typeExpr]);\n } catch (error: any) {\n // If the error doesn't have position, add it from the node\n if (error instanceof EvaluationError && !error.position) {\n error.position = node.position;\n }\n throw error;\n }\n }\n\n /**\n * Compiles type reference - should not be evaluated directly\n */\n private compileTypeReference(node: TypeReferenceNode): CompiledExpression {\n // Type references are used in ofType() and similar functions\n // They should compile to return the type name as a string\n const typeName = node.typeName;\n return {\n fn: (ctx: RuntimeContext) => [typeName],\n type: this.resolveType('String'),\n isSingleton: true,\n source: typeName\n };\n }\n}\n\n/**\n * Helper function to compile a FHIRPath expression\n */\nexport function compile(expression: string | ASTNode): CompiledExpression {\n // Parse if string\n const ast = typeof expression === 'string' \n ? require('../parser').parse(expression)\n : expression;\n \n // Create compiler and compile\n const compiler = new Compiler();\n return compiler.compile(ast);\n}\n\n/**\n * Helper function to compile and evaluate a FHIRPath expression\n */\nexport function evaluateCompiled(\n expression: string | ASTNode, \n input: any, \n context?: RuntimeContext\n): any[] {\n // Compile the expression\n const compiled = compile(expression);\n \n // Convert input to collection\n const inputCollection = CollectionUtils.toCollection(input);\n \n // Create runtime context\n const runtimeContext: RuntimeContext = context || RuntimeContextManager.create(inputCollection);\n \n // Execute the compiled function\n return compiled.fn(runtimeContext);\n}","import type { \n ASTNode, \n LiteralNode, \n IdentifierNode, \n VariableNode,\n BinaryNode,\n UnaryNode,\n FunctionNode,\n CollectionNode,\n IndexNode,\n UnionNode,\n MembershipTestNode,\n TypeCastNode,\n TypeReferenceNode,\n TypeOrIdentifierNode,\n Position\n} from '../parser/ast';\nimport { NodeType } from '../parser/ast';\nimport { TokenType } from '../lexer/token';\nimport { parseForEvaluation } from '../api';\nimport type { \n ModelProvider, \n TypeRef, \n TypeAnalysisResult, \n TypeDiagnostic\n} from './types';\nimport { AnalysisMode } from './types';\nimport { Registry } from '../registry';\nimport type { TypeInfo as RegistryTypeInfo, Analyzer as IAnalyzer } from '../registry/types';\n\n// Type for node analyzer functions\ntype NodeAnalyzer = (node: any, inputType: TypeRef | undefined, inputIsSingleton: boolean) => AnalysisResult;\n\ninterface AnalysisResult {\n type: TypeRef | undefined;\n isSingleton: boolean;\n}\n\n/**\n * FHIRPath Type Analyzer - performs type analysis on AST nodes\n * Follows the same pattern as the interpreter but tracks types instead of values\n */\nexport class TypeAnalyzer implements IAnalyzer {\n private diagnostics: TypeDiagnostic[] = [];\n private currentPosition?: Position;\n \n // Object lookup for node analyzers (mirrors interpreter pattern)\n private readonly nodeAnalyzers: Record<NodeType, NodeAnalyzer> = {\n [NodeType.Literal]: this.analyzeLiteral.bind(this),\n [NodeType.Identifier]: this.analyzeIdentifier.bind(this),\n [NodeType.TypeOrIdentifier]: this.analyzeTypeOrIdentifier.bind(this),\n [NodeType.Variable]: this.analyzeVariable.bind(this),\n [NodeType.Binary]: this.analyzeBinary.bind(this),\n [NodeType.Unary]: this.analyzeUnary.bind(this),\n [NodeType.Function]: this.analyzeFunction.bind(this),\n [NodeType.Collection]: this.analyzeCollection.bind(this),\n [NodeType.Index]: this.analyzeIndex.bind(this),\n [NodeType.Union]: this.analyzeUnion.bind(this),\n [NodeType.MembershipTest]: this.analyzeMembershipTest.bind(this),\n [NodeType.TypeCast]: this.analyzeTypeCast.bind(this),\n [NodeType.TypeReference]: this.analyzeTypeReference.bind(this),\n [NodeType.Error]: this.analyzeError.bind(this),\n [NodeType.Incomplete]: this.analyzeIncomplete.bind(this),\n };\n \n constructor(\n private modelProvider: ModelProvider,\n private mode: AnalysisMode = AnalysisMode.Lenient\n ) {}\n \n // IAnalyzer interface implementation\n error(message: string): void {\n this.addDiagnostic('error', message, this.currentPosition);\n }\n \n warning(message: string): void {\n this.addDiagnostic('warning', message, this.currentPosition);\n }\n \n resolveType(typeName: string): TypeRef {\n return this.modelProvider.resolveType(typeName) || this.modelProvider.resolveType('Any')!;\n }\n \n /**\n * Analyze a FHIRPath expression\n */\n analyze(\n ast: ASTNode, \n inputType?: TypeRef,\n inputIsSingleton: boolean = true\n ): TypeAnalysisResult {\n this.diagnostics = [];\n \n const result = this.analyzeNode(ast, inputType, inputIsSingleton);\n \n return {\n ast,\n diagnostics: this.diagnostics,\n resultType: result.type,\n resultIsSingleton: result.isSingleton\n };\n }\n \n /**\n * Main analysis method - uses object lookup\n */\n private analyzeNode(\n node: ASTNode, \n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n const analyzer = this.nodeAnalyzers[node.type];\n \n if (!analyzer) {\n this.addDiagnostic('error', `Unknown node type: ${node.type}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n const result = analyzer(node, inputType, inputIsSingleton);\n \n // Annotate the node with type information\n node.resultType = result.type;\n node.isSingleton = result.isSingleton;\n \n return result;\n }\n \n private analyzeLiteral(node: LiteralNode): AnalysisResult {\n // If literal has operation reference from parser\n if (node.operation && node.operation.kind === 'literal') {\n const inputInfo: RegistryTypeInfo = { type: this.resolveType('Any'), isSingleton: true };\n this.currentPosition = node.position;\n const result = node.operation.analyze(this, inputInfo, []);\n return {\n type: result.type,\n isSingleton: result.isSingleton\n };\n }\n \n // Fallback for legacy literals\n let typeName: string;\n \n switch (node.valueType) {\n case 'string':\n typeName = 'String';\n break;\n case 'number':\n typeName = Number.isInteger(node.value) ? 'Integer' : 'Decimal';\n break;\n case 'boolean':\n typeName = 'Boolean';\n break;\n case 'date':\n typeName = 'Date';\n break;\n case 'time':\n typeName = 'Time';\n break;\n case 'datetime':\n typeName = 'DateTime';\n break;\n case 'null':\n // null is empty collection\n return { type: undefined, isSingleton: false };\n default:\n typeName = 'Any';\n }\n \n return {\n type: this.modelProvider.resolveType(typeName),\n isSingleton: true\n };\n }\n \n private analyzeIdentifier(\n node: IdentifierNode, \n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n if (!inputType) {\n // No input type - might be a type name or error\n const typeRef = this.modelProvider.resolveType(node.name);\n if (typeRef) {\n return { type: typeRef, isSingleton: true };\n }\n \n this.addDiagnostic('error', `Cannot navigate property '${node.name}' on empty input`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n // Property navigation\n const propInfo = this.modelProvider.getPropertyType(inputType, node.name);\n \n if (!propInfo) {\n this.addDiagnostic(\n this.mode === AnalysisMode.Strict ? 'error' : 'warning',\n `Property '${node.name}' not found on type '${this.modelProvider.getTypeName(inputType)}'`,\n node.position\n );\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n // If input is collection, result is always collection (flattening)\n return {\n type: propInfo.type,\n isSingleton: inputIsSingleton && propInfo.isSingleton\n };\n }\n \n private analyzeTypeOrIdentifier(\n node: TypeOrIdentifierNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // First try as type reference\n const typeRef = this.modelProvider.resolveType(node.name);\n if (typeRef && !inputType) {\n return { type: typeRef, isSingleton: true };\n }\n \n // Otherwise treat as identifier\n return this.analyzeIdentifier(node as any, inputType, inputIsSingleton);\n }\n \n private analyzeVariable(node: VariableNode): AnalysisResult {\n // For now, assume variables can be Any type\n // In a real implementation, we'd track variable types in context\n return {\n type: this.modelProvider.resolveType('Any'),\n isSingleton: node.name === '$index' // $index is always singleton\n };\n }\n \n private analyzeBinary(\n node: BinaryNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Special handling for dot operator - it's a pipeline\n if (node.operator === TokenType.DOT) {\n const leftResult = this.analyzeNode(node.left, inputType, inputIsSingleton);\n const rightResult = this.analyzeNode(node.right, leftResult.type, leftResult.isSingleton);\n return rightResult;\n }\n \n // Get operation from registry\n const operation = node.operation || Registry.getByToken(node.operator);\n if (!operation || operation.kind !== 'operator') {\n this.addDiagnostic('error', `Unknown operator: ${node.operator}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: true };\n }\n \n // Analyze operands\n const leftResult = this.analyzeNode(node.left, inputType, inputIsSingleton);\n const rightResult = this.analyzeNode(node.right, inputType, inputIsSingleton);\n \n // Convert to registry TypeInfo format\n const inputInfo: RegistryTypeInfo = { type: inputType || this.resolveType('Any'), isSingleton: inputIsSingleton };\n const leftInfo: RegistryTypeInfo = { type: leftResult.type || this.resolveType('Any'), isSingleton: leftResult.isSingleton };\n const rightInfo: RegistryTypeInfo = { type: rightResult.type || this.resolveType('Any'), isSingleton: rightResult.isSingleton };\n \n // Use operation's analyze method\n this.currentPosition = node.position;\n const result = operation.analyze(this, inputInfo, [leftInfo, rightInfo]);\n \n return {\n type: result.type,\n isSingleton: result.isSingleton\n };\n }\n \n private analyzeUnary(\n node: UnaryNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Get operation from registry\n const operation = node.operation || Registry.getByToken(node.operator);\n if (!operation || operation.kind !== 'operator') {\n this.addDiagnostic('error', `Unknown unary operator: ${node.operator}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: true };\n }\n \n // Analyze operand\n const operandResult = this.analyzeNode(node.operand, inputType, inputIsSingleton);\n \n // Convert to registry TypeInfo format\n const inputInfo: RegistryTypeInfo = { type: inputType || this.resolveType('Any'), isSingleton: inputIsSingleton };\n const operandInfo: RegistryTypeInfo = { type: operandResult.type || this.resolveType('Any'), isSingleton: operandResult.isSingleton };\n \n // Use operation's analyze method\n this.currentPosition = node.position;\n const result = operation.analyze(this, inputInfo, [operandInfo]);\n \n return {\n type: result.type,\n isSingleton: result.isSingleton\n };\n }\n \n private analyzeFunction(\n node: FunctionNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Extract function name\n let funcName: string;\n if (node.name.type === NodeType.Identifier) {\n funcName = (node.name as IdentifierNode).name;\n } else {\n this.addDiagnostic('error', 'Complex function names not yet supported', node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n // Get function from registry\n const operation = Registry.get(funcName);\n if (!operation || operation.kind !== 'function') {\n this.addDiagnostic('error', `Unknown function: ${funcName}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n // Analyze arguments\n const argResults = node.arguments.map(arg => this.analyzeNode(arg, inputType, inputIsSingleton));\n \n // Convert to registry TypeInfo format\n const inputInfo: RegistryTypeInfo = { type: inputType || this.resolveType('Any'), isSingleton: inputIsSingleton };\n const argInfos: RegistryTypeInfo[] = argResults.map(r => ({\n type: r.type || this.resolveType('Any'),\n isSingleton: r.isSingleton\n }));\n \n // Use operation's analyze method\n this.currentPosition = node.position;\n const result = operation.analyze(this, inputInfo, argInfos);\n \n return {\n type: result.type,\n isSingleton: result.isSingleton\n };\n }\n \n private analyzeCollection(\n node: CollectionNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n if (node.elements.length === 0) {\n // Empty collection\n return { type: undefined, isSingleton: false };\n }\n \n // Analyze all elements\n const elementTypes: TypeRef[] = [];\n \n for (const element of node.elements) {\n const result = this.analyzeNode(element, inputType, inputIsSingleton);\n if (result.type) {\n elementTypes.push(result.type);\n }\n }\n \n // Get common type\n const commonType = this.modelProvider.getCommonType?.(elementTypes) || this.modelProvider.resolveType('Any');\n \n return { type: commonType, isSingleton: false };\n }\n \n private analyzeIndex(\n node: IndexNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Analyze the expression being indexed\n const exprResult = this.analyzeNode(node.expression, inputType, inputIsSingleton);\n \n // Analyze the index expression\n const indexResult = this.analyzeNode(node.index, exprResult.type, exprResult.isSingleton);\n \n // Index must be Integer\n if (indexResult.type) {\n const typeName = this.modelProvider.getTypeName(indexResult.type);\n if (typeName !== 'Integer') {\n this.addDiagnostic('error', 'Index must be an integer', node.position);\n }\n }\n \n if (!indexResult.isSingleton) {\n this.addDiagnostic('error', 'Index must be singleton', node.position);\n }\n \n // Result is singleton of the expression type\n return { type: exprResult.type, isSingleton: true };\n }\n \n private analyzeUnion(\n node: UnionNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n const types: TypeRef[] = [];\n \n for (const operand of node.operands) {\n const result = this.analyzeNode(operand, inputType, inputIsSingleton);\n if (result.type) {\n types.push(result.type);\n }\n }\n \n const commonType = this.modelProvider.getCommonType?.(types) || this.modelProvider.resolveType('Any');\n \n return { type: commonType, isSingleton: false };\n }\n \n private analyzeMembershipTest(\n node: MembershipTestNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Analyze the expression\n const exprResult = this.analyzeNode(node.expression, inputType, inputIsSingleton);\n \n // Result is Boolean with same cardinality as input\n return {\n type: this.modelProvider.resolveType('Boolean'),\n isSingleton: exprResult.isSingleton\n };\n }\n \n private analyzeTypeCast(\n node: TypeCastNode,\n inputType: TypeRef | undefined,\n inputIsSingleton: boolean\n ): AnalysisResult {\n // Analyze the expression\n const exprResult = this.analyzeNode(node.expression, inputType, inputIsSingleton);\n \n // Resolve target type\n const targetType = this.modelProvider.resolveType(node.targetType);\n \n if (!targetType) {\n this.addDiagnostic('error', `Unknown type: ${node.targetType}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: exprResult.isSingleton };\n }\n \n // Result has target type with same cardinality\n return {\n type: targetType,\n isSingleton: exprResult.isSingleton\n };\n }\n \n private analyzeTypeReference(node: TypeReferenceNode): AnalysisResult {\n const typeRef = this.modelProvider.resolveType(node.typeName);\n \n if (!typeRef) {\n this.addDiagnostic('error', `Unknown type: ${node.typeName}`, node.position);\n return { type: this.modelProvider.resolveType('Any'), isSingleton: true };\n }\n \n return { type: typeRef, isSingleton: true };\n }\n \n private analyzeError(node: ASTNode): AnalysisResult {\n // Error nodes don't have meaningful types\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n private analyzeIncomplete(node: ASTNode): AnalysisResult {\n // Incomplete nodes don't have meaningful types\n return { type: this.modelProvider.resolveType('Any'), isSingleton: false };\n }\n \n private addDiagnostic(\n severity: 'error' | 'warning',\n message: string,\n position?: Position\n ) {\n this.diagnostics.push({ severity, message, position });\n }\n}\n\n/**\n * Helper function to analyze a FHIRPath expression\n */\nexport function analyzeFHIRPath(\n expression: string | ASTNode,\n modelProvider: ModelProvider,\n inputType?: TypeRef,\n mode: AnalysisMode = AnalysisMode.Lenient\n): TypeAnalysisResult {\n // Parse if string\n const ast = typeof expression === 'string'\n ? parseForEvaluation(expression)\n : expression;\n \n // Create analyzer and analyze\n const analyzer = new TypeAnalyzer(modelProvider, mode);\n return analyzer.analyze(ast, inputType);\n}","import type { ASTNode } from '../parser/ast';\nimport type { \n FHIRPathExpression as IFHIRPathExpression,\n CompiledExpression,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions,\n AnalysisResult\n} from './types';\nimport { Interpreter } from '../interpreter/interpreter';\nimport { Compiler } from '../compiler/compiler';\nimport { analyzeFHIRPath } from '../analyzer/analyzer';\nimport { RuntimeContextManager } from '../runtime/context';\nimport { pprint } from '../parser/pprint';\n\nexport class FHIRPathExpression implements IFHIRPathExpression {\n constructor(\n public readonly ast: ASTNode,\n private readonly originalExpression: string\n ) {}\n \n evaluate(input?: any, context?: EvaluationContext): any[] {\n const interpreter = new Interpreter();\n const inputArray = input === undefined ? [] : Array.isArray(input) ? input : [input];\n const ctx = this.createContext(context, inputArray);\n \n const result = interpreter.evaluate(this.ast, inputArray, ctx);\n \n return result.value;\n }\n \n compile(options?: CompileOptions): CompiledExpression {\n const compiler = new Compiler();\n const compiled = compiler.compile(this.ast);\n \n // Create the compiled function\n const fn = (input?: any, context?: EvaluationContext): any[] => {\n const inputArray = input === undefined ? [] : Array.isArray(input) ? input : [input];\n const ctx = this.createContext(context, inputArray);\n \n return compiled.fn(ctx);\n };\n \n // Add source property\n Object.defineProperty(fn, 'source', {\n value: options?.sourceMap ? this.originalExpression : this.toString(),\n writable: false,\n enumerable: true\n });\n \n return fn as CompiledExpression;\n }\n \n analyze(options?: AnalyzeOptions): AnalysisResult {\n try {\n // Create analyzer-compatible model provider\n const analyzerModelProvider = options?.modelProvider ? {\n resolveType: options.modelProvider.resolveType.bind(options.modelProvider),\n getPropertyType: (type: any, propName: string) => {\n const props = options.modelProvider!.getProperties(options.modelProvider!.getTypeName ? options.modelProvider!.getTypeName(type) : String(type));\n const prop = props.find(p => p.name === propName);\n if (!prop) return undefined;\n return {\n type: options.modelProvider!.resolveType(prop.type),\n isSingleton: !prop.isCollection\n };\n },\n isAssignable: (from: any, to: any) => {\n const hierarchy = options.modelProvider!.getTypeHierarchy(options.modelProvider!.getTypeName ? options.modelProvider!.getTypeName(from) : String(from));\n const toName = options.modelProvider!.getTypeName ? options.modelProvider!.getTypeName(to) : String(to);\n return hierarchy.includes(toName);\n },\n getTypeName: (type: any) => String(type)\n } : {\n resolveType: () => undefined,\n getPropertyType: () => undefined,\n isAssignable: () => false,\n getTypeName: () => 'unknown'\n };\n \n const result = analyzeFHIRPath(this.ast, analyzerModelProvider);\n \n return {\n type: result.resultType || { kind: 'unknown' },\n isSingleton: result.resultIsSingleton || false,\n errors: result.diagnostics.filter(d => d.severity === 'error').map(d => ({\n message: d.message,\n location: d.position ? {\n line: d.position.line,\n column: d.position.column,\n offset: d.position.offset,\n length: 1 // We don't have length info in Position\n } : undefined,\n code: 'ANALYSIS_ERROR'\n })),\n warnings: result.diagnostics.filter(d => d.severity === 'warning').map(d => ({\n message: d.message,\n location: d.position ? {\n line: d.position.line,\n column: d.position.column,\n offset: d.position.offset,\n length: 1\n } : undefined,\n code: 'ANALYSIS_WARNING'\n }))\n };\n } catch (error) {\n return {\n type: { kind: 'unknown' },\n isSingleton: false,\n errors: [{\n message: error instanceof Error ? error.message : String(error),\n code: 'ANALYSIS_ERROR'\n }],\n warnings: []\n };\n }\n }\n \n toString(): string {\n return pprint(this.ast);\n }\n \n private createContext(evalContext?: EvaluationContext, input: any[] = []) {\n let ctx = RuntimeContextManager.create(input);\n \n if (evalContext?.variables) {\n for (const [name, value] of Object.entries(evalContext.variables)) {\n ctx = RuntimeContextManager.setVariable(ctx, name, Array.isArray(value) ? value : [value]);\n }\n }\n \n if (evalContext?.environment) {\n // Environment variables are stored as regular variables with appropriate prefix\n for (const [name, value] of Object.entries(evalContext.environment)) {\n if (name.startsWith('$')) {\n // Special environment variables\n const varName = name.substring(1); // Remove $ prefix\n ctx = RuntimeContextManager.setSpecialVariable(ctx, varName, Array.isArray(value) ? value : [value]);\n } else {\n // Regular environment variables\n ctx = RuntimeContextManager.setVariable(ctx, name, Array.isArray(value) ? value : [value]);\n }\n }\n }\n \n // Store custom functions in context for interpreter to access\n if (evalContext?.customFunctions) {\n // TODO: Custom functions need to be implemented through the registry\n // For now, we'll store them in env\n (ctx as any).customFunctions = evalContext.customFunctions;\n }\n \n return ctx;\n }\n}","import type { \n RegistryAPI, \n OperationMetadata, \n OperationInfo \n} from './types';\nimport { Registry } from '../registry/registry';\nimport type { Operation } from '../registry/types';\n\nexport class PublicRegistryAPI implements RegistryAPI {\n listFunctions(): OperationMetadata[] {\n return Registry.getAllFunctions().map(op => this.toMetadata(op));\n }\n \n listOperators(): OperationMetadata[] {\n const operators = [\n ...Registry.getOperatorsByForm('infix'),\n ...Registry.getOperatorsByForm('prefix'),\n ...Registry.getOperatorsByForm('postfix')\n ];\n return operators.map(op => this.toMetadata(op));\n }\n \n listAllOperations(): OperationMetadata[] {\n return Registry.getAllOperations().map(op => this.toMetadata(op));\n }\n \n hasOperation(name: string): boolean {\n return Registry.get(name) !== undefined;\n }\n \n hasFunction(name: string): boolean {\n const op = Registry.get(name);\n return op !== undefined && op.kind === 'function';\n }\n \n hasOperator(symbol: string): boolean {\n const op = Registry.get(symbol);\n return op !== undefined && op.kind === 'operator';\n }\n \n getOperationInfo(name: string): OperationInfo | undefined {\n const op = Registry.get(name);\n if (!op) return undefined;\n \n return this.toOperationInfo(op);\n }\n \n canRegisterFunction(name: string): boolean {\n // Check if name is valid and not already taken\n if (!name || typeof name !== 'string') return false;\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) return false;\n \n // Check if already exists as built-in\n return !this.hasOperation(name);\n }\n \n private toMetadata(op: Operation): OperationMetadata {\n return {\n name: op.name,\n kind: op.kind,\n syntax: {\n notation: op.syntax.notation\n }\n };\n }\n \n private toOperationInfo(op: Operation): OperationInfo {\n const info: OperationInfo = {\n ...this.toMetadata(op),\n signature: {}\n };\n \n // Add input signature for functions\n if (op.kind === 'function' && op.signature.input) {\n info.signature.input = {\n types: this.extractTypes(op.signature.input.types),\n cardinality: op.signature.input.cardinality\n };\n }\n \n // Add parameters\n if ('parameters' in op.signature && op.signature.parameters && op.signature.parameters.length > 0) {\n info.signature.parameters = op.signature.parameters.map((param: any) => ({\n name: param.name,\n types: this.extractTypes(param.types),\n cardinality: param.cardinality,\n optional: param.optional\n }));\n }\n \n // Add output signature\n if (op.signature.output) {\n info.signature.output = {\n type: typeof op.signature.output.type === 'string' \n ? op.signature.output.type \n : 'dynamic',\n cardinality: typeof op.signature.output.cardinality === 'string'\n ? (op.signature.output.cardinality === 'all-singleton' ? 'singleton' : op.signature.output.cardinality as any)\n : undefined\n };\n }\n \n // Add description if available (for now, operations don't have description in the type)\n // TODO: Add description to Operation type if needed\n \n // Add examples if available (for now, operations don't have examples in the type)\n // TODO: Add examples to Operation type if needed\n \n return info;\n }\n \n private extractTypes(constraint?: any): string[] | undefined {\n if (!constraint) return undefined;\n \n if (constraint.kind === 'primitive' || constraint.kind === 'class') {\n return constraint.types;\n } else if (constraint.kind === 'union' && constraint.types) {\n return constraint.types;\n } else if (constraint.kind === 'any') {\n return ['any'];\n }\n \n return undefined;\n }\n}\n\n// Singleton instance\nexport const publicRegistry = new PublicRegistryAPI();","import type { \n FHIRPathExpression,\n EvaluationContext,\n InspectResult,\n InspectOptions,\n ErrorInfo,\n WarningInfo\n} from './types';\nimport { parseForEvaluation } from './index';\nimport { FHIRPathExpression as Expression } from './expression';\nimport { Interpreter } from '../interpreter/interpreter';\nimport { RuntimeContextManager } from '../runtime/context';\nimport { createDebugContext, isDebugContext } from '../runtime/debug-context';\nimport { FHIRPathError } from './errors';\n\n/**\n * Inspect a FHIRPath expression, providing rich debugging information\n * including traces, AST, execution time, and optionally step-by-step evaluation\n */\nexport function inspect(\n expression: string | FHIRPathExpression,\n input?: any,\n context?: EvaluationContext,\n options?: InspectOptions\n): InspectResult {\n const startTime = performance.now();\n \n // Parse if string\n const expr = typeof expression === 'string' \n ? new Expression(parseForEvaluation(expression), expression)\n : expression;\n const exprString = typeof expression === 'string' ? expression : expr.toString();\n \n // Prepare input (default to empty array)\n const inputValue = input === undefined ? [] : Array.isArray(input) ? input : [input];\n \n // Create runtime context\n const runtimeContext = RuntimeContextManager.create(inputValue, context?.variables);\n \n // Convert to debug context\n const debugContext = createDebugContext(runtimeContext, options);\n \n // Initialize result\n const errors: ErrorInfo[] = [];\n const warnings: WarningInfo[] = [];\n let result: any[] = [];\n \n try {\n // Create interpreter\n const interpreter = new Interpreter();\n \n // Evaluate with debug context\n const evalResult = interpreter.evaluate(expr.ast, inputValue, debugContext);\n result = evalResult.value;\n } catch (error) {\n // Capture error information\n const errorInfo: ErrorInfo = {\n message: error instanceof Error ? error.message : String(error),\n type: error instanceof FHIRPathError ? error.name : 'Error'\n };\n \n if (error instanceof Error && error.stack) {\n errorInfo.stack = error.stack;\n }\n \n errors.push(errorInfo);\n \n // Re-throw if it's a critical error\n if (error instanceof FHIRPathError && error.name === 'ParseError') {\n throw error;\n }\n }\n \n const executionTime = performance.now() - startTime;\n \n // Build result\n const inspectResult: InspectResult = {\n result,\n expression: exprString,\n ast: expr.ast,\n executionTime,\n traces: debugContext.traces\n };\n \n // Add optional fields\n if (debugContext.steps && debugContext.steps.length > 0) {\n inspectResult.evaluationSteps = debugContext.steps;\n }\n \n if (errors.length > 0) {\n inspectResult.errors = errors;\n }\n \n if (warnings.length > 0) {\n inspectResult.warnings = warnings;\n }\n \n return inspectResult;\n}","import type {\n FHIRPathBuilder,\n FHIRPathAPI,\n ModelProvider,\n CustomFunction,\n FHIRPathExpression,\n CompiledExpression,\n AnalysisResult,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions,\n InspectResult,\n InspectOptions\n} from './types';\nimport { parseForEvaluation, evaluate, compile, analyze, inspect } from './index';\nimport { FHIRPathExpression as Expression } from './expression';\nimport { PublicRegistryAPI } from './registry';\nimport { Registry } from '../registry/registry';\nimport { invalidArgument } from './errors';\n\nexport class FHIRPath {\n static builder(): FHIRPathBuilder {\n return new Builder();\n }\n}\n\nclass Builder implements FHIRPathBuilder {\n private modelProvider?: ModelProvider;\n private customFunctions: Map<string, CustomFunction> = new Map();\n private variables: Map<string, any> = new Map();\n \n withModelProvider(provider: ModelProvider): this {\n this.modelProvider = provider;\n return this;\n }\n \n withCustomFunction(name: string, fn: CustomFunction): this {\n // Validate function name\n if (!name || typeof name !== 'string') {\n throw invalidArgument('Function name must be a non-empty string');\n }\n \n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw invalidArgument(`Invalid function name: ${name}. Must start with letter or underscore, followed by letters, numbers, or underscores`);\n }\n \n // Check for conflicts with built-ins\n if (Registry.get(name)) {\n throw invalidArgument(`Cannot override built-in operation: ${name}`);\n }\n \n this.customFunctions.set(name, fn);\n return this;\n }\n \n withVariable(name: string, value: any): this {\n if (!name || typeof name !== 'string') {\n throw invalidArgument('Variable name must be a non-empty string');\n }\n \n this.variables.set(name, value);\n return this;\n }\n \n build(): FHIRPathAPI {\n return new BuiltAPI(\n this.modelProvider,\n this.customFunctions,\n this.variables\n );\n }\n}\n\nclass BuiltAPI implements FHIRPathAPI {\n public readonly registry: PublicRegistryAPI;\n \n constructor(\n private readonly modelProvider: ModelProvider | undefined,\n private readonly customFunctions: Map<string, CustomFunction>,\n private readonly defaultVariables: Map<string, any>\n ) {\n // Create a registry wrapper that includes custom functions\n this.registry = new BuiltRegistryAPI(this.customFunctions);\n }\n \n parse(expression: string): FHIRPathExpression {\n const ast = parseForEvaluation(expression);\n return new Expression(ast, expression);\n }\n \n evaluate(expression: string | FHIRPathExpression, input?: any): any[] {\n const context = this.createContext();\n return evaluate(expression, input, context);\n }\n \n compile(expression: string | FHIRPathExpression, options?: CompileOptions): CompiledExpression {\n // TODO: Integrate custom functions into compiled code\n return compile(expression, options);\n }\n \n analyze(expression: string | FHIRPathExpression, options?: AnalyzeOptions): AnalysisResult {\n const mergedOptions: AnalyzeOptions = {\n ...options,\n modelProvider: options?.modelProvider || this.modelProvider\n };\n return analyze(expression, mergedOptions);\n }\n \n inspect(expression: string | FHIRPathExpression, input?: any, context?: EvaluationContext, options?: InspectOptions): InspectResult {\n const mergedContext = context ? { ...this.createContext(), ...context } : this.createContext();\n return inspect(expression, input, mergedContext, options);\n }\n \n private createContext(): EvaluationContext {\n const context: EvaluationContext = {};\n \n if (this.modelProvider) {\n context.modelProvider = this.modelProvider;\n }\n \n if (this.defaultVariables.size > 0) {\n context.variables = {};\n for (const [name, value] of this.defaultVariables) {\n context.variables[name] = value;\n }\n }\n \n if (this.customFunctions.size > 0) {\n context.customFunctions = {};\n for (const [name, fn] of this.customFunctions) {\n context.customFunctions[name] = fn;\n }\n }\n \n return context;\n }\n}\n\n// Extended registry that includes custom functions\nclass BuiltRegistryAPI extends PublicRegistryAPI {\n constructor(private customFunctions: Map<string, CustomFunction>) {\n super();\n }\n \n override hasFunction(name: string): boolean {\n return super.hasFunction(name) || this.customFunctions.has(name);\n }\n \n override hasOperation(name: string): boolean {\n return super.hasOperation(name) || this.customFunctions.has(name);\n }\n \n override canRegisterFunction(name: string): boolean {\n // Can't register if it conflicts with built-ins or already registered custom\n return super.canRegisterFunction(name) && !this.customFunctions.has(name);\n }\n}"]}