@atomic-ehr/fhirpath 0.0.1-canary.35b105d.20250724165800
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +307 -0
- package/dist/index.d.ts +225 -0
- package/dist/index.js +8185 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
- package/src/analyzer/analyzer.ts +486 -0
- package/src/analyzer/model-provider.ts +244 -0
- package/src/analyzer/schemas/index.ts +2 -0
- package/src/analyzer/schemas/types.ts +40 -0
- package/src/analyzer/types.ts +142 -0
- package/src/api/builder.ts +148 -0
- package/src/api/errors.ts +134 -0
- package/src/api/expression.ts +152 -0
- package/src/api/index.ts +57 -0
- package/src/api/registry.ts +128 -0
- package/src/api/types.ts +154 -0
- package/src/compiler/compiler.ts +579 -0
- package/src/compiler/index.ts +2 -0
- package/src/compiler/prototype-context-adapter.ts +99 -0
- package/src/compiler/types.ts +23 -0
- package/src/index.ts +52 -0
- package/src/interpreter/README.md +78 -0
- package/src/interpreter/interpreter.ts +485 -0
- package/src/interpreter/types.ts +110 -0
- package/src/lexer/char-tables.ts +37 -0
- package/src/lexer/errors.ts +31 -0
- package/src/lexer/index.ts +5 -0
- package/src/lexer/lexer.ts +745 -0
- package/src/lexer/token.ts +104 -0
- package/src/parser/ast.ts +123 -0
- package/src/parser/index.ts +3 -0
- package/src/parser/parser.ts +701 -0
- package/src/parser/pprint.ts +169 -0
- package/src/registry/default-analyzers.ts +257 -0
- package/src/registry/default-compilers.ts +31 -0
- package/src/registry/index.ts +93 -0
- package/src/registry/operations/arithmetic.ts +506 -0
- package/src/registry/operations/collection.ts +425 -0
- package/src/registry/operations/comparison.ts +432 -0
- package/src/registry/operations/existence.ts +703 -0
- package/src/registry/operations/filtering.ts +358 -0
- package/src/registry/operations/literals.ts +341 -0
- package/src/registry/operations/logical.ts +402 -0
- package/src/registry/operations/math.ts +128 -0
- package/src/registry/operations/membership.ts +132 -0
- package/src/registry/operations/string.ts +507 -0
- package/src/registry/operations/subsetting.ts +174 -0
- package/src/registry/operations/type-checking.ts +162 -0
- package/src/registry/operations/type-conversion.ts +404 -0
- package/src/registry/operations/type-operators.ts +307 -0
- package/src/registry/operations/utility.ts +542 -0
- package/src/registry/registry.ts +146 -0
- package/src/registry/types.ts +161 -0
- package/src/registry/utils/evaluation-helpers.ts +93 -0
- package/src/registry/utils/index.ts +3 -0
- package/src/registry/utils/type-system.ts +173 -0
- package/src/runtime/context.ts +179 -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/registry/operations/type-operators.ts","../src/registry/operations/literals.ts","../src/runtime/context.ts","../src/registry/operations/existence.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/parser.ts","../src/parser/pprint.ts","../src/parser/index.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/errors.ts","../src/api/registry.ts","../src/api/builder.ts"],"names":["PrimitiveType","rightBool","TypeSystem","children","init_types","init_registry","op","NodeType","precedence","right","init_parser","leftResult","rightResult","evaluatedArgs","left","ErrorCode","parse"],"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// Re-export RuntimeContext as Context for backward compatibility\nexport type { RuntimeContext as Context } from '../runtime/context';\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: 5,\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: 5,\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: 6,\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: 6,\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: 6,\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: 6,\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: 10, // High precedence for unary operators\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: 10, // High precedence for unary operators\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: 5,\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 } from '../types';\nimport { defaultOperatorAnalyze } 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,\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,\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 notOperator: Operator = {\n name: 'not',\n kind: 'operator',\n \n syntax: {\n form: 'prefix',\n token: TokenType.NOT,\n precedence: 10, // High precedence for unary operators\n notation: 'not a'\n },\n \n signature: {\n parameters: [\n { name: 'operand', types: { kind: 'any' }, cardinality: 'any' }\n ],\n output: {\n type: 'Boolean',\n cardinality: 'preserve-input'\n },\n propagatesEmpty: false // not empty = true\n },\n \n analyze: defaultOperatorAnalyze,\n \n evaluate: (interpreter, context, input, operand) => {\n if (operand.length === 0) {\n // not empty = true\n return { value: [true], context };\n }\n \n // Apply not to each element\n const result = operand.map((item: any) => !toBoolean(item));\n return { value: result, context };\n },\n \n compile: (compiler, input, args) => ({\n fn: (ctx) => {\n const operand = args[0]?.fn(ctx) || [];\n if (operand.length === 0) return [true];\n return operand.map((item: any) => !toBoolean(item));\n },\n type: compiler.resolveType('Boolean'),\n isSingleton: args[0]?.isSingleton ?? false,\n source: `not ${args[0]?.source || ''}`\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,\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, // 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 notOperator,\n xorOperator,\n impliesOperator\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: 9,\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: 9,\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: 8,\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: 8,\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: 8,\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: 8,\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: 9,\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: 9,\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: 10,\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: 10,\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];","import { TokenType } from '../../lexer/token';\nimport type { Operator } from '../types';\nimport type { Analyzer, TypeInfo } from '../types';\nimport { EvaluationError } from '../../interpreter/types';\nimport type { Context, EvaluationResult } from '../../interpreter/types';\nimport type { CompiledExpression } from '../../compiler/types';\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: 6,\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({ input: [], focus: [], env: {} });\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: 6,\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 { Context } from '../interpreter/types';\n\n/**\n * Unified runtime context that works with both interpreter and compiler.\n * Uses prototype-based inheritance for efficient context copying.\n */\nexport interface RuntimeContext {\n input: any[];\n focus: any[];\n env: {\n $this?: any[];\n $index?: number;\n $total?: any[];\n $context?: any[];\n $resource?: any[];\n $rootResource?: any[];\n [key: string]: any;\n };\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[], initialEnv?: Record<string, any>): RuntimeContext {\n const context = Object.create(null) as RuntimeContext;\n \n context.input = input;\n context.focus = input;\n \n // Create env with null prototype to avoid pollution\n context.env = Object.create(null);\n if (initialEnv) {\n Object.assign(context.env, initialEnv);\n }\n \n // Set root context variables\n context.env.$context = input;\n context.env.$resource = input;\n context.env.$rootResource = input;\n \n // Create variables object\n context.variables = Object.create(null);\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 env that inherits from parent's env\n newContext.env = Object.create(context.env);\n \n // Create child variables that inherit from parent's variables\n if (context.variables) {\n newContext.variables = Object.create(context.variables);\n }\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 iterator context ($this, $index)\n */\n static withIterator(\n context: RuntimeContext, \n item: any, \n index: number\n ): RuntimeContext {\n const newContext = this.copy(context);\n newContext.env.$this = [item];\n newContext.env.$index = index;\n newContext.input = [item];\n newContext.focus = [item];\n return newContext;\n }\n\n /**\n * Set a variable in the context\n */\n static setVariable(context: RuntimeContext, name: string, value: any[]): RuntimeContext {\n const newContext = this.copy(context);\n if (!newContext.variables) {\n newContext.variables = Object.create(null);\n }\n newContext.variables![name] = value;\n return newContext;\n }\n\n /**\n * Get a variable from context (handles special variables too)\n */\n static getVariable(context: RuntimeContext, name: string): any[] | undefined {\n // Remove % prefix if present\n const varName = name.startsWith('%') ? name.substring(1) : name;\n \n // Check special variables first\n switch (varName) {\n case 'context':\n return context.env.$context || context.input;\n case 'resource':\n return context.env.$resource || context.input;\n case 'rootResource':\n return context.env.$rootResource || context.input;\n default:\n // Check user-defined variables\n return context.variables?.[varName];\n }\n }\n\n /**\n * Convert from interpreter Context to RuntimeContext\n */\n static fromContext(context: Context, input: any[]): RuntimeContext {\n const rtContext = this.create(input);\n \n // Copy variables\n if (context.variables) {\n rtContext.variables = Object.create(context.variables);\n }\n \n // Copy environment\n Object.assign(rtContext.env, context.env);\n \n // Copy root variables\n if ((context as any).$context) rtContext.env.$context = (context as any).$context;\n if ((context as any).$resource) rtContext.env.$resource = (context as any).$resource;\n if ((context as any).$rootResource) rtContext.env.$rootResource = (context as any).$rootResource;\n \n return rtContext;\n }\n\n /**\n * Convert from RuntimeContext to interpreter Context\n */\n static toContext(rtContext: RuntimeContext): Context {\n const context = Object.create(null) as Context;\n \n // Copy variables\n context.variables = rtContext.variables || Object.create(null);\n \n // Extract env variables\n context.env = {\n $this: rtContext.env.$this,\n $index: rtContext.env.$index,\n $total: rtContext.env.$total\n };\n \n // Extract root variables\n (context as any).$context = rtContext.env.$context;\n (context as any).$resource = rtContext.env.$resource;\n (context as any).$rootResource = rtContext.env.$rootResource;\n \n return context;\n }\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 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 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 const iterContext = RuntimeContextManager.withIterator(context, item, i);\n iterContext.env.$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: false\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 const condResult = interpreter.evaluate(condition, input, context);\n \n if (isTruthy(condResult.value)) {\n return interpreter.evaluate(thenBranch, input, condResult.context);\n } else {\n return interpreter.evaluate(elseBranch, input, condResult.context);\n }\n },\n \n compile: (compiler, input, args) => {\n const [condExpr, thenExpr, elseExpr] = args;\n \n if (!condExpr || !thenExpr || !elseExpr) {\n throw new Error('iif() requires condition, then, and else expressions');\n }\n \n return {\n fn: (ctx) => {\n const inputVal = input.fn(ctx);\n const condCtx = RuntimeContextManager.withInput(ctx, inputVal);\n const condResult = condExpr.fn(condCtx);\n \n if (isTruthy(condResult)) {\n const thenCtx = RuntimeContextManager.withInput(ctx, inputVal);\n return thenExpr.fn(thenCtx);\n } else {\n const elseCtx = RuntimeContextManager.withInput(ctx, inputVal);\n return elseExpr.fn(elseCtx);\n }\n },\n type: compiler.resolveType('Any'),\n isSingleton: false,\n source: `${input.source || ''}.iif(${condExpr.source || ''}, ${thenExpr.source || ''}, ${elseExpr.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 // Check if the variable is a system variable\n const systemVariables = ['context', 'resource', 'rootResource', 'ucum', 'sct', 'loinc'];\n if (systemVariables.includes(varName)) {\n // Return empty result for system variable redefinition\n return { value: [], context };\n }\n \n // Check if the variable is already defined at the current scope level\n // We only check hasOwnProperty to detect redefinition at the same scope\n if (context.variables && Object.prototype.hasOwnProperty.call(context.variables, varName)) {\n // Return empty result for variable redefinition in the same scope\n return { value: [], context };\n }\n \n let value: any[];\n \n if (valueExpr) {\n // Create a new context where $this refers to the input\n const valueContext = RuntimeContextManager.copy(context);\n valueContext.env = { ...valueContext.env, $this: input };\n \n const result = interpreter.evaluate(valueExpr, input, valueContext);\n value = result.value;\n const newContext = RuntimeContextManager.setVariable(result.context, varName, value);\n return { value: input, context: newContext };\n } else {\n // If no value expression is provided, use the input collection\n value = input;\n const newContext = RuntimeContextManager.setVariable(context, varName, value);\n return { value: input, context: newContext };\n }\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({ input: [], focus: [], env: {} }) || [];\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 the variable is a system variable\n const systemVariables = ['context', 'resource', 'rootResource', 'ucum', 'sct', 'loinc'];\n if (systemVariables.includes(varName)) {\n // Return empty result for system variable redefinition\n return [];\n }\n \n // Check if the variable is already defined\n // Since we're modifying ctx.env in place, we need to check if it exists\n if (varName in ctx.env) {\n // Return empty result for variable redefinition\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 const valueCtx = RuntimeContextManager.withInput(ctx, inputVal);\n valueCtx.env.$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 // IMPORTANT: We need to modify the context object that was passed in\n // so that subsequent operations can see the variable\n // This is done by modifying the env object in place\n ctx.env[varName] = value;\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, nameExpr, selectorExpr) => {\n let values = input;\n \n if (selectorExpr) {\n const result = interpreter.evaluate(selectorExpr, input, context);\n values = result.value;\n }\n \n console.log(`[TRACE] ${nameExpr || 'trace'}:`, values);\n \n return { value: input, context };\n },\n \n compile: defaultFunctionCompile\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: 13, // Lower precedence than most operators\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 } 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 { \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 ...comparisonOperators,\n ...membershipOperators,\n ...typeOperators,\n ...collectionOperators,\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 } from '../lexer/token';\n\n// Core AST Node Interface\nexport interface ASTNode {\n type: NodeType;\n position: Position;\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\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}","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 NodeType\n} from './ast';\nimport { Registry } from '../registry';\n\nexport class ParseError extends Error {\n constructor(\n message: string,\n public position: Position,\n public token: Token\n ) {\n super(message);\n }\n}\n\n// Precedence levels for reference (from spec)\n// INVOCATION: 1, // . (dot), function calls\n// POSTFIX: 2, // [] indexing\n// UNARY: 3, // unary +, -, not\n// MULTIPLICATIVE: 4, // *, /, div, mod\n// ADDITIVE: 5, // +, -, &\n// TYPE: 6, // is, as\n// UNION: 7, // |\n// RELATIONAL: 8, // <, >, <=, >=\n// EQUALITY: 9, // =, ~, !=, !~\n// MEMBERSHIP: 10, // in, contains\n// AND: 11, // and\n// OR: 12, // or, xor\n// IMPLIES: 13, // implies\n\nexport class FHIRPathParser {\n private tokens: Token[];\n private current: number = 0;\n \n constructor(input: string | Token[]) {\n if (typeof input === 'string') {\n this.tokens = lex(input); // Assuming lex function from lexer\n } else {\n this.tokens = input;\n }\n this.current = 0;\n }\n \n // Main entry point\n parse(): ASTNode {\n const ast = this.expression();\n if (!this.isAtEnd()) {\n throw this.error(\"Unexpected token after expression\");\n }\n return ast;\n }\n \n // Pratt parser for expressions\n private expression(minPrecedence: number = 14): ASTNode {\n let left = this.primary();\n \n while (!this.isAtEnd()) {\n // Handle postfix operators first\n if (this.check(TokenType.LBRACKET) && minPrecedence >= 2) { // 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 >= 1) { // INVOCATION precedence\n const dotToken = this.peek();\n const precedence = this.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 = this.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 // Handle registry-based literals\n if (this.match(TokenType.LITERAL)) {\n const token = this.previous();\n return {\n type: NodeType.Literal,\n value: token.literalValue ?? token.value,\n valueType: this.inferLiteralType(token.literalValue ?? token.value),\n raw: token.value,\n operation: token.operation,\n position: token.position\n } as LiteralNode;\n }\n \n // Handle legacy literals\n if (this.match(TokenType.NUMBER)) {\n const token = this.previous();\n return {\n type: NodeType.Literal,\n value: parseFloat(token.value),\n valueType: 'number',\n position: token.position\n } as LiteralNode;\n }\n if (this.match(TokenType.STRING)) {\n const token = this.previous();\n return {\n type: NodeType.Literal,\n value: token.value,\n valueType: 'string',\n position: token.position\n } as LiteralNode;\n }\n if (this.match(TokenType.TRUE, TokenType.FALSE)) {\n const token = this.previous();\n return {\n type: NodeType.Literal,\n value: token.type === TokenType.TRUE,\n valueType: 'boolean',\n position: token.position\n } as LiteralNode;\n }\n if (this.match(TokenType.NULL)) {\n return {\n type: NodeType.Literal,\n value: null,\n valueType: 'null',\n position: this.previous().position\n } as LiteralNode;\n }\n \n // Handle variables\n if (this.match(TokenType.THIS)) {\n return {\n type: NodeType.Variable,\n name: '$this',\n position: this.previous().position\n } as VariableNode;\n }\n if (this.match(TokenType.INDEX)) {\n return {\n type: NodeType.Variable,\n name: '$index',\n position: this.previous().position\n } as VariableNode;\n }\n if (this.match(TokenType.TOTAL)) {\n return {\n type: NodeType.Variable,\n name: '$total',\n position: this.previous().position\n } as VariableNode;\n }\n if (this.match(TokenType.ENV_VAR)) {\n return {\n type: NodeType.Variable,\n name: this.previous().value,\n position: this.previous().position\n } as VariableNode;\n }\n \n // Handle dates/times\n if (this.match(TokenType.DATE, TokenType.DATETIME, TokenType.TIME)) {\n const token = this.previous();\n return {\n type: NodeType.Literal,\n value: token.value,\n valueType: token.type === TokenType.DATE ? 'date' : \n token.type === TokenType.TIME ? 'time' : 'datetime',\n position: token.position\n } as LiteralNode;\n }\n \n // Handle grouping\n if (this.match(TokenType.LPAREN)) {\n const expr = this.expression();\n this.consume(TokenType.RPAREN, \"Expected ')' after expression\");\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 startPos = this.previous().position;\n const elements: ASTNode[] = [];\n \n if (!this.check(TokenType.RBRACE)) {\n do {\n elements.push(this.expression());\n } while (this.match(TokenType.COMMA));\n }\n \n this.consume(TokenType.RBRACE, \"Expected '}' after collection elements\");\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 throw this.error(\"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}`);\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\").value;\n this.consume(TokenType.RPAREN, \"Expected ')' after type name\");\n } else {\n // Regular is TypeName syntax\n typeName = this.consume(TokenType.IDENTIFIER, \"Expected type name\").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 // 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 // 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 right = this.primary();\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 const associativity = this.isRightAssociative(op) ? 0 : -1;\n const right = this.expression(precedence + associativity);\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 this.consume(TokenType.LPAREN, \"Expected '(' after function\");\n \n const args: ASTNode[] = [];\n \n if (!this.check(TokenType.RPAREN)) {\n do {\n args.push(this.expression());\n } while (this.match(TokenType.COMMA));\n }\n \n this.consume(TokenType.RPAREN, \"Expected ')' after arguments\");\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 this.consume(TokenType.LBRACKET, \"Expected '['\");\n const index = this.expression();\n this.consume(TokenType.RBRACKET, \"Expected ']'\");\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\");\n const typeName = this.consume(TokenType.IDENTIFIER, \"Expected type name\").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 (high precedence = low number)\n private getPrecedence(token: Token): number {\n // Special case for DOT which might not be in registry yet\n if (token.type === TokenType.DOT) return 1;\n \n // Use registry for all other operators\n const registryPrecedence = Registry.getPrecedence(token.type);\n \n // Registry uses standard convention (higher number = higher precedence)\n // Parser uses inverted convention (lower number = higher precedence)\n // So we need to invert the value\n if (registryPrecedence === 0) return 0; // No precedence\n \n // The Registry precedence values seem to be inverted from FHIRPath spec\n // We need to map them correctly:\n // Registry -> Parser (lower is higher precedence)\n // 1 (implies) -> 13\n // 2 (or) -> 12 \n // 3 (and) -> 11\n // 5 (additive) -> 5\n // 6 (multiplicative, type) -> 4\n // 8 (relational) -> 8\n // 9 (equality) -> 9\n // 10 (membership, unary) -> 10 or 3\n // 13 (union) -> 7\n \n // For now, use the simple inversion but adjust for proper ordering\n // Multiplicative (6) should have higher precedence than comparison (8-9)\n // So we need a different mapping\n const precedenceMap: Record<number, number> = {\n 1: 13, // implies - lowest\n 2: 12, // or, xor\n 3: 11, // and\n 5: 5, // additive (+, -, &)\n 6: 4, // multiplicative (*, /, div, mod) and type (is, as)\n 8: 8, // relational (<, >, <=, >=)\n 9: 9, // equality (=, !=, ~, !~)\n 10: 10, // membership (in, contains) - but unary should be 3\n 13: 7 // union (|)\n };\n \n return precedenceMap[registryPrecedence] ?? (15 - registryPrecedence);\n }\n \n // Helper to infer literal type from value\n private 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 \n // Helper methods\n private 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 private check(type: TokenType): boolean {\n if (this.isAtEnd()) return false;\n return this.peek().type === type;\n }\n \n private advance(): Token {\n if (!this.isAtEnd()) this.current++;\n return this.previous();\n }\n \n private isAtEnd(): boolean {\n return this.peek().type === TokenType.EOF;\n }\n \n private peek(): Token {\n return this.tokens[this.current]!;\n }\n \n private previous(): Token {\n return this.tokens[this.current - 1]!;\n }\n \n private consume(type: TokenType, message: string): Token {\n if (this.check(type)) return this.advance();\n throw this.error(message);\n }\n \n private error(message: string): ParseError {\n const pos = this.peek().position;\n const fullMessage = `${message} at line ${pos.line}, column ${pos.column}`;\n return new ParseError(fullMessage, pos, this.peek());\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 // 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\n// Export convenience function\nexport function parse(input: string | Token[]): ASTNode {\n const parser = new FHIRPathParser(input);\n return parser.parse();\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}","export { FHIRPathParser, ParseError, parse } from './parser';\nexport * from './ast';\nexport { pprint } from './pprint';","// Import registry to trigger operation registration\nimport './registry';\n\n// Core API functions\nimport { parse, evaluate, compile, analyze, registry } from './api/index';\n\n// Default export with common operations\nexport default {\n parse,\n evaluate,\n compile,\n analyze,\n registry\n};\n\n// Named exports for core functions\nexport { parse, evaluate, compile, analyze, registry };\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';","import type {\n FHIRPathExpression,\n CompiledExpression,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions,\n AnalysisResult\n} from './types';\nimport { FHIRPathParser } from '../parser/parser';\nimport { FHIRPathExpression as Expression } from './expression';\nimport { FHIRPathError, parseError } from './errors';\nimport { publicRegistry } from './registry';\n\n// Parse expression into AST\nexport function parse(expression: string): FHIRPathExpression {\n try {\n const parser = new FHIRPathParser(expression);\n const ast = parser.parse();\n return new Expression(ast, expression);\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// Evaluate expression directly\nexport function evaluate(\n expression: string | FHIRPathExpression,\n input?: any,\n context?: EvaluationContext\n): any[] {\n const expr = typeof expression === 'string' ? parse(expression) : 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' ? parse(expression) : 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' ? parse(expression) : expression;\n return expr.analyze(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 { Context as RuntimeContext, EvaluationResult } from './types';\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 };\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 (!context.env.$this) {\n context = {\n ...context,\n env: {\n ...context.env,\n $this: input\n }\n };\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 let value: any[] = [];\n\n if (node.name.startsWith('$')) {\n // Special environment variables - use object lookup\n const envVarHandlers: Record<string, () => any[]> = {\n '$this': () => context.env.$this || [],\n '$index': () => context.env.$index !== undefined ? [context.env.$index] : [],\n '$total': () => context.env.$total || [],\n };\n\n const handler = envVarHandlers[node.name];\n if (!handler) {\n throw new EvaluationError(`Unknown special variable: ${node.name}`, node.position);\n }\n value = handler();\n } else if (node.name.startsWith('%')) {\n // Environment variables starting with % - delegate to RuntimeContextManager\n value = RuntimeContextManager.getVariable(context, node.name) || [];\n } else {\n // User-defined variables - RuntimeContextManager.getVariable handles % prefix\n value = RuntimeContextManager.getVariable(context, node.name) || [];\n }\n\n return { value, 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\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 and set initial $this\n let evalContext = context || RuntimeContextManager.create(inputCollection);\n \n // Set initial $this to the input collection if not already set\n if (!evalContext.env.$this) {\n evalContext = {\n ...evalContext,\n env: {\n ...evalContext.env,\n $this: inputCollection\n }\n };\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 (!ctx.env?.$this) {\n ctx = {\n ...ctx,\n env: {\n ...ctx.env,\n $this: ctx.input\n }\n };\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 if (name.startsWith('$')) {\n // Special environment variables\n switch (name) {\n case '$this':\n return ctx.env.$this || [];\n case '$index':\n return ctx.env.$index !== undefined ? [ctx.env.$index] : [];\n case '$total':\n return ctx.env.$total !== undefined ? [ctx.env.$total] : [];\n default:\n throw new EvaluationError(`Unknown special variable: ${name}`, node.position);\n }\n } else {\n // User-defined variables (remove % prefix if present)\n const varName = name.startsWith('%') ? name.substring(1) : name;\n \n // Special root variables\n switch (varName) {\n case 'context':\n return ctx.env.$context || ctx.input || [];\n case 'resource':\n return ctx.env.$resource || ctx.input || [];\n case 'rootResource':\n return ctx.env.$rootResource || ctx.input || [];\n default:\n const value = ctx.env[varName];\n if (value === undefined) {\n return [];\n }\n // Wrap non-array values in an array to create a singleton collection\n return Array.isArray(value) ? value : [value];\n }\n }\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 = { ...ctx, env: { ...ctx.env } };\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 || {\n input: inputCollection,\n focus: inputCollection,\n env: {\n $this: inputCollection\n }\n };\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 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 };\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 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 ? require('../parser').parse(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({\n input: inputArray,\n focus: inputArray,\n env: ctx.env || {}\n });\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 would need to be handled through a different mechanism\n // as the context.env only supports specific FHIRPath environment variables\n // TODO: Consider how to handle custom environment variables\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 { 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 // 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 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 FHIRPathBuilder,\n FHIRPathAPI,\n ModelProvider,\n CustomFunction,\n FHIRPathExpression,\n CompiledExpression,\n AnalysisResult,\n EvaluationContext,\n CompileOptions,\n AnalyzeOptions\n} from './types';\nimport { parse, evaluate, compile, analyze } from './index';\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 return parse(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 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}"]}
|