@atomic-ehr/codegen 0.0.2 → 0.0.3
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 +15 -4
- package/dist/cli/index.js +14 -49
- package/dist/index.d.ts +26 -1632
- package/dist/index.js +1285 -5444
- package/dist/index.js.map +1 -1
- package/package.json +13 -16
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/generators/base/errors.ts","../src/api/generators/base/builders/FileBuilder.ts","../src/api/generators/base/builders/DirectoryBuilder.ts","../src/api/generators/base/builders/IndexBuilder.ts","../src/typeschema/types.ts","../src/typeschema/core/identifier.ts","../src/typeschema/core/nested-types.ts","../src/typeschema/core/field-builder.ts","../src/typeschema/core/binding.ts","../src/typeschema/core/transformer.ts","../src/typeschema/cache.ts","../src/utils/codegen-logger.ts","../src/typeschema/register.ts","../src/typeschema/generator.ts","../src/typeschema/parser.ts","../src/typeschema/index.ts","../src/api/writer-generator/utils.ts","../src/api/writer-generator/writer.ts","../src/api/writer-generator/csharp/formatHelper.ts","../src/api/writer-generator/csharp/csharp.ts","../src/typeschema/utils.ts","../src/api/generators/base/error-handler.ts","../src/api/generators/base/BaseGenerator.ts","../src/api/generators/base/FileManager.ts","../src/api/generators/base/TypeMapper.ts","../src/api/generators/base/TypeScriptTypeMapper.ts","../src/api/generators/typescript.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts","../src/config.ts"],"names":["fs","pkg","CanonicalManager","fhirschema2","readFile","s","Path","typeSchemas","treeShake","shaked","resolve","relative","schema","e","afs","join","stat","writeFile","FileBuilder","DirectoryBuilder","IndexBuilder","camelCase","toCamelCase","match","canonicalToName","tsFieldName","tsName","fs3","existsSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Comprehensive error handling system for the base generator\n *\n * This module provides rich, contextual error classes that help developers\n * at all skill levels understand and resolve issues quickly.\n */\n\nimport type { TypeSchema } from \"@typeschema/index\";\nimport type { FileContext } from \"./types\";\n\n/**\n * Base error class for all generator-related errors\n *\n * Provides common functionality like context tracking, suggestions,\n * and detailed error reporting that makes debugging easier.\n */\nexport abstract class GeneratorError extends Error {\n /** When this error occurred */\n public readonly timestamp: Date;\n\n /** Unique error ID for tracking */\n public readonly errorId: string;\n\n constructor(\n message: string,\n /** Phase of generation where error occurred */\n public readonly phase: \"validation\" | \"generation\" | \"writing\" | \"initialization\",\n /** Additional context about the error */\n public readonly context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = this.constructor.name;\n this.timestamp = new Date();\n this.errorId = this.generateErrorId();\n\n // Maintain proper stack trace in V8\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Generate a unique error ID for tracking\n */\n private generateErrorId(): string {\n return `${this.constructor.name}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Get formatted error message with full context\n * This provides a comprehensive view of what went wrong\n */\n getDetailedMessage(): string {\n const lines = [\n `❌ ${this.constructor.name}: ${this.message}`,\n ` Error ID: ${this.errorId}`,\n ` Phase: ${this.phase}`,\n ` Time: ${this.timestamp.toISOString()}`,\n ];\n\n if (this.context && Object.keys(this.context).length > 0) {\n lines.push(\"\");\n lines.push(\"📍 Context:\");\n Object.entries(this.context).forEach(([key, value]) => {\n lines.push(` ${key}: ${this.formatContextValue(value)}`);\n });\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Format context values for display\n */\n private formatContextValue(value: unknown): string {\n if (value === null || value === undefined) {\n return String(value);\n }\n\n if (typeof value === \"string\") {\n return `\"${value}\"`;\n }\n\n if (typeof value === \"object\") {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return \"[Object]\";\n }\n }\n\n return String(value);\n }\n\n /**\n * Get actionable suggestions for fixing the error\n * Each error type should provide specific, helpful suggestions\n */\n abstract getSuggestions(): string[];\n\n /**\n * Get error severity level\n */\n getSeverity(): \"error\" | \"warning\" | \"info\" {\n return \"error\";\n }\n\n /**\n * Check if this error is recoverable\n */\n isRecoverable(): boolean {\n return false;\n }\n\n /**\n * Get related documentation links\n */\n getDocumentationLinks(): string[] {\n return [\n \"https://github.com/atomic-ehr/codegen/docs/troubleshooting.md\",\n `https://github.com/atomic-ehr/codegen/docs/errors/${this.constructor.name}.md`,\n ];\n }\n}\n\n/**\n * Schema validation errors with intelligent suggestions\n */\nexport class SchemaValidationError extends GeneratorError {\n constructor(\n message: string,\n /** The schema that failed validation */\n public readonly schema: TypeSchema,\n /** Specific validation errors */\n public readonly validationErrors: string[],\n /** Additional user context for better suggestions */\n public readonly userContext?: {\n isBeginnerMode?: boolean;\n previousSuccessfulSchemas?: string[];\n commonPatterns?: string[];\n },\n ) {\n super(message, \"validation\", {\n schemaName: schema.identifier?.name || \"unknown\",\n schemaKind: schema.identifier?.kind || \"unknown\",\n schemaPackage: schema.identifier?.package || \"unknown\",\n validationErrors,\n userContext,\n });\n }\n\n getSuggestions(): string[] {\n const suggestions: string[] = [];\n\n // Add basic validation suggestions\n suggestions.push(\"Verify the schema follows the TypeSchema specification\");\n suggestions.push(\"Check that all required fields are present and properly typed\");\n\n // Context-aware suggestions based on specific errors\n for (const error of this.validationErrors) {\n if (error.includes(\"identifier.name\")) {\n suggestions.push(\"✨ Add a valid identifier.name field to your schema\");\n suggestions.push('💡 Example: identifier: { name: \"Patient\", kind: \"resource\" }');\n }\n\n if (error.includes(\"identifier.kind\")) {\n suggestions.push(\n '🎯 Set identifier.kind to: \"resource\", \"complex-type\", \"profile\", or \"primitive-type\"',\n );\n suggestions.push(\"📚 Check FHIR specification for the correct kind value\");\n }\n\n if (error.includes(\"circular\")) {\n suggestions.push(\"🔄 Remove circular references between schemas\");\n suggestions.push(\"💡 Use forward declarations for recursive types\");\n suggestions.push(\"🔍 Look for schemas that reference each other in a loop\");\n }\n\n if (error.includes(\"fields\")) {\n suggestions.push(\"📝 Check that all fields have proper type definitions\");\n suggestions.push(\"🔧 Ensure field types reference valid TypeSchema identifiers\");\n }\n }\n\n // Beginner-specific suggestions\n if (this.userContext?.isBeginnerMode) {\n suggestions.push(\"\");\n suggestions.push(\"🎓 Beginner Tips:\");\n suggestions.push(\"📖 Start with the Quick Start guide: docs/getting-started/quick-start.md\");\n suggestions.push(\"🔍 Use --verbose flag for detailed error information\");\n suggestions.push(\"🧪 Test with a simple schema first to verify your setup\");\n\n if (this.userContext.previousSuccessfulSchemas?.length) {\n suggestions.push(\n `✅ Compare with your working schema: ${this.userContext.previousSuccessfulSchemas[0]}`,\n );\n }\n }\n\n // Advanced suggestions for experienced users\n if (!this.userContext?.isBeginnerMode) {\n suggestions.push(\"\");\n suggestions.push(\"🔧 Advanced Debugging:\");\n suggestions.push(\"🕵️ Enable schema validation debugging\");\n suggestions.push(\"📊 Check schema statistics and complexity metrics\");\n suggestions.push(\"⚡ Consider schema preprocessing if dealing with complex inheritance\");\n }\n\n return suggestions;\n }\n\n override isRecoverable(): boolean {\n // Simple validation errors like missing fields are usually recoverable\n return this.validationErrors.every((error) => !error.includes(\"circular\") && !error.includes(\"corruption\"));\n }\n}\n\n/**\n * Template processing errors with debugging information\n */\nexport class TemplateError extends GeneratorError {\n constructor(\n message: string,\n /** Name of the template that failed */\n public readonly templateName: string,\n /** Context data passed to the template */\n public readonly templateContext: Record<string, unknown>,\n /** Additional debugging information */\n public readonly debugInfo?: {\n availableTemplates?: string[];\n missingVariables?: string[];\n templateSource?: string;\n lineNumber?: number;\n columnNumber?: number;\n },\n ) {\n super(message, \"generation\", {\n templateName,\n contextKeys: Object.keys(templateContext),\n availableTemplates: debugInfo?.availableTemplates?.length || 0,\n debugInfo,\n });\n }\n\n getSuggestions(): string[] {\n const suggestions: string[] = [];\n\n // Template existence suggestions\n if (this.debugInfo?.availableTemplates?.length) {\n if (!this.debugInfo.availableTemplates.includes(this.templateName)) {\n suggestions.push(`❌ Template '${this.templateName}' not found`);\n suggestions.push(\"📂 Available templates:\");\n this.debugInfo.availableTemplates.forEach((template) => {\n suggestions.push(` • ${template}`);\n });\n\n // Suggest similar template names using Levenshtein distance\n const similar = this.findSimilarTemplates(this.templateName, this.debugInfo.availableTemplates);\n if (similar.length > 0) {\n suggestions.push(\"🤔 Did you mean:\");\n similar.forEach((template) => {\n suggestions.push(` • ${template}`);\n });\n }\n }\n }\n\n // Missing variables suggestions\n if (this.debugInfo?.missingVariables?.length) {\n suggestions.push(\"📝 Missing template variables:\");\n this.debugInfo.missingVariables.forEach((variable) => {\n suggestions.push(` • ${variable}`);\n });\n suggestions.push(\"💡 Add these variables to your template context\");\n\n // Suggest similar variable names from context\n const contextKeys = Object.keys(this.templateContext);\n this.debugInfo.missingVariables.forEach((missing) => {\n const similar = contextKeys.filter(\n (key) => this.levenshteinDistance(missing.toLowerCase(), key.toLowerCase()) <= 2,\n );\n if (similar.length > 0) {\n suggestions.push(` Similar to: ${similar.join(\", \")}`);\n }\n });\n }\n\n // Template syntax suggestions\n if (this.debugInfo?.lineNumber) {\n suggestions.push(`🐛 Check template syntax around line ${this.debugInfo.lineNumber}`);\n\n if (this.debugInfo.columnNumber) {\n suggestions.push(` Column: ${this.debugInfo.columnNumber}`);\n }\n\n if (this.debugInfo.templateSource) {\n const lines = this.debugInfo.templateSource.split(\"\\n\");\n const errorLine = lines[this.debugInfo.lineNumber - 1];\n if (errorLine) {\n suggestions.push(` Code: ${errorLine.trim()}`);\n }\n }\n }\n\n // General template debugging\n suggestions.push(\"🔧 Template debugging steps:\");\n suggestions.push(\" • Enable template debugging: { debug: true }\");\n suggestions.push(\" • Verify template file exists and has correct syntax\");\n suggestions.push(\" • Check template variable names match context keys\");\n suggestions.push(\" • Ensure template engine is properly configured\");\n\n return suggestions;\n }\n\n /**\n * Find templates with similar names using Levenshtein distance\n */\n private findSimilarTemplates(target: string, available: string[]): string[] {\n return available\n .filter((template) => {\n const distance = this.levenshteinDistance(target.toLowerCase(), template.toLowerCase());\n return distance <= 2 && distance > 0;\n })\n .slice(0, 3)\n .sort(\n (a, b) =>\n this.levenshteinDistance(target.toLowerCase(), a.toLowerCase()) -\n this.levenshteinDistance(target.toLowerCase(), b.toLowerCase()),\n );\n }\n\n /**\n * Calculate Levenshtein distance between two strings\n */\n private levenshteinDistance(str1: string, str2: string): number {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(0));\n\n for (let i = 0; i <= str1.length; i++) matrix[0]![i] = i;\n for (let j = 0; j <= str2.length; j++) matrix[j]![0] = j;\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j]![i] = Math.min(\n matrix[j]?.[i - 1]! + 1, // deletion\n matrix[j - 1]?.[i]! + 1, // insertion\n matrix[j - 1]?.[i - 1]! + indicator, // substitution\n );\n }\n }\n\n return matrix[str2.length]?.[str1.length]!;\n }\n\n override isRecoverable(): boolean {\n // Template errors are usually recoverable by fixing template or context\n return true;\n }\n}\n\n/**\n * File operation errors with recovery suggestions\n */\nexport class FileOperationError extends GeneratorError {\n constructor(\n message: string,\n /** Type of file operation that failed */\n public readonly operation: \"create\" | \"write\" | \"read\" | \"delete\" | \"copy\" | \"move\",\n /** Path of the file that caused the error */\n public readonly filePath: string,\n /** Original system error if available */\n public readonly originalError?: Error,\n /** Recovery options and suggestions */\n public readonly recoveryOptions?: {\n canRetry?: boolean;\n alternativePaths?: string[];\n permissionFix?: string;\n diskSpaceRequired?: number;\n },\n ) {\n super(message, \"writing\", {\n operation,\n filePath,\n originalErrorMessage: originalError?.message,\n originalErrorCode: (originalError as NodeJS.ErrnoException)?.code,\n recoveryOptions,\n });\n }\n\n getSuggestions(): string[] {\n const suggestions: string[] = [];\n const errorCode = (this.originalError as NodeJS.ErrnoException)?.code;\n\n // Operation-specific suggestions\n switch (this.operation) {\n case \"create\":\n case \"write\":\n suggestions.push(\"📁 File writing troubleshooting:\");\n suggestions.push(\" • Check if the output directory exists\");\n suggestions.push(\" • Verify write permissions for the target directory\");\n suggestions.push(\" • Ensure no other process has the file locked\");\n\n if (this.filePath.includes(\" \")) {\n suggestions.push(\" • File path contains spaces - check path escaping\");\n }\n\n if (this.recoveryOptions?.alternativePaths?.length) {\n suggestions.push(\"🔄 Alternative output directories:\");\n this.recoveryOptions.alternativePaths.forEach((path) => {\n suggestions.push(` • ${path}`);\n });\n }\n break;\n\n case \"read\":\n suggestions.push(\"📖 File reading troubleshooting:\");\n suggestions.push(\" • Verify the file exists at the specified path\");\n suggestions.push(\" • Check file read permissions\");\n suggestions.push(\" • Ensure file is not corrupted\");\n break;\n\n case \"delete\":\n suggestions.push(\"🗑️ File deletion troubleshooting:\");\n suggestions.push(\" • Check if file is locked by another process\");\n suggestions.push(\" • Verify delete permissions for the directory\");\n suggestions.push(\" • Ensure file exists before attempting deletion\");\n break;\n }\n\n // Error code specific suggestions\n switch (errorCode) {\n case \"EACCES\":\n suggestions.push(\"🔐 Permission Error:\");\n suggestions.push(\" • Current user lacks necessary file permissions\");\n\n if (this.recoveryOptions?.permissionFix) {\n suggestions.push(` • Fix command: ${this.recoveryOptions.permissionFix}`);\n } else {\n suggestions.push(` • Try: chmod 755 \"${this.filePath}\"`);\n }\n\n suggestions.push(\" • Consider running with elevated permissions\");\n suggestions.push(\" • Check directory ownership and permissions\");\n break;\n\n case \"ENOSPC\":\n suggestions.push(\"💾 Disk Space Error:\");\n suggestions.push(\" • Insufficient disk space available\");\n suggestions.push(\" • Free up disk space and retry\");\n suggestions.push(\" • Consider using a different output directory\");\n\n if (this.recoveryOptions?.diskSpaceRequired) {\n const mb = Math.ceil(this.recoveryOptions.diskSpaceRequired / 1024 / 1024);\n suggestions.push(` • Required space: ~${mb}MB`);\n }\n break;\n\n case \"ENOENT\":\n suggestions.push(\"📂 File Not Found:\");\n suggestions.push(\" • File or directory does not exist\");\n suggestions.push(\" • Check the file path for typos\");\n suggestions.push(\" • Ensure parent directories exist\");\n suggestions.push(` • Create directory: mkdir -p \"$(dirname \"${this.filePath}\")\"`);\n break;\n\n case \"EMFILE\":\n case \"ENFILE\":\n suggestions.push(\"📊 Too Many Open Files:\");\n suggestions.push(\" • System has reached file handle limit\");\n suggestions.push(\" • Close unused files and retry\");\n suggestions.push(\" • Consider processing files in smaller batches\");\n break;\n }\n\n // Recovery suggestions\n if (this.recoveryOptions?.canRetry) {\n suggestions.push(\"\");\n suggestions.push(\"🔄 Recovery Options:\");\n suggestions.push(\" • This operation can be retried safely\");\n suggestions.push(\" • Fix the underlying issue and run again\");\n }\n\n // General debugging\n suggestions.push(\"\");\n suggestions.push(\"🔍 General Debugging:\");\n suggestions.push(\" • Check system logs for more details\");\n suggestions.push(\" • Verify disk health if errors persist\");\n suggestions.push(\" • Test with a simpler file path\");\n\n return suggestions;\n }\n\n override isRecoverable(): boolean {\n return this.recoveryOptions?.canRetry || false;\n }\n\n /**\n * Get specific recovery actions that can be taken\n */\n getRecoveryActions(): Array<{\n action: string;\n command?: string;\n automatic?: boolean;\n riskLevel?: \"low\" | \"medium\" | \"high\";\n }> {\n const actions: Array<{\n action: string;\n command?: string;\n automatic?: boolean;\n riskLevel?: \"low\" | \"medium\" | \"high\";\n }> = [];\n\n const errorCode = (this.originalError as NodeJS.ErrnoException)?.code;\n\n switch (errorCode) {\n case \"EACCES\":\n actions.push({\n action: \"Fix file permissions\",\n command: `chmod 755 \"${this.filePath}\"`,\n automatic: false,\n riskLevel: \"medium\",\n });\n break;\n\n case \"ENOENT\":\n actions.push({\n action: \"Create missing directory\",\n command: `mkdir -p \"$(dirname \"${this.filePath}\")\"`,\n automatic: true,\n riskLevel: \"low\",\n });\n break;\n\n case \"ENOSPC\":\n actions.push({\n action: \"Free up disk space\",\n automatic: false,\n riskLevel: \"low\",\n });\n break;\n }\n\n return actions;\n }\n}\n\n/**\n * Type mapping errors for language-specific type conversion issues\n */\nexport class TypeMappingError extends GeneratorError {\n constructor(\n message: string,\n /** FHIR type that couldn't be mapped */\n public readonly fhirType: string,\n /** Target language name */\n public readonly targetLanguage: string,\n /** Additional mapping context */\n public readonly mappingContext?: {\n availableMappings?: string[];\n suggestedMappings?: Record<string, string>;\n schema?: TypeSchema;\n },\n ) {\n super(message, \"generation\", {\n fhirType,\n targetLanguage,\n availableMappings: mappingContext?.availableMappings?.length || 0,\n hasSchema: !!mappingContext?.schema,\n });\n }\n\n getSuggestions(): string[] {\n const suggestions: string[] = [];\n\n suggestions.push(`🎯 Type mapping issue for '${this.fhirType}' → ${this.targetLanguage}`);\n\n // Check for available mappings\n if (this.mappingContext?.availableMappings?.length) {\n suggestions.push(\"📋 Available type mappings:\");\n this.mappingContext.availableMappings.forEach((mapping) => {\n suggestions.push(` • ${mapping}`);\n });\n\n // Suggest similar types\n const similar = this.mappingContext.availableMappings.filter(\n (mapping) =>\n mapping.toLowerCase().includes(this.fhirType.toLowerCase()) ||\n this.fhirType.toLowerCase().includes(mapping.toLowerCase()),\n );\n\n if (similar.length > 0) {\n suggestions.push(\"🤔 Similar types found:\");\n similar.forEach((mapping) => {\n suggestions.push(` • ${mapping}`);\n });\n }\n }\n\n // Suggested mappings\n if (this.mappingContext?.suggestedMappings) {\n suggestions.push(\"💡 Suggested mappings:\");\n Object.entries(this.mappingContext.suggestedMappings).forEach(([fhir, target]) => {\n suggestions.push(` • ${fhir} → ${target}`);\n });\n }\n\n // General type mapping suggestions\n suggestions.push(\"\");\n suggestions.push(\"🔧 Fixing type mapping issues:\");\n suggestions.push(` • Add '${this.fhirType}' mapping in ${this.targetLanguage}TypeMapper`);\n suggestions.push(\" • Check if the FHIR type name is spelled correctly\");\n suggestions.push(\" • Verify the type mapper is properly configured\");\n suggestions.push(\" • Consider adding a fallback type mapping\");\n\n // Language-specific suggestions\n switch (this.targetLanguage.toLowerCase()) {\n case \"typescript\":\n suggestions.push(\" • Add to TYPESCRIPT_PRIMITIVES map\");\n suggestions.push(\" • Implement in mapPrimitive() method\");\n break;\n case \"python\":\n suggestions.push(\" • Add to PYTHON_TYPE_MAP dictionary\");\n suggestions.push(\" • Consider using typing module types\");\n break;\n case \"rust\":\n suggestions.push(\" • Add to RUST_TYPE_MAP\");\n suggestions.push(\" • Consider Option<T> for nullable types\");\n break;\n }\n\n return suggestions;\n }\n\n override isRecoverable(): boolean {\n return true; // Type mapping errors can usually be fixed by updating the mapper\n }\n}\n\n/**\n * Configuration errors with validation details\n */\nexport class ConfigurationError extends GeneratorError {\n constructor(\n message: string,\n /** Configuration key that has an issue */\n public readonly configKey: string,\n /** The invalid value that was provided */\n public readonly providedValue: unknown,\n /** Expected value type or format */\n public readonly expectedValue?: string,\n /** Valid options if applicable */\n public readonly validOptions?: unknown[],\n ) {\n super(message, \"initialization\", {\n configKey,\n providedValue,\n providedType: typeof providedValue,\n expectedValue,\n validOptions,\n });\n }\n\n getSuggestions(): string[] {\n const suggestions: string[] = [];\n\n suggestions.push(`⚙️ Configuration error for '${this.configKey}'`);\n suggestions.push(` Provided: ${JSON.stringify(this.providedValue)} (${typeof this.providedValue})`);\n\n if (this.expectedValue) {\n suggestions.push(` Expected: ${this.expectedValue}`);\n }\n\n if (this.validOptions?.length) {\n suggestions.push(\" Valid options:\");\n this.validOptions.forEach((option) => {\n suggestions.push(` • ${JSON.stringify(option)}`);\n });\n }\n\n suggestions.push(\"\");\n suggestions.push(\"🔧 Configuration fixes:\");\n suggestions.push(` • Check the '${this.configKey}' value in your configuration`);\n suggestions.push(\" • Refer to the configuration documentation\");\n suggestions.push(\" • Use TypeScript for better config validation\");\n suggestions.push(\" • Check for typos in configuration keys\");\n\n // Specific suggestions based on config key\n switch (this.configKey) {\n case \"outputDir\":\n suggestions.push(\" • Ensure the output directory path exists\");\n suggestions.push(\" • Use absolute paths for better reliability\");\n break;\n case \"logger\":\n suggestions.push(\" • Provide a valid logger instance\");\n suggestions.push(\" • Use createLogger() from utils/codegen-logger\");\n break;\n case \"validation\":\n suggestions.push(' • Set to true, false, or \"strict\"');\n break;\n }\n\n return suggestions;\n }\n\n override isRecoverable(): boolean {\n return true; // Configuration errors are usually fixable\n }\n}\n\n/**\n * Batch operation error for multiple failures\n */\nexport class BatchOperationError extends GeneratorError {\n constructor(\n message: string,\n /** Individual errors that occurred */\n public readonly errors: GeneratorError[],\n ) {\n super(message, \"generation\", {\n errorCount: errors.length,\n errorTypes: [...new Set(errors.map((e) => e.constructor.name))],\n phases: [...new Set(errors.map((e) => e.phase))],\n });\n }\n\n getSuggestions(): string[] {\n // Aggregate unique suggestions from all errors\n const allSuggestions = this.errors.flatMap((e) => e.getSuggestions());\n const uniqueSuggestions = [...new Set(allSuggestions)];\n\n const suggestions: string[] = [];\n suggestions.push(`📊 Batch operation failed with ${this.errors.length} errors:`);\n\n // Group errors by type\n const errorGroups = new Map<string, GeneratorError[]>();\n this.errors.forEach((error) => {\n const type = error.constructor.name;\n if (!errorGroups.has(type)) {\n errorGroups.set(type, []);\n }\n errorGroups.get(type)?.push(error);\n });\n\n // Show error breakdown\n suggestions.push(\"\");\n suggestions.push(\"🔍 Error breakdown:\");\n for (const [type, typeErrors] of errorGroups) {\n suggestions.push(` • ${type}: ${typeErrors.length} occurrences`);\n }\n\n // Show most common suggestions with proper prefixing\n suggestions.push(\"💡 Most relevant suggestions:\");\n const prefixedSuggestions = uniqueSuggestions.slice(0, 8).map((suggestion) => ` ${suggestion}`);\n suggestions.push(...prefixedSuggestions);\n\n return suggestions;\n }\n\n /**\n * Get detailed breakdown of all errors\n */\n getErrorBreakdown(): string {\n const lines: string[] = [];\n\n this.errors.forEach((error, index) => {\n lines.push(`${index + 1}. ${error.constructor.name}: ${error.message}`);\n if (error.context?.schemaName) {\n lines.push(` Schema: ${error.context.schemaName}`);\n }\n if (error.context?.filename) {\n lines.push(` File: ${error.context.filename}`);\n }\n lines.push(\"\");\n });\n\n return lines.join(\"\\n\");\n }\n\n override isRecoverable(): boolean {\n // Batch is recoverable if at least some individual errors are recoverable\n return this.errors.some((error) => error.isRecoverable());\n }\n\n /**\n * Get errors that are recoverable\n */\n getRecoverableErrors(): GeneratorError[] {\n return this.errors.filter((error) => error.isRecoverable());\n }\n\n /**\n * Get errors that are not recoverable\n */\n getNonRecoverableErrors(): GeneratorError[] {\n return this.errors.filter((error) => !error.isRecoverable());\n }\n}\n\n/**\n * Utility function to create context-aware errors\n * Helps maintain consistent error creation patterns\n */\nexport function createErrorWithContext<T extends GeneratorError>(\n ErrorClass: new (...args: any[]) => T,\n message: string,\n context: FileContext,\n additionalContext?: Record<string, unknown>,\n): T {\n const fullContext = {\n filename: context.filename,\n importsCount: context.imports.size,\n exportsCount: context.exports.size,\n hasSchema: !!context.schema,\n templateName: context.templateName,\n ...additionalContext,\n };\n\n // Create error with the enhanced context - need to pass phase parameter\n return new ErrorClass(message, \"generation\", fullContext);\n}\n","/**\n * Fluent file builder with lifecycle hooks and validation\n *\n * This provides a clean, chainable API for building files with imports,\n * exports, content generation, and lifecycle hooks for customization.\n */\n\nimport type { CodegenLogger } from \"../../../../utils/codegen-logger\";\nimport { FileOperationError, TemplateError } from \"../errors\";\nimport type { FileManager } from \"../FileManager\";\nimport type {\n AfterSaveHook,\n BeforeSaveHook,\n ErrorHook,\n FileBuilderOptions,\n FileContext,\n TemplateEngine,\n TypeMapper,\n} from \"../types\";\n\nexport interface FileBuilderConfig {\n filename: string;\n fileManager: FileManager;\n templateEngine?: TemplateEngine;\n typeMapper: TypeMapper;\n logger: CodegenLogger;\n}\n\n/**\n * Fluent builder for creating files with lifecycle hooks\n *\n * Features:\n * - Fluent API for content building\n * - Template integration\n * - Import/export management\n * - Lifecycle hooks (before/after save, error handling)\n * - Content validation\n * - Automatic import path resolution\n */\nexport class FileBuilder {\n private readonly config: FileBuilderConfig;\n private content: string = \"\";\n private readonly imports = new Map<string, string>();\n private readonly exports = new Set<string>();\n private readonly metadata = new Map<string, unknown>();\n\n // Lifecycle hooks\n private beforeSaveHooks: BeforeSaveHook[] = [];\n private afterSaveHooks: AfterSaveHook[] = [];\n private errorHooks: ErrorHook[] = [];\n\n // Options\n private options: FileBuilderOptions = {\n template: undefined,\n importStrategy: \"auto\",\n validation: \"strict\",\n prettify: true,\n formatting: {\n indentSize: 2,\n useTabs: false,\n maxLineLength: 100,\n },\n encoding: \"utf-8\",\n };\n\n constructor(config: FileBuilderConfig) {\n this.config = config;\n }\n\n // ==========================================\n // Content Building Methods\n // ==========================================\n\n /**\n * Set content directly\n * @param content File content\n */\n withContent(content: string | (() => string)): FileBuilder {\n this.content = typeof content === \"string\" ? content : content();\n return this;\n }\n\n /**\n * Generate content from template\n * @param templateName Template to use\n * @param context Template context\n */\n withTemplate(templateName: string, context: Record<string, unknown>): FileBuilder {\n if (!this.config.templateEngine) {\n throw new TemplateError(\n `Template engine is required for template rendering. Template: '${templateName}'`,\n templateName,\n context,\n );\n }\n\n this.options.template = templateName;\n\n try {\n this.content = this.config.templateEngine.render(templateName, {\n ...context,\n imports: this.imports,\n exports: this.exports,\n filename: this.config.filename,\n });\n } catch (_error) {\n throw new TemplateError(`Failed to render template '${templateName}'`, templateName, context, {\n availableTemplates: this.config.templateEngine.getAvailableTemplates?.() || [],\n });\n }\n\n return this;\n }\n\n /**\n * Append content to existing content\n * @param content Content to append\n */\n appendContent(content: string): FileBuilder {\n this.content += content;\n return this;\n }\n\n /**\n * Prepend content to existing content\n * @param content Content to prepend\n */\n prependContent(content: string): FileBuilder {\n this.content = content + this.content;\n return this;\n }\n\n // ==========================================\n // Import/Export Management\n // ==========================================\n\n /**\n * Set all imports at once\n * @param imports Map of symbol name to import path\n */\n withImports(imports: Map<string, string>): FileBuilder {\n this.imports.clear();\n for (const [symbol, path] of imports) {\n this.imports.set(symbol, path);\n }\n return this;\n }\n\n /**\n * Add a single import\n * @param symbol Symbol to import\n * @param from Import path\n */\n addImport(symbol: string, from: string): FileBuilder {\n this.imports.set(symbol, from);\n return this;\n }\n\n /**\n * Add multiple imports from the same path\n * @param symbols Symbols to import\n * @param from Import path\n */\n addImports(symbols: string[], from: string): FileBuilder {\n for (const symbol of symbols) {\n this.imports.set(symbol, from);\n }\n return this;\n }\n\n /**\n * Set all exports at once\n * @param exports Array of export names\n */\n withExports(exports: string[]): FileBuilder {\n this.exports.clear();\n for (const exp of exports) {\n this.exports.add(exp);\n }\n return this;\n }\n\n /**\n * Add a single export\n * @param name Export name\n */\n addExport(name: string): FileBuilder {\n this.exports.add(name);\n return this;\n }\n\n /**\n * Add multiple exports\n * @param names Export names\n */\n addExports(names: string[]): FileBuilder {\n for (const name of names) {\n this.exports.add(name);\n }\n return this;\n }\n\n // ==========================================\n // Metadata and Options\n // ==========================================\n\n /**\n * Set metadata for the file\n * @param key Metadata key\n * @param value Metadata value\n */\n withMetadata(key: string, value: unknown): FileBuilder {\n this.metadata.set(key, value);\n return this;\n }\n\n /**\n * Set file builder options\n * @param options Options to set\n */\n withOptions(options: Partial<FileBuilderOptions>): FileBuilder {\n this.options = { ...this.options, ...options };\n return this;\n }\n\n // ==========================================\n // Lifecycle Hooks\n // ==========================================\n\n /**\n * Add hook to run before saving\n * @param hook Hook function\n */\n onBeforeSave(hook: BeforeSaveHook): FileBuilder {\n this.beforeSaveHooks.push(hook);\n return this;\n }\n\n /**\n * Add hook to run after successful save\n * @param hook Hook function\n */\n onAfterSave(hook: AfterSaveHook): FileBuilder {\n this.afterSaveHooks.push(hook);\n return this;\n }\n\n /**\n * Add hook to run when error occurs\n * @param hook Hook function\n */\n onError(hook: ErrorHook): FileBuilder {\n this.errorHooks.push(hook);\n return this;\n }\n\n // ==========================================\n // Execution Methods\n // ==========================================\n\n /**\n * Build final content without saving\n * @returns File context with final content\n */\n build(): FileContext {\n const finalContent = this.buildFinalContent();\n\n return {\n filename: this.config.filename,\n content: finalContent,\n imports: new Map(this.imports),\n exports: new Set(this.exports),\n metadata: Object.fromEntries(this.metadata),\n templateName: this.options.template,\n };\n }\n\n /**\n * Save the file\n * @returns Promise resolving to file path\n */\n async save(): Promise<string> {\n const context = this.build();\n\n try {\n // Run before-save hooks\n for (const hook of this.beforeSaveHooks) {\n await hook(context);\n }\n\n // Validate content if enabled\n if (this.options.validation !== \"none\") {\n await this.validateContent(context.content);\n }\n\n // Write file\n const result = await this.config.fileManager.writeFile(this.config.filename, context.content, {\n encoding: this.options.encoding,\n });\n\n const stats = {\n size: result.size,\n generationTime: 0, // Set by caller if needed\n writeTime: result.writeTime,\n };\n\n // Run after-save hooks\n for (const hook of this.afterSaveHooks) {\n await hook(result.path, stats);\n }\n\n this.config.logger.debug(`Saved ${this.config.filename} successfully`);\n return result.path;\n } catch (error) {\n // Run error hooks\n for (const hook of this.errorHooks) {\n try {\n await hook(error instanceof Error ? error : new Error(String(error)), context);\n } catch (hookError) {\n this.config.logger.warn(\n `Error hook failed: ${hookError instanceof Error ? hookError.message : String(hookError)}`,\n );\n }\n }\n\n throw error;\n }\n }\n\n // ==========================================\n // Private Helper Methods\n // ==========================================\n\n /**\n * Build final content with imports and exports\n */\n private buildFinalContent(): string {\n const parts: string[] = [];\n\n // Add imports\n if (this.imports.size > 0 && this.options.importStrategy !== \"none\") {\n parts.push(this.generateImportStatements());\n parts.push(\"\"); // Empty line after imports\n }\n\n // Add main content\n if (this.content) {\n parts.push(this.content);\n }\n\n // Add exports if not already in content\n if (this.exports.size > 0 && !this.content.includes(\"export\")) {\n parts.push(\"\"); // Empty line before exports\n parts.push(this.generateExportStatements());\n }\n\n let finalContent = parts.join(\"\\n\");\n\n // Prettify if enabled\n if (this.options.prettify) {\n finalContent = this.prettifyContent(finalContent);\n }\n\n return finalContent;\n }\n\n /**\n * Generate import statements\n */\n private generateImportStatements(): string {\n const lines: string[] = [];\n\n // Group imports by path\n const importsByPath = new Map<string, string[]>();\n for (const [symbol, path] of this.imports) {\n const resolvedPath =\n this.options.importStrategy === \"auto\"\n ? this.config.fileManager.getRelativeImportPath(this.config.filename, path)\n : path;\n\n if (!importsByPath.has(resolvedPath)) {\n importsByPath.set(resolvedPath, []);\n }\n importsByPath.get(resolvedPath)?.push(symbol);\n }\n\n // Generate import statements\n for (const [path, symbols] of importsByPath) {\n if (symbols.length === 1) {\n lines.push(`import type { ${symbols[0]} } from '${path}';`);\n } else {\n const sortedSymbols = symbols.sort();\n if (sortedSymbols.length <= 3) {\n lines.push(`import type { ${sortedSymbols.join(\", \")} } from '${path}';`);\n } else {\n lines.push(`import type {`);\n const indent = \"\\t\";\n sortedSymbols.forEach((symbol, index) => {\n const isLast = index === sortedSymbols.length - 1;\n lines.push(`${indent}${symbol}${isLast ? \"\" : \",\"}`);\n });\n lines.push(`} from '${path}';`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Generate export statements\n */\n private generateExportStatements(): string {\n const exports = Array.from(this.exports).sort();\n return exports.map((exp) => `export { ${exp} };`).join(\"\\n\");\n }\n\n /**\n * Prettify content (basic implementation)\n */\n private prettifyContent(content: string): string {\n // Basic prettification\n return content\n .replace(/\\n{3,}/g, \"\\n\\n\") // Max 2 consecutive newlines\n .replace(\n /\\t/g,\n this.options.formatting?.useTabs ? \"\\t\" : \" \".repeat(this.options.formatting?.indentSize || 2),\n )\n .trim();\n }\n\n /**\n * Validate generated content\n */\n private async validateContent(content: string): Promise<void> {\n if (this.options.validation === \"none\") return;\n\n // Basic validation - check for syntax errors\n const issues: string[] = [];\n\n // Check for unmatched braces\n const openBraces = (content.match(/\\{/g) || []).length;\n const closeBraces = (content.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n issues.push(`Unmatched braces: ${openBraces} open, ${closeBraces} close`);\n }\n\n // Check for unmatched parentheses\n const openParens = (content.match(/\\(/g) || []).length;\n const closeParens = (content.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n issues.push(`Unmatched parentheses: ${openParens} open, ${closeParens} close`);\n }\n\n // Check for basic TypeScript syntax issues\n if (this.config.filename.endsWith(\".ts\") || this.config.filename.endsWith(\".tsx\")) {\n if (content.includes(\"interface\") && !content.match(/interface\\s+\\w+\\s*\\{/)) {\n issues.push(\"Invalid interface syntax detected\");\n }\n }\n\n if (issues.length > 0 && this.options.validation === \"strict\") {\n throw new FileOperationError(\n `Content validation failed for ${this.config.filename}: ${issues.join(\", \")}`,\n \"write\",\n this.config.filename,\n );\n } else if (issues.length > 0) {\n // Just warn for non-strict validation\n this.config.logger.warn(`Validation issues in ${this.config.filename}: ${issues.join(\", \")}`);\n }\n }\n\n /**\n * Get current content (for testing/debugging)\n */\n getContent(): string {\n return this.content;\n }\n\n /**\n * Get current imports (for testing/debugging)\n */\n getImports(): Map<string, string> {\n return new Map(this.imports);\n }\n\n /**\n * Get current exports (for testing/debugging)\n */\n getExports(): Set<string> {\n return new Set(this.exports);\n }\n}\n","/**\n * Directory builder for batch file operations\n *\n * Provides a fluent API for managing entire directories of files,\n * including subdirectories, index files, and batch operations.\n */\n\nimport type { CodegenLogger } from \"../../../../utils/codegen-logger\";\nimport type { FileManager } from \"../FileManager\";\nimport type { FileBuilder } from \"./FileBuilder\";\nimport type { IndexBuilder } from \"./IndexBuilder\";\n\nexport interface DirectoryBuilderConfig {\n path: string;\n fileManager: FileManager;\n logger: CodegenLogger;\n}\n\n/**\n * Fluent builder for directory operations\n *\n * Features:\n * - Subdirectory management\n * - Batch file operations\n * - Index file generation\n * - Directory cleaning\n * - File listing for preview\n */\nexport class DirectoryBuilder {\n private readonly config: DirectoryBuilderConfig;\n private readonly files = new Map<string, FileBuilder>();\n private readonly subdirectories = new Map<string, DirectoryBuilder>();\n private indexBuilder?: IndexBuilder;\n private shouldClean = false;\n\n constructor(config: DirectoryBuilderConfig) {\n this.config = config;\n }\n\n /**\n * Add a subdirectory\n * @param name Subdirectory name\n */\n withSubdirectory(name: string): DirectoryBuilder {\n const subdirPath = `${this.config.path}/${name}`;\n const subdir = new DirectoryBuilder({\n path: subdirPath,\n fileManager: this.config.fileManager,\n logger: this.config.logger.child(`Dir:${name}`),\n });\n\n this.subdirectories.set(name, subdir);\n return subdir;\n }\n\n /**\n * Add files to this directory\n * @param files Map of filename to FileBuilder\n */\n withFiles(files: Record<string, FileBuilder>): DirectoryBuilder {\n for (const [filename, builder] of Object.entries(files)) {\n this.files.set(filename, builder);\n }\n return this;\n }\n\n /**\n * Add a single file\n * @param filename File name\n * @param builder File builder\n */\n withFile(filename: string, builder: FileBuilder): DirectoryBuilder {\n this.files.set(filename, builder);\n return this;\n }\n\n /**\n * Set index builder for this directory\n * @param builder Index builder\n */\n withIndex(builder: IndexBuilder): DirectoryBuilder {\n this.indexBuilder = builder;\n return this;\n }\n\n /**\n * Clean directory before creating files\n */\n clean(): DirectoryBuilder {\n this.shouldClean = true;\n return this;\n }\n\n /**\n * Ensure directory exists\n */\n async ensure(): Promise<DirectoryBuilder> {\n await this.config.fileManager.ensureDirectory(this.config.path);\n return this;\n }\n\n /**\n * Save all files in this directory\n */\n async save(): Promise<string[]> {\n const savedPaths: string[] = [];\n\n // Clean directory if requested\n if (this.shouldClean) {\n await this.config.fileManager.cleanDirectory(this.config.path);\n }\n\n // Ensure directory exists\n await this.ensure();\n\n // Save all files in parallel for better performance\n const filePromises = Array.from(this.files.entries()).map(async ([filename, builder]) => {\n try {\n const path = await builder.save();\n savedPaths.push(path);\n return path;\n } catch (error) {\n this.config.logger.error(\n `Failed to save file ${filename}:`,\n error instanceof Error ? error : undefined,\n );\n throw error;\n }\n });\n\n await Promise.all(filePromises);\n\n // Save subdirectories recursively\n for (const [name, subdir] of this.subdirectories) {\n try {\n const subdirPaths = await subdir.save();\n savedPaths.push(...subdirPaths);\n } catch (error) {\n this.config.logger.error(\n `Failed to save subdirectory ${name}:`,\n error instanceof Error ? error : undefined,\n );\n throw error;\n }\n }\n\n // Generate index if provided\n if (this.indexBuilder) {\n try {\n const indexPath = await this.indexBuilder.save();\n savedPaths.push(indexPath);\n } catch (error) {\n this.config.logger.error(\"Failed to save index file:\", error instanceof Error ? error : undefined);\n throw error;\n }\n }\n\n this.config.logger.info(`Saved directory ${this.config.path} with ${savedPaths.length} files`);\n return savedPaths;\n }\n\n /**\n * Get all files that would be generated (for preview)\n */\n getFileList(): string[] {\n const files: string[] = [];\n\n for (const filename of this.files.keys()) {\n files.push(`${this.config.path}/${filename}`);\n }\n\n for (const [_name, subdir] of this.subdirectories) {\n const subdirFiles = subdir.getFileList();\n files.push(...subdirFiles);\n }\n\n if (this.indexBuilder) {\n files.push(`${this.config.path}/index.ts`); // Assuming TypeScript\n }\n\n return files.sort();\n }\n\n /**\n * Get statistics about this directory\n */\n getStats(): {\n fileCount: number;\n subdirectoryCount: number;\n hasIndex: boolean;\n totalFiles: number;\n } {\n let totalFiles = this.files.size;\n\n for (const subdir of this.subdirectories.values()) {\n totalFiles += subdir.getStats().totalFiles;\n }\n\n if (this.indexBuilder) {\n totalFiles += 1;\n }\n\n return {\n fileCount: this.files.size,\n subdirectoryCount: this.subdirectories.size,\n hasIndex: !!this.indexBuilder,\n totalFiles,\n };\n }\n\n /**\n * Check if directory would overwrite existing files\n */\n async wouldOverwrite(): Promise<string[]> {\n const conflicts: string[] = [];\n\n // Check files in this directory\n for (const filename of this.files.keys()) {\n const filePath = `${this.config.path}/${filename}`;\n if (await this.config.fileManager.wouldOverwrite(filePath)) {\n conflicts.push(filePath);\n }\n }\n\n // Check subdirectories\n for (const subdir of this.subdirectories.values()) {\n const subdirConflicts = await subdir.wouldOverwrite();\n conflicts.push(...subdirConflicts);\n }\n\n // Check index file\n if (this.indexBuilder) {\n const indexPath = `${this.config.path}/index.ts`;\n if (await this.config.fileManager.wouldOverwrite(indexPath)) {\n conflicts.push(indexPath);\n }\n }\n\n return conflicts;\n }\n\n /**\n * Get the path of this directory\n */\n getPath(): string {\n return this.config.path;\n }\n\n /**\n * Get all file builders (for testing/debugging)\n */\n getFiles(): Map<string, FileBuilder> {\n return new Map(this.files);\n }\n\n /**\n * Get all subdirectories (for testing/debugging)\n */\n getSubdirectories(): Map<string, DirectoryBuilder> {\n return new Map(this.subdirectories);\n }\n\n /**\n * Get index builder (for testing/debugging)\n */\n getIndexBuilder(): IndexBuilder | undefined {\n return this.indexBuilder;\n }\n}\n","/**\n * Index file builder for automated exports\n *\n * Automatically generates index files that export all types and functions\n * from a directory, with support for grouping and namespaces.\n */\n\nimport type { CodegenLogger } from \"../../../../utils/codegen-logger\";\nimport type { FileManager } from \"../FileManager\";\nimport type { TemplateEngine } from \"../types\";\n\nexport interface IndexBuilderConfig {\n directory: string;\n fileManager: FileManager;\n templateEngine?: TemplateEngine;\n logger: CodegenLogger;\n}\n\n/**\n * Builder for index files with intelligent export management\n *\n * Features:\n * - Automatic export detection\n * - Namespace support\n * - Export grouping\n * - Custom headers\n * - Template support\n */\nexport class IndexBuilder {\n private readonly config: IndexBuilderConfig;\n private readonly exports = new Map<string, string>(); // symbol -> from path\n private readonly namespaces = new Map<string, string>(); // namespace -> path\n private readonly reExports = new Map<string, string>(); // export all from path\n private header = \"\";\n private footer = \"\";\n private groupingFunction?: (exportName: string) => string;\n private sortFunction?: (a: [string, string], b: [string, string]) => number;\n\n constructor(config: IndexBuilderConfig) {\n this.config = config;\n }\n\n /**\n * Add exports from a specific file\n * @param exportNames Export names\n * @param fromPath Path to file (without extension)\n */\n withExports(exportNames: string[], fromPath: string): IndexBuilder {\n for (const name of exportNames) {\n this.exports.set(name, fromPath);\n }\n return this;\n }\n\n /**\n * Add a single export\n * @param exportName Export name\n * @param fromPath Path to file\n */\n withExport(exportName: string, fromPath: string): IndexBuilder {\n this.exports.set(exportName, fromPath);\n return this;\n }\n\n /**\n * Add namespace exports\n * @param namespaces Map of namespace to path\n */\n withNamespaces(namespaces: Record<string, string>): IndexBuilder {\n for (const [ns, path] of Object.entries(namespaces)) {\n this.namespaces.set(ns, path);\n }\n return this;\n }\n\n /**\n * Add namespace export\n * @param namespace Namespace name\n * @param path Path to export as namespace\n */\n withNamespace(namespace: string, path: string): IndexBuilder {\n this.namespaces.set(namespace, path);\n return this;\n }\n\n /**\n * Re-export all from paths\n * @param paths Paths to re-export all from\n */\n withReExports(paths: string[]): IndexBuilder {\n for (const path of paths) {\n this.reExports.set(path, path);\n }\n return this;\n }\n\n /**\n * Add re-export\n * @param path Path to re-export all from\n */\n withReExport(path: string): IndexBuilder {\n this.reExports.set(path, path);\n return this;\n }\n\n /**\n * Set header content\n * @param header Header content\n */\n withHeader(header: string): IndexBuilder {\n this.header = header;\n return this;\n }\n\n /**\n * Set footer content\n * @param footer Footer content\n */\n withFooter(footer: string): IndexBuilder {\n this.footer = footer;\n return this;\n }\n\n /**\n * Group exports by function\n * @param fn Function that returns group name for export\n */\n groupBy(fn: (exportName: string) => string): IndexBuilder {\n this.groupingFunction = fn;\n return this;\n }\n\n /**\n * Sort exports by function\n * @param fn Sort function for [exportName, fromPath] tuples\n */\n sortBy(fn: (a: [string, string], b: [string, string]) => number): IndexBuilder {\n this.sortFunction = fn;\n return this;\n }\n\n /**\n * Auto-discover exports from directory\n * @param filePattern Pattern to match files (e.g., \"*.ts\")\n */\n async autoDiscover(_filePattern?: string): Promise<IndexBuilder> {\n // This is a placeholder - in a real implementation, this would:\n // 1. Read all files in the directory\n // 2. Parse TypeScript/JavaScript to extract exports\n // 3. Add them to the exports map\n\n this.config.logger.debug(`Auto-discovering exports in ${this.config.directory}`);\n\n // For now, just log that this feature would be implemented\n this.config.logger.warn(\"Auto-discovery not yet implemented - manually add exports\");\n\n return this;\n }\n\n /**\n * Save the index file\n */\n async save(): Promise<string> {\n const content = this.generateContent();\n const indexPath = `${this.config.directory}/index.ts`;\n\n const result = await this.config.fileManager.writeFile(indexPath, content);\n this.config.logger.debug(`Generated index file: ${indexPath}`);\n\n return result.path;\n }\n\n /**\n * Build content without saving (for preview)\n */\n build(): string {\n return this.generateContent();\n }\n\n /**\n * Generate the index file content\n */\n private generateContent(): string {\n const lines: string[] = [];\n\n // Add header\n if (this.header) {\n lines.push(this.header);\n lines.push(\"\");\n }\n\n // Add re-exports first\n if (this.reExports.size > 0) {\n lines.push(\"// Re-exports\");\n for (const path of this.reExports.values()) {\n lines.push(`export * from './${path}';`);\n }\n lines.push(\"\");\n }\n\n // Process exports\n if (this.exports.size > 0) {\n if (this.groupingFunction) {\n this.generateGroupedExports(lines);\n } else {\n this.generateSimpleExports(lines);\n }\n lines.push(\"\");\n }\n\n // Add namespace exports\n if (this.namespaces.size > 0) {\n lines.push(\"// Namespace exports\");\n const sortedNamespaces = Array.from(this.namespaces.entries()).sort();\n for (const [ns, path] of sortedNamespaces) {\n lines.push(`export * as ${ns} from './${path}';`);\n }\n lines.push(\"\");\n }\n\n // Add footer\n if (this.footer) {\n lines.push(this.footer);\n }\n\n // Clean up extra empty lines\n const content = lines\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n return `${content}\\n`; // Ensure file ends with newline\n }\n\n /**\n * Generate simple exports without grouping\n */\n private generateSimpleExports(lines: string[]): void {\n lines.push(\"// Exports\");\n\n let exportEntries = Array.from(this.exports.entries());\n\n // Apply custom sorting if provided\n if (this.sortFunction) {\n exportEntries = exportEntries.sort(this.sortFunction);\n } else {\n // Default: sort by export name\n exportEntries = exportEntries.sort(([a], [b]) => a.localeCompare(b));\n }\n\n // Group by path for cleaner output\n const exportsByPath = new Map<string, string[]>();\n for (const [exportName, fromPath] of exportEntries) {\n if (!exportsByPath.has(fromPath)) {\n exportsByPath.set(fromPath, []);\n }\n exportsByPath.get(fromPath)?.push(exportName);\n }\n\n // Generate export statements\n for (const [path, exports] of exportsByPath) {\n const sortedExports = exports.sort();\n if (sortedExports.length === 1) {\n lines.push(`export type { ${sortedExports[0]} } from './${path}';`);\n } else if (sortedExports.length <= 3) {\n lines.push(`export type { ${sortedExports.join(\", \")} } from './${path}';`);\n } else {\n lines.push(`export type {`);\n sortedExports.forEach((exp, index) => {\n const isLast = index === sortedExports.length - 1;\n lines.push(`\\t${exp}${isLast ? \"\" : \",\"}`);\n });\n lines.push(`} from './${path}';`);\n }\n }\n }\n\n /**\n * Generate grouped exports\n */\n private generateGroupedExports(lines: string[]): void {\n if (!this.groupingFunction) return;\n\n const groups = new Map<string, Map<string, string[]>>();\n\n // Group exports\n for (const [exportName, fromPath] of this.exports) {\n const group = this.groupingFunction(exportName);\n\n if (!groups.has(group)) {\n groups.set(group, new Map());\n }\n\n const groupMap = groups.get(group)!;\n if (!groupMap.has(fromPath)) {\n groupMap.set(fromPath, []);\n }\n\n groupMap.get(fromPath)?.push(exportName);\n }\n\n // Generate grouped output\n const sortedGroups = Array.from(groups.entries()).sort();\n\n for (const [groupName, groupExports] of sortedGroups) {\n lines.push(`// ${groupName}`);\n\n for (const [path, exports] of groupExports) {\n const sortedExports = exports.sort();\n if (sortedExports.length === 1) {\n lines.push(`export type { ${sortedExports[0]} } from './${path}';`);\n } else {\n lines.push(`export type { ${sortedExports.join(\", \")} } from './${path}';`);\n }\n }\n\n lines.push(\"\");\n }\n }\n\n /**\n * Get current exports (for testing/debugging)\n */\n getExports(): Map<string, string> {\n return new Map(this.exports);\n }\n\n /**\n * Get current namespaces (for testing/debugging)\n */\n getNamespaces(): Map<string, string> {\n return new Map(this.namespaces);\n }\n\n /**\n * Get current re-exports (for testing/debugging)\n */\n getReExports(): Map<string, string> {\n return new Map(this.reExports);\n }\n}\n","/**\n * A code generation friendly representation of FHIR StructureDefinition and\n * FHIR Schema designed to simplify SDK resource classes/types generation.\n */\n\nimport type { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport type * as FS from \"@atomic-ehr/fhirschema\";\n\nexport type Name = string & { readonly __brand: unique symbol };\nexport type CanonicalUrl = string & { readonly __brand: unique symbol };\n\nexport const extractNameFromCanonical = (canonical: CanonicalUrl, dropFragment = true) => {\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return localName;\n};\n\nexport interface PackageMeta {\n name: string;\n version: string;\n}\n\nexport const packageMetaToFhir = (packageMeta: PackageMeta) => `${packageMeta.name}#${packageMeta.version}`;\nexport const packageMetaToNpm = (packageMeta: PackageMeta) => `${packageMeta.name}@${packageMeta.version}`;\nexport const fhirToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"#\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\nexport const npmToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"@\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\n\nexport type RichFHIRSchema = Omit<FS.FHIRSchema, \"package_meta\" | \"base\" | \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n base: CanonicalUrl;\n};\n\nexport const enrichFHIRSchema = (schema: FS.FHIRSchema, packageMeta?: PackageMeta): RichFHIRSchema => {\n // FIXME: required params\n if (!packageMeta) {\n packageMeta = { name: \"undefined\", version: \"undefined\" };\n }\n return {\n ...schema,\n package_meta: schema.package_meta || packageMeta,\n name: schema.name as Name,\n url: schema.url as CanonicalUrl,\n base: schema.base as CanonicalUrl,\n };\n};\n\ntype IdentifierBase = {\n name: Name;\n url: CanonicalUrl;\n package: string;\n version: string;\n};\n\ntype PrimitiveIdentifier = { kind: \"primitive-type\" } & IdentifierBase;\ntype ComplexTypeIdentifier = { kind: \"complex-type\" } & IdentifierBase;\ntype ResourceIdentifier = { kind: \"resource\" } & IdentifierBase;\nexport type ValueSetIdentifier = { kind: \"value-set\" } & IdentifierBase;\nexport type NestedIdentifier = { kind: \"nested\" } & IdentifierBase;\nexport type BindingIdentifier = { kind: \"binding\" } & IdentifierBase;\ntype ProfileIdentifier = { kind: \"profile\" } & IdentifierBase;\ntype LogicalIdentifier = { kind: \"logical\" } & IdentifierBase;\n\nexport type Identifier =\n | PrimitiveIdentifier\n | ComplexTypeIdentifier\n | ResourceIdentifier\n | NestedIdentifier\n | BindingIdentifier\n | ValueSetIdentifier\n | ProfileIdentifier\n | LogicalIdentifier;\n\nexport const isPrimitiveIdentifier = (id: Identifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: Identifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: Identifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport type TypeSchema =\n | RegularTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\nexport const isFhirSchemaBased = (\n schema: TypeSchema | undefined,\n): schema is RegularTypeSchema | PrimitiveTypeSchema | BindingTypeSchema | ProfileTypeSchema => {\n return schema?.identifier.kind !== \"value-set\";\n};\n\nexport const isSpecializationTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return (\n schema?.identifier.kind === \"resource\" ||\n schema?.identifier.kind === \"complex-type\" ||\n schema?.identifier.kind === \"logical\"\n );\n};\n\nexport const isComplexTypeTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"complex-type\";\n};\n\nexport const isResourceTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"resource\";\n};\n\nexport const isPrimitiveTypeSchema = (schema: TypeSchema | undefined): schema is PrimitiveTypeSchema => {\n return schema?.identifier.kind === \"primitive-type\";\n};\n\nexport const isLogicalTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"logical\";\n};\n\nexport const isProfileTypeSchema = (schema: TypeSchema | undefined): schema is ProfileTypeSchema => {\n return schema?.identifier.kind === \"profile\";\n};\n\nexport function isBindingSchema(schema: TypeSchema | undefined): schema is BindingTypeSchema {\n return schema?.identifier.kind === \"binding\";\n}\n\nexport function isValueSetTypeSchema(schema: TypeSchema | undefined): schema is ValueSetTypeSchema {\n return schema?.identifier.kind === \"value-set\";\n}\n\ninterface PrimitiveTypeSchema {\n identifier: PrimitiveIdentifier;\n description?: string;\n base: Identifier;\n dependencies?: Identifier[];\n}\n\nexport interface NestedType {\n identifier: NestedIdentifier;\n base: Identifier;\n fields: Record<string, Field>;\n}\n\nexport interface ProfileTypeSchema {\n identifier: ProfileIdentifier;\n base: Identifier;\n description?: string;\n fields?: Record<string, Field>;\n constraints?: Record<string, ProfileConstraint>;\n extensions?: ProfileExtension[];\n validation?: ValidationRule[];\n dependencies?: Identifier[];\n metadata?: ProfileMetadata;\n nested?: NestedType[];\n}\n\nexport interface ProfileConstraint {\n min?: number;\n max?: string;\n mustSupport?: boolean;\n fixedValue?: any;\n patternValue?: any;\n binding?: {\n strength: \"required\" | \"extensible\" | \"preferred\" | \"example\";\n valueSet: string;\n };\n types?: Array<{\n code: string;\n profile?: string[];\n targetProfile?: string[];\n }>;\n slicing?: {\n discriminator: any[];\n rules: string;\n ordered?: boolean;\n };\n}\n\nexport interface ProfileExtension {\n path: string;\n profile: string | string[];\n min?: number;\n max?: string;\n mustSupport?: boolean;\n}\n\nexport interface ValidationRule {\n path: string;\n key: string;\n severity: \"error\" | \"warning\" | \"information\";\n human: string;\n expression?: string;\n}\n\nexport interface ProfileMetadata {\n publisher?: string;\n contact?: any[];\n copyright?: string;\n purpose?: string;\n experimental?: boolean;\n date?: string;\n jurisdiction?: any[];\n package?: string;\n}\n\nexport interface RegularTypeSchema {\n // TODO: restrict to ResourceIdentifier | ComplexTypeIdentifier | LogicalIdentifier\n identifier: Identifier;\n base?: Identifier;\n description?: string;\n fields?: { [k: string]: Field };\n nested?: NestedType[];\n dependencies?: Identifier[];\n}\n\nexport interface RegularField {\n type: Identifier;\n reference?: Identifier[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldDeclaration {\n choices: string[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldInstance {\n choiceOf: string;\n type: Identifier;\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n reference?: Identifier[];\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport type Concept = {\n code: string;\n display?: string;\n system?: string;\n};\n\nexport interface ValueSetTypeSchema {\n identifier: ValueSetIdentifier;\n description?: string;\n concept?: Concept[];\n compose?: ValueSetCompose;\n}\n\nexport interface BindingTypeSchema {\n identifier: BindingIdentifier;\n description?: string;\n type?: Identifier;\n strength?: string;\n enum?: string[];\n valueset?: ValueSetIdentifier;\n dependencies?: Identifier[];\n}\n\nexport type Field = RegularField | ChoiceFieldDeclaration | ChoiceFieldInstance;\n\nexport const isNotChoiceDeclarationField = (field: Field | undefined): field is RegularField | ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices === undefined;\n};\n\nexport const isChoiceDeclarationField = (field: Field | undefined): field is ChoiceFieldDeclaration => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices !== undefined;\n};\n\nexport type TypeschemaParserOptions = {\n format?: \"auto\" | \"ndjson\" | \"json\";\n validate?: boolean;\n strict?: boolean;\n};\n\n///////////////////////////////////////////////////////////\n// ValueSet\n///////////////////////////////////////////////////////////\n\nexport const isValueSet = (res: any): res is ValueSet => {\n return res?.resourceType === \"ValueSet\";\n};\n\nexport type ValueSet = {\n resourceType: \"ValueSet\";\n package_meta?: PackageMeta;\n id: string;\n name?: string;\n url?: string;\n description?: string;\n compose?: ValueSetCompose;\n expansion?: {\n contains: Concept[];\n };\n experimental?: boolean;\n immutable?: boolean;\n extension?: any[];\n status?: string;\n identifier?: any[];\n title?: string;\n publisher?: string;\n version?: string;\n meta?: any;\n date?: string;\n contact?: any;\n};\n\ntype ValueSetCompose = {\n include: {\n concept?: Concept[];\n system?: string;\n filter?: {}[];\n }[];\n};\n\nexport const isCodeSystem = (res: any): res is CodeSystem => {\n return res?.resourceType === \"CodeSystem\";\n};\n\nexport type CodeSystem = {\n resourceType: \"CodeSystem\";\n url: CanonicalUrl;\n concept: CodeSystemConcept[];\n};\n\nexport type CodeSystemConcept = {\n concept: CodeSystemConcept[];\n code: string;\n display: string;\n};\n\nexport type RichValueSet = Omit<ValueSet, \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n};\n\nexport const enrichValueSet = (vs: ValueSet, packageMeta: PackageMeta): RichValueSet => {\n if (!vs.url) throw new Error(\"ValueSet must have a URL\");\n if (!vs.name) throw new Error(\"ValueSet must have a name\");\n return {\n ...vs,\n package_meta: vs.package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n\nexport interface TypeschemaGeneratorOptions {\n verbose?: boolean;\n logger?: import(\"../utils/codegen-logger\").CodegenLogger;\n treeshake?: string[];\n manager?: ReturnType<typeof CanonicalManager> | null;\n}\n","/**\n * Identifier Building Utilities\n *\n * Functions for creating TypeSchema identifiers from FHIRSchema entities\n */\n\nimport type {\n BindingIdentifier,\n CanonicalUrl,\n Identifier,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n ValueSetIdentifier,\n} from \"@typeschema/types\";\nimport type { Register } from \"../register\";\n\nexport function dropVersionFromUrl(url: CanonicalUrl): CanonicalUrl {\n const baseUrl = url.split(\"|\")[0];\n return baseUrl ? (baseUrl as CanonicalUrl) : url;\n}\n\nfunction getVersionFromUrl(url: CanonicalUrl): string | undefined {\n const version = url.split(\"|\")[1];\n return version;\n}\n\nfunction determineKind(fhirSchema: RichFHIRSchema): Identifier[\"kind\"] {\n if (fhirSchema.derivation === \"constraint\") return \"profile\";\n if (fhirSchema.kind === \"primitive-type\") return \"primitive-type\";\n if (fhirSchema.kind === \"complex-type\") return \"complex-type\";\n if (fhirSchema.kind === \"resource\") return \"resource\";\n return \"resource\";\n}\n\nexport function mkIdentifier(fhirSchema: RichFHIRSchema): Identifier {\n return {\n kind: determineKind(fhirSchema),\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: fhirSchema.name,\n url: fhirSchema.url,\n };\n}\n\nconst getValueSetName = (url: CanonicalUrl): Name => {\n const urlParts = url.split(\"/\");\n const lastSegment = urlParts[urlParts.length - 1];\n\n if (lastSegment && lastSegment.length > 0) {\n return lastSegment\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\") as Name;\n }\n return url as string as Name;\n};\n\nexport function mkValueSetIdentifierByUrl(\n register: Register,\n pkg: PackageMeta,\n fullValueSetUrl: CanonicalUrl,\n): ValueSetIdentifier {\n const valueSetUrl = dropVersionFromUrl(fullValueSetUrl);\n const valueSetNameFallback = getValueSetName(valueSetUrl);\n const valuesSetFallback: RichValueSet = {\n resourceType: \"ValueSet\",\n package_meta: {\n name: \"missing_valuesets\",\n version: getVersionFromUrl(valueSetUrl) || \"0.0.0\",\n },\n name: valueSetNameFallback,\n id: fullValueSetUrl,\n url: valueSetUrl,\n };\n const valueSet: RichValueSet = register.resolveVs(pkg, valueSetUrl) || valuesSetFallback;\n // NOTE: ignore valueSet.name due to human name\n const valueSetName: Name =\n valueSet?.id && !/^[a-zA-Z0-9_-]{20,}$/.test(valueSet.id) ? (valueSet.id as Name) : valueSetNameFallback;\n\n return {\n kind: \"value-set\",\n package: valueSet.package_meta.name,\n version: valueSet.package_meta.version,\n name: valueSetName,\n url: valueSetUrl,\n };\n}\n\nexport function mkBindingIdentifier(\n fhirSchema: RichFHIRSchema,\n path: string[],\n bindingName?: string,\n): BindingIdentifier {\n const pathStr = path.join(\".\");\n // NOTE: if SD specify `bindingName`, the definition should be shared between all\n // packages. So we put it in the dedicated shared package.\n // TODO: provide setting for `shared` package name.\n const [pkg, name, url] = bindingName\n ? [{ name: \"shared\", version: \"1.0.0\" }, bindingName, `urn:fhir:binding:${bindingName}`]\n : [fhirSchema.package_meta, `${fhirSchema.name}.${pathStr}_binding`, `${fhirSchema.url}#${pathStr}_binding`];\n return {\n kind: \"binding\",\n package: pkg.name,\n version: pkg.version,\n name: name as Name,\n url: url as CanonicalUrl,\n };\n}\n","/**\n * Nested Types (BackboneElement) Handling\n *\n * Functions for extracting and transforming nested types from FHIRSchema\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { CanonicalUrl, Field, Identifier, Name, NestedIdentifier, NestedType, RichFHIRSchema } from \"../types\";\nimport { isNestedElement, mkField, mkNestedField } from \"./field-builder\";\n\nexport function mkNestedIdentifier(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n logger?: CodegenLogger,\n): NestedIdentifier {\n // NOTE: profiles should no redefine types, they should reuse already defined in previous specializations\n const nestedTypeOrigins = {} as Record<Name, CanonicalUrl>;\n if (fhirSchema.derivation === \"constraint\") {\n const specializations = register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url);\n const nestedTypeGenealogy = specializations\n .map((fs) => mkNestedTypes(register, fs, logger))\n .filter((e) => e !== undefined)\n .flat();\n for (const nt of nestedTypeGenealogy.reverse()) {\n nestedTypeOrigins[nt.identifier.name] = nt.identifier.url;\n }\n }\n const nestedName = path.join(\".\") as Name;\n const url = nestedTypeOrigins[nestedName] ?? (`${fhirSchema.url}#${nestedName}` as CanonicalUrl);\n return {\n kind: \"nested\",\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: nestedName,\n url: url,\n };\n}\n\nfunction collectNestedElements(\n fhirSchema: FHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n): [string[], FHIRSchemaElement][] {\n const nested: [string[], FHIRSchemaElement][] = [];\n\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n\n if (isNestedElement(element)) {\n nested.push([path, element]);\n }\n\n if (element.elements) {\n nested.push(...collectNestedElements(fhirSchema, path, element.elements));\n }\n }\n\n return nested;\n}\n\nfunction transformNestedElements(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n logger?: CodegenLogger,\n): Record<string, Field> {\n const fields: Record<string, Field> = {};\n\n for (const [key, _element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (isNestedElement(elemSnapshot)) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot, logger);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nexport function mkNestedTypes(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): NestedType[] | undefined {\n if (!fhirSchema.elements) return undefined;\n\n const nested = collectNestedElements(fhirSchema, [], fhirSchema.elements).filter(\n ([_, element]) => element.elements && Object.keys(element.elements).length > 0,\n );\n\n const nestedTypes = [] as NestedType[];\n for (const [path, element] of nested) {\n const identifier = mkNestedIdentifier(register, fhirSchema, path, logger);\n\n let baseName: Name;\n if (element.type === \"BackboneElement\" || !element.type) {\n baseName = \"BackboneElement\" as Name;\n } else {\n baseName = element.type as Name;\n }\n const baseUrl = register.ensureSpecializationCanonicalUrl(baseName);\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n if (!baseFs) throw new Error(`Could not resolve base type ${baseName}`);\n const base: Identifier = {\n kind: \"complex-type\",\n package: baseFs.package_meta.name,\n version: baseFs.package_meta.version,\n name: baseName,\n url: baseUrl,\n };\n\n const fields = transformNestedElements(register, fhirSchema, path, element.elements!, logger);\n\n const nestedType: NestedType = {\n identifier,\n base,\n fields,\n };\n nestedTypes.push(nestedType);\n }\n\n nestedTypes.sort((a, b) => a.identifier.url.localeCompare(b.identifier.url));\n\n return nestedTypes.length === 0 ? undefined : nestedTypes;\n}\n\nexport function extractNestedDependencies(nestedTypes: NestedType[]): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const nested of nestedTypes) {\n if (nested.base) {\n deps.push(nested.base);\n }\n\n for (const field of Object.values(nested.fields || {})) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n }\n return deps;\n}\n","/**\n * Field Building Utilities\n *\n * Functions for transforming FHIRSchema elements into TypeSchema fields\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { packageMetaToFhir } from \"@typeschema/types\";\nimport type { BindingIdentifier, Field, Identifier, Name, RegularField, RichFHIRSchema } from \"../types\";\nimport { buildEnum } from \"./binding\";\nimport { mkBindingIdentifier, mkIdentifier } from \"./identifier\";\nimport { mkNestedIdentifier } from \"./nested-types\";\n\nfunction isRequired(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1]!;\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.required || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.required || [];\n });\n return new Set(requires).has(fieldName);\n}\n\nfunction isExcluded(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.excluded || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.excluded || [];\n });\n\n return new Set(requires).has(fieldName);\n}\n\nconst buildReferences = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n): Identifier[] | undefined => {\n if (!element.refers) return undefined;\n return element.refers.map((ref) => {\n const curl = register.ensureSpecializationCanonicalUrl(ref as Name);\n const fs = register.resolveFs(fhirSchema.package_meta, curl);\n if (!fs) throw new Error(`Failed to resolve fs for ${curl}`);\n return mkIdentifier(fs);\n });\n};\n\nexport function buildFieldType(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): Identifier | undefined {\n if (element.elementReference) {\n const refPath = element.elementReference\n .slice(1) // drop canonicalUrl\n .filter((_, i) => i % 2 === 1); // drop `elements` from path\n return mkNestedIdentifier(register, fhirSchema, refPath, logger);\n } else if (element.type) {\n const url = register.ensureSpecializationCanonicalUrl(element.type);\n const fieldFs = register.resolveFs(fhirSchema.package_meta, url);\n if (!fieldFs)\n throw new Error(\n `Could not resolve field type: '${element.type}' (from '${fhirSchema.url}' in '${packageMetaToFhir(fhirSchema.package_meta)}')`,\n );\n\n return mkIdentifier(fieldFs);\n } else if (element.choices) {\n return undefined;\n } else if (fhirSchema.derivation === \"constraint\") {\n return undefined; // FIXME: should be removed\n } else {\n logger?.error(\n `Can't recognize element type '${fhirSchema.url}' (${fhirSchema.derivation}) at '${path.join(\".\")}': ${JSON.stringify(element, undefined, 2)}`,\n );\n throw new Error(`Unrecognized element type`);\n }\n}\n\nexport const mkField = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): Field => {\n let binding: BindingIdentifier | undefined;\n let enumValues: string[] | undefined;\n if (element.binding) {\n binding = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);\n\n if (element.binding.strength === \"required\" && element.type === \"code\") {\n enumValues = buildEnum(register, fhirSchema, element, logger);\n }\n }\n\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n // TODO: should be an exception\n if (!fieldType)\n logger?.warn(`Field type not found for '${fhirSchema.url}#${path.join(\".\")}' (${fhirSchema.derivation})`);\n return {\n type: fieldType!,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n\n reference: buildReferences(register, fhirSchema, element),\n\n array: element.array || false,\n min: element.min,\n max: element.max,\n\n choices: element.choices,\n choiceOf: element.choiceOf,\n\n binding: binding,\n enum: enumValues,\n };\n};\n\nexport function isNestedElement(element: FHIRSchemaElement): boolean {\n const isBackbone = element.type === \"BackboneElement\";\n const isElement =\n element.type === \"Element\" && element.elements !== undefined && Object.keys(element.elements).length > 0;\n\n // TODO: Observation <- vitalsigns <- bodyweight\n // In Observation we have value[x] with choices\n // In bodyweight we have valueQuantity with additional constaraints on it's elements\n // So we need to build nested type from Quantity for here, but don't do that right now.\n const elementsWithoutType =\n element.type === undefined &&\n element.choiceOf === undefined &&\n element.elements !== undefined &&\n Object.keys(element.elements).length > 0;\n return isBackbone || isElement || elementsWithoutType;\n}\n\nexport function mkNestedField(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): RegularField {\n const nestedIdentifier = mkNestedIdentifier(register, fhirSchema, path, logger);\n return {\n type: nestedIdentifier,\n array: element.array || false,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n };\n}\n","/**\n * Binding and Enum Handling\n *\n * Functions for processing value set bindings and generating enums\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\n CodeSystem,\n CodeSystemConcept,\n Concept,\n Identifier,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { buildFieldType } from \"./field-builder\";\nimport { dropVersionFromUrl, mkBindingIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\n\nexport function extractValueSetConceptsByUrl(\n register: Register,\n pkg: PackageMeta,\n valueSetUrl: CanonicalUrl,\n logger?: CodegenLogger,\n): Concept[] | undefined {\n const cleanUrl = dropVersionFromUrl(valueSetUrl) || valueSetUrl;\n const valueSet = register.resolveVs(pkg, cleanUrl as CanonicalUrl);\n if (!valueSet) return undefined;\n return extractValueSetConcepts(register, valueSet, logger);\n}\n\nfunction extractValueSetConcepts(\n register: Register,\n valueSet: RichValueSet,\n _logger?: CodegenLogger,\n): Concept[] | undefined {\n if (valueSet.expansion?.contains) return valueSet.expansion.contains;\n\n const concepts = [] as Concept[];\n if (valueSet.compose?.include) {\n for (const include of valueSet.compose.include) {\n if (include.concept) {\n for (const concept of include.concept) {\n concepts.push({\n system: include.system,\n code: concept.code,\n display: concept.display,\n });\n }\n } else if (include.system && !include.filter) {\n try {\n const codeSystem: CodeSystem = register.resolveAny(include.system as CanonicalUrl);\n if (codeSystem?.concept) {\n const extractConcepts = (conceptList: CodeSystemConcept[], system: string) => {\n for (const concept of conceptList) {\n concepts.push({\n system,\n code: concept.code,\n display: concept.display,\n });\n if (concept.concept) {\n extractConcepts(concept.concept, system);\n }\n }\n };\n extractConcepts(codeSystem.concept, include.system);\n }\n } catch {\n // Ignore if we can't resolve the CodeSystem\n }\n }\n }\n }\n return concepts.length > 0 ? concepts : undefined;\n}\n\nconst MAX_ENUM_LENGTH = 100;\n\nexport function buildEnum(\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): string[] | undefined {\n if (!element.binding) return undefined;\n\n const strength = element.binding.strength;\n const valueSetUrl = element.binding.valueSet as CanonicalUrl;\n if (!valueSetUrl) return undefined;\n\n // Enhanced support for more binding strengths and types\n // Generate enum for:\n // 1. Required bindings (always)\n // 2. Extensible bindings on code types (for better type safety)\n // 3. Preferred bindings on code types (for common usage patterns)\n // 4. Extensible bindings on Coding types (broader coverage)\n const shouldGenerateEnum =\n strength === \"required\" ||\n (strength === \"extensible\" && (element.type === \"code\" || element.type === \"Coding\")) ||\n (strength === \"preferred\" && (element.type === \"code\" || element.type === \"Coding\"));\n\n if (!shouldGenerateEnum) return undefined;\n\n const concepts = extractValueSetConceptsByUrl(register, fhirSchema.package_meta, valueSetUrl);\n if (!concepts || concepts.length === 0) return undefined;\n\n const codes = concepts\n .map((c) => c.code)\n .filter((code) => code && typeof code === \"string\" && code.trim().length > 0);\n\n if (codes.length > MAX_ENUM_LENGTH) {\n logger?.dry_warn(\n `Value set ${valueSetUrl} has ${codes.length} which is more than ${MAX_ENUM_LENGTH} codes, which may cause issues with code generation.`,\n );\n return undefined;\n }\n return codes.length > 0 ? codes : undefined;\n}\n\nfunction generateBindingSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): BindingTypeSchema | undefined {\n if (!element.binding?.valueSet) return undefined;\n\n const identifier = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n const valueSetIdentifier = mkValueSetIdentifierByUrl(\n register,\n fhirSchema.package_meta,\n element.binding.valueSet as CanonicalUrl,\n );\n\n const dependencies: Identifier[] = [];\n if (fieldType) {\n dependencies.push(fieldType);\n }\n dependencies.push(valueSetIdentifier);\n\n const enumValues = buildEnum(register, fhirSchema, element, logger);\n\n return {\n identifier,\n type: fieldType,\n valueset: valueSetIdentifier,\n strength: element.binding.strength,\n enum: enumValues,\n dependencies,\n };\n}\n\nexport function collectBindingSchemas(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): BindingTypeSchema[] {\n const processedPaths = new Set<string>();\n if (!fhirSchema.elements) return [];\n\n const bindings: BindingTypeSchema[] = [];\n function collectBindings(elements: Record<string, FHIRSchemaElement>, parentPath: string[]) {\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const pathKey = path.join(\".\");\n\n if (processedPaths.has(pathKey)) continue;\n processedPaths.add(pathKey);\n\n if (element.binding) {\n const binding = generateBindingSchema(register, fhirSchema, path, element, logger);\n if (binding) {\n bindings.push(binding);\n }\n }\n\n if (element.elements) {\n collectBindings(element.elements, path);\n }\n }\n }\n collectBindings(fhirSchema.elements, []);\n\n bindings.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n\n const uniqueBindings: BindingTypeSchema[] = [];\n const seenUrls = new Set<string>();\n\n for (const binding of bindings) {\n if (!seenUrls.has(binding.identifier.url)) {\n seenUrls.add(binding.identifier.url);\n uniqueBindings.push(binding);\n }\n }\n\n return uniqueBindings;\n}\n","/**\n * Main FHIRSchema to TypeSchema Transformer\n *\n * Core transformation logic for converting FHIRSchema to TypeSchema format\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport {\n type Field,\n type Identifier,\n isNestedIdentifier,\n isProfileIdentifier,\n type NestedType,\n packageMetaToFhir,\n type RichFHIRSchema,\n type RichValueSet,\n type TypeSchema,\n type ValueSetTypeSchema,\n} from \"@typeschema/types\";\nimport { collectBindingSchemas, extractValueSetConceptsByUrl } from \"./binding\";\nimport { isNestedElement, mkField, mkNestedField } from \"./field-builder\";\nimport { mkIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\nimport { extractNestedDependencies, mkNestedTypes } from \"./nested-types\";\n\nexport function mkFields(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement> | undefined,\n logger?: CodegenLogger,\n): Record<string, Field> | undefined {\n if (!elements) return undefined;\n\n const fields: Record<string, Field> = {};\n for (const key of register.getAllElementKeys(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n if (isNestedElement(elemSnapshot)) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot, logger);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nfunction extractFieldDependencies(fields: Record<string, Field>): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const field of Object.values(fields)) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n\n return deps;\n}\n\n/**\n * Check if a FHIR schema represents an extension\n */\nfunction isExtensionSchema(fhirSchema: FHIRSchema, _identifier: Identifier): boolean {\n // Check if this is based on Extension\n if (fhirSchema.base === \"Extension\" || fhirSchema.base === \"http://hl7.org/fhir/StructureDefinition/Extension\") {\n return true;\n }\n\n // Check if the URL indicates this is an extension\n if (fhirSchema.url?.includes(\"/extension/\") || fhirSchema.url?.includes(\"-extension\")) {\n return true;\n }\n\n // Check if the name indicates this is an extension\n if (fhirSchema.name?.toLowerCase().includes(\"extension\")) {\n return true;\n }\n\n // Check if the type is Extension\n if (fhirSchema.type === \"Extension\") {\n return true;\n }\n\n return false;\n}\n\nexport async function transformValueSet(\n register: Register,\n valueSet: RichValueSet,\n logger?: CodegenLogger,\n): Promise<ValueSetTypeSchema> {\n if (!valueSet.url) throw new Error(\"ValueSet URL is required\");\n\n const identifier = mkValueSetIdentifierByUrl(register, valueSet.package_meta, valueSet.url);\n const concept = extractValueSetConceptsByUrl(register, valueSet.package_meta, valueSet.url, logger);\n return {\n identifier: identifier,\n description: valueSet.description,\n concept: concept,\n compose: !concept ? valueSet.compose : undefined,\n };\n}\n\nexport function extractDependencies(\n identifier: Identifier,\n base: Identifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedType[] | undefined,\n): Identifier[] | undefined {\n const deps = [];\n if (base) deps.push(base);\n if (fields) deps.push(...extractFieldDependencies(fields));\n if (nestedTypes) deps.push(...extractNestedDependencies(nestedTypes));\n\n const uniqDeps: Record<string, Identifier> = {};\n for (const dep of deps) {\n if (dep.url === identifier.url) continue;\n uniqDeps[dep.url] = dep;\n }\n\n const localNestedTypeUrls = new Set(nestedTypes?.map((nt) => nt.identifier.url));\n\n const result = Object.values(uniqDeps)\n .filter((e) => {\n if (isProfileIdentifier(identifier)) return true;\n if (!isNestedIdentifier(e)) return true;\n return !localNestedTypeUrls.has(e.url);\n })\n .sort((a, b) => a.url.localeCompare(b.url));\n\n return result.length > 0 ? result : undefined;\n}\n\nfunction transformFhirSchemaResource(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): TypeSchema[] {\n const identifier = mkIdentifier(fhirSchema);\n\n let base: Identifier | undefined;\n if (fhirSchema.base && fhirSchema.type !== \"Element\") {\n const baseFs = register.resolveFs(\n fhirSchema.package_meta,\n register.ensureSpecializationCanonicalUrl(fhirSchema.base),\n );\n if (!baseFs) {\n throw new Error(\n `Base resource not found '${fhirSchema.base}' for <${fhirSchema.url}> from ${packageMetaToFhir(fhirSchema.package_meta)}`,\n );\n }\n base = mkIdentifier(baseFs);\n }\n const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);\n const nested = mkNestedTypes(register, fhirSchema, logger);\n const dependencies = extractDependencies(identifier, base, fields, nested);\n\n const typeSchema: TypeSchema = {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies,\n };\n\n const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);\n\n return [typeSchema, ...bindingSchemas];\n}\n\nexport async function transformFhirSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): Promise<TypeSchema[]> {\n const schemas = transformFhirSchemaResource(register, fhirSchema, logger);\n if (isExtensionSchema(fhirSchema, mkIdentifier(fhirSchema))) {\n const schema = schemas[0];\n if (!schema) throw new Error(`Expected schema to be defined`);\n (schema as any).metadata = {\n isExtension: true, // Mark as extension for file organization\n };\n }\n return schemas;\n}\n","/**\n * TypeSchema Cache System\n *\n * Caching system for TypeSchema documents with both in-memory and persistent file-based storage.\n */\n\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { readdir, readFile, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { TypeSchemaConfig } from \"@root/config\";\nimport type { Identifier, TypeSchema } from \"@typeschema/types\";\n\n/**\n * Cached schema metadata for persistence\n */\ninterface CachedSchemaMetadata {\n schema: TypeSchema;\n timestamp: number;\n version: string;\n}\n\n/**\n * TypeSchema Cache with optional persistent storage\n */\nexport class TypeSchemaCache {\n private cache = new Map<string, TypeSchema>();\n private config: TypeSchemaConfig;\n private cacheDir?: string;\n\n constructor(config?: TypeSchemaConfig) {\n this.config = {\n enablePersistence: true,\n cacheDir: \".typeschema-cache\",\n maxAge: 24 * 60 * 60 * 1000, // 24 hours\n validateCached: true,\n ...config,\n };\n\n if (this.config.enablePersistence && this.config.cacheDir) {\n this.cacheDir = this.config.cacheDir;\n }\n }\n\n /**\n * Store a schema in the cache\n */\n async set(schema: TypeSchema): Promise<void> {\n const key = this.generateKey(schema.identifier);\n this.cache.set(key, schema);\n\n // Persist to disk if enabled\n if (this.config.enablePersistence && this.cacheDir) {\n await this.persistSchema(schema);\n }\n }\n\n /**\n * Retrieve a schema by identifier\n */\n get(identifier: Identifier): TypeSchema | null {\n const key = this.generateKey(identifier);\n return this.cache.get(key) || null;\n }\n\n /**\n * Retrieve a schema by URL\n */\n getByUrl(url: string): TypeSchema | null {\n for (const schema of this.cache.values()) {\n if (schema.identifier.url === url) {\n return schema;\n }\n }\n return null;\n }\n\n /**\n * Check if a schema exists in cache\n */\n has(identifier: Identifier): boolean {\n const key = this.generateKey(identifier);\n return this.cache.has(key);\n }\n\n /**\n * Check if a schema exists by URL\n */\n hasByUrl(url: string): boolean {\n for (const schema of this.cache.values()) {\n if (schema.identifier.url === url) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Delete a schema from cache\n */\n delete(identifier: Identifier): boolean {\n const key = this.generateKey(identifier);\n return this.cache.delete(key);\n }\n\n /**\n * Delete a schema by URL\n */\n deleteByUrl(url: string): boolean {\n for (const [key, schema] of this.cache.entries()) {\n if (schema.identifier.url === url) {\n return this.cache.delete(key);\n }\n }\n return false;\n }\n\n /**\n * Get schemas by package\n */\n getByPackage(packageName: string): TypeSchema[] {\n const results: TypeSchema[] = [];\n for (const schema of this.cache.values()) {\n if (schema.identifier.package === packageName) {\n results.push(schema);\n }\n }\n return results;\n }\n\n /**\n * Get schemas by kind\n */\n getByKind(kind: string): TypeSchema[] {\n const results: TypeSchema[] = [];\n for (const schema of this.cache.values()) {\n if (schema.identifier.kind === kind) {\n results.push(schema);\n }\n }\n return results;\n }\n\n /**\n * Store multiple schemas\n */\n setMany(schemas: TypeSchema[]): void {\n for (const schema of schemas) {\n this.set(schema);\n }\n }\n\n /**\n * Clear all cached schemas\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Generate cache key for identifier\n */\n private generateKey(identifier: Identifier): string {\n return `${identifier.package}:${identifier.version}:${identifier.kind}:${identifier.name}`;\n }\n\n /**\n * Initialize cache directory if persistence is enabled\n */\n async initialize(): Promise<void> {\n if (this.config.enablePersistence && this.cacheDir) {\n // Ensure cache directory exists\n if (!existsSync(this.cacheDir)) {\n mkdirSync(this.cacheDir, { recursive: true });\n }\n\n // Load all cached schemas from disk\n await this.loadFromDisk();\n }\n }\n\n /**\n * Load all cached schemas from disk\n */\n private async loadFromDisk(): Promise<void> {\n if (!this.cacheDir || !existsSync(this.cacheDir)) {\n return;\n }\n\n try {\n const files = await readdir(this.cacheDir);\n const schemaFiles = files.filter((f) => f.endsWith(\".typeschema.json\"));\n\n for (const file of schemaFiles) {\n const filePath = join(this.cacheDir, file);\n const stats = await stat(filePath);\n\n // Check if cache is expired\n if (this.config.maxAge) {\n const age = Date.now() - stats.mtimeMs;\n if (age > this.config.maxAge) {\n // Remove expired cache file\n await unlink(filePath);\n continue;\n }\n }\n\n try {\n const content = await readFile(filePath, \"utf-8\");\n const metadata: CachedSchemaMetadata = JSON.parse(content);\n\n // Validate cached schema if configured\n if (this.config.validateCached) {\n // Basic validation - check required fields\n if (!metadata.schema?.identifier) {\n continue;\n }\n }\n\n // Add to in-memory cache\n const key = this.generateKey(metadata.schema.identifier);\n this.cache.set(key, metadata.schema);\n } catch (error) {\n console.warn(`Failed to load cached schema from ${file}:`, error);\n }\n }\n } catch (error) {\n console.warn(\"Failed to load cached schemas from disk:\", error);\n }\n }\n\n /**\n * Persist a schema to disk\n */\n private async persistSchema(schema: TypeSchema): Promise<void> {\n if (!this.cacheDir) {\n return;\n }\n\n // Ensure cache directory exists\n if (!existsSync(this.cacheDir)) {\n mkdirSync(this.cacheDir, { recursive: true });\n }\n\n const metadata: CachedSchemaMetadata = {\n schema,\n timestamp: Date.now(),\n version: schema.identifier.version as string,\n };\n\n // Generate filename from identifier\n const fileName =\n `${schema.identifier.package}-${schema.identifier.version}-${schema.identifier.kind}-${schema.identifier.name}.typeschema.json`.replace(\n /[^a-zA-Z0-9.-]/g,\n \"_\",\n );\n\n const filePath = join(this.cacheDir, fileName);\n\n try {\n await writeFile(filePath, JSON.stringify(metadata, null, 2), \"utf-8\");\n } catch (error) {\n console.warn(`Failed to persist schema to ${filePath}:`, error);\n }\n }\n\n /**\n * Clear cache directory\n */\n async clearDisk(): Promise<void> {\n if (!this.cacheDir || !existsSync(this.cacheDir)) {\n return;\n }\n\n try {\n const files = await readdir(this.cacheDir);\n const schemaFiles = files.filter((f) => f.endsWith(\".typeschema.json\"));\n\n for (const file of schemaFiles) {\n await unlink(join(this.cacheDir, file));\n }\n } catch (error) {\n console.warn(\"Failed to clear cache directory:\", error);\n }\n }\n}\n","/**\n * CodeGen Logger\n *\n * Clean, colorful logging designed for code generation tools\n */\n\nimport pc from \"picocolors\";\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4,\n}\n\nexport interface LogOptions {\n prefix?: string;\n timestamp?: boolean;\n verbose?: boolean;\n suppressLoggingLevel?: LogLevel[] | \"all\";\n}\n\n/**\n * Simple code generation logger with pretty colors and clean formatting\n */\nexport class CodegenLogger {\n private options: LogOptions;\n private dryWarnSet: Set<string> = new Set();\n\n constructor(options: LogOptions = {}) {\n this.options = {\n timestamp: false,\n verbose: false,\n ...options,\n };\n }\n\n private static consoleLevelsMap: Record<LogLevel, Function> = {\n [LogLevel.INFO]: console.log,\n [LogLevel.WARN]: console.warn,\n [LogLevel.ERROR]: console.error,\n [LogLevel.DEBUG]: console.log,\n [LogLevel.SILENT]: () => {},\n };\n\n private formatMessage(level: string, message: string, color: (str: string) => string): string {\n const timestamp = this.options.timestamp ? `${pc.gray(new Date().toLocaleTimeString())} ` : \"\";\n const prefix = this.options.prefix ? `${pc.cyan(`[${this.options.prefix}]`)} ` : \"\";\n return `${timestamp}${color(level)} ${prefix}${message}`;\n }\n\n private isSuppressed(level: LogLevel): boolean {\n return (\n this.options.suppressLoggingLevel === \"all\" || this.options.suppressLoggingLevel?.includes(level) || false\n );\n }\n\n private tryWriteToConsole(level: LogLevel, formattedMessage: string): void {\n if (this.isSuppressed(level)) return;\n const logFn = CodegenLogger.consoleLevelsMap[level] || console.log;\n logFn(formattedMessage);\n }\n\n /**\n * Success message with checkmark\n */\n success(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"\", message, pc.green));\n }\n\n /**\n * Error message with X mark\n */\n error(message: string, error?: Error): void {\n if (this.isSuppressed(LogLevel.ERROR)) return;\n console.error(this.formatMessage(\"X\", message, pc.red));\n if (error && this.options.verbose) {\n console.error(pc.red(` ${error.message}`));\n if (error.stack) {\n console.error(pc.gray(error.stack));\n }\n }\n }\n\n /**\n * Warning message with warning sign\n */\n warn(message: string): void {\n this.tryWriteToConsole(LogLevel.WARN, this.formatMessage(\"!\", message, pc.yellow));\n }\n\n dry_warn(message: string): void {\n if (!this.dryWarnSet.has(message)) {\n this.warn(message);\n this.dryWarnSet.add(message);\n }\n }\n\n /**\n * Info message with info icon\n */\n info(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"i\", message, pc.blue));\n }\n\n /**\n * Debug message (only shows in verbose mode)\n */\n debug(message: string): void {\n if (this.options.verbose) {\n this.tryWriteToConsole(LogLevel.DEBUG, this.formatMessage(\"🐛\", message, pc.magenta));\n }\n }\n\n /**\n * Step message with rocket\n */\n step(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"🚀\", message, pc.cyan));\n }\n\n /**\n * Progress message with clock\n */\n progress(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"⏳\", message, pc.blue));\n }\n\n /**\n * Plain message (no icon, just colored text)\n */\n plain(message: string, color: (str: string) => string = (s) => s): void {\n const timestamp = this.options.timestamp ? `${pc.gray(new Date().toLocaleTimeString())} ` : \"\";\n const prefix = this.options.prefix ? `${pc.cyan(`[${this.options.prefix}]`)} ` : \"\";\n this.tryWriteToConsole(LogLevel.INFO, `${timestamp}${prefix}${color(message)}`);\n }\n\n /**\n * Dimmed/gray text for less important info\n */\n dim(message: string): void {\n this.plain(message, pc.gray);\n }\n\n /**\n * Create a child logger with a prefix\n */\n child(prefix: string): CodegenLogger {\n return new CodegenLogger({\n ...this.options,\n prefix: this.options.prefix ? `${this.options.prefix}:${prefix}` : prefix,\n });\n }\n\n /**\n * Update options\n */\n configure(options: Partial<LogOptions>): void {\n this.options = { ...this.options, ...options };\n }\n}\n\n/**\n * Quick logging functions for simple usage\n */\n\nconst defaultLogger = new CodegenLogger();\n\nexport function success(message: string): void {\n defaultLogger.success(message);\n}\n\nexport function error(message: string, err?: Error): void {\n defaultLogger.error(message, err);\n}\n\nexport function warn(message: string): void {\n defaultLogger.warn(message);\n}\n\nexport function info(message: string): void {\n defaultLogger.info(message);\n}\n\nexport function debug(message: string): void {\n defaultLogger.debug(message);\n}\n\nexport function step(message: string): void {\n defaultLogger.step(message);\n}\n\nexport function progress(message: string): void {\n defaultLogger.progress(message);\n}\n\nexport function plain(message: string, color?: (str: string) => string): void {\n defaultLogger.plain(message, color);\n}\n\nexport function dim(message: string): void {\n defaultLogger.dim(message);\n}\n\n/**\n * Configure the default logger\n */\nexport function configure(options: Partial<LogOptions>): void {\n defaultLogger.configure(options);\n}\n\n/**\n * Create a new logger instance\n */\nexport function createLogger(options: LogOptions = {}): CodegenLogger {\n return new CodegenLogger(options);\n}\n\n/**\n * Convenience functions for common CLI patterns\n */\n\n/**\n * Show a command header with separator\n */\nexport function header(title: string): void {\n console.log();\n console.log(pc.cyan(pc.bold(`━━━ ${title} ━━━`)));\n}\n\n/**\n * Show a section break\n */\nexport function section(title: string): void {\n console.log();\n console.log(pc.bold(title));\n}\n\n/**\n * Show completion message with stats\n */\nexport function complete(message: string, duration?: number, stats?: Record<string, number>): void {\n let msg = message;\n if (duration) {\n msg += ` ${pc.gray(`(${duration}ms)`)}`;\n }\n success(msg);\n\n if (stats) {\n Object.entries(stats).forEach(([key, value]) => {\n dim(` ${key}: ${value}`);\n });\n }\n}\n\n/**\n * Show a list of items\n */\nexport function list(items: string[], bullet = \"•\"): void {\n items.forEach((item) => {\n console.log(pc.gray(` ${bullet} ${item}`));\n });\n}\n\n/**\n * Show key-value pairs\n */\nexport function table(data: Record<string, string | number>): void {\n const maxKeyLength = Math.max(...Object.keys(data).map((k) => k.length));\n Object.entries(data).forEach(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n console.log(` ${pc.blue(paddedKey)} ${pc.gray(\"─\")} ${value}`);\n });\n}\n","import { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport * as fhirschema from \"@atomic-ehr/fhirschema\";\nimport {\n type FHIRSchema,\n type FHIRSchemaElement,\n isStructureDefinition,\n type StructureDefinition,\n} from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type {\n CanonicalUrl,\n CodeSystem,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n ValueSet,\n} from \"@typeschema/types\";\nimport {\n enrichFHIRSchema,\n enrichValueSet,\n isCodeSystem,\n isValueSet,\n packageMetaToFhir,\n packageMetaToNpm,\n} from \"@typeschema/types\";\n\nexport type Register = {\n testAppendFs(fs: FHIRSchema): void;\n ensureSpecializationCanonicalUrl(name: string | Name | CanonicalUrl): CanonicalUrl;\n resolveSd(pkg: PackageMeta, canonicalUrl: CanonicalUrl): StructureDefinition | undefined;\n resolveFs(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema | undefined;\n resolveFsGenealogy(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n resolveFsSpecializations(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n allFs(): RichFHIRSchema[];\n allVs(): RichValueSet[];\n resolveVs(_pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichValueSet | undefined;\n resolveAny(canonicalUrl: CanonicalUrl): any | undefined;\n resolveElementSnapshot(fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement;\n getAllElementKeys(elems: Record<string, FHIRSchemaElement>): string[];\n resolver: PackageAwareResolver;\n} & ReturnType<typeof CanonicalManager>;\n\nconst readPackageDependencies = async (manager: ReturnType<typeof CanonicalManager>, packageMeta: PackageMeta) => {\n const packageJSON = (await manager.packageJson(packageMeta.name)) as any;\n const dependencies = packageJSON.dependencies;\n if (dependencies !== undefined) {\n return Object.entries(dependencies).map(([name, version]): PackageMeta => {\n return { name: name as string, version: version as string };\n });\n }\n return [];\n};\n\ntype PkgId = string;\ntype FocusedResource = StructureDefinition | ValueSet | CodeSystem;\n\ntype CanonicalResolution<T> = {\n deep: number;\n pkg: PackageMeta;\n pkgId: PkgId;\n resource: T;\n};\n\ntype PackageIndex = {\n pkg: PackageMeta;\n canonicalResolution: Record<CanonicalUrl, CanonicalResolution<FocusedResource>[]>;\n fhirSchemas: Record<CanonicalUrl, RichFHIRSchema>;\n valueSets: Record<CanonicalUrl, RichValueSet>;\n};\n\ntype PackageAwareResolver = Record<PkgId, PackageIndex>;\n\nconst mkEmptyPkgIndex = (pkg: PackageMeta): PackageIndex => {\n return {\n pkg,\n canonicalResolution: {},\n fhirSchemas: {},\n valueSets: {},\n };\n};\n\nconst mkPackageAwareResolver = async (\n manager: ReturnType<typeof CanonicalManager>,\n pkg: PackageMeta,\n deep: number,\n acc: PackageAwareResolver,\n logger?: CodegenLogger,\n): Promise<PackageIndex> => {\n const pkgId = packageMetaToFhir(pkg);\n logger?.info(`${\" \".repeat(deep * 2)}+ ${pkgId}`);\n if (acc[pkgId]) return acc[pkgId];\n\n const index = mkEmptyPkgIndex(pkg);\n for (const resource of await manager.search({ package: pkg })) {\n const rawUrl = resource.url;\n if (!rawUrl) continue;\n if (!(isStructureDefinition(resource) || isValueSet(resource) || isCodeSystem(resource))) continue;\n const url = rawUrl as CanonicalUrl;\n if (index.canonicalResolution[url]) logger?.dry_warn(`Duplicate canonical URL: ${url} at ${pkgId}.`);\n index.canonicalResolution[url] = [{ deep, pkg: pkg, pkgId, resource: resource as FocusedResource }];\n }\n\n const deps = await readPackageDependencies(manager, pkg);\n for (const depPkg of deps) {\n const { canonicalResolution } = await mkPackageAwareResolver(manager, depPkg, deep + 1, acc, logger);\n for (const [surl, resolutions] of Object.entries(canonicalResolution)) {\n const url = surl as CanonicalUrl;\n index.canonicalResolution[url] = [...(index.canonicalResolution[url] || []), ...resolutions];\n }\n }\n for (const resolutionOptions of Object.values(index.canonicalResolution)) {\n resolutionOptions.sort((a, b) => a.deep - b.deep);\n }\n\n acc[pkgId] = index;\n return index;\n};\n\nconst packageAgnosticResolveCanonical = (\n resolver: PackageAwareResolver,\n url: CanonicalUrl,\n _logger?: CodegenLogger,\n) => {\n const options = Object.values(resolver).flatMap((pkg) => pkg.canonicalResolution[url]);\n if (!options) throw new Error(`No canonical resolution found for ${url} in any package`);\n // if (options.length > 1)\n // logger?.dry_warn(\n // `Multiple canonical resolutions found for ${url} in: ${options\n // .map((e) => {\n // return `\\n ${JSON.stringify({ ...e, resource: undefined, pkg: undefined })}`;\n // })\n // .join(\"\")}`,\n // );\n return options[0]?.resource;\n};\n\nexport type RegisterConfig = {\n logger?: CodegenLogger;\n // FIXME: remove fallback\n fallbackPackageForNameResolution?: PackageMeta;\n focusedPackages?: PackageMeta[];\n};\n\nexport const registerFromManager = async (\n manager: ReturnType<typeof CanonicalManager>,\n { logger, fallbackPackageForNameResolution, focusedPackages }: RegisterConfig,\n): Promise<Register> => {\n const packages = focusedPackages ?? (await manager.packages());\n const resolver: PackageAwareResolver = {};\n for (const pkg of packages) {\n await mkPackageAwareResolver(manager, pkg, 0, resolver, logger);\n }\n\n for (const { pkg, canonicalResolution } of Object.values(resolver)) {\n const pkgId = packageMetaToFhir(pkg);\n if (!resolver[pkgId]) throw new Error(`Package ${pkgId} not found`);\n let counter = 0;\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' begins...`);\n for (const [_url, options] of Object.entries(canonicalResolution)) {\n const resolition = options[0];\n if (!resolition) throw new Error(`Resource not found`);\n const resource = resolition.resource;\n const resourcePkg = resolition.pkg;\n if (isStructureDefinition(resource)) {\n const rfs = enrichFHIRSchema(\n fhirschema.translate(resource as StructureDefinition) as FHIRSchema,\n resourcePkg,\n );\n counter++;\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n }\n if (isValueSet(resource)) {\n const rvs = enrichValueSet(resource, resourcePkg);\n resolver[pkgId].valueSets[rvs.url] = rvs;\n }\n }\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' completed: ${counter} successful`);\n }\n\n const resolveFs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n return (\n resolver[packageMetaToFhir(pkg)]?.fhirSchemas[canonicalUrl] ||\n (fallbackPackageForNameResolution &&\n resolver[packageMetaToFhir(fallbackPackageForNameResolution)]?.fhirSchemas[canonicalUrl])\n );\n };\n\n const resolveVs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n return (\n resolver[packageMetaToFhir(pkg)]?.valueSets[canonicalUrl] ||\n (fallbackPackageForNameResolution &&\n resolver[packageMetaToFhir(fallbackPackageForNameResolution)]?.valueSets[canonicalUrl])\n );\n };\n\n const ensureSpecializationCanonicalUrl = (name: string | Name | CanonicalUrl) =>\n (name.match(/^[a-zA-Z0-9]+$/) && (`http://hl7.org/fhir/StructureDefinition/${name}` as CanonicalUrl)) ||\n (name as CanonicalUrl);\n\n const resolveFsGenealogy = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n let fs = resolveFs(pkg, canonicalUrl);\n if (fs === undefined) throw new Error(`Failed to resolve FHIR Schema: '${canonicalUrl}'`);\n const genealogy = [fs];\n while (fs?.base) {\n const pkg = fs.package_meta;\n const baseUrl = ensureSpecializationCanonicalUrl(fs.base);\n fs = resolveFs(pkg, baseUrl);\n if (fs === undefined)\n throw new Error(\n `Failed to resolve FHIR Schema base for '${canonicalUrl}'. Problem: '${baseUrl}' from '${packageMetaToFhir(pkg)}'`,\n );\n genealogy.push(fs);\n }\n return genealogy;\n };\n\n const resolveFsSpecializations = (pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[] => {\n return resolveFsGenealogy(pkg, canonicalUrl).filter((fs) => fs.derivation === \"specialization\");\n };\n\n const resolveElementSnapshot = (fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement => {\n const geneology = resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGeneology = resolveFsElementGenealogy(geneology, path);\n const elemSnapshot = fsElementSnapshot(elemGeneology);\n return elemSnapshot;\n };\n\n const getAllElementKeys = (elems: Record<string, FHIRSchemaElement>): string[] => {\n const keys: Set<string> = new Set();\n for (const [key, elem] of Object.entries(elems)) {\n keys.add(key);\n for (const choiceKey of elem?.choices || []) {\n if (!elems[choiceKey]) {\n keys.add(choiceKey);\n }\n }\n }\n return Array.from(keys);\n };\n\n return {\n ...manager,\n testAppendFs(fs: FHIRSchema) {\n const rfs = enrichFHIRSchema(fs);\n const pkgId = packageMetaToFhir(rfs.package_meta);\n if (!resolver[pkgId]) resolver[pkgId] = mkEmptyPkgIndex(rfs.package_meta);\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n },\n resolveFs,\n resolveFsGenealogy: resolveFsGenealogy,\n resolveFsSpecializations: resolveFsSpecializations,\n ensureSpecializationCanonicalUrl,\n resolveSd: (_pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const res = packageAgnosticResolveCanonical(resolver, canonicalUrl, logger);\n if (isStructureDefinition(res)) return res as StructureDefinition;\n return undefined;\n },\n allFs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.fhirSchemas)),\n allVs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.valueSets)),\n resolveVs,\n resolveAny: (canonicalUrl: CanonicalUrl) => packageAgnosticResolveCanonical(resolver, canonicalUrl, logger),\n resolveElementSnapshot,\n getAllElementKeys,\n resolver,\n };\n};\n\nexport const registerFromPackageMetas = async (\n packageMetas: PackageMeta[],\n conf: RegisterConfig,\n): Promise<Register> => {\n const packageNames = packageMetas.map(packageMetaToNpm);\n conf?.logger?.step(`Loading FHIR packages: ${packageNames.join(\", \")}`);\n const manager = CanonicalManager({\n packages: packageNames,\n workingDir: \"tmp/fhir\",\n });\n await manager.init();\n return await registerFromManager(manager, {\n ...conf,\n focusedPackages: packageMetas,\n });\n};\n\nexport const resolveFsElementGenealogy = (genealogy: RichFHIRSchema[], path: string[]): FHIRSchemaElement[] => {\n const [top, ...rest] = path;\n if (top === undefined) return [];\n return genealogy\n .map((fs) => {\n if (!fs.elements) return undefined;\n let elem = fs.elements?.[top];\n for (const k of rest) {\n elem = elem?.elements?.[k];\n }\n return elem;\n })\n .filter((elem) => elem !== undefined);\n};\n\nexport function fsElementSnapshot(genealogy: FHIRSchemaElement[]): FHIRSchemaElement {\n const revGenealogy = genealogy.reverse();\n const snapshot = Object.assign({}, ...revGenealogy);\n // NOTE: to avoid regeneration nested types\n snapshot.elements = undefined;\n return snapshot;\n}\n","/**\n * TypeSchema Generator\n *\n * Generates TypeSchema documents from FHIR packages using fhrischema.\n * Provides high-level API for converting FHIR Structure Definitions to TypeSchema format.\n */\n\nimport { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport type { FHIRSchema, StructureDefinition } from \"@atomic-ehr/fhirschema\";\nimport * as fhirschema from \"@atomic-ehr/fhirschema\";\nimport type { TypeSchemaConfig } from \"@root/config\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { createLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport { registerFromManager } from \"@typeschema/register\";\nimport { TypeSchemaCache } from \"./cache\";\nimport { transformFhirSchema, transformValueSet } from \"./core/transformer\";\nimport {\n type PackageMeta,\n packageMetaToFhir,\n type RichValueSet,\n type TypeSchema,\n type TypeschemaGeneratorOptions,\n} from \"./types\";\n\n/**\n * TypeSchema Generator class\n *\n * Main class for generating TypeSchema documents from FHIR packages.\n * Leverages fhrischema for FHIR parsing and canonical manager for dependency resolution.\n */\nexport class TypeSchemaGenerator {\n private manager: ReturnType<typeof CanonicalManager>;\n\n private options: TypeschemaGeneratorOptions;\n private cacheConfig?: TypeSchemaConfig;\n private cache?: TypeSchemaCache;\n private logger?: CodegenLogger;\n\n constructor(options: TypeschemaGeneratorOptions = {}, cacheConfig?: TypeSchemaConfig) {\n this.options = { verbose: false, ...options };\n this.manager = options.manager || CanonicalManager({ packages: [], workingDir: \"tmp/fhir\" });\n this.cacheConfig = cacheConfig;\n this.logger =\n options.logger ||\n createLogger({\n verbose: this.options.verbose,\n prefix: \"TypeSchema\",\n });\n }\n\n private async initializeCache(): Promise<void> {\n if (this.cacheConfig && !this.cache) {\n this.cache = new TypeSchemaCache(this.cacheConfig);\n await this.cache.initialize();\n }\n }\n\n async registerFromPackageMetas(packageMetas: PackageMeta[]): Promise<Register> {\n const packageNames = packageMetas.map(packageMetaToFhir);\n this.logger?.step(`Loading FHIR packages: ${packageNames.join(\", \")}`);\n\n await this.manager.init();\n\n return registerFromManager(this.manager, { focusedPackages: packageMetas });\n }\n\n generateFhirSchemas(structureDefinitions: StructureDefinition[]): FHIRSchema[] {\n this.logger?.progress(`Converting ${structureDefinitions.length} StructureDefinitions to FHIRSchemas`);\n\n // TODO: do it on the TypeSchema?\n const filteredStructureDefinitions = this.applyStructureDefinitionTreeshaking(structureDefinitions);\n\n const fhirSchemas: FHIRSchema[] = [];\n let convertedCount = 0;\n let failedCount = 0;\n\n for (const sd of filteredStructureDefinitions) {\n try {\n const fhirSchema = fhirschema.translate(sd as StructureDefinition) as FHIRSchema;\n fhirSchemas.push(fhirSchema);\n convertedCount++;\n\n this.logger?.debug(`Converted StructureDefinition: ${sd.name || sd.id} (${sd.resourceType})`);\n } catch (error) {\n failedCount++;\n this.logger?.warn(\n `Failed to convert StructureDefinition ${sd.name || sd.id}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n this.logger?.success(\n `FHIR Schema conversion completed: ${convertedCount}/${filteredStructureDefinitions.length} successful, ${failedCount} failed`,\n );\n return fhirSchemas;\n }\n\n async generateValueSetSchemas(valueSets: RichValueSet[], logger?: CodegenLogger): Promise<TypeSchema[]> {\n if (valueSets.length > 0) {\n this.logger?.debug(`${valueSets.length} ValueSets available for enum extraction`);\n }\n\n const register = await registerFromManager(this.manager, { logger: this.logger });\n\n // Process ValueSets separately to add to TypeSchema output\n const valueSetSchemas: TypeSchema[] = [];\n if (valueSets.length > 0) {\n this.logger?.progress(`Converting ${valueSets.length} ValueSets to TypeSchema`);\n\n let valueSetConvertedCount = 0;\n let valueSetFailedCount = 0;\n\n for (const vs of valueSets) {\n try {\n const valueSetSchema = await transformValueSet(register, vs, logger);\n if (valueSetSchema) {\n valueSetSchemas.push(valueSetSchema);\n valueSetConvertedCount++;\n\n this.logger?.debug(`Converted ValueSet: ${vs.name || vs.id}`);\n }\n } catch (error) {\n valueSetFailedCount++;\n this.logger?.warn(\n `Failed to convert ValueSet ${vs.name || vs.id}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n this.logger?.success(\n `ValueSet conversion completed: ${valueSetConvertedCount}/${valueSets.length} successful, ${valueSetFailedCount} failed`,\n );\n }\n return valueSetSchemas;\n }\n\n async generateFromPackage(\n packageName: string,\n packageVersion: string | undefined,\n logger?: CodegenLogger,\n ): Promise<TypeSchema[]> {\n await this.initializeCache();\n if (this.cache && !(this.cacheConfig?.forceRegenerate ?? false)) {\n const cachedSchemas = this.cache.getByPackage(packageName);\n if (cachedSchemas.length > 0) {\n this.logger?.info(\n `Using cached TypeSchemas for package: ${packageName} (${cachedSchemas.length} schemas)`,\n );\n return cachedSchemas;\n }\n }\n\n const packageInfo: PackageMeta = {\n name: packageName,\n version: packageVersion || \"latest\",\n };\n\n const register = await this.registerFromPackageMetas([packageInfo]);\n const valueSets = await this.generateValueSetSchemas(register.allVs(), logger);\n const fhirSchemas = (\n await Promise.all(register.allFs().map(async (fs) => await transformFhirSchema(register, fs, logger)))\n ).flat();\n const allSchemas = [...fhirSchemas, ...valueSets];\n\n if (this.cache) {\n for (const schema of allSchemas) {\n await this.cache.set(schema);\n }\n }\n\n return allSchemas;\n }\n\n /**\n * Apply treeshaking to StructureDefinitions before FHIR schema transformation\n * This is more efficient and includes smart reference handling\n */\n private applyStructureDefinitionTreeshaking(structureDefinitions: any[]): any[] {\n const treeshakeList = this.options.treeshake;\n\n if (!treeshakeList || treeshakeList.length === 0) {\n return structureDefinitions;\n }\n\n this.logger?.info(`Applying treeshaking filter for ResourceTypes: ${treeshakeList.join(\", \")}`);\n\n const allStructureDefinitions = new Map<string, any>();\n const realDependencies = new Map<string, Set<string>>();\n const referenceTargets = new Map<string, Set<string>>();\n\n for (const sd of structureDefinitions) {\n const name = sd.name || sd.id;\n if (name) {\n allStructureDefinitions.set(name, sd);\n realDependencies.set(name, new Set());\n referenceTargets.set(name, new Set());\n }\n }\n\n for (const sd of structureDefinitions) {\n const name = sd.name || sd.id;\n if (!name) continue;\n\n const { realDeps, refTargets } = this.extractStructureDefinitionDependenciesWithReferences(sd);\n realDependencies.set(name, new Set(realDeps));\n referenceTargets.set(name, new Set(refTargets));\n }\n\n const structureDefinitionsToKeep = new Set<string>();\n\n for (const resourceType of treeshakeList) {\n if (allStructureDefinitions.has(resourceType)) {\n structureDefinitionsToKeep.add(resourceType);\n } else {\n this.logger?.warn(`ResourceType '${resourceType}' not found in structure definitions`);\n }\n }\n\n const addRealDependenciesRecursively = (name: string, visited = new Set<string>()) => {\n if (visited.has(name) || !realDependencies.has(name)) {\n return;\n }\n\n visited.add(name);\n const deps = realDependencies.get(name) || new Set();\n\n for (const dep of Array.from(deps)) {\n if (allStructureDefinitions.has(dep)) {\n structureDefinitionsToKeep.add(dep);\n addRealDependenciesRecursively(dep, visited);\n }\n }\n };\n\n for (const resourceType of Array.from(structureDefinitionsToKeep)) {\n addRealDependenciesRecursively(resourceType);\n }\n\n const filteredStructureDefinitions = structureDefinitions.filter((sd) => {\n const name = sd.name || sd.id;\n return name && structureDefinitionsToKeep.has(name);\n });\n\n const excludedReferenceTargets = new Set<string>();\n for (const sd of structureDefinitions) {\n const name = sd.name || sd.id;\n if (name && !structureDefinitionsToKeep.has(name)) {\n const isOnlyReferenceTarget = Array.from(referenceTargets.values()).some((targets) =>\n targets.has(name),\n );\n\n if (isOnlyReferenceTarget) {\n excludedReferenceTargets.add(name);\n }\n }\n }\n\n if (excludedReferenceTargets.size > 0) {\n this.logger?.info(`Excluded reference-only targets: ${Array.from(excludedReferenceTargets).join(\", \")}`);\n }\n\n this.logger?.success(\n `Treeshaking completed: kept ${filteredStructureDefinitions.length}/${structureDefinitions.length} structure definitions`,\n );\n\n return filteredStructureDefinitions;\n }\n\n private extractStructureDefinitionDependenciesWithReferences(sd: any): {\n realDeps: string[];\n refTargets: string[];\n } {\n const realDeps = new Set<string>();\n const refTargets = new Set<string>();\n\n if (sd.baseDefinition) {\n const baseName = this.extractResourceNameFromUrl(sd.baseDefinition);\n if (baseName) {\n realDeps.add(baseName);\n }\n }\n\n if (sd.snapshot?.element || sd.differential?.element) {\n const elements = sd.snapshot?.element || sd.differential?.element;\n\n for (const element of elements) {\n if (element.type) {\n for (const type of element.type) {\n if (type.code) {\n realDeps.add(type.code);\n\n if (type.code === \"Reference\" && type.targetProfile) {\n for (const targetProfile of type.targetProfile) {\n const targetName = this.extractResourceNameFromUrl(targetProfile);\n if (targetName) {\n refTargets.add(targetName);\n }\n }\n }\n }\n\n if (type.profile) {\n for (const profile of type.profile) {\n const profileName = this.extractResourceNameFromUrl(profile);\n if (profileName) {\n realDeps.add(profileName);\n }\n }\n }\n }\n }\n }\n }\n\n return {\n realDeps: Array.from(realDeps),\n refTargets: Array.from(refTargets),\n };\n }\n\n private extractResourceNameFromUrl(url: string): string | null {\n const match = url.match(/\\/([^/]+)$/);\n return match ? (match[1] ?? null) : null;\n }\n}\n","/**\n * TypeSchema Parser\n *\n * Parser for reading and manipulating TypeSchema documents from various formats.\n * Supports both NDJSON and JSON formats with automatic format detection.\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type { Identifier, TypeSchema, TypeschemaParserOptions } from \"@typeschema/types\";\n\n/**\n * TypeSchema Parser class\n *\n * Provides functionality to read, parse, and manipulate TypeSchema documents\n * from files or strings in various formats.\n */\nexport class TypeSchemaParser {\n private options: Required<TypeschemaParserOptions>;\n\n constructor(options: TypeschemaParserOptions = {}) {\n this.options = {\n format: \"auto\",\n validate: true,\n strict: false,\n ...options,\n };\n }\n\n /**\n * Parse TypeSchema from file\n */\n async parseFromFile(filePath: string): Promise<TypeSchema[]> {\n const content = await readFile(filePath, \"utf-8\");\n const format = this.options.format === \"auto\" ? this.detectFormat(content, filePath) : this.options.format;\n\n return this.parseFromString(content, format);\n }\n\n /**\n * Parse TypeSchema from string content\n */\n async parseFromString(content: string, format?: \"ndjson\" | \"json\"): Promise<TypeSchema[]> {\n const actualFormat = format || this.detectFormat(content);\n\n let schemas: TypeSchema[];\n\n if (actualFormat === \"ndjson\") {\n schemas = this.parseNDJSON(content);\n } else {\n schemas = this.parseJSON(content);\n }\n\n if (this.options.validate) {\n this.validateSchemas(schemas);\n }\n\n return schemas;\n }\n\n /**\n * Parse multiple TypeSchema files\n */\n async parseFromFiles(filePaths: string[]): Promise<TypeSchema[]> {\n const allSchemas: TypeSchema[] = [];\n\n for (const filePath of filePaths) {\n const schemas = await this.parseFromFile(filePath);\n allSchemas.push(...schemas);\n }\n\n return allSchemas;\n }\n\n /**\n * Parse a single TypeSchema object\n */\n parseSchema(schemaData: any): TypeSchema {\n // Basic validation of required fields\n if (!schemaData.identifier) {\n throw new Error(\"TypeSchema must have an identifier\");\n }\n\n if (!this.isValidIdentifier(schemaData.identifier)) {\n throw new Error(\"TypeSchema identifier is invalid\");\n }\n\n // Return the schema (assuming it's already in correct format)\n // Additional validation would be performed by the validator\n return schemaData as TypeSchema;\n }\n\n /**\n * Find schemas by identifier\n */\n findByIdentifier(schemas: TypeSchema[], identifier: Partial<Identifier>): TypeSchema[] {\n return schemas.filter((schema) => this.matchesIdentifier(schema.identifier, identifier));\n }\n\n /**\n * Find schema by URL\n */\n findByUrl(schemas: TypeSchema[], url: string): TypeSchema | undefined {\n return schemas.find((schema) => schema.identifier.url === url);\n }\n\n /**\n * Find schemas by kind\n */\n findByKind(schemas: TypeSchema[], kind: Identifier[\"kind\"]): TypeSchema[] {\n return schemas.filter((schema) => schema.identifier.kind === kind);\n }\n\n /**\n * Find schemas by package\n */\n findByPackage(schemas: TypeSchema[], packageName: string): TypeSchema[] {\n return schemas.filter((schema) => schema.identifier.package === packageName);\n }\n\n /**\n * Get all dependencies from a schema\n */\n // getDependencies(schema: TypeSchema): Identifier[] {\n // const dependencies: Identifier[] = [];\n\n // // Add base dependency\n // if (\"base\" in schema && schema.base) {\n // dependencies.push(schema.base);\n // }\n\n // // Add explicit dependencies\n // if (\"dependencies\" in schema && schema.dependencies) {\n // dependencies.push(...schema.dependencies);\n // }\n\n // // Add field type dependencies\n // if (\"fields\" in schema && schema.fields) {\n // for (const field of Object.values(schema.fields)) {\n // if (\"type\" in field && field.type) {\n // dependencies.push(field.type);\n // }\n // if (\"binding\" in field && field.binding) {\n // dependencies.push(field.binding);\n // }\n // if (\"reference\" in field && field.reference) {\n // dependencies.push(...field.reference);\n // }\n // }\n // }\n\n // if (\"nested\" in schema && schema.nested) {\n // for (const nested of schema.nested) {\n // dependencies.push(nested.identifier);\n // dependencies.push(nested.base);\n\n // for (const field of Object.values(nested.fields)) {\n // if (\"type\" in field && field.type) {\n // dependencies.push(field.type);\n // }\n // if (\"binding\" in field && field.binding) {\n // dependencies.push(field.binding);\n // }\n // if (\"reference\" in field && field.reference) {\n // dependencies.push(...field.reference);\n // }\n // }\n // }\n // }\n\n // // Add binding dependencies\n // if (\"valueset\" in schema) {\n // const bindingSchema = schema as any;\n // dependencies.push(bindingSchema.valueset);\n // if (bindingSchema.type) {\n // dependencies.push(bindingSchema.type);\n // }\n // }\n\n // // Remove duplicates\n // return this.deduplicateDependencies(dependencies);\n // }\n\n /**\n * Resolve schema dependencies\n */\n // resolveDependencies(\n // schemas: TypeSchema[],\n // targetSchema: TypeSchema,\n // ): TypeSchema[] {\n // const dependencies = this.getDependencies(targetSchema);\n // const resolved: TypeSchema[] = [];\n\n // for (const dep of dependencies) {\n // const depSchema = this.findByUrl(schemas, dep.url);\n // if (depSchema) {\n // resolved.push(depSchema);\n // }\n // }\n\n // return resolved;\n // }\n\n /**\n * Detect format from content or filename\n */\n private detectFormat(content: string, filename?: string): \"ndjson\" | \"json\" {\n // Check file extension first\n if (filename) {\n if (filename.endsWith(\".ndjson\")) return \"ndjson\";\n if (filename.endsWith(\".json\")) return \"json\";\n }\n\n // Check content format\n const trimmed = content.trim();\n\n // NDJSON typically has multiple lines with JSON objects\n if (trimmed.includes(\"\\n\")) {\n const lines = trimmed.split(\"\\n\").filter((line) => line.trim());\n if (lines.length > 1) {\n try {\n if (lines[0]) {\n JSON.parse(lines[0]);\n }\n return \"ndjson\";\n } catch {\n // Fall through to JSON detection\n }\n }\n }\n\n // Default to JSON for single objects or arrays\n return \"json\";\n }\n\n /**\n * Parse NDJSON format\n */\n private parseNDJSON(content: string): TypeSchema[] {\n const schemas: TypeSchema[] = [];\n const lines = content.split(\"\\n\").filter((line) => line.trim());\n\n for (const line of lines) {\n try {\n const parsed = JSON.parse(line);\n schemas.push(this.parseSchema(parsed));\n } catch (error) {\n if (this.options.strict) {\n throw new Error(`Failed to parse NDJSON line: ${error}`);\n }\n // Skip invalid lines in non-strict mode\n }\n }\n\n return schemas;\n }\n\n /**\n * Parse JSON format\n */\n private parseJSON(content: string): TypeSchema[] {\n try {\n const parsed = JSON.parse(content);\n\n if (Array.isArray(parsed)) {\n return parsed.map((item) => this.parseSchema(item));\n } else {\n return [this.parseSchema(parsed)];\n }\n } catch (error) {\n throw new Error(`Failed to parse JSON: ${error}`);\n }\n }\n\n /**\n * Validate schemas\n */\n private validateSchemas(schemas: TypeSchema[]): void {\n for (const schema of schemas) {\n if (!schema.identifier) {\n throw new Error(\"Schema missing identifier\");\n }\n\n if (!this.isValidIdentifier(schema.identifier)) {\n throw new Error(`Invalid identifier in schema: ${JSON.stringify(schema.identifier)}`);\n }\n }\n }\n\n /**\n * Validate identifier structure\n */\n private isValidIdentifier(identifier: any): identifier is Identifier {\n return (\n typeof identifier === \"object\" &&\n identifier !== null &&\n typeof identifier.kind === \"string\" &&\n typeof identifier.package === \"string\" &&\n typeof identifier.version === \"string\" &&\n typeof identifier.name === \"string\" &&\n typeof identifier.url === \"string\"\n );\n }\n\n /**\n * Check if identifier matches criteria\n */\n private matchesIdentifier(identifier: Identifier, criteria: Partial<Identifier>): boolean {\n return (\n (!criteria.kind || identifier.kind === criteria.kind) &&\n (!criteria.package || identifier.package === criteria.package) &&\n (!criteria.version || identifier.version === criteria.version) &&\n (!criteria.name || identifier.name === criteria.name) &&\n (!criteria.url || identifier.url === criteria.url)\n );\n }\n}\n","/**\n * TypeSchema Core Module\n *\n * Main entry point for the TypeSchema library providing core functions\n * for FHIR-to-TypeSchema generation, parsing, and validation.\n *\n * This module focuses on:\n * - Converting FHIR to TypeSchema format\n * - Reading TypeSchema documents\n * - Validating TypeSchema documents\n */\n\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { transformFhirSchema, transformValueSet } from \"./core/transformer\";\nimport type { Register } from \"./register\";\nimport { packageMetaToFhir, type TypeSchema } from \"./types\";\n\n// Re-export core dependencies\nexport { TypeSchemaCache } from \"./cache\";\nexport { TypeSchemaGenerator } from \"./generator\";\nexport { TypeSchemaParser } from \"./parser\";\nexport type { Identifier, TypeSchema } from \"./types\";\n\nconst codeableReferenceInR4 = \"Use CodeableReference which is not provided by FHIR R4.\";\nconst availabilityInR4 = \"Use Availability which is not provided by FHIR R4.\";\n\nconst skipMe: Record<string, Record<string, string>> = {\n \"hl7.fhir.uv.extensions.r4#1.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/extended-contact-availability\": availabilityInR4,\n \"http://hl7.org/fhir/StructureDefinition/immunization-procedure\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/specimen-additive\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-barrier\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-protectiveFactor\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-reason\": codeableReferenceInR4,\n },\n \"hl7.fhir.r5.core#5.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/shareablecodesystem\":\n \"FIXME: CodeSystem.concept.concept defined by ElementReference. FHIR Schema generator output broken value in it, so we just skip it for now.\",\n },\n};\n\nexport const generateTypeSchemas = async (register: Register, logger?: CodegenLogger): Promise<TypeSchema[]> => {\n const fhirSchemas = [] as TypeSchema[];\n for (const fhirSchema of register.allFs()) {\n const pkgId = packageMetaToFhir(fhirSchema.package_meta);\n if (skipMe[pkgId]?.[fhirSchema.url]) {\n logger?.dry_warn(`Skip ${fhirSchema.url} from ${pkgId}. Reason: ${skipMe[pkgId]?.[fhirSchema.url]}`);\n continue;\n }\n fhirSchemas.push(...(await transformFhirSchema(register, fhirSchema, logger)));\n }\n for (const vsSchema of register.allVs()) {\n fhirSchemas.push(await transformValueSet(register, vsSchema, logger));\n }\n return fhirSchemas;\n};\n","import type { TypeSchema } from \"@root/typeschema\";\n\nexport const words = (s: string) => {\n return s.split(/(?<=[a-z])(?=[A-Z])|[-_.\\s]/).filter(Boolean);\n};\n\nexport const kebabCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"-\");\n};\n\nexport const capitalCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n return s[0]?.toUpperCase() + s.substring(1).toLowerCase();\n};\n\nexport const camelCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n const [first, ...rest] = words(s);\n return [first?.toLowerCase(), ...rest.map(capitalCase)].join(\"\");\n};\n\nexport const pascalCase = (s: string) => {\n return words(s).map(capitalCase).join(\"\");\n};\n\nexport const snakeCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"_\");\n};\n\nexport const uppercaseFirstLetter = (str: string): string => {\n if (!str || str.length === 0) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const uppercaseFirstLetterOfEach = (strings: string[]): string[] => {\n return strings.map((str) => uppercaseFirstLetter(str));\n};\n\nexport function deepEqual<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) return true;\n\n if (obj1 === null || obj2 === null || typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false;\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((item, index) => deepEqual(item, obj2[index]));\n }\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => keys2.includes(key) && deepEqual(obj1[key], obj2[key]));\n}\n\nexport const typeSchemaInfo = (schema: TypeSchema): string => {\n return `<${schema.identifier.url}> from ${schema.identifier.package}#${schema.identifier.version}`;\n};\n","import * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\n\nexport interface WriterOptions {\n outputDir: string;\n tabSize: number;\n withDebugComment?: boolean;\n commentLinePrefix: string;\n generateProfile?: boolean;\n logger?: CodegenLogger;\n}\n\nclass FileSystemWriter {\n opts: WriterOptions;\n currentDir: string;\n currentFileDescriptor?: number;\n writtenFilesSet: Set<string> = new Set();\n\n constructor(opts: WriterOptions) {\n this.opts = opts;\n this.currentDir = opts.outputDir;\n }\n\n logger(): CodegenLogger | undefined {\n return this.opts.logger;\n }\n\n cd(path: string, gen: () => void) {\n const prev = this.currentDir;\n this.currentDir = path.startsWith(\"/\")\n ? Path.join(this.opts.outputDir, path)\n : Path.join(this.currentDir, path);\n if (!fs.existsSync(this.currentDir)) {\n fs.mkdirSync(this.currentDir, { recursive: true });\n }\n this.logger()?.debug(`cd '${this.currentDir}'`);\n gen();\n this.currentDir = prev;\n }\n\n cat(fn: string, gen: () => void) {\n if (this.currentFileDescriptor) throw new Error(\"Can't open file in file\");\n if (fn.includes(\"/\")) throw new Error(`Change file path separatly: ${fn}`);\n\n const fullFn = `${this.currentDir}/${fn}`;\n try {\n this.currentFileDescriptor = fs.openSync(fullFn, \"w\");\n this.writtenFilesSet.add(fn);\n this.logger()?.debug(`cat > '${fullFn}'`);\n gen();\n } finally {\n if (this.currentFileDescriptor) {\n // Force flush all buffered data to disk before closing\n fs.fsyncSync(this.currentFileDescriptor);\n fs.closeSync(this.currentFileDescriptor);\n }\n this.currentFileDescriptor = undefined;\n }\n }\n\n write(str: string) {\n if (!this.currentFileDescriptor) throw new Error(\"No file opened\");\n fs.writeSync(this.currentFileDescriptor, str);\n }\n\n generate(_tsIndex: TypeSchemaIndex) {\n throw new Error(\"Not implemented\");\n }\n\n writtenFiles(): string[] {\n return Array.from(this.writtenFilesSet);\n }\n}\n\nexport class Writer extends FileSystemWriter {\n currentIndent: number = 0;\n\n private indent() {\n this.currentIndent += this.opts.tabSize;\n }\n\n private deindent() {\n this.currentIndent -= this.opts.tabSize;\n }\n\n private writeIndent() {\n this.write(\" \".repeat(this.currentIndent));\n }\n\n line(...tokens: string[]) {\n if (tokens.length === 0) {\n this.write(\"\\n\");\n } else {\n this.writeIndent();\n this.write(`${tokens.join(\" \")}\\n`);\n }\n }\n\n lineSM(...tokens: string[]) {\n this.writeIndent();\n this.write(`${tokens.join(\" \")};\\n`);\n }\n\n comment(...tokens: string[]) {\n const lines = tokens.join(\" \").split(\"\\n\");\n for (const line of lines) {\n this.line(this.opts.commentLinePrefix, line);\n }\n }\n\n debugComment(...tokens: (string | any)[]) {\n if (this.opts.withDebugComment) {\n tokens = tokens.map((token) => {\n if (typeof token === \"string\") {\n return token;\n } else {\n return JSON.stringify(token, null, 2);\n }\n });\n this.comment(...tokens);\n }\n }\n\n disclaimer() {\n return [\n \"WARNING: This file is autogenerated by @atomic-ehr/codegen.\",\n \"GitHub: https://github.com/orgs/atomic-ehr/repositories\",\n \"Any manual changes made to this file may be overwritten.\",\n ];\n }\n\n generateDisclaimer() {\n this.disclaimer().forEach((e) => this.comment(e));\n this.line();\n }\n\n indentBlock(gencontent: () => void) {\n this.indent();\n gencontent();\n this.deindent();\n }\n\n curlyBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} {`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`}${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n\n squareBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} [`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`]${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n}\n","import { camelCase, uppercaseFirstLetter } from \"../utils.ts\";\n\nconst ops: Record<string, string> = {\n \"!\": \"Not\",\n \"<=\": \"LessOrEqual\",\n \">=\": \"GreaterOrEqual\",\n \"<\": \"Less\",\n \">\": \"Greater\",\n \"=\": \"Equal\",\n \"-\": \"Dash\",\n \"+\": \"Plus\",\n \"*\": \"Asterisk\",\n \"/\": \"Slash\",\n \"%\": \"Percent\",\n \"&\": \"And\",\n \"|\": \"Or\",\n \"^\": \"Xor\",\n \"~\": \"Tilde\",\n \"?\": \"Question\",\n \".\": \"Dot\",\n};\n\nexport function formatEnumDashHandle(entry: string): string {\n return entry\n .split(\"-\")\n .map((part) => uppercaseFirstLetter(part))\n .join(\"-\");\n}\n\nexport function formatEnumEntryOperation(entry: string): string {\n let res: string = entry;\n for (const op in ops) res = res.replaceAll(op, ops[op] ?? \"\");\n return res;\n}\n\nexport function formatEnumNumber(entry: string): string {\n const num = Number(entry[0]);\n if (Number.isInteger(num) && !Number.isNaN(num)) {\n return `_${entry}`;\n }\n return entry;\n}\n\nexport function formatEnumEntry(entry: string): string {\n let res: string = formatEnumDashHandle(entry);\n res = formatEnumNumber(res);\n res = formatEnumEntryOperation(res);\n res = uppercaseFirstLetter(res);\n return res;\n}\n\nexport function formatName(input: string): string {\n return uppercaseFirstLetter(camelCase(input.replaceAll(\".\", \"-\")));\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer } from \"@root/api/writer-generator/writer.ts\";\nimport type { Field, Identifier, RegularField } from \"@typeschema/types\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger.ts\";\nimport { type ChoiceFieldInstance, isChoiceDeclarationField, type RegularTypeSchema } from \"@typeschema/types.ts\";\nimport type { TypeSchemaIndex } from \"@typeschema/utils.ts\";\nimport { formatEnumEntry, formatName } from \"./formatHelper.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n decimal: \"decimal\",\n integer: \"int\",\n unsignedInt: \"long\",\n positiveInt: \"long\",\n integer64: \"long\",\n base64Binary: \"string\",\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst RESERVED_TYPE_NAMES = [\"Reference\", \"Expression\"];\n\nconst getFieldModifiers = (field: Field) => {\n return field.required ? [\"required\"] : [];\n};\n\nconst formatClassName = (schema: RegularTypeSchema) => {\n const name = prefixReservedTypeName(getResourceName(schema.identifier));\n return uppercaseFirstLetter(name);\n};\n\nconst formatBaseClass = (schema: RegularTypeSchema) => {\n return schema.base ? `: ${schema.base.name}` : \"\";\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true): string | undefined => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) localName = localName.split(\"#\")[0];\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return formatName(localName);\n};\n\nconst getResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return formatName([resourceName, name].join(\"\"));\n }\n return formatName(id.name);\n};\n\nconst isReservedTypeName = (name: string): boolean => RESERVED_TYPE_NAMES.includes(name);\n\nconst prefixReservedTypeName = (name: string): string => (isReservedTypeName(name) ? `Resource${name}` : name);\n\ninterface CSharpGeneratorOptions {\n outputDir: string;\n staticSourceDir?: string;\n targetNamespace: string;\n logger?: CodegenLogger;\n}\n\ninterface EnumRegistry {\n [packageName: string]: {\n [enumName: string]: string[];\n };\n}\n\nexport class CSharp extends Writer {\n private readonly enums: EnumRegistry = {};\n private readonly staticSourceDir?: string;\n private readonly targetNamespace: string;\n\n constructor(options: CSharpGeneratorOptions) {\n super({\n outputDir: options.outputDir,\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n logger: options.logger,\n });\n this.staticSourceDir = options.staticSourceDir;\n this.targetNamespace = options.targetNamespace;\n }\n\n override generate(typeSchemaIndex: TypeSchemaIndex): void {\n const complexTypes = typeSchemaIndex.collectComplexTypes();\n const resources = typeSchemaIndex.collectResources();\n const packages = Array.from(new Set(resources.map((r) => formatName(r.identifier.package))));\n\n this.generateAllFiles(complexTypes, resources, packages);\n this.copyStaticFiles();\n }\n\n private generateAllFiles(\n complexTypes: RegularTypeSchema[],\n resources: RegularTypeSchema[],\n packages: string[],\n ): void {\n this.generateUsingFile(packages);\n this.generateBaseTypes(complexTypes);\n this.generateResources(resources);\n this.generateEnumFiles(packages);\n this.generateResourceDictionaries(resources, packages);\n this.generateHelperFile();\n }\n\n private generateType(schema: RegularTypeSchema, packageName: string): void {\n const className = formatClassName(schema);\n const baseClass = formatBaseClass(schema);\n\n this.curlyBlock([\"public\", \"class\", className, baseClass], () => {\n this.generateFields(schema, packageName);\n this.generateNestedTypes(schema, packageName);\n this.line();\n this.includeHelperMethods();\n });\n this.line();\n }\n\n private generateFields(schema: RegularTypeSchema, packageName: string): void {\n if (!schema.fields) return;\n\n const sortedFields = Object.entries(schema.fields).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n this.generateField(fieldName, field, packageName);\n }\n }\n\n private generateNestedTypes(schema: RegularTypeSchema, packageName: string): void {\n if (!(\"nested\" in schema) || !schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype, packageName);\n }\n }\n\n private generateField(fieldName: string, field: Field, packageName: string): void {\n try {\n if (isChoiceDeclarationField(field)) return;\n\n const fieldDeclaration = this.buildFieldDeclaration(fieldName, field, packageName);\n this.line(...fieldDeclaration);\n } catch (error) {\n this.logger()?.error(`Error processing field ${fieldName}: ${(error as Error).message}`);\n }\n }\n\n private buildFieldDeclaration(fieldName: string, field: Field, packageName: string): string[] {\n const fieldType = this.determineFieldType(fieldName, field, packageName);\n const modifiers = getFieldModifiers(field);\n const propertyName = pascalCase(fieldName);\n const accessors = \"{ get; set; }\";\n\n return [\"public\", ...modifiers, fieldType, propertyName, accessors].filter(Boolean);\n }\n\n private determineFieldType(fieldName: string, field: Field, packageName: string): string {\n let typeName = this.getBaseTypeName(field);\n\n if (\"enum\" in field && field.enum) {\n typeName = this.registerAndGetEnumType(fieldName, field, packageName);\n }\n\n typeName = prefixReservedTypeName(typeName);\n\n // questionable\n const baseNamespacePrefix = \"\";\n const nullable = field.required ? \"\" : \"?\";\n const arraySpecifier = field.array ? \"[]\" : \"\";\n\n return `${baseNamespacePrefix}${typeName}${arraySpecifier}${nullable}`;\n }\n\n private getBaseTypeName(field: Field): string {\n if (\"type\" in field) {\n let typeName = field.type.name.toString();\n\n if (field.type.kind === \"nested\") {\n typeName = getResourceName(field.type);\n } else if (field.type.kind === \"primitive-type\") typeName = PRIMITIVE_TYPE_MAP[field.type.name] ?? \"string\";\n\n return typeName;\n }\n return \"\";\n }\n\n private registerAndGetEnumType(\n fieldName: string,\n field: RegularField | ChoiceFieldInstance,\n packageName: string,\n ): string {\n const enumName = formatName(field.binding?.name ?? fieldName);\n const enumTypeName = `${enumName}Enum`;\n\n if (!this.enums[packageName]) this.enums[packageName] = {};\n if (field.enum) this.enums[packageName][enumTypeName] = field.enum;\n\n return enumTypeName;\n }\n\n private includeHelperMethods(): void {\n this.line(\"public override string ToString() => \");\n this.line(\" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);\");\n this.line();\n }\n\n private generateUsingFile(packages: string[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"Usings.cs\", () => {\n this.generateDisclaimer();\n this.generateGlobalUsings(packages);\n });\n });\n }\n\n private generateGlobalUsings(packages: string[]): void {\n const globalUsings = [\n \"CSharpSDK\",\n \"System.Text.Json\",\n \"System.Text.Json.Serialization\",\n this.targetNamespace,\n ...packages.map((pkg) => `${this.targetNamespace}.${pkg}`),\n ];\n\n for (const using of globalUsings) this.lineSM(\"global\", \"using\", using);\n }\n\n private generateBaseTypes(complexTypes: RegularTypeSchema[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"base.cs\", () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", this.targetNamespace);\n\n for (const schema of complexTypes) {\n const packageName = formatName(schema.identifier.package);\n this.generateType(schema, packageName);\n }\n });\n });\n }\n\n private generateResources(resources: RegularTypeSchema[]): void {\n for (const schema of resources) this.generateResourceFile(schema);\n }\n\n private generateResourceFile(schema: RegularTypeSchema): void {\n const packageName = formatName(schema.identifier.package);\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${schema.identifier.name}.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", `${this.targetNamespace}.${packageName}`);\n this.line();\n this.generateType(schema, packageName);\n });\n });\n }\n\n private generateEnumFiles(packages: string[]): void {\n for (const packageName of packages) {\n this.generatePackageEnums(packageName);\n }\n }\n\n private generatePackageEnums(packageName: string): void {\n const packageEnums = this.enums[packageName];\n if (!packageEnums || Object.keys(packageEnums).length === 0) return;\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${packageName}Enums.cs`, () => {\n this.generateDisclaimer();\n this.generateEnumFileContent(packageName, packageEnums);\n });\n });\n }\n\n private generateEnumFileContent(packageName: string, enums: Record<string, string[]>): void {\n this.lineSM(\"using\", \"System.ComponentModel\");\n this.line();\n this.lineSM(`namespace ${this.targetNamespace}.${packageName}`);\n\n for (const [enumName, values] of Object.entries(enums)) {\n this.generateEnum(enumName, values);\n }\n }\n\n private generateEnum(enumName: string, values: string[]): void {\n this.curlyBlock([\"public\", \"enum\", enumName], () => {\n for (const value of values) {\n this.line(`[Description(\"${value}\")]`);\n this.line(`${formatEnumEntry(value)},`);\n }\n });\n this.line();\n }\n\n private generateResourceDictionaries(resources: RegularTypeSchema[], packages: string[]): void {\n this.cd(\"/\", async () => {\n for (const packageName of packages) {\n const packageResources = resources.filter((r) => formatName(r.identifier.package) === packageName);\n\n if (packageResources.length === 0) return;\n\n this.cat(`${packageName}ResourceDictionary.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(`namespace ${this.targetNamespace}`);\n this.generateResourceDictionaryClass(packageName, packageResources);\n });\n }\n });\n }\n\n private generateResourceDictionaryClass(packageName: string, resources: RegularTypeSchema[]): void {\n this.curlyBlock([\"public\", \"static\", \"class\", \"ResourceDictionary\"], () => {\n this.curlyBlock([\"public static readonly Dictionary<Type, string> Map = new()\"], () => {\n for (const schema of resources) {\n const typeName = schema.identifier.name;\n this.line(`{ typeof(${packageName}.${typeName}), \"${typeName}\" },`);\n }\n });\n this.lineSM();\n });\n }\n\n private copyStaticFiles(): void {\n if (!this.staticSourceDir) return;\n const sourcePath = Path.resolve(this.staticSourceDir);\n fs.cpSync(sourcePath, this.opts.outputDir, { recursive: true });\n }\n\n private generateHelperFile(): void {\n const sourceFile = \"src/api/writer-generator/csharp/Helper.cs\";\n const destFile = Path.join(this.opts.outputDir, \"Helper.cs\");\n fs.copyFileSync(sourceFile, destFile);\n }\n}\n","import * as afs from \"node:fs/promises\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport * as YAML from \"yaml\";\nimport {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isBindingSchema,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type ProfileTypeSchema,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\nimport { extractDependencies } from \"./core/transformer\";\n\n///////////////////////////////////////////////////////////\n// TypeSchema processing\n\nexport const groupByPackages = (typeSchemas: TypeSchema[]) => {\n const grouped = {} as Record<PackageName, TypeSchema[]>;\n for (const ts of typeSchemas) {\n const pkgName = ts.identifier.package;\n if (!grouped[pkgName]) grouped[pkgName] = [];\n grouped[pkgName].push(ts);\n }\n for (const [packageName, typeSchemas] of Object.entries(grouped)) {\n const dict: Record<string, TypeSchema> = {};\n for (const ts of typeSchemas) {\n dict[JSON.stringify(ts.identifier)] = ts;\n }\n const tmp = Object.values(dict);\n tmp.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n grouped[packageName] = tmp;\n }\n return grouped;\n};\n\nexport type TypeSchemaShakeRule = { ignoreFields?: string[] };\n\nexport type TreeShake = Record<string, Record<string, TypeSchemaShakeRule>>;\n\nexport const treeShakeTypeSchema = (\n schema: TypeSchema,\n rule: TypeSchemaShakeRule,\n _logger?: CodegenLogger,\n): TypeSchema => {\n schema = structuredClone(schema);\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n for (const fieldName of rule.ignoreFields ?? []) {\n if (schema.fields && !schema.fields[fieldName]) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n delete schema.fields[fieldName];\n }\n }\n\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n\n return schema;\n};\n\nexport const treeShake = (tsIndex: TypeSchemaIndex, treeShake: TreeShake, logger?: CodegenLogger): TypeSchemaIndex => {\n const focusedSchemas: TypeSchema[] = [];\n for (const [pkgId, requires] of Object.entries(treeShake)) {\n for (const [url, rule] of Object.entries(requires)) {\n const schema = tsIndex.resolveByUrl(pkgId, url as CanonicalUrl);\n if (!schema) throw new Error(`Schema not found for ${pkgId} ${url}`);\n const shaked = treeShakeTypeSchema(schema, rule);\n focusedSchemas.push(shaked);\n }\n }\n const collectDeps = (schemas: TypeSchema[], acc: Record<string, TypeSchema>): TypeSchema[] => {\n if (schemas.length === 0) return Object.values(acc);\n for (const schema of schemas) {\n acc[JSON.stringify(schema.identifier)] = schema;\n }\n\n const newSchemas: TypeSchema[] = [];\n\n for (const schema of schemas) {\n if (isSpecializationTypeSchema(schema)) {\n if (!schema.dependencies) continue;\n schema.dependencies.forEach((dep) => {\n const depSchema = tsIndex.resolve(dep);\n if (!depSchema) throw new Error(`Schema not found for ${dep}`);\n const id = JSON.stringify(depSchema.identifier);\n if (!acc[id]) newSchemas.push(depSchema);\n });\n if (schema.nested) {\n for (const nest of schema.nested) {\n if (isNestedIdentifier(nest.identifier)) continue;\n const id = JSON.stringify(nest.identifier);\n if (!acc[id]) newSchemas.push(nest);\n }\n }\n }\n }\n return collectDeps(newSchemas, acc);\n };\n\n const shaked = collectDeps(focusedSchemas, {});\n return mkTypeSchemaIndex(shaked, logger);\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Relations\n\ninterface TypeRelation {\n parent: Identifier;\n child: Identifier;\n}\n\nconst resourceRelatives = (schemas: TypeSchema[]): TypeRelation[] => {\n const regularSchemas = schemas.filter(isResourceTypeSchema);\n const directPairs: TypeRelation[] = [];\n\n for (const schema of regularSchemas) {\n if (schema.base) {\n directPairs.push({ parent: schema.base, child: schema.identifier });\n }\n }\n\n const allPairs: TypeRelation[] = [...directPairs];\n const findTransitiveRelatives = (parentRef: Identifier): Identifier[] => {\n const directChildren = directPairs\n .filter((pair) => pair.parent.name === parentRef.name)\n .map((pair) => pair.child);\n\n const transitiveChildren: Identifier[] = [];\n for (const child of directChildren) {\n transitiveChildren.push(...findTransitiveRelatives(child));\n }\n\n return [...directChildren, ...transitiveChildren];\n };\n\n for (const pair of directPairs) {\n const transitiveChildren = findTransitiveRelatives(pair.child);\n for (const transitiveChild of transitiveChildren) {\n if (\n !directPairs.some((dp) => dp.parent.name === pair.parent.name && dp.child.name === transitiveChild.name)\n ) {\n allPairs.push({ parent: pair.parent, child: transitiveChild });\n }\n }\n }\n\n return allPairs;\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Index\n\ntype PackageName = string;\nexport type TypeSchemaIndex = {\n _schemaIndex: Record<CanonicalUrl, Record<PackageName, TypeSchema>>;\n _relations: TypeRelation[];\n collectComplexTypes: () => RegularTypeSchema[];\n collectResources: () => RegularTypeSchema[];\n collectLogicalModels: () => RegularTypeSchema[];\n collectProfiles: () => ProfileTypeSchema[];\n resolve: (id: Identifier) => TypeSchema | undefined;\n resolveByUrl: (pkgName: PackageName, url: CanonicalUrl) => TypeSchema | undefined;\n resourceChildren: (id: Identifier) => Identifier[];\n tryHierarchy: (schema: TypeSchema) => TypeSchema[] | undefined;\n hierarchy: (schema: TypeSchema) => TypeSchema[];\n findLastSpecialization: (schema: TypeSchema) => TypeSchema;\n findLastSpecializationByIdentifier: (id: Identifier) => Identifier;\n flatProfile: (schema: ProfileTypeSchema) => ProfileTypeSchema;\n isWithMetaField: (profile: ProfileTypeSchema) => boolean;\n exportTree: (filename: string) => Promise<void>;\n};\n\nexport const mkTypeSchemaIndex = (schemas: TypeSchema[], logger?: CodegenLogger): TypeSchemaIndex => {\n const index = {} as Record<CanonicalUrl, Record<PackageName, TypeSchema>>;\n const append = (schema: TypeSchema) => {\n const url = schema.identifier.url;\n const pkg = schema.identifier.package;\n if (!index[url]) index[url] = {};\n\n if (index[url][schema.identifier.package] && pkg !== \"shared\") {\n const r1 = JSON.stringify(schema.identifier, undefined, 2);\n const r2 = JSON.stringify(index[url][pkg]?.identifier, undefined, 2);\n if (r1 !== r2) throw new Error(`Duplicate schema: ${r1} and ${r2}`);\n return;\n }\n index[url][pkg] = schema;\n };\n for (const schema of schemas) {\n append(schema);\n }\n const relations = resourceRelatives(schemas);\n\n const resolve = (id: Identifier) => index[id.url]?.[id.package];\n const resolveByUrl = (pkgName: PackageName, url: CanonicalUrl) => index[url]?.[pkgName];\n\n const resourceChildren = (id: Identifier): Identifier[] => {\n return relations.filter((relative) => relative.parent.name === id.name).map((relative) => relative.child);\n };\n\n const tryHierarchy = (schema: TypeSchema): TypeSchema[] | undefined => {\n const res: TypeSchema[] = [];\n let cur: TypeSchema | undefined = schema;\n while (cur) {\n res.push(cur);\n const base = (cur as RegularTypeSchema).base;\n if (base === undefined) break;\n const resolved = resolve(base);\n if (!resolved) {\n logger?.warn(\n `Failed to resolve base type: ${res.map((e) => `${e.identifier.url} (${e.identifier.kind})`).join(\", \")}`,\n );\n return undefined;\n }\n cur = resolved;\n }\n return res;\n };\n\n const hierarchy = (schema: TypeSchema): TypeSchema[] => {\n const genealogy = tryHierarchy(schema);\n if (genealogy === undefined) {\n throw new Error(`Failed to resolve base type: ${schema.identifier.url} (${schema.identifier.kind})`);\n }\n return genealogy;\n };\n\n const findLastSpecialization = (schema: TypeSchema): TypeSchema => {\n const nonConstraintSchema = hierarchy(schema).find((s) => s.identifier.kind !== \"profile\");\n if (!nonConstraintSchema) {\n throw new Error(`No non-constraint schema found in hierarchy for: ${schema.identifier.name}`);\n }\n return nonConstraintSchema;\n };\n\n const findLastSpecializationByIdentifier = (id: Identifier): Identifier => {\n const schema = resolve(id);\n if (!schema) return id;\n return findLastSpecialization(schema).identifier;\n };\n\n const flatProfile = (schema: ProfileTypeSchema): ProfileTypeSchema => {\n const hierarchySchemas = hierarchy(schema);\n const constraintSchemas = hierarchySchemas.filter((s) => s.identifier.kind === \"profile\");\n const nonConstraintSchema = hierarchySchemas.find((s) => s.identifier.kind !== \"profile\");\n\n if (!nonConstraintSchema)\n throw new Error(`No non-constraint schema found in hierarchy for ${schema.identifier.name}`);\n\n const mergedFields = {} as Record<string, Field>;\n for (const anySchema of constraintSchemas.slice().reverse()) {\n const schema = anySchema as RegularTypeSchema;\n if (!schema.fields) continue;\n\n for (const [fieldName, fieldConstraints] of Object.entries(schema.fields)) {\n if (mergedFields[fieldName]) {\n mergedFields[fieldName] = {\n ...mergedFields[fieldName],\n ...fieldConstraints,\n };\n } else {\n mergedFields[fieldName] = { ...fieldConstraints };\n }\n }\n }\n\n const deps: { [url: string]: Identifier } = {};\n for (const e of constraintSchemas.flatMap((e) => (e as RegularTypeSchema).dependencies ?? [])) {\n deps[e.url] = e;\n }\n\n const dependencies = Object.values(deps);\n\n return {\n ...schema,\n base: nonConstraintSchema.identifier,\n fields: mergedFields,\n dependencies: dependencies,\n };\n };\n\n const isWithMetaField = (profile: ProfileTypeSchema): boolean => {\n const genealogy = tryHierarchy(profile);\n if (!genealogy) return false;\n return genealogy.filter(isSpecializationTypeSchema).some((schema) => {\n return schema.fields?.meta !== undefined;\n });\n };\n\n const exportTree = async (filename: string) => {\n const tree: Record<PackageName, Record<Identifier[\"kind\"], any>> = {};\n for (const [pkgId, shemas] of Object.entries(groupByPackages(schemas))) {\n tree[pkgId] = {\n \"primitive-type\": {},\n \"complex-type\": {},\n resource: {},\n \"value-set\": {},\n nested: {},\n binding: {},\n profile: {},\n logical: {},\n };\n for (const schema of shemas) {\n const _desc = schema.identifier;\n tree[pkgId][schema.identifier.kind][schema.identifier.url] = {};\n }\n }\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n await afs.writeFile(filename, raw);\n };\n\n return {\n _schemaIndex: index,\n _relations: relations,\n collectComplexTypes: () => schemas.filter(isComplexTypeTypeSchema),\n collectResources: () => schemas.filter(isResourceTypeSchema),\n collectLogicalModels: () => schemas.filter(isLogicalTypeSchema),\n collectProfiles: () => schemas.filter(isProfileTypeSchema),\n resolve,\n resolveByUrl,\n resourceChildren,\n tryHierarchy,\n hierarchy,\n findLastSpecialization,\n findLastSpecializationByIdentifier,\n flatProfile,\n isWithMetaField,\n exportTree,\n };\n};\n","/**\n * Centralized error handling and reporting system\n *\n * This module provides a comprehensive error handling solution that:\n * - Handles both generator-specific and unknown errors gracefully\n * - Provides rich, context-aware error reporting\n * - Supports multiple output formats (console, JSON, structured)\n * - Includes batch error handling for multiple failures\n * - Offers smart error recovery suggestions\n */\n\nimport type { TypeSchema } from \"@typeschema/types\";\nimport type { CodegenLogger } from \"../../../utils/codegen-logger\";\nimport { BatchOperationError, GeneratorError } from \"./errors\";\n\nexport interface ErrorHandlerOptions {\n logger: CodegenLogger;\n verbose?: boolean;\n beginnerMode?: boolean;\n outputFormat?: \"this.options.logger\" | \"json\" | \"structured\";\n}\n\n/**\n * Centralized error handler with smart reporting\n */\nexport class ErrorHandler {\n constructor(private options: ErrorHandlerOptions) {}\n\n /**\n * Handle a single error with appropriate reporting\n */\n handleError(error: Error, context?: { schema?: TypeSchema; filename?: string }): void {\n if (error instanceof GeneratorError) {\n this.handleGeneratorError(error, context);\n } else {\n this.handleUnknownError(error, context);\n }\n }\n\n /**\n * Handle multiple errors in batch\n */\n handleBatchErrors(errors: Error[]): void {\n const generatorErrors = errors.filter((e) => e instanceof GeneratorError) as GeneratorError[];\n const unknownErrors = errors.filter((e) => !(e instanceof GeneratorError));\n\n if (generatorErrors.length > 0) {\n this.reportBatchErrors(generatorErrors);\n }\n\n unknownErrors.forEach((error) => {\n this.handleUnknownError(error);\n });\n }\n\n /**\n * Handle generator-specific errors with rich context\n */\n private handleGeneratorError(error: GeneratorError, _context?: { schema?: TypeSchema; filename?: string }): void {\n switch (this.options.outputFormat) {\n case \"json\":\n this.reportErrorAsJson(error);\n break;\n case \"structured\":\n this.reportErrorStructured(error);\n break;\n default:\n this.reportErrorToConsole(error);\n }\n }\n\n /**\n * Handle unknown errors gracefully\n */\n private handleUnknownError(error: Error, context?: { schema?: TypeSchema; filename?: string }): void {\n this.options.logger.error(\"Unexpected error occurred:\", error);\n\n if (this.options.verbose) {\n this.options.logger.error(\"\\n🚨 Unexpected Error Details:\");\n this.options.logger.error(` Type: ${error.constructor.name}`);\n this.options.logger.error(` Message: ${error.message}`);\n if (error.stack) {\n this.options.logger.error(` Stack: ${error.stack}`);\n }\n if (context?.schema) {\n this.options.logger.error(` Schema: ${context.schema.identifier.name}`);\n }\n if (context?.filename) {\n this.options.logger.error(` File: ${context.filename}`);\n }\n }\n\n this.options.logger.error(\"\\n💡 General troubleshooting suggestions:\");\n this.options.logger.error(\" • Run with --verbose flag for more details\");\n this.options.logger.error(\" • Check your input files for corruption\");\n this.options.logger.error(\" • Update to the latest version of atomic-codegen\");\n this.options.logger.error(\" • Report this issue at: https://github.com/atomic-ehr/codegen/issues\");\n }\n\n /**\n * Report error to console with formatting\n */\n private reportErrorToConsole(error: GeneratorError): void {\n if (\"getFormattedMessage\" in error) {\n this.options.logger.error((error as any).getFormattedMessage());\n } else {\n this.options.logger.error(`\\n❌ ${error.constructor.name}: ${error.message}`);\n\n const suggestions = error.getSuggestions();\n if (suggestions.length > 0) {\n this.options.logger.error(\"\\n💡 Suggestions:\");\n suggestions.forEach((suggestion) => {\n this.options.logger.error(` • ${suggestion}`);\n });\n }\n }\n\n if (this.options.verbose && error.context) {\n this.options.logger.error(\"\\n🔍 Debug Information:\");\n this.options.logger.error(JSON.stringify(error.context, null, 2));\n }\n }\n\n /**\n * Report error as JSON for programmatic consumption\n */\n private reportErrorAsJson(error: GeneratorError): void {\n const errorData = {\n type: error.constructor.name,\n message: error.message,\n phase: error.phase,\n context: error.context,\n suggestions: error.getSuggestions(),\n timestamp: new Date().toISOString(),\n };\n\n this.options.logger.error(JSON.stringify(errorData, null, 2));\n }\n\n /**\n * Report error in structured format\n */\n private reportErrorStructured(error: GeneratorError): void {\n const structure = {\n error: {\n type: error.constructor.name,\n message: error.message,\n phase: error.phase,\n },\n context: error.context,\n suggestions: error.getSuggestions(),\n actions: this.getRecoveryActions(error),\n };\n\n this.options.logger.error(\"---\");\n this.options.logger.error(\"Error Report:\");\n this.options.logger.error(JSON.stringify(structure, null, 2));\n this.options.logger.error(\"---\");\n }\n\n /**\n * Report multiple errors efficiently\n */\n private reportBatchErrors(errors: GeneratorError[]): void {\n this.options.logger.error(`\\n❌ ${errors.length} errors occurred during generation:`);\n\n // Group errors by type\n const errorGroups = new Map<string, GeneratorError[]>();\n errors.forEach((error) => {\n const type = error.constructor.name;\n if (!errorGroups.has(type)) {\n errorGroups.set(type, []);\n }\n errorGroups.get(type)?.push(error);\n });\n\n // Report each group\n for (const [type, groupErrors] of errorGroups) {\n this.options.logger.error(`\\n📋 ${type} (${groupErrors.length} occurrences):`);\n\n groupErrors.forEach((error, index) => {\n this.options.logger.error(` ${index + 1}. ${error.message}`);\n if (error.context?.schemaName) {\n this.options.logger.error(` Schema: ${error.context.schemaName}`);\n }\n });\n\n // Show common suggestions for this error type\n const commonSuggestions = this.getCommonSuggestions(groupErrors);\n if (commonSuggestions.length > 0) {\n this.options.logger.error(\"\\n 💡 Common suggestions:\");\n commonSuggestions.forEach((suggestion) => {\n this.options.logger.error(` • ${suggestion}`);\n });\n }\n }\n }\n\n /**\n * Get common suggestions across similar errors\n */\n private getCommonSuggestions(errors: GeneratorError[]): string[] {\n const allSuggestions = errors.flatMap((e) => e.getSuggestions());\n const suggestionCounts = new Map<string, number>();\n\n allSuggestions.forEach((suggestion) => {\n suggestionCounts.set(suggestion, (suggestionCounts.get(suggestion) || 0) + 1);\n });\n\n // Return suggestions that appear in at least half the errors\n const threshold = Math.ceil(errors.length / 2);\n return Array.from(suggestionCounts.entries())\n .filter(([_, count]) => count >= threshold)\n .map(([suggestion, _]) => suggestion)\n .slice(0, 5); // Limit to 5 most common\n }\n\n /**\n * Get recovery actions for an error\n */\n private getRecoveryActions(error: GeneratorError): Array<{ action: string; command?: string }> {\n if (\"getRecoveryActions\" in error) {\n return (error as any).getRecoveryActions();\n }\n\n return [\n { action: \"Review error message and suggestions above\" },\n { action: \"Check input files and configuration\" },\n { action: \"Try with --verbose flag for more information\" },\n ];\n }\n}\n\n/**\n * Error boundary for catching and handling all generator errors\n */\nexport class GeneratorErrorBoundary {\n constructor(private errorHandler: ErrorHandler) {}\n\n /**\n * Wrap an async operation with error boundary\n */\n async withErrorBoundary<T>(\n operation: () => Promise<T>,\n context?: {\n schema?: TypeSchema;\n filename?: string;\n operationName?: string;\n },\n ): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n this.errorHandler.handleError(error instanceof Error ? error : new Error(String(error)), context);\n throw error; // Re-throw after handling\n }\n }\n\n /**\n * Wrap a batch operation with error boundary\n */\n async withBatchErrorBoundary<T>(\n operations: Array<() => Promise<T>>,\n _context?: { operationName?: string },\n ): Promise<T[]> {\n const results: T[] = [];\n const errors: Error[] = [];\n\n for (const operation of operations) {\n try {\n const result = await operation();\n results.push(result);\n } catch (error) {\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n if (errors.length > 0) {\n this.errorHandler.handleBatchErrors(errors);\n throw new BatchOperationError(\n `${errors.length} operations failed`,\n errors.filter((e) => e instanceof GeneratorError) as GeneratorError[],\n );\n }\n\n return results;\n }\n}\n","/**\n * Abstract base generator class\n *\n * This is the foundation of the generator system. All language-specific generators\n * extend this class to inherit common functionality while implementing their own\n * specific logic for type mapping, content generation, and validation.\n */\n\nimport type { TypeSchema } from \"@typeschema/types\";\nimport type { CodegenLogger } from \"../../../utils/codegen-logger\";\nimport { createLogger } from \"../../../utils/codegen-logger\";\nimport { ErrorHandler, GeneratorErrorBoundary } from \"./error-handler\";\nimport { ConfigurationError, SchemaValidationError } from \"./errors\";\nimport { FileManager } from \"./FileManager\";\nimport type {\n BaseGeneratorOptions,\n ConfigValidationResult,\n GeneratedFile,\n GeneratorCapabilities,\n ProgressCallback,\n TemplateContext,\n TemplateEngine,\n TypeMapper,\n} from \"./types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\n\nexport type GeneratorInput = { schemas: TypeSchema[]; index: TypeSchemaIndex };\n\n/**\n * Abstract base generator class with comprehensive functionality\n *\n * Provides common functionality for all generators including:\n * - Schema validation and processing\n * - File management with fluent API\n * - Template processing\n * - Error handling and recovery\n * - Progress monitoring\n * - Performance optimization\n */\nexport abstract class BaseGenerator<\n TOptions extends BaseGeneratorOptions = BaseGeneratorOptions,\n TResult extends GeneratedFile[] = GeneratedFile[],\n> {\n /** Validated and merged options */\n protected options: Required<TOptions>;\n\n /** Logger instance for this generator */\n protected readonly logger: CodegenLogger;\n\n /** File manager for all file operations */\n protected readonly fileManager: FileManager;\n\n /** Template engine for content generation (optional) */\n protected readonly templateEngine?: TemplateEngine;\n\n /** Language-specific type mapper */\n protected readonly typeMapper: TypeMapper;\n\n /** Enhanced error handler for comprehensive error reporting */\n protected readonly errorHandler: ErrorHandler;\n\n /** Error boundary for catching and handling all generator errors */\n protected readonly errorBoundary: GeneratorErrorBoundary;\n\n /** Progress callback if provided */\n private progressCallback?: ProgressCallback;\n\n /** Generated files tracking */\n private generatedFiles: GeneratedFile[] = [];\n\n /** Generation start time for performance metrics */\n private generationStartTime = 0;\n\n /** Cache for expensive operations */\n private readonly cache = new Map<string, unknown>();\n\n constructor(options: TOptions) {\n // Validate configuration first\n const validation = this.validateConfiguration(options);\n if (!validation.isValid) {\n throw new ConfigurationError(\n `Invalid generator configuration: ${validation.errors.join(\", \")}`,\n \"configuration\",\n options,\n );\n }\n\n // Merge with defaults and store\n this.options = this.mergeWithDefaults(options);\n\n // Initialize logger\n this.logger =\n options.logger ||\n createLogger({\n prefix: this.getLanguageName(),\n verbose: this.options.verbose || false,\n });\n\n // Initialize core components\n this.fileManager = this.createFileManager();\n this.templateEngine = this.createTemplateEngine();\n this.typeMapper = this.createTypeMapper();\n\n // Initialize enhanced error handling\n this.errorHandler = new ErrorHandler({\n logger: this.logger,\n verbose: this.options.verbose || false,\n beginnerMode: this.options.beginnerMode || false,\n outputFormat: \"this.options.logger\",\n });\n\n this.errorBoundary = new GeneratorErrorBoundary(this.errorHandler);\n\n this.logger.debug(`${this.getLanguageName()} generator initialized`);\n\n // Log any configuration warnings\n if (validation.warnings.length > 0) {\n validation.warnings.forEach((warning) => {\n this.logger.warn(`Configuration warning: ${warning}`);\n });\n }\n }\n\n // ==========================================\n // Abstract Methods - Must be implemented by subclasses\n // ==========================================\n\n /**\n * Get the name of the target language (e.g., \"TypeScript\", \"Python\", \"Rust\")\n */\n protected abstract getLanguageName(): string;\n\n /**\n * Get the file extension for the target language (e.g., \".ts\", \".py\", \".rs\")\n */\n protected abstract getFileExtension(): string;\n\n /**\n * Create a language-specific type mapper\n */\n protected abstract createTypeMapper(): TypeMapper;\n\n /**\n * Generate content for a single schema\n * @param schema - The TypeSchema to generate code for\n * @param context - Additional context for generation\n */\n protected abstract generateSchemaContent(schema: TypeSchema, context: TemplateContext): Promise<string>;\n\n /**\n * Validate generated content before writing\n * @param content - The generated content\n * @param context - The generation context\n */\n protected abstract validateContent(content: string, context: TemplateContext): Promise<void>;\n\n /**\n * Filter and sort schemas with language-specific logic\n * @param schemas - Input schemas\n */\n protected abstract filterAndSortSchemas(schemas: TypeSchema[]): TypeSchema[];\n\n // ==========================================\n // Optional Abstract Methods - Can be overridden\n // ==========================================\n\n /**\n * Get generator capabilities - can be overridden for introspection\n */\n getCapabilities(): GeneratorCapabilities {\n return {\n language: this.getLanguageName(),\n fileExtensions: [this.getFileExtension()],\n supportsTemplates: true,\n supportsCustomTypeMapping: true,\n supportsIncrementalGeneration: false,\n supportsValidation: true,\n supportedSchemaKinds: [\"resource\", \"complex-type\", \"profile\", \"logical\"],\n version: \"1.0.0\",\n };\n }\n\n /**\n * Create file manager instance - can be overridden for custom file handling\n */\n protected createFileManager(): FileManager {\n return new FileManager({\n outputDir: this.options.outputDir,\n logger: this.logger.child(\"FileManager\"),\n overwrite: this.options.overwrite,\n });\n }\n\n /**\n * Create template engine instance - can be overridden for custom templates\n * Returns undefined if template engine is not needed\n */\n protected createTemplateEngine(): TemplateEngine | undefined {\n // Default implementation returns undefined (no template engine)\n // Subclasses can override to provide template engine if needed\n return undefined;\n }\n\n // ==========================================\n // Public API - Main entry points\n // ==========================================\n\n /**\n * Generate code from TypeSchema documents\n * This is the main method that orchestrates the entire generation process\n * @param schemas - Array of TypeSchema documents\n */\n public async generate({ schemas }: GeneratorInput): Promise<TResult> {\n return this.errorBoundary.withErrorBoundary(\n async () => {\n this.generationStartTime = performance.now();\n this.generatedFiles = [];\n\n this.logger.info(`Starting ${this.getLanguageName()} generation for ${schemas.length} schemas`);\n\n // Phase 1: Schema validation\n this.reportProgress(\"validation\", 0, schemas.length, \"Validating schemas...\");\n await this.validateSchemas(schemas);\n\n // Phase 2: Schema processing and filtering\n this.reportProgress(\"generation\", 0, schemas.length, \"Processing schemas...\");\n const processedSchemas = this.filterAndSortSchemas(schemas);\n this.logger.debug(`Filtered to ${processedSchemas.length} schemas for generation`);\n\n // Phase 3: Content generation\n await this.generateFiles(processedSchemas);\n\n // Phase 4: Post-generation hooks\n await this.runPostGenerationHooks();\n\n this.reportProgress(\"complete\", schemas.length, schemas.length, \"Generation complete\");\n\n const duration = performance.now() - this.generationStartTime;\n this.logger.info(\n `Generated ${this.generatedFiles.length} files in ${duration.toFixed(2)}ms ` +\n `(avg ${(duration / this.generatedFiles.length).toFixed(2)}ms per file)`,\n );\n\n return this.generatedFiles as TResult;\n },\n { operationName: \"generate\" },\n );\n }\n\n /**\n * Generate and return content without writing files (useful for testing)\n * @param schemas - Array of TypeSchema documents\n */\n public async build(schemas: TypeSchema[]): Promise<TResult> {\n // Temporarily disable file writing by mocking the writeFile method\n const originalWriteFile = this.fileManager.writeFile;\n const mockWriteResults = new Map<string, { path: string; size: number; writeTime: number }>();\n\n this.fileManager.writeFile = async (path: string, content: string) => {\n const result = {\n path: `${this.options.outputDir}/${path}`,\n size: Buffer.byteLength(content, \"utf-8\"),\n writeTime: 0,\n };\n mockWriteResults.set(path, result);\n return result;\n };\n\n try {\n const result = await this.generate({ schemas, index: null as any });\n\n // Update file paths to reflect what would have been written\n result.forEach((file) => {\n const mockResult = mockWriteResults.get(file.filename);\n if (mockResult) {\n file.path = mockResult.path;\n file.size = mockResult.size;\n }\n });\n\n return result;\n } finally {\n // Restore original file writing function\n this.fileManager.writeFile = originalWriteFile;\n }\n }\n\n // ==========================================\n // Fluent API - Builder pattern methods\n // ==========================================\n\n /**\n * Create a file builder for fluent file generation\n * @param filename - Name of the file to create\n */\n public file(filename: string): import(\"./builders/FileBuilder\").FileBuilder {\n if (!this.templateEngine) {\n throw new Error(\n \"Template engine is required for fluent file generation. Override createTemplateEngine() in your generator.\",\n );\n }\n const { FileBuilder } = require(\"./builders/FileBuilder\");\n return new FileBuilder({\n filename: this.ensureFileExtension(filename),\n fileManager: this.fileManager,\n templateEngine: this.templateEngine,\n typeMapper: this.typeMapper,\n logger: this.logger.child(\"FileBuilder\"),\n });\n }\n\n /**\n * Create a directory builder for batch operations\n * @param path - Directory path relative to output directory\n */\n public directory(path: string): import(\"./builders/DirectoryBuilder\").DirectoryBuilder {\n const { DirectoryBuilder } = require(\"./builders/DirectoryBuilder\");\n return new DirectoryBuilder({\n path,\n fileManager: this.fileManager,\n logger: this.logger.child(\"DirectoryBuilder\"),\n });\n }\n\n /**\n * Create an index file builder\n * @param directory - Directory to create index for\n */\n public index(directory: string = \".\"): import(\"./builders/IndexBuilder\").IndexBuilder {\n if (!this.templateEngine) {\n throw new Error(\n \"Template engine is required for index file generation. Override createTemplateEngine() in your generator.\",\n );\n }\n const { IndexBuilder } = require(\"./builders/IndexBuilder\");\n return new IndexBuilder({\n directory,\n fileManager: this.fileManager,\n templateEngine: this.templateEngine,\n logger: this.logger.child(\"IndexBuilder\"),\n });\n }\n\n /**\n * Set progress callback for monitoring generation\n * @param callback - Progress callback function\n */\n public onProgress(callback: ProgressCallback): this {\n this.progressCallback = callback;\n return this;\n }\n\n // ==========================================\n // Configuration and Validation\n // ==========================================\n\n /**\n * Validate generator configuration\n */\n private validateConfiguration(options: TOptions): ConfigValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n const suggestions: string[] = [];\n\n // Required options validation\n if (!options.outputDir) {\n errors.push(\"outputDir is required\");\n suggestions.push(\"Provide a valid output directory path\");\n }\n\n // Type validation\n if (options.outputDir && typeof options.outputDir !== \"string\") {\n errors.push(\"outputDir must be a string\");\n }\n\n if (options.overwrite !== undefined && typeof options.overwrite !== \"boolean\") {\n errors.push(\"overwrite must be a boolean\");\n }\n\n if (options.validate !== undefined && typeof options.validate !== \"boolean\") {\n errors.push(\"validate must be a boolean\");\n }\n\n // Warnings for suboptimal configuration\n if (options.outputDir && !require(\"node:path\").isAbsolute(options.outputDir)) {\n warnings.push(\"Using relative path for outputDir - consider using absolute path\");\n suggestions.push(\"Use path.resolve() to convert to absolute path\");\n }\n\n if (options.validate === false) {\n warnings.push(\"Validation is disabled - this may lead to invalid generated code\");\n suggestions.push(\"Consider enabling validation for better code quality\");\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n suggestions,\n };\n }\n\n /**\n * Merge options with defaults\n */\n private mergeWithDefaults(options: TOptions): Required<TOptions> {\n return {\n overwrite: true,\n validate: true,\n verbose: false,\n beginnerMode: false,\n errorFormat: \"console\" as const,\n ...options,\n } as Required<TOptions>;\n }\n\n // ==========================================\n // Schema Processing\n // ==========================================\n\n /**\n * Validate schemas before processing\n */\n private async validateSchemas(schemas: TypeSchema[]): Promise<void> {\n if (!this.options.validate) {\n this.logger.debug(\"Schema validation disabled\");\n return;\n }\n\n this.logger.info(`🔍 Starting schema validation for ${schemas.length} schemas`);\n this.logger.debug(\"Schema validation enabled - performing comprehensive validation\");\n\n const operations = schemas.map(\n (schema) => () =>\n this.errorBoundary.withErrorBoundary(\n async () => {\n await this.validateSchema(schema);\n this.reportProgress(\n \"validation\",\n schemas.indexOf(schema) + 1,\n schemas.length,\n `Validated ${schema.identifier?.name || \"schema\"}`,\n );\n },\n { schema, operationName: \"validateSchema\" },\n ),\n );\n\n await this.errorBoundary.withBatchErrorBoundary(operations, {\n operationName: \"validateSchemas\",\n });\n\n this.logger.debug(`Successfully validated ${schemas.length} schemas`);\n }\n\n /**\n * Validate individual schema\n */\n protected async validateSchema(schema: TypeSchema): Promise<void> {\n const errors: string[] = [];\n const schemaName = schema.identifier?.name || \"unknown\";\n\n this.logger.debug(`🔍 Validating schema: ${schemaName} (kind: ${schema.identifier?.kind})`);\n\n // Basic structure validation\n if (!schema.identifier) {\n errors.push(\"Schema missing identifier\");\n this.logger.warn(`❌ Schema missing identifier: ${JSON.stringify(schema, null, 2).substring(0, 200)}...`);\n } else {\n if (!schema.identifier.name) {\n errors.push(\"Schema identifier missing name\");\n }\n\n if (!schema.identifier.kind) {\n errors.push(\"Schema identifier missing kind\");\n } else {\n const validKinds = [\n \"resource\",\n \"complex-type\",\n \"profile\",\n \"primitive-type\",\n \"logical\",\n \"value-set\",\n \"binding\",\n \"extension\",\n ];\n if (!validKinds.includes(schema.identifier.kind)) {\n errors.push(`Schema identifier.kind must be one of: ${validKinds.join(\", \")}`);\n }\n }\n }\n\n // Field validation\n if (\"fields\" in schema && schema.fields) {\n for (const [fieldName, field] of Object.entries(schema.fields)) {\n if (!fieldName.trim()) {\n errors.push(\"Field name cannot be empty\");\n }\n\n if (!field) {\n errors.push(`Field '${fieldName}' is null or undefined`);\n }\n\n // Add more field-specific validation as needed\n }\n }\n\n // Circular reference detection (make it a warning, not an error for FHIR schemas)\n if (await this.detectCircularReferences(schema)) {\n this.logger.warn(\n `⚠️ Circular reference detected in schema '${schemaName}' - this may be expected for FHIR primitive types`,\n );\n // Don't add to errors - FHIR schemas often have legitimate circular references\n }\n\n if (errors.length > 0) {\n this.logger.error(`❌ Schema validation failed for '${schemaName}': ${errors.join(\", \")}`);\n this.logger.debug(`Schema details: ${JSON.stringify(schema, null, 2)}`);\n throw new SchemaValidationError(\n `Schema validation failed for '${schema.identifier?.name || \"unknown\"}'`,\n schema,\n errors,\n );\n }\n\n this.logger.debug(`✅ Schema validation passed for '${schemaName}'`);\n }\n\n /**\n * Detect circular references in schema dependencies\n */\n private async detectCircularReferences(schema: TypeSchema): Promise<boolean> {\n // Simple implementation - can be enhanced for complex cases\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const checkCircular = (currentSchema: TypeSchema): boolean => {\n const name = currentSchema.identifier?.name;\n if (!name) return false;\n\n if (visiting.has(name)) {\n return true; // Circular reference found\n }\n\n if (visited.has(name)) {\n return false; // Already processed\n }\n\n visiting.add(name);\n\n // Check field references\n if (\"fields\" in currentSchema && currentSchema.fields) {\n for (const field of Object.values(currentSchema.fields)) {\n if ((field as any)?.type?.name === name) {\n return true; // Self-reference\n }\n // Add more complex reference checking as needed\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n return false;\n };\n\n return checkCircular(schema);\n }\n\n // ==========================================\n // File Generation\n // ==========================================\n\n /**\n * Generate files from processed schemas\n */\n private async generateFiles(schemas: TypeSchema[]): Promise<void> {\n const operations = schemas.map(\n (schema, index) => () =>\n this.errorBoundary.withErrorBoundary(\n async () => {\n const file = await this.generateFileForSchema(schema, index, schemas.length);\n this.generatedFiles.push(file);\n return file;\n },\n { schema, operationName: \"generateFile\" },\n ),\n );\n\n await this.errorBoundary.withBatchErrorBoundary(operations, {\n operationName: \"generateFiles\",\n });\n\n this.logger.debug(`Generated ${this.generatedFiles.length} files`);\n }\n\n /**\n * Generate a single file from a schema\n */\n private async generateFileForSchema(schema: TypeSchema, index: number, total: number): Promise<GeneratedFile> {\n const fileStartTime = performance.now();\n\n // Create template context\n const context: TemplateContext = {\n schema,\n typeMapper: this.typeMapper,\n filename: this.typeMapper.formatFileName(schema.identifier?.name || \"unknown\"),\n language: this.getLanguageName(),\n timestamp: new Date().toISOString(),\n imports: new Map(),\n exports: new Set(),\n };\n\n // Generate content\n const content = await this.generateSchemaContent(schema, context);\n\n // Validate content if enabled\n if (this.options.validate) {\n await this.validateContent(content, context);\n }\n\n // Write file\n const filename = context.filename + this.getFileExtension();\n const writeResult = await this.fileManager.writeFile(filename, content);\n\n const generationTime = performance.now() - fileStartTime;\n\n // Report progress\n this.reportProgress(\"writing\", index + 1, total, `Generated ${filename} (${writeResult.size} bytes)`);\n\n // Create GeneratedFile result\n const generatedFile: GeneratedFile = {\n path: writeResult.path,\n filename,\n content,\n exports: this.extractExports(content),\n size: writeResult.size,\n timestamp: new Date(),\n metadata: {\n generationTime,\n schemaCount: 1,\n templateName: context.templateName?.toString(),\n warnings: [],\n },\n };\n\n return generatedFile;\n }\n\n // ==========================================\n // Helper Methods\n // ==========================================\n\n /**\n * Ensure filename has correct extension\n */\n private ensureFileExtension(filename: string): string {\n const extension = this.getFileExtension();\n return filename.endsWith(extension) ? filename : `${filename}${extension}`;\n }\n\n /**\n * Extract exported symbols from generated content\n * Can be overridden by language-specific implementations\n */\n protected extractExports(content: string): string[] {\n const exports: string[] = [];\n\n // Handle export { name1, name2 } syntax\n const exportListRegex = /export\\s*\\{\\s*([^}]+)\\s*\\}/g;\n let match;\n while ((match = exportListRegex.exec(content)) !== null) {\n if (match[1]) {\n const names = match[1]\n .split(\",\")\n .map((name) => name.trim())\n .filter(Boolean);\n exports.push(...names);\n }\n }\n\n // Handle direct export declarations\n const directExportRegex = /export\\s+(?:const|let|var|function|class|interface|type|enum)\\s+(\\w+)/g;\n while ((match = directExportRegex.exec(content)) !== null) {\n if (match[1]) {\n exports.push(match[1]);\n }\n }\n\n // Remove duplicates\n return [...new Set(exports)];\n }\n\n /**\n * Report progress to callback if provided\n */\n protected reportProgress(\n phase: \"validation\" | \"generation\" | \"writing\" | \"complete\",\n current: number,\n total: number,\n message?: string,\n schema?: TypeSchema,\n ): void {\n if (this.progressCallback) {\n this.progressCallback(phase, current, total, message, schema);\n }\n\n if (message && this.options.verbose) {\n this.logger.debug(`[${phase}] ${message} (${current}/${total})`);\n }\n }\n\n /**\n * Run post-generation hooks\n * Can be overridden to add custom post-processing\n */\n protected async runPostGenerationHooks(): Promise<void> {\n // Default implementation does nothing\n // Subclasses can override to add custom logic\n }\n\n /**\n * Get cached value or compute and cache it\n */\n protected getCachedOrCompute<T>(key: string, computeFn: () => T | Promise<T>): T | Promise<T> {\n if (this.cache.has(key)) {\n return this.cache.get(key) as T;\n }\n\n const result = computeFn();\n\n if (result instanceof Promise) {\n return result.then((value) => {\n this.cache.set(key, value);\n return value;\n });\n } else {\n this.cache.set(key, result);\n return result;\n }\n }\n\n /**\n * Clear internal cache\n */\n protected clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Get generation statistics\n */\n public getGenerationStats(): {\n filesGenerated: number;\n totalSize: number;\n averageFileSize: number;\n generationTime: number;\n averageTimePerFile: number;\n cacheHitRate: number;\n } {\n const totalSize = this.generatedFiles.reduce((sum, file) => sum + file.size, 0);\n const generationTime = performance.now() - this.generationStartTime;\n\n return {\n filesGenerated: this.generatedFiles.length,\n totalSize,\n averageFileSize: this.generatedFiles.length > 0 ? totalSize / this.generatedFiles.length : 0,\n generationTime,\n averageTimePerFile: this.generatedFiles.length > 0 ? generationTime / this.generatedFiles.length : 0,\n cacheHitRate: 0, // TODO: Implement cache hit tracking\n };\n }\n}\n","/**\n * Core file management system with batching and performance optimizations\n *\n * This replaces scattered writeFile calls with a comprehensive file management\n * system that provides better error handling, performance, and maintainability.\n */\n\nimport { access, mkdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative } from \"node:path\";\nimport type { CodegenLogger } from \"../../../utils/codegen-logger\";\nimport { FileOperationError } from \"./errors\";\nimport type { FileStats } from \"./types\";\n\nexport interface FileManagerOptions {\n outputDir: string;\n logger: CodegenLogger;\n overwrite?: boolean;\n batchSize?: number;\n}\n\nexport interface WriteFileResult {\n path: string;\n size: number;\n writeTime: number;\n}\n\n/**\n * High-performance file manager with batching and error recovery\n *\n * Features:\n * - Automatic directory creation\n * - Batch operations for better performance\n * - Comprehensive error handling with recovery suggestions\n * - Import path resolution\n * - File existence checks\n */\nexport class FileManager {\n private readonly options: Required<FileManagerOptions>;\n private readonly logger: CodegenLogger;\n\n constructor(options: FileManagerOptions) {\n this.options = {\n overwrite: true,\n batchSize: 10,\n ...options,\n };\n this.logger = options.logger;\n }\n\n /**\n * Write a file with automatic directory creation\n * @param relativePath Path relative to output directory\n * @param content File content\n * @param options Write options\n */\n async writeFile(\n relativePath: string,\n content: string,\n options: { encoding?: BufferEncoding; overwrite?: boolean } = {},\n ): Promise<WriteFileResult> {\n const startTime = performance.now();\n const fullPath = join(this.options.outputDir, relativePath);\n const encoding = options.encoding || \"utf-8\";\n const overwrite = options.overwrite ?? this.options.overwrite;\n\n try {\n // Check if file exists and overwrite is disabled\n if (!overwrite) {\n try {\n await access(fullPath);\n this.logger.debug(`Skipping existing file: ${relativePath}`);\n const stats = await stat(fullPath);\n return {\n path: fullPath,\n size: stats.size,\n writeTime: 0,\n };\n } catch {\n // File doesn't exist, continue with write\n }\n }\n\n // Ensure directory exists\n await this.ensureDirectory(dirname(fullPath));\n\n // Write file\n await writeFile(fullPath, content, encoding);\n\n const writeTime = performance.now() - startTime;\n const size = Buffer.byteLength(content, encoding);\n\n this.logger.debug(`Written ${relativePath} (${size} bytes, ${writeTime.toFixed(2)}ms)`);\n\n return {\n path: fullPath,\n size,\n writeTime,\n };\n } catch (error) {\n throw new FileOperationError(\n `Failed to write file '${relativePath}': ${error}`,\n \"write\",\n fullPath,\n error instanceof Error ? error : undefined,\n {\n canRetry: true,\n alternativePaths: [join(process.cwd(), \"backup-output\", relativePath)],\n },\n );\n }\n }\n\n /**\n * Write multiple files in batch for better performance\n * @param files Map of relative path to content\n */\n async writeBatch(files: Map<string, string>): Promise<WriteFileResult[]> {\n this.logger.debug(`Writing batch of ${files.size} files`);\n\n const entries = Array.from(files.entries());\n const results: WriteFileResult[] = [];\n\n // Process in batches to avoid overwhelming the filesystem\n for (let i = 0; i < entries.length; i += this.options.batchSize) {\n const batch = entries.slice(i, i + this.options.batchSize);\n const batchPromises = batch.map(([path, content]) => this.writeFile(path, content));\n\n const batchResults = await Promise.all(batchPromises);\n results.push(...batchResults);\n\n // Small delay between batches to be filesystem-friendly\n if (i + this.options.batchSize < entries.length) {\n await new Promise((resolve) => setTimeout(resolve, 10));\n }\n }\n\n return results;\n }\n\n /**\n * Ensure directory exists, creating parent directories as needed\n * @param dirPath Full directory path\n */\n async ensureDirectory(dirPath: string): Promise<void> {\n try {\n await mkdir(dirPath, { recursive: true });\n } catch (error) {\n throw new FileOperationError(\n `Failed to create directory '${dirPath}': ${error}`,\n \"create\",\n dirPath,\n error instanceof Error ? error : undefined,\n {\n canRetry: true,\n permissionFix: `chmod 755 \"${dirname(dirPath)}\"`,\n },\n );\n }\n }\n\n /**\n * Clean directory by removing all contents\n * @param relativePath Path relative to output directory\n */\n async cleanDirectory(relativePath: string = \".\"): Promise<void> {\n const fullPath = join(this.options.outputDir, relativePath);\n\n try {\n await access(fullPath);\n this.logger.debug(`Cleaning directory: ${relativePath}`);\n await rm(fullPath, { recursive: true, force: true });\n } catch (error) {\n // Directory doesn't exist - that's fine\n if ((error as NodeJS.ErrnoException)?.code !== \"ENOENT\") {\n throw new FileOperationError(\n `Failed to clean directory '${relativePath}': ${error}`,\n \"delete\",\n fullPath,\n error instanceof Error ? error : undefined,\n {\n canRetry: true,\n },\n );\n }\n }\n }\n\n /**\n * Get relative import path between two files\n * @param fromFile Source file path\n * @param toFile Target file path\n */\n getRelativeImportPath(fromFile: string, toFile: string): string {\n const from = dirname(join(this.options.outputDir, fromFile));\n const to = join(this.options.outputDir, toFile);\n\n let relativePath = relative(from, to);\n\n // Ensure relative imports start with './' or '../'\n if (!relativePath.startsWith(\".\")) {\n relativePath = `./${relativePath}`;\n }\n\n // Remove file extension for imports (handle .d.ts files properly)\n return relativePath.replace(/\\.(d\\.ts|ts|tsx|js|jsx)$/, \"\");\n }\n\n /**\n * Check if a file would be overwritten\n * @param relativePath Path relative to output directory\n */\n async wouldOverwrite(relativePath: string): Promise<boolean> {\n const fullPath = join(this.options.outputDir, relativePath);\n try {\n await access(fullPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get file statistics\n * @param relativePath Path relative to output directory\n */\n async getFileStats(relativePath: string): Promise<FileStats | null> {\n const fullPath = join(this.options.outputDir, relativePath);\n try {\n const stats = await stat(fullPath);\n return {\n size: stats.size,\n generationTime: 0, // Will be set by caller\n writeTime: 0, // Will be set by caller\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Get output directory\n */\n getOutputDirectory(): string {\n return this.options.outputDir;\n }\n\n /**\n * Set batch size for operations\n * @param size Batch size\n */\n setBatchSize(size: number): void {\n this.options.batchSize = Math.max(1, Math.min(50, size));\n }\n\n /**\n * Get current batch size\n */\n getBatchSize(): number {\n return this.options.batchSize;\n }\n}\n","/**\n * Abstract base class for language-specific type mapping\n *\n * This provides the interface that all language generators must implement\n * to convert FHIR TypeSchema types into their target language types.\n */\n\nimport type { Identifier } from \"@typeschema/types\";\n\n/**\n * Represents a type in the target language\n */\nexport interface LanguageType {\n /** The type name in the target language */\n name: string;\n\n /** Whether this is a primitive type (doesn't need imports) */\n isPrimitive: boolean;\n\n /** Import path if this type needs to be imported */\n importPath?: string;\n\n /** Generic type parameters if applicable */\n generics?: string[];\n\n /** Whether this type can be null/undefined */\n nullable?: boolean;\n\n /** Whether this is an array type */\n isArray?: boolean;\n\n /** Additional metadata for language-specific features */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Configuration for type mapping behavior\n */\nexport interface TypeMapperOptions {\n /** Whether to generate nullable types (e.g., T | null) */\n generateNullable?: boolean;\n\n /** Whether to use strict type checking */\n strictTypes?: boolean;\n\n /** Custom type mappings */\n customMappings?: Record<string, string>;\n\n /** Whether to generate array types or use generic collections */\n preferArraySyntax?: boolean;\n\n /** Naming convention strategy */\n namingConvention?: \"camelCase\" | \"PascalCase\" | \"snake_case\" | \"kebab-case\";\n}\n\n/**\n * Abstract type mapper for language-specific type conversion\n */\nexport abstract class TypeMapper {\n protected readonly options: Required<TypeMapperOptions>;\n\n constructor(options: TypeMapperOptions = {}) {\n this.options = {\n generateNullable: true,\n strictTypes: true,\n customMappings: {},\n preferArraySyntax: true,\n namingConvention: \"PascalCase\",\n ...options,\n };\n }\n\n // ==========================================\n // Abstract Methods - Must be implemented by subclasses\n // ==========================================\n\n /**\n * Get the target language name (e.g., \"TypeScript\", \"Python\")\n */\n abstract getLanguageName(): string;\n\n /**\n * Map a FHIR primitive type to target language\n * @param fhirType FHIR primitive type (string, integer, boolean, etc.)\n */\n abstract mapPrimitive(fhirType: string): LanguageType;\n\n /**\n * Map a reference type to target language\n * @param targets Array of possible reference targets\n */\n abstract mapReference(targets: Identifier[]): LanguageType;\n\n /**\n * Map an array type to target language\n * @param elementType The type of array elements\n */\n abstract mapArray(elementType: LanguageType): LanguageType;\n\n /**\n * Map an optional/nullable type\n * @param type The base type\n * @param required Whether the field is required\n */\n abstract mapOptional(type: LanguageType, required: boolean): LanguageType;\n\n /**\n * Map an enum/coded type\n * @param values Possible enum values\n * @param name Optional enum name\n */\n abstract mapEnum(values: string[], name?: string): LanguageType;\n\n /**\n * Format a type name according to language conventions\n * @param name Raw type name\n */\n abstract formatTypeName(name: string): string;\n\n /**\n * Format a field name according to language conventions\n * @param name Raw field name\n */\n abstract formatFieldName(name: string): string;\n\n /**\n * Format a file name according to language conventions\n * @param name Raw file name (without extension)\n */\n abstract formatFileName(name: string): string;\n\n // ==========================================\n // Concrete Methods - Shared functionality\n // ==========================================\n\n /**\n * Main entry point for type mapping\n * @param schemaType Type from TypeSchema\n */\n mapType(schemaType: any): LanguageType {\n // Handle primitive types\n if (typeof schemaType === \"string\") {\n return this.mapPrimitive(schemaType);\n }\n\n // Handle complex types\n if (schemaType && typeof schemaType === \"object\") {\n const kind = schemaType.kind || schemaType.type;\n\n switch (kind) {\n case \"primitive-type\":\n return this.mapPrimitive(schemaType.name);\n\n case \"reference\":\n return this.mapReference(schemaType.targets || []);\n\n case \"array\": {\n const elementType = this.mapType(schemaType.element);\n return this.mapArray(elementType);\n }\n\n case \"enum\":\n case \"coded\":\n return this.mapEnum(schemaType.values || [], schemaType.name);\n\n case \"complex-type\":\n case \"resource\":\n return this.mapComplexType(schemaType);\n\n default:\n return this.mapUnknownType(schemaType);\n }\n }\n\n return this.mapUnknownType(schemaType);\n }\n\n /**\n * Map a complex type (resource, complex-type)\n * @param schemaType Complex type from schema\n */\n protected mapComplexType(schemaType: any): LanguageType {\n const typeName = this.formatTypeName(schemaType.name || \"Unknown\");\n\n return {\n name: typeName,\n isPrimitive: false,\n importPath: this.calculateImportPath(schemaType),\n nullable: !schemaType.required && this.options.generateNullable,\n metadata: {\n kind: schemaType.kind,\n package: schemaType.package,\n },\n };\n }\n\n /**\n * Handle unknown/unmapped types\n * @param schemaType Unknown type\n */\n protected mapUnknownType(schemaType: any): LanguageType {\n // console.warn(`Unknown type encountered:`, schemaType);\n\n return {\n name: \"unknown\",\n isPrimitive: true,\n nullable: true,\n metadata: {\n originalType: schemaType,\n warning: \"unmapped_type\",\n },\n };\n }\n\n /**\n * Calculate import path for a type\n * @param schemaType Type to calculate import for\n */\n protected calculateImportPath(schemaType: any): string | undefined {\n if (!schemaType.name) return undefined;\n\n const fileName = this.formatFileName(schemaType.name);\n return `./${fileName}`;\n }\n\n /**\n * Apply naming convention to a string\n * @param name Input name\n */\n protected applyNamingConvention(name: string): string {\n switch (this.options.namingConvention) {\n case \"camelCase\":\n return toCamelCase(name);\n case \"PascalCase\":\n return toPascalCase(name);\n case \"snake_case\":\n return toSnakeCase(name);\n case \"kebab-case\":\n return toKebabCase(name);\n default:\n return name;\n }\n }\n\n /**\n * Get custom mapping if available\n * @param type Original type name\n */\n protected getCustomMapping(type: string): string | undefined {\n return this.options.customMappings[type];\n }\n\n /**\n * Check if type should be nullable\n * @param required Whether field is required\n */\n protected shouldBeNullable(required: boolean): boolean {\n return !required && this.options.generateNullable;\n }\n}\n\n// ==========================================\n// Utility Functions\n// ==========================================\n\nfunction toCamelCase(str: string): string {\n return str.replace(/[-_\\s]+(.)?/g, (_, char) => char?.toUpperCase() || \"\");\n}\n\nfunction toPascalCase(str: string): string {\n const camelCase = toCamelCase(str);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n}\n\nfunction toSnakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/[-\\s]+/g, \"_\")\n .toLowerCase()\n .replace(/^_/, \"\");\n}\n\nfunction toKebabCase(str: string): string {\n return toSnakeCase(str).replace(/_/g, \"-\");\n}\n","/**\n * TypeScript-specific type mapper implementation\n */\n\nimport type { Identifier } from \"@typeschema/types\";\nimport { type LanguageType, TypeMapper, type TypeMapperOptions } from \"./TypeMapper\";\n\n/**\n * TypeScript-specific options\n */\nexport interface TypeScriptTypeMapperOptions extends TypeMapperOptions {\n /** Whether to use 'unknown' or 'any' for unmapped types */\n preferUnknown?: boolean;\n\n /** Whether to generate branded types for primitives */\n useBrandedTypes?: boolean;\n\n /** Whether to use 'undefined' or 'null' for optional types */\n preferUndefined?: boolean;\n\n /** Module format for imports */\n moduleFormat?: \"esm\" | \"commonjs\";\n}\n\n/**\n * TypeScript type mapper\n */\nexport class TypeScriptTypeMapper extends TypeMapper {\n private readonly tsOptions: Required<TypeScriptTypeMapperOptions>;\n\n constructor(options: TypeScriptTypeMapperOptions = {}) {\n super(options);\n\n this.tsOptions = {\n ...this.options,\n preferUnknown: true,\n useBrandedTypes: false,\n preferUndefined: true,\n moduleFormat: \"esm\",\n ...options,\n };\n }\n\n getLanguageName(): string {\n return \"TypeScript\";\n }\n\n mapPrimitive(fhirType: string): LanguageType {\n const customMapping = this.getCustomMapping(fhirType);\n if (customMapping) {\n return {\n name: customMapping,\n isPrimitive: true,\n nullable: false,\n };\n }\n\n const primitiveMap: Record<string, string> = {\n string: \"string\",\n integer: \"number\",\n decimal: \"number\",\n boolean: \"boolean\",\n dateTime: \"string\",\n date: \"string\",\n time: \"string\",\n instant: \"string\",\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n base64Binary: \"string\",\n code: \"string\",\n id: \"string\",\n markdown: \"string\",\n unsignedInt: \"number\",\n positiveInt: \"number\",\n\n xhtml: \"string\",\n json: \"unknown\",\n };\n\n const mappedType = primitiveMap[fhirType];\n\n if (!mappedType) {\n console.warn(`Unknown FHIR primitive type: ${fhirType}`);\n return {\n name: this.tsOptions.preferUnknown ? \"unknown\" : \"any\",\n isPrimitive: true,\n nullable: false,\n metadata: { warning: \"unmapped_primitive\", originalType: fhirType },\n };\n }\n\n if (this.tsOptions.useBrandedTypes && fhirType !== mappedType) {\n return {\n name: `${mappedType} & { readonly __brand: '${fhirType}' }`,\n isPrimitive: false,\n importPath: \"./brands\",\n nullable: false,\n metadata: { isBranded: true, originalFhirType: fhirType },\n };\n }\n\n return {\n name: mappedType,\n isPrimitive: true,\n nullable: false,\n };\n }\n\n mapReference(targets: Identifier[]): LanguageType {\n if (!targets || targets.length === 0) {\n return {\n name: \"Reference\",\n isPrimitive: false,\n importPath: \"./Reference\",\n generics: [\"unknown\"],\n nullable: false,\n };\n }\n\n if (targets.length === 1) {\n const targetName = targets[0]?.name || \"unknown\";\n const targetStringLiteral = targetName === \"unknown\" ? \"unknown\" : `'${targetName}'`;\n return {\n name: \"Reference\",\n isPrimitive: false,\n importPath: \"./Reference\",\n generics: [targetStringLiteral],\n nullable: false,\n metadata: {\n referencedType: targetName,\n referencedSchema: targets[0],\n },\n };\n }\n\n const targetStringLiterals = targets.map((t) => {\n const targetName = t.name || \"unknown\";\n return targetName === \"unknown\" ? \"unknown\" : `'${targetName}'`;\n });\n return {\n name: \"Reference\",\n isPrimitive: false,\n importPath: \"./Reference\",\n generics: [targetStringLiterals.join(\" | \")],\n nullable: false,\n metadata: {\n referencedTypes: targets.map((t) => t.name || \"unknown\"),\n referencedSchemas: targets,\n },\n };\n }\n\n mapArray(elementType: LanguageType): LanguageType {\n if (this.options.preferArraySyntax) {\n return {\n name: `${elementType.name}[]`,\n isPrimitive: elementType.isPrimitive,\n importPath: elementType.importPath,\n isArray: true,\n nullable: false,\n metadata: {\n elementType: elementType,\n arrayStyle: \"suffix\",\n },\n };\n } else {\n return {\n name: \"Array\",\n isPrimitive: false,\n generics: [elementType.name],\n isArray: true,\n nullable: false,\n metadata: {\n elementType: elementType,\n arrayStyle: \"generic\",\n },\n };\n }\n }\n\n mapOptional(type: LanguageType, required: boolean): LanguageType {\n if (required || !this.shouldBeNullable(required)) {\n return type;\n }\n\n const nullType = this.tsOptions.preferUndefined ? \"undefined\" : \"null\";\n\n return {\n ...type,\n name: `${type.name} | ${nullType}`,\n nullable: true,\n metadata: {\n ...type.metadata,\n nullabilityType: nullType,\n wasOptional: true,\n },\n };\n }\n\n mapEnum(values: string[], name?: string): LanguageType {\n const enumName = name ? this.formatTypeName(name) : \"CodedValue\";\n\n const unionType = values.map((v) => `'${v}'`).join(\" | \");\n\n return {\n name: unionType,\n isPrimitive: false,\n nullable: false,\n metadata: {\n enumName,\n values,\n isUnionType: true,\n },\n };\n }\n\n formatTypeName(name: string): string {\n return this.applyNamingConvention(name);\n }\n\n formatFieldName(name: string): string {\n return toCamelCase(name);\n }\n\n formatFileName(name: string): string {\n return this.applyNamingConvention(name);\n }\n\n /**\n * Generate TypeScript interface field\n * @param fieldName Field name\n * @param fieldType Field type\n * @param required Whether field is required\n */\n generateInterfaceField(fieldName: string, fieldType: LanguageType, required: boolean): string {\n const formattedName = this.formatFieldName(fieldName);\n const optionalMarker = required ? \"\" : \"?\";\n\n return `${formattedName}${optionalMarker}: ${fieldType.name};`;\n }\n\n /**\n * Generate import statement for a type\n * @param type Language type with import info\n */\n generateImportStatement(type: LanguageType): string | undefined {\n if (!type.importPath || type.isPrimitive) {\n return undefined;\n }\n\n if (this.tsOptions.moduleFormat === \"esm\") {\n return `import type { ${type.name} } from '${type.importPath}';`;\n } else {\n return `const { ${type.name} } = require('${type.importPath}');`;\n }\n }\n\n /**\n * Get all required imports for a set of types\n * @param types Array of language types\n */\n getRequiredImports(types: LanguageType[]): string[] {\n const imports = new Set<string>();\n\n for (const type of types) {\n const importStatement = this.generateImportStatement(type);\n if (importStatement) {\n imports.add(importStatement);\n }\n }\n\n return Array.from(imports).sort();\n }\n}\n\nfunction toCamelCase(str: string): string {\n return str.replace(/[-_\\s]+(.)?/g, (_, char) => char?.toUpperCase() || \"\");\n}\n","/**\n * Modern TypeScript Generator built on BaseGenerator\n *\n * This is the new, clean implementation that replaces the monolithic typescript.ts generator.\n * Built using the BaseGenerator architecture with TypeMapper, TemplateEngine, and FileManager.\n */\n\n// DEPRICATED, USE: src/api/writer-generator/typescript.ts\n\nimport type { BindingTypeSchema, TypeSchema } from \"@typeschema/types\";\nimport { isBindingSchema } from \"@typeschema/types\";\nimport { BaseGenerator, type GeneratorInput } from \"./base/BaseGenerator\";\nimport { TypeScriptTypeMapper, type TypeScriptTypeMapperOptions } from \"./base/TypeScriptTypeMapper\";\nimport type { BaseGeneratorOptions, GeneratedFile, TemplateContext, TypeMapper } from \"./base/types\";\n\n/**\n * TypeScript-specific generator options\n */\nexport interface TypeScriptGeneratorOptions extends BaseGeneratorOptions {\n /** Module format for imports/exports */\n moduleFormat?: \"esm\" | \"cjs\";\n\n /** Whether to generate index files */\n generateIndex?: boolean;\n\n /** Include JSDoc documentation */\n includeDocuments?: boolean;\n\n /** Naming convention for types */\n namingConvention?: \"PascalCase\" | \"camelCase\";\n\n /** Include FHIR extensions */\n includeExtensions?: boolean;\n\n /** Include FHIR profiles */\n includeProfiles?: boolean;\n\n /** Generate value set files (default: false) */\n generateValueSets?: boolean;\n\n /** Include helper validation functions (default: false) */\n includeValueSetHelpers?: boolean;\n\n /**\n * Which binding strengths to generate value sets for\n * Only used when valueSetMode is 'custom'\n * @default ['required']\n */\n valueSetStrengths?: (\"required\" | \"preferred\" | \"extensible\" | \"example\")[];\n\n /**\n * Directory name for value set files (relative to outputDir)\n * @default 'valuesets'\n */\n valueSetDirectory?: string;\n\n /**\n * Value set generation mode\n * - 'all': Generate for all binding strengths with enums\n * - 'required-only': Generate only for required bindings (safe default)\n * - 'custom': Use valueSetStrengths array to control\n * @default 'required-only'\n */\n valueSetMode?: \"all\" | \"required-only\" | \"custom\";\n\n /** Type mapper options */\n typeMapperOptions?: TypeScriptTypeMapperOptions;\n}\n\n/**\n * Result of generating a single TypeScript file\n */\nexport interface GeneratedTypeScript {\n content: string;\n imports: Map<string, string>;\n exports: string[];\n filename: string;\n}\n\n/**\n * Modern TypeScript Generator\n *\n * Generates clean, type-safe TypeScript interfaces from FHIR TypeSchema documents.\n * Uses the new BaseGenerator architecture for maintainability and extensibility.\n */\nexport class TypeScriptGenerator extends BaseGenerator<TypeScriptGeneratorOptions, GeneratedFile[]> {\n private readonly resourceTypes = new Set<string>();\n private collectedValueSets = new Map<string, BindingTypeSchema>();\n\n private get tsOptions(): Required<TypeScriptGeneratorOptions> {\n return this.options as Required<TypeScriptGeneratorOptions>;\n }\n\n protected getLanguageName(): string {\n return \"TypeScript\";\n }\n\n protected getFileExtension(): string {\n return \".ts\";\n }\n\n protected override createTypeMapper(): TypeMapper {\n const options = this.options as TypeScriptGeneratorOptions;\n return new TypeScriptTypeMapper({\n namingConvention: (options.namingConvention ?? \"PascalCase\") === \"PascalCase\" ? \"PascalCase\" : \"camelCase\",\n moduleFormat: options.moduleFormat === \"cjs\" ? \"commonjs\" : \"esm\",\n preferUndefined: true,\n ...options.typeMapperOptions,\n }) as unknown as TypeMapper;\n }\n\n protected async generateSchemaContent(schema: TypeSchema, _context: TemplateContext): Promise<string> {\n // Skip unsupported schema types\n if (this.shouldSkipSchema(schema)) {\n return \"\";\n }\n\n // Collect resource types for Reference generic\n if (schema.identifier.kind === \"resource\") {\n this.resourceTypes.add(this.typeMapper.formatTypeName(schema.identifier.name));\n }\n\n // Update filename for profiles to include proper directory structure\n // if (false) {\n // \t// Profile support removed - not in core schema\n // \tconst sanitizedPackage = this.sanitizePackageName(\n // \t\tschema.identifier.package || \"unknown\",\n // \t);\n // \tconst profileFileName = this.typeMapper.formatFileName(\n // \t\tschema.identifier.name,\n // \t);\n // \tcontext.filename = `profiles/${sanitizedPackage}/${profileFileName}`;\n\n // \t// Track profile for index generation\n // \tif (!this.profilesByPackage.has(schema.identifier.package || \"unknown\")) {\n // \t\tthis.profilesByPackage.set(schema.identifier.package || \"unknown\", []);\n // \t}\n // \tthis.profilesByPackage.get(schema.identifier.package || \"unknown\")?.push({\n // \t\tfilename: profileFileName,\n // \t\tinterfaceName: this.typeMapper.formatTypeName(schema.identifier.name),\n // \t});\n // }\n\n // Handle Reference type specially\n if (schema.identifier.name === \"Reference\") {\n return this.generateReferenceInterface(schema);\n }\n\n // Generate TypeScript content directly (no templates for simplicity)\n const mainInterface = this.generateTypeScriptInterface(schema);\n\n // Generate nested types if present\n let nestedInterfaces = \"\";\n if (\"nested\" in schema && schema.nested && Array.isArray(schema.nested)) {\n const nestedInterfaceStrings = schema.nested.map((nestedType) =>\n this.generateNestedTypeInterface(schema.identifier.name, nestedType),\n );\n nestedInterfaces = nestedInterfaceStrings.join(\"\\n\\n\");\n }\n\n // Combine main interface with nested interfaces\n if (nestedInterfaces) {\n return `${mainInterface}\\n\\n${nestedInterfaces}`;\n }\n\n return mainInterface;\n }\n protected override filterAndSortSchemas(schemas: TypeSchema[]): TypeSchema[] {\n // Collect value sets from ALL schemas before filtering\n this.collectedValueSets = this.collectValueSets(schemas);\n\n return schemas.filter((schema) => !this.shouldSkipSchema(schema));\n }\n\n protected async validateContent(content: string, context: TemplateContext): Promise<void> {\n const hasValidExport = /export\\s+(interface|class|type|enum)\\s+\\w+/.test(content);\n const hasValidSyntax = content.includes(\"{\") && content.includes(\"}\");\n\n if (!hasValidExport) {\n throw new Error(\n `Generated content for ${context.schema.identifier.name} does not contain valid export statements`,\n );\n }\n\n if (!hasValidSyntax) {\n throw new Error(\n `Generated content for ${context.schema.identifier.name} has invalid syntax (missing braces)`,\n );\n }\n }\n\n /**\n * Transform multiple schemas into TypeScript\n */\n async transformSchemas(schemas: TypeSchema[]): Promise<GeneratedTypeScript[]> {\n const results: GeneratedTypeScript[] = [];\n\n for (const schema of schemas) {\n const result = await this.transformSchema(schema);\n if (result) {\n results.push(result);\n }\n }\n\n return results;\n }\n\n /**\n * Transform a single schema into TypeScript\n */\n async transformSchema(schema: TypeSchema): Promise<GeneratedTypeScript | undefined> {\n if (this.shouldSkipSchema(schema)) {\n return undefined;\n }\n\n // Create template context\n const context: TemplateContext = {\n schema,\n typeMapper: this.typeMapper,\n filename: this.getFilenameForSchema(schema),\n language: \"TypeScript\",\n timestamp: new Date().toISOString(),\n };\n\n // Generate content using template engine\n const content = await this.generateSchemaContent(schema, context);\n\n if (!content.trim()) {\n return undefined;\n }\n\n // Extract imports and exports from generated content\n const imports = this.extractImportsFromContent(content, schema);\n const exports = this.extractExportsFromContent(content, schema);\n const filename = this.getFilenameForSchema(schema);\n\n return {\n content,\n imports,\n exports: Array.from(exports),\n filename,\n };\n }\n\n /**\n * Check if a binding schema should generate a value set file\n */\n private shouldGenerateValueSet(schema: TypeSchema): boolean {\n if (!isBindingSchema(schema) || !schema.enum || !Array.isArray(schema.enum) || schema.enum.length === 0) {\n return false;\n }\n\n // Handle different value set modes\n const mode = (this.options as any).valueSetMode || \"required-only\";\n switch (mode) {\n case \"all\":\n return true; // Generate for all binding strengths\n case \"required-only\":\n return schema.strength === \"required\";\n case \"custom\": {\n const strengths = (this.options as any).valueSetStrengths || [\"required\"];\n return strengths.includes(schema.strength as any);\n }\n default:\n return schema.strength === \"required\";\n }\n }\n\n /**\n * Collect value sets from schemas that should generate value set files\n */\n private collectValueSets(schemas: TypeSchema[]): Map<string, BindingTypeSchema> {\n const valueSets = new Map<string, BindingTypeSchema>();\n\n for (const schema of schemas) {\n if (this.shouldGenerateValueSet(schema) && isBindingSchema(schema)) {\n const name = this.typeMapper.formatTypeName(schema.identifier.name);\n valueSets.set(name, schema);\n }\n }\n\n return valueSets;\n }\n\n /**\n * Check if a field binding should use a value set type\n */\n private shouldUseValueSetType(binding: any): boolean {\n if (!binding) {\n return false;\n }\n\n // If generateValueSets is false, never use value set types\n if (!this.tsOptions.generateValueSets) {\n return false;\n }\n\n const valueSetTypeName = this.typeMapper.formatTypeName(binding.name);\n return this.collectedValueSets.has(valueSetTypeName);\n }\n\n /**\n * Get the TypeScript type name for a binding\n */\n private getValueSetTypeName(binding: any): string {\n return this.typeMapper.formatTypeName(binding.name);\n }\n\n /**\n * Check if a field has enum values that should be inlined\n */\n private shouldUseInlineEnum(field: any): boolean {\n if (!field) {\n return false;\n }\n\n // Only use inline enums when generateValueSets is false\n if (this.tsOptions.generateValueSets) {\n return false;\n }\n\n // Check if field has enum values directly on the field\n return field.enum && Array.isArray(field.enum) && field.enum.length > 0;\n }\n\n /**\n * Generate inline enum type from field enum values\n */\n private generateInlineEnumType(field: any): string {\n if (!field.enum || !Array.isArray(field.enum)) {\n return \"string\"; // fallback\n }\n\n // Create union type from enum values\n const enumValues = field.enum.map((value: string) => `'${value}'`).join(\" | \");\n return enumValues;\n }\n\n private shouldSkipSchema(schema: TypeSchema): boolean {\n if (\n schema.identifier.kind === \"value-set\" ||\n schema.identifier.kind === \"binding\" ||\n schema.identifier.kind === \"primitive-type\"\n ) {\n return true;\n }\n\n // Profile support removed - not in core schema specification\n\n // Skip FHIR extensions when includeExtensions is false\n if (!this.tsOptions.includeExtensions) {\n // Check if this is a FHIR extension by looking at the URL pattern\n const url = schema.identifier.url;\n if (url?.includes(\"StructureDefinition/\")) {\n // Extensions typically have URLs like:\n // http://hl7.org/fhir/StructureDefinition/extension-name\n // http://hl7.org/fhir/StructureDefinition/resource-extension\n\n // Get the part after StructureDefinition/\n const structDefPart = url.split(\"StructureDefinition/\")[1];\n if (structDefPart) {\n // Check if it contains a hyphen (indicating extension pattern)\n // FHIR extensions are profiles with hyphenated names\n const hasHyphenPattern = structDefPart.includes(\"-\");\n const isProfileKind = (schema.identifier as any).kind === \"profile\";\n\n // Extensions are profiles with hyphenated StructureDefinition names\n // But we need to exclude core resources that also have hyphens\n if (hasHyphenPattern && isProfileKind) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n private getFilenameForSchema(schema: TypeSchema): string {\n const baseName = this.typeMapper.formatFileName(schema.identifier.name);\n return `${baseName}${this.getFileExtension()}`;\n }\n\n private extractImportsFromContent(content: string, _schema: TypeSchema): Map<string, string> {\n const imports = new Map<string, string>();\n const importRegex = /import\\s+(?:type\\s+)?{\\s*([^}]+)\\s*}\\s+from\\s+['\"]([^'\"]+)['\"];?/g;\n\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const symbolsStr = match[1];\n const path = match[2];\n\n if (!symbolsStr || !path) continue;\n\n const symbols = symbolsStr.split(\",\").map((s) => s.trim());\n for (const symbol of symbols) {\n imports.set(symbol, path);\n }\n }\n\n return imports;\n }\n\n private extractExportsFromContent(content: string, schema: TypeSchema): Set<string> {\n const exports = new Set<string>();\n\n const exportRegex = /export\\s+(?:interface|class|enum|type)\\s+([A-Za-z_$][A-Za-z0-9_$]*)/g;\n\n let match;\n while ((match = exportRegex.exec(content)) !== null) {\n if (match[1]) exports.add(match[1]);\n }\n\n exports.add(this.typeMapper.formatTypeName(schema.identifier.name));\n\n return exports;\n }\n\n /**\n * Generate special Reference interface with generics\n */\n private generateReferenceInterface(schema: TypeSchema): string {\n const lines: string[] = [];\n const imports = new Set<string>();\n\n if (\"fields\" in schema && schema.fields) {\n for (const [, field] of Object.entries(schema.fields)) {\n const importDeps = this.collectFieldImports(field);\n importDeps.forEach((imp) => imports.add(imp));\n }\n }\n\n lines.push(\"import type { ResourceType } from './utilities.js';\");\n\n if (imports.size > 0) {\n const sortedImports = Array.from(imports).sort();\n for (const importName of sortedImports) {\n lines.push(`import type { ${importName} } from './${importName}.js';`);\n }\n }\n lines.push(\"\"); // Add blank line after imports\n\n // Add JSDoc comment\n if (this.tsOptions.includeDocuments && schema.description) {\n lines.push(\"/**\");\n lines.push(` * ${schema.description}`);\n if (schema.identifier.url) {\n lines.push(` * @see ${schema.identifier.url}`);\n }\n if (schema.identifier.package) {\n lines.push(` * @package ${schema.identifier.package}`);\n }\n lines.push(\" * @template T - The resource type being referenced\");\n lines.push(\" */\");\n }\n\n // Generate generic interface declaration\n lines.push(\"export interface Reference<T extends ResourceType = ResourceType> {\");\n\n if (\"fields\" in schema && schema.fields) {\n for (const [fieldName, field] of Object.entries(schema.fields)) {\n if (fieldName === \"type\") {\n // Special handling for the type field to use the generic parameter\n lines.push(\" type?: T;\");\n } else {\n const fieldLines = this.generateFieldLines(fieldName, field);\n for (const fieldLine of fieldLines) {\n if (fieldLine) {\n lines.push(` ${fieldLine}`);\n }\n }\n }\n }\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n }\n\n /**\n * Generate TypeScript interface directly without templates\n */\n private generateTypeScriptInterface(schema: TypeSchema): string {\n const lines: string[] = [];\n const interfaceName = this.typeMapper.formatTypeName(schema.identifier.name);\n const imports = new Set<string>();\n const valueSetImports = new Set<string>();\n\n // Collect imports from fields\n if (\"fields\" in schema && schema.fields) {\n for (const [, field] of Object.entries(schema.fields)) {\n const fieldImports = this.collectFieldImports(field);\n\n for (const imp of fieldImports) {\n // Check if this is a value set import\n if (this.collectedValueSets.has(imp)) {\n valueSetImports.add(imp);\n } else {\n imports.add(imp);\n }\n }\n }\n }\n\n // Collect imports from nested types\n if (\"nested\" in schema && schema.nested && Array.isArray(schema.nested)) {\n for (const nestedType of schema.nested) {\n if (nestedType.fields) {\n for (const [, field] of Object.entries(nestedType.fields)) {\n const fieldImports = this.collectFieldImports(field);\n\n for (const imp of fieldImports) {\n // Check if this is a value set import\n if (this.collectedValueSets.has(imp)) {\n valueSetImports.add(imp);\n } else {\n imports.add(imp);\n }\n }\n }\n }\n }\n }\n\n // Generate regular type imports\n if (imports.size > 0) {\n const sortedImports = Array.from(imports).sort();\n for (const importName of sortedImports) {\n lines.push(`import type { ${importName} } from './${importName}.js';`);\n }\n }\n\n // Generate value set imports\n if (valueSetImports.size > 0) {\n const sortedValueSetImports = Array.from(valueSetImports).sort();\n const importList = sortedValueSetImports.join(\", \");\n lines.push(`import type { ${importList} } from './valuesets/index.js';`);\n }\n\n if (imports.size > 0 || valueSetImports.size > 0) {\n lines.push(\"\"); // Add blank line after imports\n }\n\n // Add JSDoc comment if enabled\n if (this.tsOptions.includeDocuments && schema.description) {\n lines.push(\"/**\");\n lines.push(` * ${schema.description}`);\n if (schema.identifier.url) {\n lines.push(` * @see ${schema.identifier.url}`);\n }\n if (schema.identifier.package) {\n lines.push(` * @package ${schema.identifier.package}`);\n }\n lines.push(\" */\");\n }\n\n // Generate interface declaration\n lines.push(`export interface ${interfaceName} {`);\n\n // Add resourceType for FHIR resources\n if (schema.identifier.kind === \"resource\") {\n lines.push(` resourceType: '${interfaceName}';`);\n }\n\n // Generate fields (if any)\n if (\"fields\" in schema && schema.fields) {\n for (const [fieldName, field] of Object.entries(schema.fields)) {\n const fieldLines = this.generateFieldLines(fieldName, field);\n for (const fieldLine of fieldLines) {\n if (fieldLine) {\n lines.push(` ${fieldLine}`);\n }\n }\n }\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n }\n\n /**\n * Collect import dependencies from a field\n */\n private collectFieldImports(field: any): string[] {\n const imports: string[] = [];\n\n // Skip polymorphic declaration fields (they don't have types to import)\n if (\"choices\" in field && field.choices && Array.isArray(field.choices)) {\n return imports;\n }\n\n // Handle value set imports (only when generateValueSets is true)\n if (field.binding && this.shouldUseValueSetType(field.binding)) {\n const valueSetTypeName = this.getValueSetTypeName(field.binding);\n imports.push(valueSetTypeName);\n return imports;\n }\n\n // Handle all other fields (regular fields and polymorphic instance fields)\n if (\"type\" in field && field.type) {\n // Handle nested types - they don't need imports as they're in the same file\n if (field.type.kind === \"nested\") {\n // Nested types are generated in the same file, no import needed\n return imports;\n }\n\n const languageType = this.typeMapper.mapType(field.type);\n\n // Only import non-primitive types that are not built-in\n if (!languageType.isPrimitive && languageType.name !== \"any\") {\n const builtInTypes = [\"string\", \"number\", \"boolean\", \"Date\", \"object\", \"unknown\", \"any\"];\n if (!builtInTypes.includes(languageType.name)) {\n imports.push(languageType.name);\n }\n }\n }\n\n return [...new Set(imports)]; // Remove duplicates\n }\n\n /**\n * Extract resource types from reference field constraints\n */\n private extractReferenceTypes(referenceConstraints: any[]): string[] {\n const resourceTypes: string[] = [];\n\n if (!Array.isArray(referenceConstraints)) {\n return resourceTypes;\n }\n\n for (const constraint of referenceConstraints) {\n if (!constraint || typeof constraint !== \"object\") {\n continue;\n }\n\n if (constraint.kind === \"resource\" && constraint.name) {\n const resourceType = this.typeMapper.formatTypeName(constraint.name);\n resourceTypes.push(resourceType);\n }\n }\n\n return [...new Set(resourceTypes)]; // Remove duplicates\n }\n\n /**\n * Generate nested type interface\n */\n private generateNestedTypeInterface(parentTypeName: string, nestedType: any): string {\n const lines: string[] = [];\n const nestedTypeName = this.typeMapper.formatTypeName(\n `${parentTypeName}${this.capitalizeFirst(nestedType.identifier.name)}`,\n );\n\n // Add JSDoc comment if enabled\n if (this.tsOptions.includeDocuments && nestedType.description) {\n lines.push(\"/**\");\n lines.push(` * ${nestedType.description}`);\n if (nestedType.identifier.url) {\n lines.push(` * @see ${nestedType.identifier.url}`);\n }\n lines.push(\" */\");\n }\n\n // Generate interface declaration\n lines.push(`export interface ${nestedTypeName} {`);\n\n // Generate fields\n if (nestedType.fields) {\n for (const [fieldName, field] of Object.entries(nestedType.fields)) {\n const fieldLines = this.generateFieldLines(fieldName, field);\n for (const fieldLine of fieldLines) {\n if (fieldLine) {\n lines.push(` ${fieldLine}`);\n }\n }\n }\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n }\n\n /**\n * Capitalize first letter of string\n */\n private capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n /**\n * Generate field lines (handles polymorphic fields by expanding them)\n */\n private generateFieldLines(fieldName: string, field: any): string[] {\n // Check if this field has choices (polymorphic declaration field)\n if (\"choices\" in field && field.choices && Array.isArray(field.choices)) {\n // Skip declaration fields - the actual instance fields are generated separately\n // Declaration fields like `{\"choices\": [\"deceasedBoolean\", \"deceasedDateTime\"]}`\n // are just metadata and shouldn't be rendered as actual TypeScript fields\n return [];\n }\n\n // For all other fields (including polymorphic instance fields with choiceOf), generate normally\n const fieldLine = this.generateFieldLine(fieldName, field);\n return fieldLine ? [fieldLine] : [];\n }\n\n /**\n * Generate a single field line\n */\n private generateFieldLine(fieldName: string, field: any): string | null {\n let typeString = \"any\";\n let required = false;\n let isArray = false;\n\n if (\"type\" in field && field.type) {\n // Check if field has a binding that we generated a value set for\n if (field.binding && this.shouldUseValueSetType(field.binding)) {\n const valueSetTypeName = this.getValueSetTypeName(field.binding);\n typeString = valueSetTypeName;\n } else if (field.binding && this.shouldUseInlineEnum(field)) {\n // Generate inline enum union type when generateValueSets is false\n typeString = this.generateInlineEnumType(field);\n } else {\n // Existing type mapping logic\n const languageType = this.typeMapper.mapType(field.type);\n typeString = languageType.name;\n\n // Handle nested types specially\n if (field.type.kind === \"nested\") {\n // Extract parent name from URL like \"http://hl7.org/fhir/StructureDefinition/Patient#contact\"\n const urlParts = field.type.url?.split(\"#\") || [];\n if (urlParts.length === 2) {\n const parentName = urlParts[0].split(\"/\").pop() || \"\";\n const nestedName = field.type.name;\n typeString = this.typeMapper.formatTypeName(`${parentName}${this.capitalizeFirst(nestedName)}`);\n } else {\n typeString = this.typeMapper.formatTypeName(field.type.name);\n }\n } else if (typeString === \"Reference\" && field.reference && Array.isArray(field.reference)) {\n const referenceTypes = this.extractReferenceTypes(field.reference);\n if (referenceTypes.length > 0) {\n referenceTypes.forEach((type) => this.resourceTypes.add(type));\n\n const unionType = referenceTypes.map((type) => `'${type}'`).join(\" | \");\n typeString = `Reference<${unionType}>`;\n }\n }\n }\n }\n\n if (\"required\" in field) {\n required = field.required;\n }\n\n if (\"array\" in field) {\n isArray = field.array;\n }\n\n const optional = required ? \"\" : \"?\";\n const arrayType = isArray ? \"[]\" : \"\";\n\n return `${fieldName}${optional}: ${typeString}${arrayType};`;\n }\n\n // ==========================================\n /**\n * Extract exported symbols from TypeScript content\n */\n protected override extractExports(content: string): string[] {\n const exports: string[] = [];\n\n const exportListPattern = /export\\s*\\{\\s*([^}]+)\\s*\\}/g;\n let match;\n while ((match = exportListPattern.exec(content)) !== null) {\n if (match[1]) {\n const names = match[1]\n .split(\",\")\n .map((name) => name.trim())\n .filter(Boolean);\n exports.push(...names);\n }\n }\n\n const directExportPatterns = [\n /export\\s+interface\\s+(\\w+)/g, // export interface Name\n /export\\s+type\\s+(\\w+)/g, // export type Name\n /export\\s+class\\s+(\\w+)/g, // export class Name\n /export\\s+enum\\s+(\\w+)/g, // export enum Name\n /export\\s+const\\s+(\\w+)/g, // export const name\n /export\\s+function\\s+(\\w+)/g, // export function name\n ];\n\n for (const pattern of directExportPatterns) {\n let match;\n while ((match = pattern.exec(content)) !== null) {\n if (match[1]) {\n exports.push(match[1]);\n }\n }\n }\n\n return [...new Set(exports)];\n }\n\n /**\n * Set output directory for compatibility with API builder\n */\n setOutputDir(directory: string): void {\n this.options.outputDir = directory;\n }\n\n /**\n * Update generator options for compatibility with API builder\n */\n setOptions(options: Partial<TypeScriptGeneratorOptions>): void {\n this.options = { ...this.options, ...options };\n }\n\n /**\n * Get current options for compatibility with API builder\n */\n getOptions(): TypeScriptGeneratorOptions {\n return { ...this.options };\n }\n\n /**\n * Override generate to clean directory first\n */\n public override async generate(input: GeneratorInput): Promise<GeneratedFile[]> {\n await this.fileManager.cleanDirectory();\n\n this.logger.debug(\"Cleaned output directory before generation\");\n return super.generate(input);\n }\n\n /**\n * Run post-generation hooks - generate utility files\n */\n protected override async runPostGenerationHooks(): Promise<void> {\n await super.runPostGenerationHooks();\n\n await this.generateValueSetFiles();\n await this.generateUtilitiesFile();\n await this.generateMainIndexFile();\n }\n\n /**\n * Generate utilities.ts file with ResourceType union\n */\n private async generateUtilitiesFile(): Promise<void> {\n if (this.resourceTypes.size === 0) {\n this.logger.warn(\"No resource types found, skipping utilities.ts generation\");\n return;\n }\n\n const lines: string[] = [];\n\n // Add file header comment\n lines.push(\"/**\");\n lines.push(\" * FHIR Resource Type Utilities\");\n lines.push(\" * This file contains utility types for FHIR resources.\");\n lines.push(\" * \");\n lines.push(\" * @generated This file is auto-generated. Do not edit manually.\");\n lines.push(\" */\");\n lines.push(\"\");\n\n // Generate ResourceType union\n const sortedResourceTypes = Array.from(this.resourceTypes).sort();\n lines.push(\"/**\");\n lines.push(\" * Union of all FHIR resource types in this package\");\n lines.push(\" */\");\n lines.push(\"export type ResourceType =\");\n\n for (let i = 0; i < sortedResourceTypes.length; i++) {\n const isLast = i === sortedResourceTypes.length - 1;\n const separator = isLast ? \";\" : \"\";\n lines.push(` | '${sortedResourceTypes[i]}'${separator}`);\n }\n\n lines.push(\"\");\n\n // Generate helper type for Resource references\n lines.push(\"/**\");\n lines.push(\" * Helper type for creating typed References\");\n lines.push(\n \" * @example Reference<'Patient' | 'Practitioner'> - Reference that can point to Patient or Practitioner\",\n );\n lines.push(\" */\");\n lines.push(\"export type TypedReference<T extends ResourceType> = {\");\n lines.push(\" reference?: string;\");\n lines.push(\" type?: T;\");\n lines.push(\" identifier?: any; // Simplified for utility\");\n lines.push(\" display?: string;\");\n lines.push(\"};\");\n\n const content = lines.join(\"\\n\");\n\n // Write the utilities file\n await this.fileManager.writeFile(\"utilities.ts\", content);\n\n this.logger.info(`Generated utilities.ts with ${this.resourceTypes.size} resource types`);\n }\n\n /**\n * Generate a complete value set TypeScript file\n */\n private generateValueSetFile(binding: BindingTypeSchema): string {\n const name = this.typeMapper.formatTypeName(binding.identifier.name);\n const values = binding.enum?.map((v: string) => ` '${v}'`).join(\",\\n\") || \"\";\n\n const lines: string[] = [];\n\n // Add file header comment\n if (this.options.includeDocuments) {\n lines.push(\"/**\");\n lines.push(` * ${binding.identifier.name} value set`);\n if (binding.description) {\n lines.push(` * ${binding.description}`);\n }\n if (binding.valueset?.url) {\n lines.push(` * @see ${binding.valueset.url}`);\n }\n if (binding.identifier.package) {\n lines.push(` * @package ${binding.identifier.package}`);\n }\n lines.push(\" * @generated This file is auto-generated. Do not edit manually.\");\n lines.push(\" */\");\n lines.push(\"\");\n }\n\n // Add values array\n lines.push(`export const ${name}Values = [`);\n if (values) {\n lines.push(values);\n }\n lines.push(\"] as const;\");\n lines.push(\"\");\n\n // Add union type\n lines.push(`export type ${name} = typeof ${name}Values[number];`);\n\n // Add helper function if enabled\n if (this.tsOptions.includeValueSetHelpers) {\n lines.push(\"\");\n lines.push(`export const isValid${name} = (value: string): value is ${name} =>`);\n lines.push(` ${name}Values.includes(value as ${name});`);\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Create valuesets directory and generate all value set files\n */\n private async generateValueSetFiles(): Promise<void> {\n if (!this.tsOptions.generateValueSets || this.collectedValueSets.size === 0) {\n return;\n }\n\n // Generate individual value set files in valuesets/\n for (const [name, binding] of this.collectedValueSets) {\n const content = this.generateValueSetFile(binding);\n const fileName = `valuesets/${name}.ts`;\n\n await this.fileManager.writeFile(fileName, content);\n this.logger.info(`Generated value set: ${fileName}`);\n }\n\n // Generate index file in valuesets/\n await this.generateValueSetIndexFile();\n }\n\n /**\n * Generate index.ts file that re-exports all value sets\n */\n private async generateValueSetIndexFile(): Promise<void> {\n const lines: string[] = [];\n\n if (this.tsOptions.includeDocuments) {\n lines.push(\"/**\");\n lines.push(\" * FHIR Value Sets\");\n lines.push(\" * This file re-exports all generated value sets.\");\n lines.push(\" * \");\n lines.push(\" * @generated This file is auto-generated. Do not edit manually.\");\n lines.push(\" */\");\n lines.push(\"\");\n }\n\n // Sort value sets for consistent output\n const sortedValueSets = Array.from(this.collectedValueSets.keys()).sort();\n\n for (const name of sortedValueSets) {\n lines.push(`export * from './${name}.js';`);\n }\n\n const content = lines.join(\"\\n\");\n await this.fileManager.writeFile(\"valuesets/index.ts\", content);\n this.logger.info(`Generated valuesets/index.ts with ${this.collectedValueSets.size} value sets`);\n }\n\n /**\n * Generate main types/index.ts file that exports all types and value sets\n */\n private async generateMainIndexFile(): Promise<void> {\n if (!this.options.generateIndex) {\n return;\n }\n\n const lines: string[] = [];\n\n if (this.tsOptions.includeDocuments) {\n lines.push(\"/**\");\n lines.push(\" * FHIR R4 TypeScript Types\");\n lines.push(\" * Generated from FHIR StructureDefinitions\");\n lines.push(\" * \");\n lines.push(\" * @generated This file is auto-generated. Do not edit manually.\");\n lines.push(\" */\");\n lines.push(\"\");\n }\n\n // Generate exports for all generated files - we'll keep this simple\n // and avoid accessing private fields for now. The key functionality\n // (value set generation and interface type updates) is already working.\n\n // For now, we'll skip the individual file exports since they're complex\n // and the main functionality is already working. This can be improved later.\n\n // Export utilities\n lines.push('export * from \"./utilities\";');\n\n // Export value sets if any were generated\n if (this.tsOptions.generateValueSets && this.collectedValueSets.size > 0) {\n lines.push(\"\");\n lines.push(\"// Value Sets\");\n lines.push('export * from \"./valuesets/index\";');\n }\n\n const content = lines.join(\"\\n\");\n await this.fileManager.writeFile(\"index.ts\", content);\n this.logger.info(\n `Generated index.ts with type exports${this.tsOptions.generateValueSets && this.collectedValueSets.size > 0 ? \" and value sets\" : \"\"}`,\n );\n }\n}\n","import {\n kebabCase,\n pascalCase,\n typeSchemaInfo,\n uppercaseFirstLetter,\n uppercaseFirstLetterOfEach,\n} from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer\";\nimport {\n extractNameFromCanonical,\n isChoiceDeclarationField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type ProfileTypeSchema,\n type RegularField,\n type RegularTypeSchema,\n type CanonicalUrl,\n type Identifier,\n type TypeSchema,\n} from \"@root/typeschema/types\";\nimport { groupByPackages, type TypeSchemaIndex } from \"@root/typeschema/utils\";\n\nconst primitiveType2tsType: Record<string, string> = {\n boolean: \"boolean\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n\n decimal: \"number\",\n integer: \"number\",\n unsignedInt: \"number\",\n positiveInt: \"number\",\n integer64: \"number\",\n base64Binary: \"string\",\n\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst resolvePrimitiveType = (name: string) => {\n const tsType = primitiveType2tsType[name];\n if (tsType === undefined) throw new Error(`Unknown primitive type ${name}`);\n return tsType;\n};\n\nconst tsFhirPackageDir = (name: string): string => {\n return kebabCase(name);\n};\n\nconst tsModuleName = (id: Identifier): string => {\n if (id.kind === \"profile\") return `${tsResourceName(id)}_profile`;\n return pascalCase(id.name);\n};\n\nconst tsModuleFileName = (id: Identifier): string => {\n return `${tsModuleName(id)}.ts`;\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n const localName = extractNameFromCanonical(canonical as CanonicalUrl, dropFragment);\n if (!localName) return undefined;\n return normalizeTsName(localName);\n};\n\nconst tsResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return normalizeTsName([resourceName, name].join(\"\"));\n }\n return normalizeTsName(id.name);\n};\n\n// biome-ignore format: too long\nconst tsKeywords = new Set([ \"class\", \"function\", \"return\", \"if\", \"for\", \"while\", \"const\", \"let\", \"var\", \"import\", \"export\", \"interface\" ]);\n\nconst tsFieldName = (n: string): string => {\n if (tsKeywords.has(n)) return `\"${n}\"`;\n if (n.includes(\" \") || n.includes(\"-\")) return `\"${n}\"`;\n return n;\n};\n\nconst normalizeTsName = (n: string): string => {\n if (tsKeywords.has(n)) n = `${n}_`;\n return n.replace(/[- ]/g, \"_\");\n};\n\nconst tsGet = (object: string, tsFieldName: string) => {\n if (tsFieldName.startsWith('\"')) return `${object}[${tsFieldName}]`;\n return `${object}.${tsFieldName}`;\n};\n\nexport type TypeScriptOptions = {} & WriterOptions;\n\nexport class TypeScript extends Writer {\n tsImportType(tsPackageName: string, ...entities: string[]) {\n this.lineSM(`import type { ${entities.join(\", \")} } from \"${tsPackageName}\"`);\n }\n\n generateFhirPackageIndexFile(schemas: TypeSchema[]) {\n this.cat(\"index.ts\", () => {\n let exports = schemas\n .map((schema) => ({\n identifier: schema.identifier,\n tsPackageName: tsModuleName(schema.identifier),\n resourceName: tsResourceName(schema.identifier),\n }))\n .sort((a, b) => a.resourceName.localeCompare(b.resourceName));\n\n // FIXME: actually, duplication may means internal error...\n exports = Array.from(new Map(exports.map((exp) => [exp.resourceName.toLowerCase(), exp])).values()).sort(\n (a, b) => a.resourceName.localeCompare(b.resourceName),\n );\n\n for (const exp of exports) {\n this.debugComment(exp.identifier);\n this.lineSM(`export type { ${exp.resourceName} } from \"./${exp.tsPackageName}\"`);\n }\n });\n }\n\n generateDependenciesImports(schema: RegularTypeSchema) {\n if (schema.dependencies) {\n const imports = [];\n const skipped = [];\n for (const dep of schema.dependencies) {\n if ([\"complex-type\", \"resource\", \"logical\"].includes(dep.kind)) {\n imports.push({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(dep.name)}`,\n name: uppercaseFirstLetter(dep.name),\n dep: dep,\n });\n } else if (isNestedIdentifier(dep)) {\n imports.push({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(canonicalToName(dep.url) ?? \"\")}`,\n name: tsResourceName(dep),\n dep: dep,\n });\n } else {\n skipped.push(dep);\n }\n }\n imports.sort((a, b) => a.name.localeCompare(b.name));\n for (const dep of imports) {\n this.debugComment(dep.dep);\n this.tsImportType(dep.tsPackage, dep.name);\n }\n for (const dep of skipped) {\n this.debugComment(\"skip:\", dep);\n }\n this.line();\n // // NOTE: for primitive type extensions\n // const element = this.loader.complexTypes().find((e) => e.identifier.name === \"Element\");\n // if (\n // element &&\n // deps.find((e) => e.name === \"Element\") === undefined &&\n // // FIXME: don't import if fields and nested fields don't have primitive types\n // schema.identifier.name !== \"Element\"\n // ) {\n // this.tsImport(`../${kebabCase(element.identifier.package)}/Element`, \"Element\");\n // }\n }\n }\n\n generateComplexTypeReexports(schema: RegularTypeSchema) {\n const complexTypeDeps = schema.dependencies\n ?.filter((dep) => [\"complex-type\"].includes(dep.kind))\n .map((dep) => ({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(dep.name)}`,\n name: uppercaseFirstLetter(dep.name),\n }));\n if (complexTypeDeps && complexTypeDeps.length > 0) {\n for (const dep of complexTypeDeps) {\n this.lineSM(`export type { ${dep.name} } from \"${dep.tsPackage}\"`);\n }\n this.line();\n }\n }\n\n addFieldExtension(fieldName: string, field: RegularField): void {\n if (field.type.kind === \"primitive-type\") {\n const extFieldName = tsFieldName(`_${fieldName}`);\n this.lineSM(`${extFieldName}?: Element`);\n }\n }\n\n generateType(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n let name: string;\n if (schema.identifier.name === \"Reference\") {\n name = \"Reference<T extends string = string>\";\n } else if (schema.identifier.kind === \"nested\") {\n name = tsResourceName(schema.identifier);\n } else {\n name = tsResourceName(schema.identifier);\n }\n\n let extendsClause: string | undefined;\n if (schema.base) extendsClause = `extends ${canonicalToName(schema.base.url)}`;\n\n this.debugComment(schema.identifier);\n this.curlyBlock([\"export\", \"interface\", name, extendsClause], () => {\n if (isResourceTypeSchema(schema)) {\n const possibleResourceTypes = [schema.identifier];\n possibleResourceTypes.push(...tsIndex.resourceChildren(schema.identifier));\n this.lineSM(\n `resourceType: ${possibleResourceTypes\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((e) => `\"${e.name}\"`)\n .join(\" | \")}`,\n );\n this.line();\n }\n\n if (!schema.fields) return;\n const fields = Object.entries(schema.fields).sort((a, b) => a[0].localeCompare(b[0]));\n for (const [fieldName, field] of fields) {\n if (isChoiceDeclarationField(field)) continue;\n\n this.debugComment(fieldName, \":\", field);\n\n const tsName = tsFieldName(fieldName);\n\n let tsType: string;\n if (field.enum) {\n tsType = field.enum.map((e) => `\"${e}\"`).join(\" | \");\n } else if (schema.identifier.name === \"Reference\" && tsName === \"reference\") {\n tsType = \"`${T}/${string}`\";\n } else if (field.reference && field.reference.length > 0) {\n const references = field.reference.map((ref) => `\"${ref.name}\"`).join(\" | \");\n tsType = `Reference<${references}>`;\n } else if (isPrimitiveIdentifier(field.type)) {\n tsType = resolvePrimitiveType(field.type.name);\n } else if (isNestedIdentifier(field.type)) {\n tsType = tsResourceName(field.type);\n } else {\n tsType = field.type.name as string;\n }\n\n const optionalSymbol = field.required ? \"\" : \"?\";\n const arraySymbol = field.array ? \"[]\" : \"\";\n this.lineSM(`${tsName}${optionalSymbol}: ${tsType}${arraySymbol}`);\n\n if ([\"resource\", \"complex-type\"].includes(schema.identifier.kind)) {\n this.addFieldExtension(fieldName, field);\n }\n }\n });\n }\n\n generateNestedTypes(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n if (schema.nested) {\n for (const subtype of schema.nested) {\n this.generateType(tsIndex, subtype);\n this.line();\n }\n }\n }\n\n generateProfileType(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n this.debugComment(\"flatProfile\", flatProfile);\n const tsName = tsResourceName(flatProfile.identifier);\n this.debugComment(\"identifier\", flatProfile.identifier);\n this.debugComment(\"base\", flatProfile.base);\n this.curlyBlock([\"export\", \"interface\", tsName], () => {\n this.lineSM(`__profileUrl: \"${flatProfile.identifier.url}\"`);\n this.line();\n\n for (const [fieldName, field] of Object.entries(flatProfile.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n this.debugComment(fieldName, field);\n\n const tsName = tsFieldName(fieldName);\n\n let tsType: string;\n if (field.enum) {\n tsType = field.enum.map((e) => `'${e}'`).join(\" | \");\n } else if (field.reference && field.reference.length > 0) {\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization))\n throw new Error(`Invalid specialization for ${flatProfile.identifier}`);\n\n const sField = specialization.fields?.[fieldName];\n if (sField === undefined || isChoiceDeclarationField(sField) || sField.reference === undefined)\n throw new Error(`Invalid field declaration for ${fieldName}`);\n\n const sRefs = sField.reference.map((e) => e.name);\n const references = field.reference\n .map((ref) => {\n const resRef = tsIndex.findLastSpecializationByIdentifier(ref);\n if (resRef.name !== ref.name) {\n return `\"${resRef.name}\" /*${ref.name}*/`;\n }\n return `'${ref.name}'`;\n })\n .join(\" | \");\n if (sRefs.length === 1 && sRefs[0] === \"Resource\" && references !== '\"Resource\"') {\n // FIXME: should be generilized to type families\n tsType = `Reference<\"Resource\" /* ${references} */ >`;\n } else {\n tsType = `Reference<${references}>`;\n }\n } else if (isNestedIdentifier(field.type)) {\n tsType = tsResourceName(field.type);\n } else if (isPrimitiveIdentifier(field.type)) {\n tsType = resolvePrimitiveType(field.type.name);\n } else if (field.type === undefined) {\n throw new Error(`Undefined type for '${fieldName}' field at ${typeSchemaInfo(flatProfile)}`);\n } else {\n tsType = field.type.name;\n }\n\n this.lineSM(`${tsName}${!field.required ? \"?\" : \"\"}: ${tsType}${field.array ? \"[]\" : \"\"}`);\n }\n });\n\n this.line();\n }\n\n generateAttachProfile(flatProfile: ProfileTypeSchema) {\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const profileFields = Object.entries(flatProfile.fields || {})\n .filter(([_fieldName, field]) => {\n return field && isNotChoiceDeclarationField(field) && field.type !== undefined;\n })\n .map(([fieldName]) => tsFieldName(fieldName));\n\n this.curlyBlock(\n [\n `export const attach_${tsProfileName}_to_${tsBaseResourceName} =`,\n `(resource: ${tsBaseResourceName}, profile: ${tsProfileName}): ${tsBaseResourceName}`,\n \"=>\",\n ],\n () => {\n this.curlyBlock([\"return\"], () => {\n this.line(\"...resource,\");\n // FIXME: don't rewrite all profiles\n this.curlyBlock([\"meta:\"], () => {\n this.line(`profile: ['${flatProfile.identifier.url}']`);\n }, [\",\"]);\n profileFields.forEach((fieldName) => {\n this.line(`${fieldName}: ${tsGet(\"profile\", fieldName)},`);\n });\n });\n },\n );\n this.line();\n }\n\n generateExtractProfile(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n\n const profileFields = Object.entries(flatProfile.fields || {})\n .filter(([_fieldName, field]) => {\n return isNotChoiceDeclarationField(field) && field.type !== undefined;\n })\n .map(([fieldName]) => fieldName);\n\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization))\n throw new Error(`Specialization not found for ${flatProfile.identifier.url}`);\n\n const shouldCast: Record<string, boolean> = {};\n this.curlyBlock(\n [\n `export const extract_${tsProfileName}_from_${tsBaseResourceName} =`,\n `(resource: ${tsBaseResourceName}): ${tsProfileName}`,\n \"=>\",\n ],\n () => {\n profileFields.forEach((fieldName) => {\n const tsField = tsFieldName(fieldName);\n const pField = flatProfile.fields?.[fieldName];\n const rField = specialization.fields?.[fieldName];\n if (!isNotChoiceDeclarationField(pField) || !isNotChoiceDeclarationField(rField)) return;\n\n if (pField.required && !rField.required) {\n this.curlyBlock([`if (${tsGet(\"resource\", tsField)} === undefined)`], () =>\n this.lineSM(\n `throw new Error(\"'${tsField}' is required for ${flatProfile.identifier.url}\")`,\n ),\n );\n }\n\n const pRefs = pField?.reference?.map((ref) => ref.name);\n const rRefs = rField?.reference?.map((ref) => ref.name);\n if (pRefs && rRefs && pRefs.length !== rRefs.length) {\n const predName = `reference_is_valid_${tsField}`;\n this.curlyBlock([\"const\", predName, \"=\", \"(ref?: Reference)\", \"=>\"], () => {\n this.line(\"return !ref\");\n this.indentBlock(() => {\n rRefs.forEach((ref) => {\n this.line(`|| ref.reference?.startsWith('${ref}/')`);\n });\n this.line(\";\");\n });\n });\n let cond: string = !pField?.required ? `!${tsGet(\"resource\", tsField)} || ` : \"\";\n if (pField.array) {\n cond += `${tsGet(\"resource\", tsField)}.every( (ref) => ${predName}(ref) )`;\n } else {\n cond += `!${predName}(${tsGet(\"resource\", tsField)})`;\n }\n this.curlyBlock([\"if (\", cond, \")\"], () => {\n this.lineSM(\n `throw new Error(\"'${fieldName}' has different references in profile and specialization\")`,\n );\n });\n this.line();\n shouldCast[fieldName] = true;\n }\n });\n this.curlyBlock([\"return\"], () => {\n this.line(`__profileUrl: '${flatProfile.identifier.url}',`);\n profileFields.forEach((fieldName) => {\n const tsField = tsFieldName(fieldName);\n if (shouldCast[fieldName]) {\n this.line(\n `${tsField}:`,\n `${tsGet(\"resource\", tsField)} as ${tsProfileName}['${tsField}'],`,\n );\n } else {\n this.line(`${tsField}:`, `${tsGet(\"resource\", tsField)},`);\n }\n });\n });\n },\n );\n }\n\n generateResourceModule(tsIndex: TypeSchemaIndex, schema: TypeSchema) {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n if ([\"complex-type\", \"resource\", \"logical\"].includes(schema.identifier.kind)) {\n this.generateDependenciesImports(schema);\n this.generateComplexTypeReexports(schema);\n this.generateNestedTypes(tsIndex, schema);\n this.comment(\"CanonicalURL:\", schema.identifier.url);\n this.generateType(tsIndex, schema);\n } else if (isProfileTypeSchema(schema)) {\n const flatProfile = tsIndex.flatProfile(schema);\n this.generateDependenciesImports(flatProfile);\n this.comment(\"CanonicalURL:\", schema.identifier.url);\n this.generateProfileType(tsIndex, flatProfile);\n this.generateAttachProfile(flatProfile);\n this.generateExtractProfile(tsIndex, flatProfile);\n } else throw new Error(`Profile generation not implemented for kind: ${schema.identifier.kind}`);\n });\n }\n\n override generate(tsIndex: TypeSchemaIndex) {\n const typesToGenerate = [\n ...tsIndex.collectComplexTypes(),\n ...tsIndex.collectResources(),\n // ...tsIndex.collectLogicalModels(),\n ...(this.opts.generateProfile\n ? tsIndex\n .collectProfiles()\n // NOTE: because non Resource don't have `meta` field\n .filter((p) => tsIndex.isWithMetaField(p))\n : []),\n ];\n const grouped = groupByPackages(typesToGenerate);\n\n this.cd(\"/\", () => {\n for (const [packageName, packageSchemas] of Object.entries(grouped)) {\n const tsPackageDir = tsFhirPackageDir(packageName);\n this.cd(tsPackageDir, () => {\n for (const schema of packageSchemas) {\n this.generateResourceModule(tsIndex, schema);\n }\n this.generateFhirPackageIndexFile(packageSchemas);\n });\n }\n });\n }\n}\n","/**\n * High-Level API Builder\n *\n * Provides a fluent, chainable API for common codegen use cases with pre-built generators.\n * This builder pattern allows users to configure generation in a declarative way.\n */\n\nimport * as fs from \"node:fs\";\nimport * as afs from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport type { GeneratedFile } from \"@root/api/generators/base/types\";\nimport { CSharp } from \"@root/api/writer-generator/csharp/csharp.ts\";\nimport { registerFromManager } from \"@root/typeschema/register\";\nimport { mkTypeSchemaIndex, treeShake, type TreeShake } from \"@root/typeschema/utils\";\nimport { generateTypeSchemas, TypeSchemaCache, TypeSchemaGenerator, TypeSchemaParser } from \"@typeschema/index\";\nimport { extractNameFromCanonical, packageMetaToFhir, packageMetaToNpm, type TypeSchema } from \"@typeschema/types\";\nimport type { Config, TypeSchemaConfig } from \"../config\";\nimport { CodegenLogger, createLogger } from \"../utils/codegen-logger\";\nimport { TypeScriptGenerator as TypeScriptGeneratorDepricated } from \"./generators/typescript\";\nimport * as TS2 from \"./writer-generator/typescript\";\nimport type { Writer, WriterOptions } from \"./writer-generator/writer\";\nimport type { GeneratorInput } from \"./generators/base/BaseGenerator\";\n\n/**\n * Configuration options for the API builder\n */\nexport interface APIBuilderOptions {\n outputDir?: string;\n verbose?: boolean;\n overwrite?: boolean; // FIXME: remove\n cache?: boolean; // FIXME: remove\n cleanOutput?: boolean;\n typeSchemaConfig?: TypeSchemaConfig; // FIXME: remove\n logger?: CodegenLogger;\n manager?: ReturnType<typeof CanonicalManager> | null;\n typeSchemaOutputDir?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n throwException?: boolean;\n exportTypeTree?: string;\n treeShake?: TreeShake;\n}\n\n/**\n * Progress callback for long-running operations\n */\nexport type ProgressCallback = (phase: string, current: number, total: number, message?: string) => void;\n\n/**\n * Generation result information\n */\nexport interface GenerationResult {\n success: boolean;\n outputDir: string;\n filesGenerated: string[];\n errors: string[];\n warnings: string[];\n duration: number;\n}\n\ninterface Generator {\n generate: (input: GeneratorInput) => Promise<GeneratedFile[]>;\n setOutputDir: (outputDir: string) => void;\n build: (schemas: TypeSchema[]) => Promise<GeneratedFile[]>;\n}\n\nconst writerToGenerator = (writerGen: Writer): Generator => {\n const getGeneratedFiles = () => {\n return writerGen.writtenFiles().map((fn: string) => {\n return {\n path: Path.normalize(Path.join(writerGen.opts.outputDir, fn)),\n filename: fn.replace(/^.*[\\\\/]/, \"\"),\n content: \"\",\n exports: [],\n size: 0,\n timestamp: new Date(),\n };\n });\n };\n return {\n generate: async ({ index: tsIndex }: GeneratorInput): Promise<GeneratedFile[]> => {\n writerGen.generate(tsIndex);\n return getGeneratedFiles();\n },\n setOutputDir: (outputDir: string) => (writerGen.opts.outputDir = outputDir),\n build: async (_input: unknown) => getGeneratedFiles(),\n };\n};\n\nconst normalizeFileName = (str: string): string => {\n const res = str.replace(/[^a-zA-Z0-9\\-_.@#()]/g, \"\");\n if (res.length === 0) return \"unknown\";\n return res;\n};\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\ntype APIBuilderConfig = PartialBy<\n Required<APIBuilderOptions>,\n \"logger\" | \"typeSchemaConfig\" | \"typeSchemaOutputDir\" | \"exportTypeTree\" | \"treeShake\"\n> & {\n cleanOutput: boolean;\n};\n\nconst cleanup = async (opts: APIBuilderConfig, logger: CodegenLogger): Promise<void> => {\n logger.info(`Cleaning outputs...`);\n try {\n logger.info(`Clean ${opts.outputDir}`);\n fs.rmSync(opts.outputDir, { recursive: true, force: true });\n if (opts.typeSchemaOutputDir) {\n logger.info(`Clean ${opts.typeSchemaOutputDir}`);\n fs.rmSync(opts.typeSchemaOutputDir, {\n recursive: true,\n force: true,\n });\n }\n if (opts.exportTypeTree) {\n logger.info(`Clean ${opts.exportTypeTree}`);\n fs.rmSync(opts.exportTypeTree, {\n recursive: true,\n force: true,\n });\n }\n } catch (error) {\n logger.warn(`Error cleaning output directory: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\nconst writeTypeSchemasToSeparateFiles = async (\n typeSchemas: TypeSchema[],\n outputDir: string,\n logger: CodegenLogger,\n): Promise<void> => {\n await afs.mkdir(outputDir, { recursive: true });\n logger.info(`Writing TypeSchema files to ${outputDir}/...`);\n\n const files: Record<string, string[]> = {};\n for (const ts of typeSchemas) {\n const pkg = {\n name: ts.identifier.package,\n version: ts.identifier.version,\n };\n const pkgPath = normalizeFileName(packageMetaToFhir(pkg));\n const name = normalizeFileName(`${ts.identifier.name}(${extractNameFromCanonical(ts.identifier.url)})`);\n const json = JSON.stringify(ts, null, 2);\n const baseName = Path.join(outputDir, pkgPath, name);\n if (!files[baseName]) files[baseName] = [];\n if (!files[baseName]?.some((e) => e === json)) {\n files[baseName].push(json);\n }\n }\n\n for (const [baseName, jsons] of Object.entries(files)) {\n await Promise.all(\n jsons.map(async (json, index) => {\n let fullName: string;\n if (index === 0) {\n fullName = `${baseName}.typeschema.json`;\n } else {\n fullName = `${baseName}-${index}.typeschema.json`;\n }\n await afs.mkdir(Path.dirname(fullName), { recursive: true });\n await afs.writeFile(fullName, json);\n }),\n );\n }\n};\n\nconst writeTypeSchemasToSingleFile = async (\n typeSchemas: TypeSchema[],\n outputFile: string,\n logger: CodegenLogger,\n): Promise<void> => {\n logger.info(`Writing TypeSchema files to: ${outputFile}`);\n await afs.mkdir(Path.dirname(outputFile), { recursive: true });\n\n logger.info(`Writing TypeSchemas to one file ${outputFile}...`);\n\n for (const ts of typeSchemas) {\n const json = JSON.stringify(ts, null, 2);\n await afs.appendFile(outputFile, `${json}\\n`);\n }\n};\n\nconst tryWriteTypeSchema = async (typeSchemas: TypeSchema[], opts: APIBuilderConfig, logger: CodegenLogger) => {\n if (!opts.typeSchemaOutputDir) return;\n try {\n if (Path.extname(opts.typeSchemaOutputDir) === \".ndjson\") {\n await writeTypeSchemasToSingleFile(typeSchemas, opts.typeSchemaOutputDir, logger);\n } else {\n await writeTypeSchemasToSeparateFiles(typeSchemas, opts.typeSchemaOutputDir, logger);\n }\n logger.info(`Writing TypeSchema - DONE`);\n } catch (error) {\n logger.error(\"Failed to write TypeSchema output\", error instanceof Error ? error : new Error(String(error)));\n if (opts.throwException) throw error;\n }\n};\n\n/**\n * High-Level API Builder class\n *\n * Provides a fluent interface for configuring and executing code generation\n * from FHIR packages or TypeSchema documents.\n */\nexport class APIBuilder {\n private schemas: TypeSchema[] = [];\n private options: APIBuilderConfig;\n private generators: Map<string, Generator> = new Map();\n private cache?: TypeSchemaCache;\n private pendingOperations: Promise<void>[] = [];\n private typeSchemaGenerator?: TypeSchemaGenerator;\n private logger: CodegenLogger;\n private packages: string[] = [];\n progressCallback: any;\n private typeSchemaConfig?: TypeSchemaConfig;\n\n constructor(options: APIBuilderOptions = {}) {\n this.options = {\n outputDir: options.outputDir || \"./generated\",\n verbose: options.verbose ?? false,\n overwrite: options.overwrite ?? true,\n cache: options.cache ?? true,\n cleanOutput: options.cleanOutput ?? true,\n typeSchemaConfig: options.typeSchemaConfig,\n manager: options.manager || null,\n throwException: options.throwException || false,\n typeSchemaOutputDir: options.typeSchemaOutputDir,\n exportTypeTree: options.exportTypeTree,\n treeShake: options.treeShake,\n };\n\n this.typeSchemaConfig = options.typeSchemaConfig;\n\n // Use provided logger or create a default one\n this.logger =\n options.logger ||\n createLogger({\n verbose: this.options.verbose,\n prefix: \"API\",\n });\n\n if (this.options.cache) {\n this.cache = new TypeSchemaCache(this.typeSchemaConfig);\n }\n }\n\n fromPackage(packageName: string, version?: string): APIBuilder {\n const pkg = packageMetaToNpm({ name: packageName, version: version || \"latest\" });\n this.packages.push(pkg);\n return this;\n }\n\n fromPackageRef(packageRef: string): APIBuilder {\n this.packages.push(packageRef);\n return this;\n }\n\n fromFiles(...filePaths: string[]): APIBuilder {\n this.logger.debug(`Loading from ${filePaths.length} TypeSchema files`);\n const operation = this.loadFromFiles(filePaths);\n this.pendingOperations.push(operation);\n return this;\n }\n\n fromSchemas(schemas: TypeSchema[]): APIBuilder {\n this.logger.debug(`Adding ${schemas.length} TypeSchemas to generation`);\n this.schemas = [...this.schemas, ...schemas];\n return this;\n }\n\n typescriptDepricated(\n options: {\n moduleFormat?: \"esm\" | \"cjs\";\n generateIndex?: boolean;\n includeDocuments?: boolean;\n namingConvention?: \"PascalCase\" | \"camelCase\";\n includeExtensions?: boolean;\n includeProfiles?: boolean;\n generateValueSets?: boolean;\n includeValueSetHelpers?: boolean;\n valueSetStrengths?: (\"required\" | \"preferred\" | \"extensible\" | \"example\")[];\n valueSetMode?: \"all\" | \"required-only\" | \"custom\";\n valueSetDirectory?: string;\n } = {},\n ): APIBuilder {\n const typesOutputDir = `${this.options.outputDir}/types`;\n\n const generator = new TypeScriptGeneratorDepricated({\n outputDir: typesOutputDir,\n moduleFormat: options.moduleFormat || \"esm\",\n generateIndex: options.generateIndex ?? true,\n includeDocuments: options.includeDocuments ?? true,\n namingConvention: options.namingConvention || \"PascalCase\",\n includeExtensions: options.includeExtensions ?? false,\n includeProfiles: options.includeProfiles ?? false,\n generateValueSets: options.generateValueSets ?? false,\n includeValueSetHelpers: options.includeValueSetHelpers ?? false,\n valueSetStrengths: options.valueSetStrengths ?? [\"required\"],\n logger: this.logger.child(\"TS\"),\n valueSetMode: options.valueSetMode ?? \"required-only\",\n valueSetDirectory: options.valueSetDirectory ?? \"valuesets\",\n verbose: this.options.verbose,\n validate: true, // Enable validation for debugging\n overwrite: this.options.overwrite,\n });\n\n this.generators.set(\"typescript\", generator);\n this.logger.debug(`Configured TypeScript generator (${options.moduleFormat || \"esm\"})`);\n return this;\n }\n\n typescript(opts: Partial<WriterOptions>) {\n const writerOpts = {\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n generateProfile: true,\n exportTypeTree: this.options.exportTypeTree,\n };\n const effectiveOpts = { logger: this.logger, ...writerOpts, ...opts };\n const generator = writerToGenerator(new TS2.TypeScript(effectiveOpts));\n this.generators.set(\"typescript\", generator);\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(effectiveOpts, undefined, 2)})`);\n return this;\n }\n\n csharp(namespace: string, staticSourceDir?: string | undefined): APIBuilder {\n const generator = writerToGenerator(\n new CSharp({\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n staticSourceDir: staticSourceDir ?? undefined,\n targetNamespace: namespace,\n logger: new CodegenLogger({\n prefix: \"C#\",\n timestamp: true,\n verbose: true,\n suppressLoggingLevel: [],\n }),\n }),\n );\n this.generators.set(\"C#\", generator);\n this.logger.debug(`Configured C# generator`);\n return this;\n }\n\n /**\n * Set a progress callback for monitoring generation\n */\n onProgress(callback: ProgressCallback): APIBuilder {\n this.progressCallback = callback;\n return this;\n }\n\n /**\n * Set the output directory for all generators\n */\n outputTo(directory: string): APIBuilder {\n this.logger.debug(`Setting output directory: ${directory}`);\n this.options.outputDir = directory;\n\n // Update all configured generators\n for (const generator of this.generators.values()) {\n if (generator.setOutputDir) {\n generator.setOutputDir(directory);\n }\n }\n\n return this;\n }\n\n verbose(enabled = true): APIBuilder {\n this.options.verbose = enabled;\n this.logger?.configure({ verbose: enabled });\n return this;\n }\n\n throwException(enabled = true): APIBuilder {\n this.options.throwException = enabled;\n return this;\n }\n\n cleanOutput(enabled = true): APIBuilder {\n this.options.cleanOutput = enabled;\n return this;\n }\n\n writeTypeTree(filename: string) {\n this.options.exportTypeTree = filename;\n return this;\n }\n\n treeShake(tree: TreeShake) {\n this.options.treeShake = tree;\n return this;\n }\n\n writeTypeSchemas(target: string) {\n this.options.typeSchemaOutputDir = target;\n return this;\n }\n\n async generate(): Promise<GenerationResult> {\n const startTime = performance.now();\n const result: GenerationResult = {\n success: false,\n outputDir: this.options.outputDir,\n filesGenerated: [],\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n this.logger.debug(`Starting generation with ${this.generators.size} generators`);\n try {\n if (this.options.cleanOutput) cleanup(this.options, this.logger);\n\n this.logger.info(\"Initialize Canonical Manager\");\n const manager = CanonicalManager({\n packages: this.packages,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n });\n const ref2meta = await manager.init();\n const packageMetas = Object.values(ref2meta);\n const register = await registerFromManager(manager, {\n logger: this.logger,\n focusedPackages: packageMetas,\n });\n\n const typeSchemas = await generateTypeSchemas(register, this.logger);\n await tryWriteTypeSchema(typeSchemas, this.options, this.logger);\n\n let tsIndex = mkTypeSchemaIndex(typeSchemas, this.logger);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake, this.logger);\n\n if (this.options.exportTypeTree) await tsIndex.exportTree(this.options.exportTypeTree);\n\n this.logger.debug(`Executing ${this.generators.size} generators`);\n\n await this.executeGenerators(result, {\n schemas: typeSchemas,\n index: tsIndex,\n });\n\n this.logger.info(\"Generation completed successfully\");\n\n result.success = result.errors.length === 0;\n\n this.logger.debug(`Generation completed: ${result.filesGenerated.length} files`);\n } catch (error) {\n this.logger.error(\"Code generation failed\", error instanceof Error ? error : new Error(String(error)));\n result.errors.push(error instanceof Error ? error.message : String(error));\n if (this.options.throwException) throw error;\n }\n\n return {\n ...result,\n success: result.errors.length === 0,\n duration: performance.now() - startTime,\n };\n }\n\n /**\n * Generate and return the results without writing to files\n */\n async build(): Promise<{\n typescript?: { content: string; filename: string }[];\n }> {\n const results: Record<string, unknown> = {};\n\n for (const [type, generator] of this.generators.entries()) {\n if (generator.build) {\n results[type] = await generator.build(this.schemas);\n }\n }\n\n return results;\n }\n\n /**\n * Clear all configuration and start fresh\n */\n reset(): APIBuilder {\n this.schemas = [];\n this.generators.clear();\n this.progressCallback = undefined;\n return this;\n }\n\n /**\n * Get loaded schemas (for inspection)\n */\n getSchemas(): TypeSchema[] {\n return [...this.schemas];\n }\n\n /**\n * Get configured generators (for inspection)\n */\n getGenerators(): string[] {\n return Array.from(this.generators.keys());\n }\n\n private async loadFromFiles(filePaths: string[]): Promise<void> {\n if (!this.typeSchemaGenerator) {\n this.typeSchemaGenerator = new TypeSchemaGenerator(\n {\n verbose: this.options.verbose,\n logger: this.logger.child(\"Schema\"),\n treeshake: this.typeSchemaConfig?.treeshake,\n },\n this.typeSchemaConfig,\n );\n }\n\n const parser = new TypeSchemaParser({\n format: \"auto\",\n });\n\n const schemas = await parser.parseFromFiles(filePaths);\n this.schemas = [...this.schemas, ...schemas];\n\n if (this.cache) {\n this.cache.setMany(schemas);\n }\n }\n\n private async executeGenerators(result: GenerationResult, input: GeneratorInput): Promise<void> {\n for (const [type, generator] of this.generators.entries()) {\n this.logger.info(`Generating ${type}...`);\n\n try {\n const files = await generator.generate(input);\n result.filesGenerated.push(...files.map((f: GeneratedFile) => f.path || f.filename));\n this.logger.info(`Generating ${type} finished successfully`);\n } catch (error) {\n result.errors.push(\n `${type} generator failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (this.options.throwException) throw error;\n }\n }\n }\n}\n\n/**\n * Create an API builder instance from a configuration object\n */\nexport function createAPIFromConfig(config: Config): APIBuilder {\n const builder = new APIBuilder({\n outputDir: config.outputDir,\n verbose: config.verbose,\n overwrite: config.overwrite,\n cache: config.cache,\n cleanOutput: config.cleanOutput,\n typeSchemaConfig: config.typeSchema,\n });\n\n // Add packages if specified\n if (config.packages && config.packages.length > 0) {\n for (const pkg of config.packages) {\n builder.fromPackage(pkg);\n }\n }\n\n // Add files if specified\n if (config.files && config.files.length > 0) {\n builder.fromFiles(...config.files);\n }\n\n // Configure TypeScript generator if specified\n if (config.typescript) {\n builder.typescriptDepricated(config.typescript);\n }\n\n return builder;\n}\n","/**\n * New Config Schema for High-Level API\n *\n * Simple configuration system compatible ONLY with the new high-level APIBuilder.\n * All legacy config functionality has been removed.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\n/**\n * TypeScript generator configuration options\n */\nexport interface TypeScriptGeneratorConfig {\n moduleFormat?: \"esm\" | \"cjs\";\n generateIndex?: boolean;\n includeDocuments?: boolean;\n namingConvention?: \"PascalCase\" | \"camelCase\";\n strictMode?: boolean;\n includeProfiles?: boolean;\n includeExtensions?: boolean;\n includeCodeSystems?: boolean;\n includeOperations?: boolean;\n /** Generate individual TypeScript files for value sets (default: false) */\n generateValueSets?: boolean;\n /** Include helper validation functions in value set files (default: false) */\n includeValueSetHelpers?: boolean;\n /** Which binding strengths to generate value sets for (default: ['required']) */\n valueSetStrengths?: (\"required\" | \"preferred\" | \"extensible\" | \"example\")[];\n /** Directory name for value set files (relative to outputDir) (default: 'valuesets') */\n valueSetDirectory?: string;\n /** Value set generation mode (default: 'required-only') */\n valueSetMode?: \"all\" | \"required-only\" | \"custom\";\n fhirVersion?: \"R4\" | \"R5\";\n resourceTypes?: string[];\n maxDepth?: number;\n\n // Profile generation options\n profileOptions?: {\n generateKind?: \"interface\" | \"type\" | \"both\";\n includeConstraints?: boolean;\n includeDocumentation?: boolean;\n strictMode?: boolean;\n subfolder?: string;\n };\n\n // Builder generation options\n generateBuilders?: boolean;\n builderOptions?: {\n includeValidation?: boolean;\n includeFactoryMethods?: boolean;\n includeInterfaces?: boolean;\n generateNestedBuilders?: boolean;\n includeHelperMethods?: boolean;\n supportPartialBuild?: boolean;\n includeJSDoc?: boolean;\n generateFactories?: boolean;\n includeTypeGuards?: boolean;\n handleChoiceTypes?: boolean;\n generateArrayHelpers?: boolean;\n };\n\n // Validator generation options\n validatorOptions?: {\n includeCardinality?: boolean;\n includeTypes?: boolean;\n includeConstraints?: boolean;\n includeInvariants?: boolean;\n validateRequired?: boolean;\n allowAdditional?: boolean;\n strictValidation?: boolean;\n collectMetrics?: boolean;\n generateAssertions?: boolean;\n generatePartialValidators?: boolean;\n optimizePerformance?: boolean;\n includeJSDoc?: boolean;\n generateCompositeValidators?: boolean;\n };\n\n // Type guard generation options\n guardOptions?: {\n includeRuntimeValidation?: boolean;\n includeErrorMessages?: boolean;\n treeShakeable?: boolean;\n targetTSVersion?: \"3.8\" | \"4.0\" | \"4.5\" | \"5.0\";\n strictGuards?: boolean;\n includeNullChecks?: boolean;\n verbose?: boolean;\n };\n}\n\n/**\n * TypeSchema Configuration\n * Controls TypeSchema generation and caching behavior\n */\nexport interface TypeSchemaConfig {\n /** Enable persistent caching of generated TypeSchemas */\n enablePersistence?: boolean;\n /** Directory to store cached TypeSchemas (relative to outputDir) */\n cacheDir?: string;\n /** Maximum age of cached schemas in milliseconds before regeneration */\n maxAge?: number;\n /** Whether to validate cached schemas before reuse */\n validateCached?: boolean;\n /** Force regeneration of schemas even if cached */\n forceRegenerate?: boolean;\n /** Share cache across multiple codegen runs */\n shareCache?: boolean;\n /** Cache key prefix for namespacing */\n cacheKeyPrefix?: string;\n /** Only generate TypeSchemas for specific ResourceTypes (treeshaking) */\n treeshake?: string[];\n /** Generate single TypeSchema file instead of multiple files */\n singleFile?: boolean;\n /** Profile packages configuration */\n profiles?: {\n /** Auto-detect profiles in packages */\n autoDetect?: boolean;\n };\n}\n\n/**\n * Main configuration schema for the new high-level API\n */\nexport interface Config {\n // Core APIBuilder options\n outputDir?: string;\n verbose?: boolean;\n overwrite?: boolean;\n validate?: boolean;\n cache?: boolean;\n cleanOutput?: boolean;\n\n // Generator configurations\n typescript?: TypeScriptGeneratorConfig;\n typeSchema?: TypeSchemaConfig;\n\n // Input sources\n packages?: string[];\n files?: string[];\n\n // Schema validation\n $schema?: string;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<Config> = {\n outputDir: \"./generated\",\n verbose: false,\n overwrite: true,\n validate: true,\n cache: true,\n cleanOutput: true,\n typescript: {\n moduleFormat: \"esm\",\n generateIndex: true,\n includeDocuments: false,\n namingConvention: \"PascalCase\",\n strictMode: true,\n includeProfiles: true,\n includeExtensions: false,\n includeCodeSystems: false,\n includeOperations: false,\n generateValueSets: false,\n valueSetDirectory: \"valuesets\",\n valueSetMode: \"required-only\",\n valueSetStrengths: [\"required\"],\n includeValueSetHelpers: false,\n fhirVersion: \"R4\",\n resourceTypes: [],\n maxDepth: 10,\n\n // Profile generation defaults\n profileOptions: {\n generateKind: \"interface\",\n includeConstraints: true,\n includeDocumentation: true,\n strictMode: false,\n subfolder: \"profiles\",\n },\n\n // Builder generation defaults\n generateBuilders: false,\n builderOptions: {\n includeValidation: true,\n includeFactoryMethods: true,\n includeInterfaces: true,\n generateNestedBuilders: true,\n includeHelperMethods: true,\n supportPartialBuild: true,\n includeJSDoc: true,\n generateFactories: true,\n includeTypeGuards: true,\n handleChoiceTypes: true,\n generateArrayHelpers: true,\n },\n\n // Validator generation defaults\n validatorOptions: {\n includeCardinality: true,\n includeTypes: true,\n includeConstraints: true,\n includeInvariants: false,\n validateRequired: true,\n allowAdditional: false,\n strictValidation: false,\n collectMetrics: false,\n generateAssertions: true,\n generatePartialValidators: true,\n optimizePerformance: true,\n includeJSDoc: true,\n generateCompositeValidators: true,\n },\n\n // Type guard generation defaults\n guardOptions: {\n includeRuntimeValidation: true,\n includeErrorMessages: true,\n treeShakeable: true,\n targetTSVersion: \"5.0\",\n strictGuards: false,\n includeNullChecks: true,\n verbose: false,\n },\n },\n typeSchema: {\n enablePersistence: true,\n cacheDir: \".typeschema-cache\",\n maxAge: 24 * 60 * 60 * 1000, // 24 hours in milliseconds\n validateCached: true,\n forceRegenerate: false,\n shareCache: true,\n cacheKeyPrefix: \"\",\n treeshake: [],\n singleFile: false,\n profiles: {\n autoDetect: true,\n },\n },\n packages: [],\n files: [],\n $schema: \"\",\n};\n\n/**\n * Configuration file names to search for\n */\nexport const CONFIG_FILE_NAMES = [\n \"atomic-codegen.config.ts\",\n \"atomic-codegen.config\",\n \"atomic-codegen.config.json\",\n \".atomic-codegenrc\",\n \"atomic-codegen.json\",\n \".atomic-codegen.json\",\n \"codegen.config.json\",\n \"codegen.json\",\n];\n\n/**\n * Validation error interface\n */\nexport interface ConfigValidationError {\n path: string;\n message: string;\n value?: unknown;\n}\n\n/**\n * Configuration validation result\n */\nexport interface ConfigValidationResult {\n valid: boolean;\n errors: ConfigValidationError[];\n warnings: string[];\n config?: Config;\n}\n\n/**\n * Simple configuration validator\n */\nexport class ConfigValidator {\n /**\n * Validate a configuration object\n */\n validate(config: unknown): ConfigValidationResult {\n const result: ConfigValidationResult = {\n valid: true,\n errors: [],\n warnings: [],\n };\n\n if (!config || typeof config !== \"object\") {\n result.valid = false;\n result.errors.push({\n path: \"root\",\n message: \"Configuration must be an object\",\n value: config,\n });\n return result;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate outputDir\n if (cfg.outputDir !== undefined && typeof cfg.outputDir !== \"string\") {\n result.errors.push({\n path: \"outputDir\",\n message: \"outputDir must be a string\",\n value: cfg.outputDir,\n });\n }\n\n // Validate boolean fields\n const booleanFields = [\"verbose\", \"overwrite\", \"validate\", \"cache\"];\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n result.errors.push({\n path: field,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate typescript config\n if (cfg.typescript !== undefined) {\n const tsErrors = this.validateTypeScriptConfig(cfg.typescript);\n result.errors.push(...tsErrors);\n }\n\n // Validate typeSchema config\n if (cfg.typeSchema !== undefined) {\n const tsErrors = this.validateTypeSchemaConfig(cfg.typeSchema);\n result.errors.push(...tsErrors);\n }\n\n // Validate packages array\n if (cfg.packages !== undefined) {\n if (!Array.isArray(cfg.packages)) {\n result.errors.push({\n path: \"packages\",\n message: \"packages must be an array\",\n value: cfg.packages,\n });\n } else {\n cfg.packages.forEach((pkg, index) => {\n if (typeof pkg !== \"string\") {\n result.errors.push({\n path: `packages[${index}]`,\n message: \"package name must be a string\",\n value: pkg,\n });\n }\n });\n }\n }\n\n // Validate files array\n if (cfg.files !== undefined) {\n if (!Array.isArray(cfg.files)) {\n result.errors.push({\n path: \"files\",\n message: \"files must be an array\",\n value: cfg.files,\n });\n } else {\n cfg.files.forEach((file, index) => {\n if (typeof file !== \"string\") {\n result.errors.push({\n path: `files[${index}]`,\n message: \"file path must be a string\",\n value: file,\n });\n }\n });\n }\n }\n\n result.valid = result.errors.length === 0;\n if (result.valid) {\n result.config = cfg as Config;\n }\n\n return result;\n }\n\n private validateTypeScriptConfig(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript\",\n message: \"typescript config must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate moduleFormat\n if (cfg.moduleFormat !== undefined) {\n if (![\"esm\", \"cjs\"].includes(cfg.moduleFormat as string)) {\n errors.push({\n path: \"typescript.moduleFormat\",\n message: 'moduleFormat must be \"esm\" or \"cjs\"',\n value: cfg.moduleFormat,\n });\n }\n }\n\n // Validate namingConvention\n if (cfg.namingConvention !== undefined) {\n if (![\"PascalCase\", \"camelCase\"].includes(cfg.namingConvention as string)) {\n errors.push({\n path: \"typescript.namingConvention\",\n message: 'namingConvention must be \"PascalCase\" or \"camelCase\"',\n value: cfg.namingConvention,\n });\n }\n }\n\n // Validate boolean fields\n const booleanFields = [\n \"generateIndex\",\n \"includeDocuments\",\n \"strictMode\",\n \"includeProfiles\",\n \"includeExtensions\",\n \"includeCodeSystems\",\n \"includeOperations\",\n \"generateValueSets\",\n \"includeValueSetHelpers\",\n ];\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate validatorOptions\n if (cfg.validatorOptions !== undefined) {\n const validatorErrors = this.validateValidatorOptions(cfg.validatorOptions);\n errors.push(...validatorErrors);\n }\n\n // Validate guardOptions\n if (cfg.guardOptions !== undefined) {\n const guardErrors = this.validateGuardOptions(cfg.guardOptions);\n errors.push(...guardErrors);\n }\n\n // Validate profileOptions\n if (cfg.profileOptions !== undefined) {\n const profileErrors = this.validateProfileOptions(cfg.profileOptions);\n errors.push(...profileErrors);\n }\n\n return errors;\n }\n\n private validateValidatorOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.validatorOptions\",\n message: \"validatorOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate boolean fields\n const booleanFields = [\n \"includeCardinality\",\n \"includeTypes\",\n \"includeConstraints\",\n \"includeInvariants\",\n \"validateRequired\",\n \"allowAdditional\",\n \"strictValidation\",\n \"collectMetrics\",\n \"generateAssertions\",\n \"generatePartialValidators\",\n \"optimizePerformance\",\n \"includeJSDoc\",\n \"generateCompositeValidators\",\n ];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.validatorOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateGuardOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.guardOptions\",\n message: \"guardOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate targetTSVersion\n if (cfg.targetTSVersion !== undefined) {\n if (![\"3.8\", \"4.0\", \"4.5\", \"5.0\"].includes(cfg.targetTSVersion as string)) {\n errors.push({\n path: \"typescript.guardOptions.targetTSVersion\",\n message: 'targetTSVersion must be one of: \"3.8\", \"4.0\", \"4.5\", \"5.0\"',\n value: cfg.targetTSVersion,\n });\n }\n }\n\n // Validate boolean fields\n const booleanFields = [\n \"includeRuntimeValidation\",\n \"includeErrorMessages\",\n \"treeShakeable\",\n \"strictGuards\",\n \"includeNullChecks\",\n \"verbose\",\n ];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.guardOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateProfileOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.profileOptions\",\n message: \"profileOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate generateKind\n if (cfg.generateKind !== undefined) {\n if (![\"interface\", \"type\", \"both\"].includes(cfg.generateKind as string)) {\n errors.push({\n path: \"typescript.profileOptions.generateKind\",\n message: 'generateKind must be \"interface\", \"type\", or \"both\"',\n value: cfg.generateKind,\n });\n }\n }\n\n // Validate subfolder\n if (cfg.subfolder !== undefined && typeof cfg.subfolder !== \"string\") {\n errors.push({\n path: \"typescript.profileOptions.subfolder\",\n message: \"subfolder must be a string\",\n value: cfg.subfolder,\n });\n }\n\n // Validate boolean fields\n const booleanFields = [\"includeConstraints\", \"includeDocumentation\", \"strictMode\"];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.profileOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateTypeSchemaConfig(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typeSchema\",\n message: \"typeSchema config must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate boolean fields\n const booleanFields = [\"enablePersistence\", \"validateCached\", \"forceRegenerate\", \"shareCache\"];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typeSchema.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate string fields\n const stringFields = [\"cacheDir\", \"cacheKeyPrefix\"];\n\n for (const field of stringFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"string\") {\n errors.push({\n path: `typeSchema.${field}`,\n message: `${field} must be a string`,\n value: cfg[field],\n });\n }\n }\n\n // Validate maxAge\n if (cfg.maxAge !== undefined) {\n if (typeof cfg.maxAge !== \"number\" || cfg.maxAge <= 0) {\n errors.push({\n path: \"typeSchema.maxAge\",\n message: \"maxAge must be a positive number\",\n value: cfg.maxAge,\n });\n }\n }\n\n // Validate profiles\n if (cfg.profiles !== undefined) {\n if (typeof cfg.profiles !== \"object\" || cfg.profiles === null) {\n errors.push({\n path: \"typeSchema.profiles\",\n message: \"profiles must be an object\",\n value: cfg.profiles,\n });\n } else {\n const profiles = cfg.profiles as Record<string, unknown>;\n\n // Validate autoDetect\n if (profiles.autoDetect !== undefined && typeof profiles.autoDetect !== \"boolean\") {\n errors.push({\n path: \"typeSchema.profiles.autoDetect\",\n message: \"autoDetect must be a boolean\",\n value: profiles.autoDetect,\n });\n }\n }\n }\n\n return errors;\n }\n}\n\n/**\n * Configuration loader with autoloading capabilities\n */\nexport class ConfigLoader {\n private validator = new ConfigValidator();\n\n /**\n * Auto-load configuration from the current working directory\n */\n async autoload(workingDir: string = process.cwd()): Promise<Config> {\n const configPath = await this.findConfigFile(workingDir);\n\n if (configPath) {\n return this.loadFromFile(configPath);\n }\n\n // Return default config if no file found\n return { ...DEFAULT_CONFIG };\n }\n\n /**\n * Load configuration from a specific file\n */\n async loadFromFile(filePath: string): Promise<Config> {\n try {\n let config: unknown;\n\n if (filePath.endsWith(\".ts\") || filePath.endsWith(\"\")) {\n // Use dynamic import for TypeScript/JavaScript files\n const absolutePath = resolve(filePath);\n const importResult = await import(absolutePath);\n config = importResult.default || importResult;\n } else {\n // JSON files\n const content = await readFile(filePath, \"utf-8\");\n config = JSON.parse(content);\n }\n\n const validation = this.validator.validate(config);\n\n if (!validation.valid) {\n const errorMessages = validation.errors.map((e) => `${e.path}: ${e.message}`).join(\"\\n\");\n throw new Error(`Configuration validation failed:\\n${errorMessages}`);\n }\n\n // Merge with defaults\n return this.mergeWithDefaults(validation.config!);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config from ${filePath}: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * Find configuration file in the given directory\n */\n private async findConfigFile(startDir: string): Promise<string | null> {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = resolve(startDir, fileName);\n if (existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n }\n\n /**\n * Merge user config with defaults\n */\n private mergeWithDefaults(userConfig: Config): Config {\n const merged: Config = {\n ...DEFAULT_CONFIG,\n ...userConfig,\n typescript: {\n ...DEFAULT_CONFIG.typescript,\n ...userConfig.typescript,\n },\n };\n\n return merged;\n }\n}\n\n/**\n * Global config loader instance\n */\nexport const configLoader = new ConfigLoader();\n\n/**\n * Convenience function to auto-load configuration\n */\nexport async function loadConfig(workingDir?: string): Promise<Config> {\n return configLoader.autoload(workingDir);\n}\n\n/**\n * Type guard to check if an object is a valid Config\n */\nexport function isConfig(obj: unknown): obj is Config {\n const validator = new ConfigValidator();\n const result = validator.validate(obj);\n return result.valid;\n}\n\n/**\n * Define configuration with type safety and IntelliSense support.\n * Similar to Vite's defineConfig function pattern.\n *\n * @example\n * ```typescript\n * import { defineConfig } from \"@atomic-ehr/codegen\";\n *\n * export default defineConfig({\n * outputDir: \"./generated\",\n * packages: [\n * \"hl7.fhir.r4.core@4.0.1\",\n * \"hl7.fhir.us.core@6.1.0\"\n * ],\n * typescript: {\n * generateIndex: true,\n * strictMode: true\n * }\n * });\n * ```\n */\nexport function defineConfig(config: Config): Config {\n return config;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/writer-generator/utils.ts","../src/api/writer-generator/writer.ts","../src/typeschema/types.ts","../src/api/writer-generator/csharp/formatHelper.ts","../src/api/writer-generator/csharp/csharp.ts","../src/typeschema/register.ts","../src/typeschema/core/identifier.ts","../src/typeschema/core/nested-types.ts","../src/typeschema/core/field-builder.ts","../src/typeschema/core/binding.ts","../src/typeschema/core/transformer.ts","../src/typeschema/utils.ts","../src/utils/codegen-logger.ts","../src/typeschema/index.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts","../src/config.ts"],"names":["s","Path","fs","pkg","typeSchemas","treeShake","shaked","resolve","schema","e","afs","Path3","canonicalToName","tsFieldName","tsName","fs3","CanonicalManager","existsSync"],"mappings":"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","file":"index.js","sourcesContent":["import type { TypeSchema } from \"@root/typeschema\";\n\nexport const words = (s: string) => {\n return s.split(/(?<=[a-z])(?=[A-Z])|[-_.\\s]/).filter(Boolean);\n};\n\nexport const kebabCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"-\");\n};\n\nexport const capitalCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n return s[0]?.toUpperCase() + s.substring(1).toLowerCase();\n};\n\nexport const camelCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n const [first, ...rest] = words(s);\n return [first?.toLowerCase(), ...rest.map(capitalCase)].join(\"\");\n};\n\nexport const pascalCase = (s: string) => {\n return words(s).map(capitalCase).join(\"\");\n};\n\nexport const snakeCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"_\");\n};\n\nexport const uppercaseFirstLetter = (str: string): string => {\n if (!str || str.length === 0) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const uppercaseFirstLetterOfEach = (strings: string[]): string[] => {\n return strings.map((str) => uppercaseFirstLetter(str));\n};\n\nexport function deepEqual<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) return true;\n\n if (obj1 === null || obj2 === null || typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false;\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((item, index) => deepEqual(item, obj2[index]));\n }\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => keys2.includes(key) && deepEqual(obj1[key], obj2[key]));\n}\n\nexport const typeSchemaInfo = (schema: TypeSchema): string => {\n return `<${schema.identifier.url}> from ${schema.identifier.package}#${schema.identifier.version}`;\n};\n","import * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\n\nexport type FileSystemWriterOptions = {\n outputDir: string;\n inMemoryOnly?: boolean;\n logger?: CodegenLogger;\n};\n\nexport type WriterOptions = FileSystemWriterOptions & {\n tabSize: number;\n withDebugComment?: boolean;\n commentLinePrefix: string;\n generateProfile?: boolean;\n};\n\ntype FileBufferInternal = { relPath: string; absPath: string; tokens: string[] };\nexport type FileBuffer = { relPath: string; absPath: string; content: string };\n\nexport abstract class FileSystemWriter<T extends FileSystemWriterOptions = FileSystemWriterOptions> {\n opts: T;\n currentDir?: string;\n currentFile?: { relPath: string; descriptor: number };\n writtenFilesBuffer: Record<string, FileBufferInternal> = {};\n\n constructor(opts: T) {\n this.opts = opts;\n }\n\n setOutputDir(path: string) {\n if (this.currentDir) throw new Error(\"Can't change output dir while writing\");\n this.opts.outputDir = path;\n }\n\n logger(): CodegenLogger | undefined {\n return this.opts.logger;\n }\n\n onDiskMkDir(path: string) {\n if (this.opts.inMemoryOnly) return;\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n }\n\n onDiskOpenFile(relPath: string): number {\n if (this.opts.inMemoryOnly) return -1;\n return fs.openSync(relPath, \"w\");\n }\n\n onDiskCloseFile(descriptor: number) {\n if (this.opts.inMemoryOnly) return;\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n }\n\n onDiskWrite(descriptor: number, token: string) {\n if (this.opts.inMemoryOnly) return;\n fs.writeSync(descriptor, token);\n }\n\n cd(path: string, gen: () => void) {\n const prev = this.currentDir;\n this.currentDir = path.startsWith(\"/\")\n ? Path.join(this.opts.outputDir, path)\n : Path.join(this.currentDir ?? this.opts.outputDir, path);\n this.onDiskMkDir(this.currentDir);\n this.logger()?.debug(`cd '${this.currentDir}'`);\n gen();\n this.currentDir = prev;\n }\n\n cat(fn: string, gen: () => void) {\n if (this.currentFile) throw new Error(\"Can't open file when another file is open\");\n if (fn.includes(\"/\")) throw new Error(`Change file path separatly: ${fn}`);\n\n const relPath = Path.normalize(`${this.currentDir}/${fn}`);\n try {\n const descriptor = this.onDiskOpenFile(relPath);\n\n this.logger()?.debug(`cat > '${relPath}'`);\n this.currentFile = { descriptor, relPath };\n this.writtenFilesBuffer[this.currentFile.relPath] = { relPath, absPath: Path.resolve(relPath), tokens: [] };\n\n gen();\n } finally {\n if (this.currentFile) this.onDiskCloseFile(this.currentFile.descriptor);\n this.currentFile = undefined;\n }\n }\n\n write(str: string) {\n if (!this.currentFile) throw new Error(\"No file opened\");\n this.onDiskWrite(this.currentFile.descriptor, str);\n\n const buf = this.writtenFilesBuffer[this.currentFile.relPath];\n if (!buf) throw new Error(\"No buffer found\");\n buf.tokens.push(str);\n }\n\n abstract generate(_tsIndex: TypeSchemaIndex): Promise<void>;\n\n writtenFiles(): FileBuffer[] {\n return Object.values(this.writtenFilesBuffer)\n .map(({ relPath, absPath, tokens }) => {\n return { relPath, absPath, content: tokens.join() };\n })\n .sort((a, b) => a.relPath.localeCompare(b.relPath));\n }\n}\n\nexport abstract class Writer<T extends WriterOptions = WriterOptions> extends FileSystemWriter<T> {\n currentIndent: number = 0;\n\n private indent() {\n this.currentIndent += this.opts.tabSize;\n }\n\n private deindent() {\n this.currentIndent -= this.opts.tabSize;\n }\n\n private writeIndent() {\n this.write(\" \".repeat(this.currentIndent));\n }\n\n line(...tokens: string[]) {\n if (tokens.length === 0) {\n this.write(\"\\n\");\n } else {\n this.writeIndent();\n this.write(`${tokens.join(\" \")}\\n`);\n }\n }\n\n lineSM(...tokens: string[]) {\n this.writeIndent();\n this.write(`${tokens.join(\" \")};\\n`);\n }\n\n comment(...tokens: string[]) {\n const lines = tokens.join(\" \").split(\"\\n\");\n for (const line of lines) {\n this.line(this.opts.commentLinePrefix, line);\n }\n }\n\n debugComment(...tokens: (string | any)[]) {\n if (this.opts.withDebugComment) {\n tokens = tokens.map((token) => {\n if (typeof token === \"string\") {\n return token;\n } else {\n return JSON.stringify(token, null, 2);\n }\n });\n this.comment(...tokens);\n }\n }\n\n disclaimer() {\n return [\n \"WARNING: This file is autogenerated by @atomic-ehr/codegen.\",\n \"GitHub: https://github.com/atomic-ehr/codegen\",\n \"Any manual changes made to this file may be overwritten.\",\n ];\n }\n\n generateDisclaimer() {\n this.disclaimer().forEach((e) => {\n this.comment(e);\n });\n this.line();\n }\n\n indentBlock(gencontent: () => void) {\n this.indent();\n gencontent();\n this.deindent();\n }\n\n curlyBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} {`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`}${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n\n squareBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} [`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`]${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n}\n","/**\n * A code generation friendly representation of FHIR StructureDefinition and\n * FHIR Schema designed to simplify SDK resource classes/types generation.\n */\n\nimport type { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport type * as FS from \"@atomic-ehr/fhirschema\";\n\nexport type Name = string & { readonly __brand: unique symbol };\nexport type CanonicalUrl = string & { readonly __brand: unique symbol };\n\nexport const extractNameFromCanonical = (canonical: CanonicalUrl, dropFragment = true) => {\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return localName;\n};\n\nexport interface PackageMeta {\n name: string;\n version: string;\n}\n\nexport const packageMetaToFhir = (packageMeta: PackageMeta) => `${packageMeta.name}#${packageMeta.version}`;\nexport const packageMetaToNpm = (packageMeta: PackageMeta) => `${packageMeta.name}@${packageMeta.version}`;\nexport const fhirToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"#\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\nexport const npmToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"@\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\n\nexport type RichFHIRSchema = Omit<FS.FHIRSchema, \"package_meta\" | \"base\" | \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n base: CanonicalUrl;\n};\n\nexport const enrichFHIRSchema = (schema: FS.FHIRSchema, packageMeta?: PackageMeta): RichFHIRSchema => {\n // FIXME: required params\n if (!packageMeta) {\n packageMeta = { name: \"undefined\", version: \"undefined\" };\n }\n return {\n ...schema,\n package_meta: schema.package_meta || packageMeta,\n name: schema.name as Name,\n url: schema.url as CanonicalUrl,\n base: schema.base as CanonicalUrl,\n };\n};\n\ntype IdentifierBase = {\n name: Name;\n url: CanonicalUrl;\n package: string;\n version: string;\n};\n\ntype PrimitiveIdentifier = { kind: \"primitive-type\" } & IdentifierBase;\ntype ComplexTypeIdentifier = { kind: \"complex-type\" } & IdentifierBase;\ntype ResourceIdentifier = { kind: \"resource\" } & IdentifierBase;\nexport type ValueSetIdentifier = { kind: \"value-set\" } & IdentifierBase;\nexport type NestedIdentifier = { kind: \"nested\" } & IdentifierBase;\nexport type BindingIdentifier = { kind: \"binding\" } & IdentifierBase;\ntype ProfileIdentifier = { kind: \"profile\" } & IdentifierBase;\ntype LogicalIdentifier = { kind: \"logical\" } & IdentifierBase;\n\nexport type Identifier =\n | PrimitiveIdentifier\n | ComplexTypeIdentifier\n | ResourceIdentifier\n | NestedIdentifier\n | BindingIdentifier\n | ValueSetIdentifier\n | ProfileIdentifier\n | LogicalIdentifier;\n\nexport const isPrimitiveIdentifier = (id: Identifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: Identifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: Identifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport type TypeSchema =\n | RegularTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\nexport const isFhirSchemaBased = (\n schema: TypeSchema | undefined,\n): schema is RegularTypeSchema | PrimitiveTypeSchema | BindingTypeSchema | ProfileTypeSchema => {\n return schema?.identifier.kind !== \"value-set\";\n};\n\nexport const isSpecializationTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return (\n schema?.identifier.kind === \"resource\" ||\n schema?.identifier.kind === \"complex-type\" ||\n schema?.identifier.kind === \"logical\"\n );\n};\n\nexport const isComplexTypeTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"complex-type\";\n};\n\nexport const isResourceTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"resource\";\n};\n\nexport const isPrimitiveTypeSchema = (schema: TypeSchema | undefined): schema is PrimitiveTypeSchema => {\n return schema?.identifier.kind === \"primitive-type\";\n};\n\nexport const isLogicalTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"logical\";\n};\n\nexport const isProfileTypeSchema = (schema: TypeSchema | undefined): schema is ProfileTypeSchema => {\n return schema?.identifier.kind === \"profile\";\n};\n\nexport function isBindingSchema(schema: TypeSchema | undefined): schema is BindingTypeSchema {\n return schema?.identifier.kind === \"binding\";\n}\n\nexport function isValueSetTypeSchema(schema: TypeSchema | undefined): schema is ValueSetTypeSchema {\n return schema?.identifier.kind === \"value-set\";\n}\n\ninterface PrimitiveTypeSchema {\n identifier: PrimitiveIdentifier;\n description?: string;\n base: Identifier;\n dependencies?: Identifier[];\n}\n\nexport interface NestedType {\n identifier: NestedIdentifier;\n base: Identifier;\n fields: Record<string, Field>;\n}\n\nexport interface ProfileTypeSchema {\n identifier: ProfileIdentifier;\n base: Identifier;\n description?: string;\n fields?: Record<string, Field>;\n constraints?: Record<string, ProfileConstraint>;\n extensions?: ProfileExtension[];\n validation?: ValidationRule[];\n dependencies?: Identifier[];\n metadata?: ProfileMetadata;\n nested?: NestedType[];\n}\n\nexport interface ProfileConstraint {\n min?: number;\n max?: string;\n mustSupport?: boolean;\n fixedValue?: any;\n patternValue?: any;\n binding?: {\n strength: \"required\" | \"extensible\" | \"preferred\" | \"example\";\n valueSet: string;\n };\n types?: Array<{\n code: string;\n profile?: string[];\n targetProfile?: string[];\n }>;\n slicing?: {\n discriminator: any[];\n rules: string;\n ordered?: boolean;\n };\n}\n\nexport interface ProfileExtension {\n path: string;\n profile: string | string[];\n min?: number;\n max?: string;\n mustSupport?: boolean;\n}\n\nexport interface ValidationRule {\n path: string;\n key: string;\n severity: \"error\" | \"warning\" | \"information\";\n human: string;\n expression?: string;\n}\n\nexport interface ProfileMetadata {\n publisher?: string;\n contact?: any[];\n copyright?: string;\n purpose?: string;\n experimental?: boolean;\n date?: string;\n jurisdiction?: any[];\n package?: string;\n}\n\nexport interface RegularTypeSchema {\n // TODO: restrict to ResourceIdentifier | ComplexTypeIdentifier | LogicalIdentifier\n identifier: Identifier;\n base?: Identifier;\n description?: string;\n fields?: { [k: string]: Field };\n nested?: NestedType[];\n dependencies?: Identifier[];\n}\n\nexport interface RegularField {\n type: Identifier;\n reference?: Identifier[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldDeclaration {\n choices: string[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldInstance {\n choiceOf: string;\n type: Identifier;\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n reference?: Identifier[];\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport type Concept = {\n code: string;\n display?: string;\n system?: string;\n};\n\nexport interface ValueSetTypeSchema {\n identifier: ValueSetIdentifier;\n description?: string;\n concept?: Concept[];\n compose?: ValueSetCompose;\n}\n\nexport interface BindingTypeSchema {\n identifier: BindingIdentifier;\n description?: string;\n type?: Identifier;\n strength?: string;\n enum?: string[];\n valueset?: ValueSetIdentifier;\n dependencies?: Identifier[];\n}\n\nexport type Field = RegularField | ChoiceFieldDeclaration | ChoiceFieldInstance;\n\nexport const isNotChoiceDeclarationField = (field: Field | undefined): field is RegularField | ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices === undefined;\n};\n\nexport const isChoiceDeclarationField = (field: Field | undefined): field is ChoiceFieldDeclaration => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices !== undefined;\n};\n\nexport type TypeschemaParserOptions = {\n format?: \"auto\" | \"ndjson\" | \"json\";\n validate?: boolean;\n strict?: boolean;\n};\n\n///////////////////////////////////////////////////////////\n// ValueSet\n///////////////////////////////////////////////////////////\n\nexport const isValueSet = (res: any): res is ValueSet => {\n return res?.resourceType === \"ValueSet\";\n};\n\nexport type ValueSet = {\n resourceType: \"ValueSet\";\n package_meta?: PackageMeta;\n id: string;\n name?: string;\n url?: string;\n description?: string;\n compose?: ValueSetCompose;\n expansion?: {\n contains: Concept[];\n };\n experimental?: boolean;\n immutable?: boolean;\n extension?: any[];\n status?: string;\n identifier?: any[];\n title?: string;\n publisher?: string;\n version?: string;\n meta?: any;\n date?: string;\n contact?: any;\n};\n\ntype ValueSetCompose = {\n include: {\n concept?: Concept[];\n system?: string;\n filter?: unknown[];\n }[];\n};\n\nexport const isCodeSystem = (res: any): res is CodeSystem => {\n return res?.resourceType === \"CodeSystem\";\n};\n\nexport type CodeSystem = {\n resourceType: \"CodeSystem\";\n url: CanonicalUrl;\n concept: CodeSystemConcept[];\n};\n\nexport type CodeSystemConcept = {\n concept: CodeSystemConcept[];\n code: string;\n display: string;\n};\n\nexport type RichValueSet = Omit<ValueSet, \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n};\n\nexport const enrichValueSet = (vs: ValueSet, packageMeta: PackageMeta): RichValueSet => {\n if (!vs.url) throw new Error(\"ValueSet must have a URL\");\n if (!vs.name) throw new Error(\"ValueSet must have a name\");\n return {\n ...vs,\n package_meta: vs.package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n\nexport interface TypeschemaGeneratorOptions {\n verbose?: boolean;\n logger?: import(\"../utils/codegen-logger\").CodegenLogger;\n treeshake?: string[];\n manager?: ReturnType<typeof CanonicalManager> | null;\n}\n","import { camelCase, uppercaseFirstLetter } from \"../utils.ts\";\n\nconst ops: Record<string, string> = {\n \"!\": \"Not\",\n \"<=\": \"LessOrEqual\",\n \">=\": \"GreaterOrEqual\",\n \"<\": \"Less\",\n \">\": \"Greater\",\n \"=\": \"Equal\",\n \"-\": \"Dash\",\n \"+\": \"Plus\",\n \"*\": \"Asterisk\",\n \"/\": \"Slash\",\n \"%\": \"Percent\",\n \"&\": \"And\",\n \"|\": \"Or\",\n \"^\": \"Xor\",\n \"~\": \"Tilde\",\n \"?\": \"Question\",\n \".\": \"Dot\",\n};\n\nexport function formatEnumDashHandle(entry: string): string {\n return entry\n .split(\"-\")\n .map((part) => uppercaseFirstLetter(part))\n .join(\"-\");\n}\n\nexport function formatEnumEntryOperation(entry: string): string {\n let res: string = entry;\n for (const op in ops) res = res.replaceAll(op, ops[op] ?? \"\");\n return res;\n}\n\nexport function formatEnumNumber(entry: string): string {\n const num = Number(entry[0]);\n if (Number.isInteger(num) && !Number.isNaN(num)) {\n return `_${entry}`;\n }\n return entry;\n}\n\nexport function formatEnumEntry(entry: string): string {\n let res: string = formatEnumDashHandle(entry);\n res = formatEnumNumber(res);\n res = formatEnumEntryOperation(res);\n res = uppercaseFirstLetter(res);\n return res;\n}\n\nexport function formatName(input: string): string {\n return uppercaseFirstLetter(camelCase(input.replaceAll(\".\", \"-\")));\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport type { PartialBy } from \"@root/api/builder.js\";\nimport { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport type { Field, Identifier, RegularField } from \"@typeschema/types\";\nimport { type ChoiceFieldInstance, isChoiceDeclarationField, type RegularTypeSchema } from \"@typeschema/types.ts\";\nimport type { TypeSchemaIndex } from \"@typeschema/utils.ts\";\nimport { formatEnumEntry, formatName } from \"./formatHelper.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n decimal: \"decimal\",\n integer: \"int\",\n unsignedInt: \"long\",\n positiveInt: \"long\",\n integer64: \"long\",\n base64Binary: \"string\",\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst RESERVED_TYPE_NAMES = [\"Reference\", \"Expression\"];\n\nconst getFieldModifiers = (field: Field) => {\n return field.required ? [\"required\"] : [];\n};\n\nconst formatClassName = (schema: RegularTypeSchema) => {\n const name = prefixReservedTypeName(getResourceName(schema.identifier));\n return uppercaseFirstLetter(name);\n};\n\nconst formatBaseClass = (schema: RegularTypeSchema) => {\n return schema.base ? `: ${schema.base.name}` : \"\";\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true): string | undefined => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) localName = localName.split(\"#\")[0];\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return formatName(localName);\n};\n\nconst getResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return formatName([resourceName, name].join(\"\"));\n }\n return formatName(id.name);\n};\n\nconst isReservedTypeName = (name: string): boolean => RESERVED_TYPE_NAMES.includes(name);\n\nconst prefixReservedTypeName = (name: string): string => (isReservedTypeName(name) ? `Resource${name}` : name);\n\nexport type CSharpGeneratorOptions = WriterOptions & {\n outputDir: string;\n staticSourceDir?: string;\n targetNamespace: string;\n};\n\ninterface EnumRegistry {\n [packageName: string]: {\n [enumName: string]: string[];\n };\n}\n\nexport class CSharp extends Writer<CSharpGeneratorOptions> {\n private readonly enums: EnumRegistry = {};\n\n constructor(options: PartialBy<CSharpGeneratorOptions, \"tabSize\" | \"commentLinePrefix\">) {\n super({\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n ...options,\n });\n }\n\n override async generate(typeSchemaIndex: TypeSchemaIndex): Promise<void> {\n const complexTypes = typeSchemaIndex.collectComplexTypes();\n const resources = typeSchemaIndex.collectResources();\n const packages = Array.from(new Set(resources.map((r) => formatName(r.identifier.package))));\n\n this.generateAllFiles(complexTypes, resources, packages);\n this.copyStaticFiles();\n }\n\n private generateAllFiles(\n complexTypes: RegularTypeSchema[],\n resources: RegularTypeSchema[],\n packages: string[],\n ): void {\n this.generateUsingFile(packages);\n this.generateBaseTypes(complexTypes);\n this.generateResources(resources);\n this.generateEnumFiles(packages);\n this.generateResourceDictionaries(resources, packages);\n this.generateHelperFile();\n }\n\n private generateType(schema: RegularTypeSchema, packageName: string): void {\n const className = formatClassName(schema);\n const baseClass = formatBaseClass(schema);\n\n this.curlyBlock([\"public\", \"class\", className, baseClass], () => {\n this.generateFields(schema, packageName);\n this.generateNestedTypes(schema, packageName);\n this.line();\n this.includeHelperMethods();\n });\n this.line();\n }\n\n private generateFields(schema: RegularTypeSchema, packageName: string): void {\n if (!schema.fields) return;\n\n const sortedFields = Object.entries(schema.fields).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n this.generateField(fieldName, field, packageName);\n }\n }\n\n private generateNestedTypes(schema: RegularTypeSchema, packageName: string): void {\n if (!(\"nested\" in schema) || !schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype, packageName);\n }\n }\n\n private generateField(fieldName: string, field: Field, packageName: string): void {\n try {\n if (isChoiceDeclarationField(field)) return;\n\n const fieldDeclaration = this.buildFieldDeclaration(fieldName, field, packageName);\n this.line(...fieldDeclaration);\n } catch (error) {\n this.logger()?.error(`Error processing field ${fieldName}: ${(error as Error).message}`);\n }\n }\n\n private buildFieldDeclaration(fieldName: string, field: Field, packageName: string): string[] {\n const fieldType = this.determineFieldType(fieldName, field, packageName);\n const modifiers = getFieldModifiers(field);\n const propertyName = pascalCase(fieldName);\n const accessors = \"{ get; set; }\";\n\n return [\"public\", ...modifiers, fieldType, propertyName, accessors].filter(Boolean);\n }\n\n private determineFieldType(fieldName: string, field: Field, packageName: string): string {\n let typeName = this.getBaseTypeName(field);\n\n if (\"enum\" in field && field.enum) {\n typeName = this.registerAndGetEnumType(fieldName, field, packageName);\n }\n\n typeName = prefixReservedTypeName(typeName);\n\n // questionable\n const baseNamespacePrefix = \"\";\n const nullable = field.required ? \"\" : \"?\";\n const arraySpecifier = field.array ? \"[]\" : \"\";\n\n return `${baseNamespacePrefix}${typeName}${arraySpecifier}${nullable}`;\n }\n\n private getBaseTypeName(field: Field): string {\n if (\"type\" in field) {\n let typeName = field.type.name.toString();\n\n if (field.type.kind === \"nested\") {\n typeName = getResourceName(field.type);\n } else if (field.type.kind === \"primitive-type\") typeName = PRIMITIVE_TYPE_MAP[field.type.name] ?? \"string\";\n\n return typeName;\n }\n return \"\";\n }\n\n private registerAndGetEnumType(\n fieldName: string,\n field: RegularField | ChoiceFieldInstance,\n packageName: string,\n ): string {\n const enumName = formatName(field.binding?.name ?? fieldName);\n const enumTypeName = `${enumName}Enum`;\n\n if (!this.enums[packageName]) this.enums[packageName] = {};\n if (field.enum) this.enums[packageName][enumTypeName] = field.enum;\n\n return enumTypeName;\n }\n\n private includeHelperMethods(): void {\n this.line(\"public override string ToString() => \");\n this.line(\" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);\");\n this.line();\n }\n\n private generateUsingFile(packages: string[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"Usings.cs\", () => {\n this.generateDisclaimer();\n this.generateGlobalUsings(packages);\n });\n });\n }\n\n private generateGlobalUsings(packages: string[]): void {\n const globalUsings = [\n \"CSharpSDK\",\n \"System.Text.Json\",\n \"System.Text.Json.Serialization\",\n this.opts.targetNamespace,\n ...packages.map((pkg) => `${this.opts.targetNamespace}.${pkg}`),\n ];\n\n for (const using of globalUsings) this.lineSM(\"global\", \"using\", using);\n }\n\n private generateBaseTypes(complexTypes: RegularTypeSchema[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"base.cs\", () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", this.opts.targetNamespace);\n\n for (const schema of complexTypes) {\n const packageName = formatName(schema.identifier.package);\n this.generateType(schema, packageName);\n }\n });\n });\n }\n\n private generateResources(resources: RegularTypeSchema[]): void {\n for (const schema of resources) this.generateResourceFile(schema);\n }\n\n private generateResourceFile(schema: RegularTypeSchema): void {\n const packageName = formatName(schema.identifier.package);\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${schema.identifier.name}.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", `${this.opts.targetNamespace}.${packageName}`);\n this.line();\n this.generateType(schema, packageName);\n });\n });\n }\n\n private generateEnumFiles(packages: string[]): void {\n for (const packageName of packages) {\n this.generatePackageEnums(packageName);\n }\n }\n\n private generatePackageEnums(packageName: string): void {\n const packageEnums = this.enums[packageName];\n if (!packageEnums || Object.keys(packageEnums).length === 0) return;\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${packageName}Enums.cs`, () => {\n this.generateDisclaimer();\n this.generateEnumFileContent(packageName, packageEnums);\n });\n });\n }\n\n private generateEnumFileContent(packageName: string, enums: Record<string, string[]>): void {\n this.lineSM(\"using\", \"System.ComponentModel\");\n this.line();\n this.lineSM(`namespace ${this.opts.targetNamespace}.${packageName}`);\n\n for (const [enumName, values] of Object.entries(enums)) {\n this.generateEnum(enumName, values);\n }\n }\n\n private generateEnum(enumName: string, values: string[]): void {\n this.curlyBlock([\"public\", \"enum\", enumName], () => {\n for (const value of values) {\n this.line(`[Description(\"${value}\")]`);\n this.line(`${formatEnumEntry(value)},`);\n }\n });\n this.line();\n }\n\n private generateResourceDictionaries(resources: RegularTypeSchema[], packages: string[]): void {\n this.cd(\"/\", async () => {\n for (const packageName of packages) {\n const packageResources = resources.filter((r) => formatName(r.identifier.package) === packageName);\n\n if (packageResources.length === 0) return;\n\n this.cat(`${packageName}ResourceDictionary.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(`namespace ${this.opts.targetNamespace}`);\n this.generateResourceDictionaryClass(packageName, packageResources);\n });\n }\n });\n }\n\n private generateResourceDictionaryClass(packageName: string, resources: RegularTypeSchema[]): void {\n this.curlyBlock([\"public\", \"static\", \"class\", \"ResourceDictionary\"], () => {\n this.curlyBlock([\"public static readonly Dictionary<Type, string> Map = new()\"], () => {\n for (const schema of resources) {\n const typeName = schema.identifier.name;\n this.line(`{ typeof(${packageName}.${typeName}), \"${typeName}\" },`);\n }\n });\n this.lineSM();\n });\n }\n\n private copyStaticFiles(): void {\n if (!this.opts.staticSourceDir) return;\n const sourcePath = Path.resolve(this.opts.staticSourceDir);\n fs.cpSync(sourcePath, this.opts.outputDir, { recursive: true });\n }\n\n private generateHelperFile(): void {\n const sourceFile = \"src/api/writer-generator/csharp/Helper.cs\";\n const destFile = Path.join(this.opts.outputDir, \"Helper.cs\");\n fs.copyFileSync(sourceFile, destFile);\n }\n}\n","import { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport * as fhirschema from \"@atomic-ehr/fhirschema\";\nimport {\n type FHIRSchema,\n type FHIRSchemaElement,\n isStructureDefinition,\n type StructureDefinition,\n} from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type {\n CanonicalUrl,\n CodeSystem,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n ValueSet,\n} from \"@typeschema/types\";\nimport {\n enrichFHIRSchema,\n enrichValueSet,\n isCodeSystem,\n isValueSet,\n packageMetaToFhir,\n packageMetaToNpm,\n} from \"@typeschema/types\";\n\nexport type Register = {\n testAppendFs(fs: FHIRSchema): void;\n ensureSpecializationCanonicalUrl(name: string | Name | CanonicalUrl): CanonicalUrl;\n resolveSd(pkg: PackageMeta, canonicalUrl: CanonicalUrl): StructureDefinition | undefined;\n resolveFs(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema | undefined;\n resolveFsGenealogy(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n resolveFsSpecializations(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n allFs(): RichFHIRSchema[];\n allVs(): RichValueSet[];\n resolveVs(_pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichValueSet | undefined;\n resolveAny(canonicalUrl: CanonicalUrl): any | undefined;\n resolveElementSnapshot(fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement;\n getAllElementKeys(elems: Record<string, FHIRSchemaElement>): string[];\n resolver: PackageAwareResolver;\n} & ReturnType<typeof CanonicalManager>;\n\nconst readPackageDependencies = async (manager: ReturnType<typeof CanonicalManager>, packageMeta: PackageMeta) => {\n const packageJSON = (await manager.packageJson(packageMeta.name)) as any;\n const dependencies = packageJSON.dependencies;\n if (dependencies !== undefined) {\n return Object.entries(dependencies).map(([name, version]): PackageMeta => {\n return { name: name as string, version: version as string };\n });\n }\n return [];\n};\n\ntype PkgId = string;\ntype FocusedResource = StructureDefinition | ValueSet | CodeSystem;\n\ntype CanonicalResolution<T> = {\n deep: number;\n pkg: PackageMeta;\n pkgId: PkgId;\n resource: T;\n};\n\ntype PackageIndex = {\n pkg: PackageMeta;\n canonicalResolution: Record<CanonicalUrl, CanonicalResolution<FocusedResource>[]>;\n fhirSchemas: Record<CanonicalUrl, RichFHIRSchema>;\n valueSets: Record<CanonicalUrl, RichValueSet>;\n};\n\ntype PackageAwareResolver = Record<PkgId, PackageIndex>;\n\nconst mkEmptyPkgIndex = (pkg: PackageMeta): PackageIndex => {\n return {\n pkg,\n canonicalResolution: {},\n fhirSchemas: {},\n valueSets: {},\n };\n};\n\nconst mkPackageAwareResolver = async (\n manager: ReturnType<typeof CanonicalManager>,\n pkg: PackageMeta,\n deep: number,\n acc: PackageAwareResolver,\n logger?: CodegenLogger,\n): Promise<PackageIndex> => {\n const pkgId = packageMetaToFhir(pkg);\n logger?.info(`${\" \".repeat(deep * 2)}+ ${pkgId}`);\n if (acc[pkgId]) return acc[pkgId];\n\n const index = mkEmptyPkgIndex(pkg);\n for (const resource of await manager.search({ package: pkg })) {\n const rawUrl = resource.url;\n if (!rawUrl) continue;\n if (!(isStructureDefinition(resource) || isValueSet(resource) || isCodeSystem(resource))) continue;\n const url = rawUrl as CanonicalUrl;\n if (index.canonicalResolution[url]) logger?.dry_warn(`Duplicate canonical URL: ${url} at ${pkgId}.`);\n index.canonicalResolution[url] = [{ deep, pkg: pkg, pkgId, resource: resource as FocusedResource }];\n }\n\n const deps = await readPackageDependencies(manager, pkg);\n for (const depPkg of deps) {\n const { canonicalResolution } = await mkPackageAwareResolver(manager, depPkg, deep + 1, acc, logger);\n for (const [surl, resolutions] of Object.entries(canonicalResolution)) {\n const url = surl as CanonicalUrl;\n index.canonicalResolution[url] = [...(index.canonicalResolution[url] || []), ...resolutions];\n }\n }\n for (const resolutionOptions of Object.values(index.canonicalResolution)) {\n resolutionOptions.sort((a, b) => a.deep - b.deep);\n }\n\n acc[pkgId] = index;\n return index;\n};\n\nconst packageAgnosticResolveCanonical = (\n resolver: PackageAwareResolver,\n url: CanonicalUrl,\n _logger?: CodegenLogger,\n) => {\n const options = Object.values(resolver).flatMap((pkg) => pkg.canonicalResolution[url]);\n if (!options) throw new Error(`No canonical resolution found for ${url} in any package`);\n // if (options.length > 1)\n // logger?.dry_warn(\n // `Multiple canonical resolutions found for ${url} in: ${options\n // .map((e) => {\n // return `\\n ${JSON.stringify({ ...e, resource: undefined, pkg: undefined })}`;\n // })\n // .join(\"\")}`,\n // );\n return options[0]?.resource;\n};\n\nexport type RegisterConfig = {\n logger?: CodegenLogger;\n // FIXME: remove fallback\n fallbackPackageForNameResolution?: PackageMeta;\n focusedPackages?: PackageMeta[];\n};\n\nexport const registerFromManager = async (\n manager: ReturnType<typeof CanonicalManager>,\n { logger, fallbackPackageForNameResolution, focusedPackages }: RegisterConfig,\n): Promise<Register> => {\n const packages = focusedPackages ?? (await manager.packages());\n const resolver: PackageAwareResolver = {};\n for (const pkg of packages) {\n await mkPackageAwareResolver(manager, pkg, 0, resolver, logger);\n }\n\n for (const { pkg, canonicalResolution } of Object.values(resolver)) {\n const pkgId = packageMetaToFhir(pkg);\n if (!resolver[pkgId]) throw new Error(`Package ${pkgId} not found`);\n let counter = 0;\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' begins...`);\n for (const [_url, options] of Object.entries(canonicalResolution)) {\n const resolition = options[0];\n if (!resolition) throw new Error(`Resource not found`);\n const resource = resolition.resource;\n const resourcePkg = resolition.pkg;\n if (isStructureDefinition(resource)) {\n const rfs = enrichFHIRSchema(\n fhirschema.translate(resource as StructureDefinition) as FHIRSchema,\n resourcePkg,\n );\n counter++;\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n }\n if (isValueSet(resource)) {\n const rvs = enrichValueSet(resource, resourcePkg);\n resolver[pkgId].valueSets[rvs.url] = rvs;\n }\n }\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' completed: ${counter} successful`);\n }\n\n const resolveFs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n return (\n resolver[packageMetaToFhir(pkg)]?.fhirSchemas[canonicalUrl] ||\n (fallbackPackageForNameResolution &&\n resolver[packageMetaToFhir(fallbackPackageForNameResolution)]?.fhirSchemas[canonicalUrl])\n );\n };\n\n const resolveVs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n return (\n resolver[packageMetaToFhir(pkg)]?.valueSets[canonicalUrl] ||\n (fallbackPackageForNameResolution &&\n resolver[packageMetaToFhir(fallbackPackageForNameResolution)]?.valueSets[canonicalUrl])\n );\n };\n\n const ensureSpecializationCanonicalUrl = (name: string | Name | CanonicalUrl) =>\n (name.match(/^[a-zA-Z0-9]+$/) && (`http://hl7.org/fhir/StructureDefinition/${name}` as CanonicalUrl)) ||\n (name as CanonicalUrl);\n\n const resolveFsGenealogy = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n let fs = resolveFs(pkg, canonicalUrl);\n if (fs === undefined) throw new Error(`Failed to resolve FHIR Schema: '${canonicalUrl}'`);\n const genealogy = [fs];\n while (fs?.base) {\n const pkg = fs.package_meta;\n const baseUrl = ensureSpecializationCanonicalUrl(fs.base);\n fs = resolveFs(pkg, baseUrl);\n if (fs === undefined)\n throw new Error(\n `Failed to resolve FHIR Schema base for '${canonicalUrl}'. Problem: '${baseUrl}' from '${packageMetaToFhir(pkg)}'`,\n );\n genealogy.push(fs);\n }\n return genealogy;\n };\n\n const resolveFsSpecializations = (pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[] => {\n return resolveFsGenealogy(pkg, canonicalUrl).filter((fs) => fs.derivation === \"specialization\");\n };\n\n const resolveElementSnapshot = (fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement => {\n const geneology = resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGeneology = resolveFsElementGenealogy(geneology, path);\n const elemSnapshot = fsElementSnapshot(elemGeneology);\n return elemSnapshot;\n };\n\n const getAllElementKeys = (elems: Record<string, FHIRSchemaElement>): string[] => {\n const keys: Set<string> = new Set();\n for (const [key, elem] of Object.entries(elems)) {\n keys.add(key);\n for (const choiceKey of elem?.choices || []) {\n if (!elems[choiceKey]) {\n keys.add(choiceKey);\n }\n }\n }\n return Array.from(keys);\n };\n\n return {\n ...manager,\n testAppendFs(fs: FHIRSchema) {\n const rfs = enrichFHIRSchema(fs);\n const pkgId = packageMetaToFhir(rfs.package_meta);\n if (!resolver[pkgId]) resolver[pkgId] = mkEmptyPkgIndex(rfs.package_meta);\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n },\n resolveFs,\n resolveFsGenealogy: resolveFsGenealogy,\n resolveFsSpecializations: resolveFsSpecializations,\n ensureSpecializationCanonicalUrl,\n resolveSd: (_pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const res = packageAgnosticResolveCanonical(resolver, canonicalUrl, logger);\n if (isStructureDefinition(res)) return res as StructureDefinition;\n return undefined;\n },\n allFs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.fhirSchemas)),\n allVs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.valueSets)),\n resolveVs,\n resolveAny: (canonicalUrl: CanonicalUrl) => packageAgnosticResolveCanonical(resolver, canonicalUrl, logger),\n resolveElementSnapshot,\n getAllElementKeys,\n resolver,\n };\n};\n\nexport const registerFromPackageMetas = async (\n packageMetas: PackageMeta[],\n conf: RegisterConfig,\n): Promise<Register> => {\n const packageNames = packageMetas.map(packageMetaToNpm);\n conf?.logger?.step(`Loading FHIR packages: ${packageNames.join(\", \")}`);\n const manager = CanonicalManager({\n packages: packageNames,\n workingDir: \"tmp/fhir\",\n });\n await manager.init();\n return await registerFromManager(manager, {\n ...conf,\n focusedPackages: packageMetas,\n });\n};\n\nexport const resolveFsElementGenealogy = (genealogy: RichFHIRSchema[], path: string[]): FHIRSchemaElement[] => {\n const [top, ...rest] = path;\n if (top === undefined) return [];\n return genealogy\n .map((fs) => {\n if (!fs.elements) return undefined;\n let elem = fs.elements?.[top];\n for (const k of rest) {\n elem = elem?.elements?.[k];\n }\n return elem;\n })\n .filter((elem) => elem !== undefined);\n};\n\nexport function fsElementSnapshot(genealogy: FHIRSchemaElement[]): FHIRSchemaElement {\n const revGenealogy = genealogy.reverse();\n const snapshot = Object.assign({}, ...revGenealogy);\n // NOTE: to avoid regeneration nested types\n snapshot.elements = undefined;\n return snapshot;\n}\n","/**\n * Identifier Building Utilities\n *\n * Functions for creating TypeSchema identifiers from FHIRSchema entities\n */\n\nimport type {\n BindingIdentifier,\n CanonicalUrl,\n Identifier,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n ValueSetIdentifier,\n} from \"@typeschema/types\";\nimport type { Register } from \"../register\";\n\nexport function dropVersionFromUrl(url: CanonicalUrl): CanonicalUrl {\n const baseUrl = url.split(\"|\")[0];\n return baseUrl ? (baseUrl as CanonicalUrl) : url;\n}\n\nfunction getVersionFromUrl(url: CanonicalUrl): string | undefined {\n const version = url.split(\"|\")[1];\n return version;\n}\n\nfunction determineKind(fhirSchema: RichFHIRSchema): Identifier[\"kind\"] {\n if (fhirSchema.derivation === \"constraint\") return \"profile\";\n if (fhirSchema.kind === \"primitive-type\") return \"primitive-type\";\n if (fhirSchema.kind === \"complex-type\") return \"complex-type\";\n if (fhirSchema.kind === \"resource\") return \"resource\";\n if (fhirSchema.kind === \"logical\") return \"logical\";\n return \"resource\";\n}\n\nexport function mkIdentifier(fhirSchema: RichFHIRSchema): Identifier {\n return {\n kind: determineKind(fhirSchema),\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: fhirSchema.name,\n url: fhirSchema.url,\n };\n}\n\nconst getValueSetName = (url: CanonicalUrl): Name => {\n const urlParts = url.split(\"/\");\n const lastSegment = urlParts[urlParts.length - 1];\n\n if (lastSegment && lastSegment.length > 0) {\n return lastSegment\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\") as Name;\n }\n return url as string as Name;\n};\n\nexport function mkValueSetIdentifierByUrl(\n register: Register,\n pkg: PackageMeta,\n fullValueSetUrl: CanonicalUrl,\n): ValueSetIdentifier {\n const valueSetUrl = dropVersionFromUrl(fullValueSetUrl);\n const valueSetNameFallback = getValueSetName(valueSetUrl);\n const valuesSetFallback: RichValueSet = {\n resourceType: \"ValueSet\",\n package_meta: {\n name: \"missing_valuesets\",\n version: getVersionFromUrl(valueSetUrl) || \"0.0.0\",\n },\n name: valueSetNameFallback,\n id: fullValueSetUrl,\n url: valueSetUrl,\n };\n const valueSet: RichValueSet = register.resolveVs(pkg, valueSetUrl) || valuesSetFallback;\n // NOTE: ignore valueSet.name due to human name\n const valueSetName: Name =\n valueSet?.id && !/^[a-zA-Z0-9_-]{20,}$/.test(valueSet.id) ? (valueSet.id as Name) : valueSetNameFallback;\n\n return {\n kind: \"value-set\",\n package: valueSet.package_meta.name,\n version: valueSet.package_meta.version,\n name: valueSetName,\n url: valueSetUrl,\n };\n}\n\nexport function mkBindingIdentifier(\n fhirSchema: RichFHIRSchema,\n path: string[],\n bindingName?: string,\n): BindingIdentifier {\n const pathStr = path.join(\".\");\n // NOTE: if SD specify `bindingName`, the definition should be shared between all\n // packages. So we put it in the dedicated shared package.\n // TODO: provide setting for `shared` package name.\n const [pkg, name, url] = bindingName\n ? [{ name: \"shared\", version: \"1.0.0\" }, bindingName, `urn:fhir:binding:${bindingName}`]\n : [fhirSchema.package_meta, `${fhirSchema.name}.${pathStr}_binding`, `${fhirSchema.url}#${pathStr}_binding`];\n return {\n kind: \"binding\",\n package: pkg.name,\n version: pkg.version,\n name: name as Name,\n url: url as CanonicalUrl,\n };\n}\n","/**\n * Nested Types (BackboneElement) Handling\n *\n * Functions for extracting and transforming nested types from FHIRSchema\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { CanonicalUrl, Field, Identifier, Name, NestedIdentifier, NestedType, RichFHIRSchema } from \"../types\";\nimport { isNestedElement, mkField, mkNestedField } from \"./field-builder\";\n\nexport function mkNestedIdentifier(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n logger?: CodegenLogger,\n): NestedIdentifier {\n // NOTE: profiles should no redefine types, they should reuse already defined in previous specializations\n const nestedTypeOrigins = {} as Record<Name, CanonicalUrl>;\n if (fhirSchema.derivation === \"constraint\") {\n const specializations = register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url);\n const nestedTypeGenealogy = specializations\n .map((fs) => mkNestedTypes(register, fs, logger))\n .filter((e) => e !== undefined)\n .flat();\n for (const nt of nestedTypeGenealogy.reverse()) {\n nestedTypeOrigins[nt.identifier.name] = nt.identifier.url;\n }\n }\n const nestedName = path.join(\".\") as Name;\n const url = nestedTypeOrigins[nestedName] ?? (`${fhirSchema.url}#${nestedName}` as CanonicalUrl);\n return {\n kind: \"nested\",\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: nestedName,\n url: url,\n };\n}\n\nfunction collectNestedElements(\n fhirSchema: FHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n): [string[], FHIRSchemaElement][] {\n const nested: [string[], FHIRSchemaElement][] = [];\n\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n\n if (isNestedElement(element)) {\n nested.push([path, element]);\n }\n\n if (element.elements) {\n nested.push(...collectNestedElements(fhirSchema, path, element.elements));\n }\n }\n\n return nested;\n}\n\nfunction transformNestedElements(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n logger?: CodegenLogger,\n): Record<string, Field> {\n const fields: Record<string, Field> = {};\n\n for (const [key, _element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (isNestedElement(elemSnapshot)) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot, logger);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nexport function mkNestedTypes(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): NestedType[] | undefined {\n if (!fhirSchema.elements) return undefined;\n\n const nested = collectNestedElements(fhirSchema, [], fhirSchema.elements).filter(\n ([_, element]) => element.elements && Object.keys(element.elements).length > 0,\n );\n\n const nestedTypes = [] as NestedType[];\n for (const [path, element] of nested) {\n const identifier = mkNestedIdentifier(register, fhirSchema, path, logger);\n\n let baseName: Name;\n if (element.type === \"BackboneElement\" || !element.type) {\n baseName = \"BackboneElement\" as Name;\n } else {\n baseName = element.type as Name;\n }\n const baseUrl = register.ensureSpecializationCanonicalUrl(baseName);\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n if (!baseFs) throw new Error(`Could not resolve base type ${baseName}`);\n const base: Identifier = {\n kind: \"complex-type\",\n package: baseFs.package_meta.name,\n version: baseFs.package_meta.version,\n name: baseName,\n url: baseUrl,\n };\n\n const fields = transformNestedElements(register, fhirSchema, path, element.elements ?? {}, logger);\n\n const nestedType: NestedType = {\n identifier,\n base,\n fields,\n };\n nestedTypes.push(nestedType);\n }\n\n nestedTypes.sort((a, b) => a.identifier.url.localeCompare(b.identifier.url));\n\n return nestedTypes.length === 0 ? undefined : nestedTypes;\n}\n\nexport function extractNestedDependencies(nestedTypes: NestedType[]): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const nested of nestedTypes) {\n if (nested.base) {\n deps.push(nested.base);\n }\n\n for (const field of Object.values(nested.fields || {})) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n }\n return deps;\n}\n","/**\n * Field Building Utilities\n *\n * Functions for transforming FHIRSchema elements into TypeSchema fields\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { packageMetaToFhir } from \"@typeschema/types\";\nimport type { BindingIdentifier, Field, Identifier, Name, RegularField, RichFHIRSchema } from \"../types\";\nimport { buildEnum } from \"./binding\";\nimport { mkBindingIdentifier, mkIdentifier } from \"./identifier\";\nimport { mkNestedIdentifier } from \"./nested-types\";\n\nfunction isRequired(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.required || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.required || [];\n });\n return new Set(requires).has(fieldName);\n}\n\nfunction isExcluded(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.excluded || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.excluded || [];\n });\n\n return new Set(requires).has(fieldName);\n}\n\nconst buildReferences = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n): Identifier[] | undefined => {\n if (!element.refers) return undefined;\n return element.refers.map((ref) => {\n const curl = register.ensureSpecializationCanonicalUrl(ref as Name);\n const fs = register.resolveFs(fhirSchema.package_meta, curl);\n if (!fs) throw new Error(`Failed to resolve fs for ${curl}`);\n return mkIdentifier(fs);\n });\n};\n\nexport function buildFieldType(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): Identifier | undefined {\n if (element.elementReference) {\n const refPath = element.elementReference\n .slice(1) // drop canonicalUrl\n .filter((_, i) => i % 2 === 1); // drop `elements` from path\n return mkNestedIdentifier(register, fhirSchema, refPath, logger);\n } else if (element.type) {\n const url = register.ensureSpecializationCanonicalUrl(element.type);\n const fieldFs = register.resolveFs(fhirSchema.package_meta, url);\n if (!fieldFs)\n throw new Error(\n `Could not resolve field type: '${element.type}' (from '${fhirSchema.url}' in '${packageMetaToFhir(fhirSchema.package_meta)}')`,\n );\n\n return mkIdentifier(fieldFs);\n } else if (element.choices) {\n return undefined;\n } else if (fhirSchema.derivation === \"constraint\") {\n return undefined; // FIXME: should be removed\n } else {\n logger?.error(\n `Can't recognize element type '${fhirSchema.url}' (${fhirSchema.derivation}) at '${path.join(\".\")}': ${JSON.stringify(element, undefined, 2)}`,\n );\n throw new Error(`Unrecognized element type`);\n }\n}\n\nexport const mkField = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): Field => {\n let binding: BindingIdentifier | undefined;\n let enumValues: string[] | undefined;\n if (element.binding) {\n binding = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);\n\n if (element.binding.strength === \"required\" && element.type === \"code\") {\n enumValues = buildEnum(register, fhirSchema, element, logger);\n }\n }\n\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n // TODO: should be an exception\n if (!fieldType)\n logger?.warn(`Field type not found for '${fhirSchema.url}#${path.join(\".\")}' (${fhirSchema.derivation})`);\n return {\n type: fieldType as Identifier,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n\n reference: buildReferences(register, fhirSchema, element),\n\n array: element.array || false,\n min: element.min,\n max: element.max,\n\n choices: element.choices,\n choiceOf: element.choiceOf,\n\n binding: binding,\n enum: enumValues,\n };\n};\n\nexport function isNestedElement(element: FHIRSchemaElement): boolean {\n const isBackbone = element.type === \"BackboneElement\";\n const isElement =\n element.type === \"Element\" && element.elements !== undefined && Object.keys(element.elements).length > 0;\n\n // TODO: Observation <- vitalsigns <- bodyweight\n // In Observation we have value[x] with choices\n // In bodyweight we have valueQuantity with additional constaraints on it's elements\n // So we need to build nested type from Quantity for here, but don't do that right now.\n const elementsWithoutType =\n element.type === undefined &&\n element.choiceOf === undefined &&\n element.elements !== undefined &&\n Object.keys(element.elements).length > 0;\n return isBackbone || isElement || elementsWithoutType;\n}\n\nexport function mkNestedField(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): RegularField {\n const nestedIdentifier = mkNestedIdentifier(register, fhirSchema, path, logger);\n return {\n type: nestedIdentifier,\n array: element.array || false,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n };\n}\n","/**\n * Binding and Enum Handling\n *\n * Functions for processing value set bindings and generating enums\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\n CodeSystem,\n CodeSystemConcept,\n Concept,\n Identifier,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { buildFieldType } from \"./field-builder\";\nimport { dropVersionFromUrl, mkBindingIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\n\nexport function extractValueSetConceptsByUrl(\n register: Register,\n pkg: PackageMeta,\n valueSetUrl: CanonicalUrl,\n logger?: CodegenLogger,\n): Concept[] | undefined {\n const cleanUrl = dropVersionFromUrl(valueSetUrl) || valueSetUrl;\n const valueSet = register.resolveVs(pkg, cleanUrl as CanonicalUrl);\n if (!valueSet) return undefined;\n return extractValueSetConcepts(register, valueSet, logger);\n}\n\nfunction extractValueSetConcepts(\n register: Register,\n valueSet: RichValueSet,\n _logger?: CodegenLogger,\n): Concept[] | undefined {\n if (valueSet.expansion?.contains) return valueSet.expansion.contains;\n\n const concepts = [] as Concept[];\n if (valueSet.compose?.include) {\n for (const include of valueSet.compose.include) {\n if (include.concept) {\n for (const concept of include.concept) {\n concepts.push({\n system: include.system,\n code: concept.code,\n display: concept.display,\n });\n }\n } else if (include.system && !include.filter) {\n try {\n const codeSystem: CodeSystem = register.resolveAny(include.system as CanonicalUrl);\n if (codeSystem?.concept) {\n const extractConcepts = (conceptList: CodeSystemConcept[], system: string) => {\n for (const concept of conceptList) {\n concepts.push({\n system,\n code: concept.code,\n display: concept.display,\n });\n if (concept.concept) {\n extractConcepts(concept.concept, system);\n }\n }\n };\n extractConcepts(codeSystem.concept, include.system);\n }\n } catch {\n // Ignore if we can't resolve the CodeSystem\n }\n }\n }\n }\n return concepts.length > 0 ? concepts : undefined;\n}\n\nconst MAX_ENUM_LENGTH = 100;\n\nexport function buildEnum(\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): string[] | undefined {\n if (!element.binding) return undefined;\n\n const strength = element.binding.strength;\n const valueSetUrl = element.binding.valueSet as CanonicalUrl;\n if (!valueSetUrl) return undefined;\n\n // Enhanced support for more binding strengths and types\n // Generate enum for:\n // 1. Required bindings (always)\n // 2. Extensible bindings on code types (for better type safety)\n // 3. Preferred bindings on code types (for common usage patterns)\n // 4. Extensible bindings on Coding types (broader coverage)\n const shouldGenerateEnum =\n strength === \"required\" ||\n (strength === \"extensible\" && (element.type === \"code\" || element.type === \"Coding\")) ||\n (strength === \"preferred\" && (element.type === \"code\" || element.type === \"Coding\"));\n\n if (!shouldGenerateEnum) return undefined;\n\n const concepts = extractValueSetConceptsByUrl(register, fhirSchema.package_meta, valueSetUrl);\n if (!concepts || concepts.length === 0) return undefined;\n\n const codes = concepts\n .map((c) => c.code)\n .filter((code) => code && typeof code === \"string\" && code.trim().length > 0);\n\n if (codes.length > MAX_ENUM_LENGTH) {\n logger?.dry_warn(\n `Value set ${valueSetUrl} has ${codes.length} which is more than ${MAX_ENUM_LENGTH} codes, which may cause issues with code generation.`,\n );\n return undefined;\n }\n return codes.length > 0 ? codes : undefined;\n}\n\nfunction generateBindingSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLogger,\n): BindingTypeSchema | undefined {\n if (!element.binding?.valueSet) return undefined;\n\n const identifier = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n const valueSetIdentifier = mkValueSetIdentifierByUrl(\n register,\n fhirSchema.package_meta,\n element.binding.valueSet as CanonicalUrl,\n );\n\n const dependencies: Identifier[] = [];\n if (fieldType) {\n dependencies.push(fieldType);\n }\n dependencies.push(valueSetIdentifier);\n\n const enumValues = buildEnum(register, fhirSchema, element, logger);\n\n return {\n identifier,\n type: fieldType,\n valueset: valueSetIdentifier,\n strength: element.binding.strength,\n enum: enumValues,\n dependencies,\n };\n}\n\nexport function collectBindingSchemas(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): BindingTypeSchema[] {\n const processedPaths = new Set<string>();\n if (!fhirSchema.elements) return [];\n\n const bindings: BindingTypeSchema[] = [];\n function collectBindings(elements: Record<string, FHIRSchemaElement>, parentPath: string[]) {\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const pathKey = path.join(\".\");\n\n if (processedPaths.has(pathKey)) continue;\n processedPaths.add(pathKey);\n\n if (element.binding) {\n const binding = generateBindingSchema(register, fhirSchema, path, element, logger);\n if (binding) {\n bindings.push(binding);\n }\n }\n\n if (element.elements) {\n collectBindings(element.elements, path);\n }\n }\n }\n collectBindings(fhirSchema.elements, []);\n\n bindings.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n\n const uniqueBindings: BindingTypeSchema[] = [];\n const seenUrls = new Set<string>();\n\n for (const binding of bindings) {\n if (!seenUrls.has(binding.identifier.url)) {\n seenUrls.add(binding.identifier.url);\n uniqueBindings.push(binding);\n }\n }\n\n return uniqueBindings;\n}\n","/**\n * Main FHIRSchema to TypeSchema Transformer\n *\n * Core transformation logic for converting FHIRSchema to TypeSchema format\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport {\n type Field,\n type Identifier,\n isNestedIdentifier,\n isProfileIdentifier,\n type NestedType,\n packageMetaToFhir,\n type RichFHIRSchema,\n type RichValueSet,\n type TypeSchema,\n type ValueSetTypeSchema,\n} from \"@typeschema/types\";\nimport { collectBindingSchemas, extractValueSetConceptsByUrl } from \"./binding\";\nimport { isNestedElement, mkField, mkNestedField } from \"./field-builder\";\nimport { mkIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\nimport { extractNestedDependencies, mkNestedTypes } from \"./nested-types\";\n\nexport function mkFields(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement> | undefined,\n logger?: CodegenLogger,\n): Record<string, Field> | undefined {\n if (!elements) return undefined;\n\n const fields: Record<string, Field> = {};\n for (const key of register.getAllElementKeys(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n if (isNestedElement(elemSnapshot)) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot, logger);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nfunction extractFieldDependencies(fields: Record<string, Field>): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const field of Object.values(fields)) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n\n return deps;\n}\n\n/**\n * Check if a FHIR schema represents an extension\n */\nfunction isExtensionSchema(fhirSchema: FHIRSchema, _identifier: Identifier): boolean {\n // Check if this is based on Extension\n if (fhirSchema.base === \"Extension\" || fhirSchema.base === \"http://hl7.org/fhir/StructureDefinition/Extension\") {\n return true;\n }\n\n // Check if the URL indicates this is an extension\n if (fhirSchema.url?.includes(\"/extension/\") || fhirSchema.url?.includes(\"-extension\")) {\n return true;\n }\n\n // Check if the name indicates this is an extension\n if (fhirSchema.name?.toLowerCase().includes(\"extension\")) {\n return true;\n }\n\n // Check if the type is Extension\n if (fhirSchema.type === \"Extension\") {\n return true;\n }\n\n return false;\n}\n\nexport async function transformValueSet(\n register: Register,\n valueSet: RichValueSet,\n logger?: CodegenLogger,\n): Promise<ValueSetTypeSchema> {\n if (!valueSet.url) throw new Error(\"ValueSet URL is required\");\n\n const identifier = mkValueSetIdentifierByUrl(register, valueSet.package_meta, valueSet.url);\n const concept = extractValueSetConceptsByUrl(register, valueSet.package_meta, valueSet.url, logger);\n return {\n identifier: identifier,\n description: valueSet.description,\n concept: concept,\n compose: !concept ? valueSet.compose : undefined,\n };\n}\n\nexport function extractDependencies(\n identifier: Identifier,\n base: Identifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedType[] | undefined,\n): Identifier[] | undefined {\n const deps = [];\n if (base) deps.push(base);\n if (fields) deps.push(...extractFieldDependencies(fields));\n if (nestedTypes) deps.push(...extractNestedDependencies(nestedTypes));\n\n const uniqDeps: Record<string, Identifier> = {};\n for (const dep of deps) {\n if (dep.url === identifier.url) continue;\n uniqDeps[dep.url] = dep;\n }\n\n const localNestedTypeUrls = new Set(nestedTypes?.map((nt) => nt.identifier.url));\n\n const result = Object.values(uniqDeps)\n .filter((e) => {\n if (isProfileIdentifier(identifier)) return true;\n if (!isNestedIdentifier(e)) return true;\n return !localNestedTypeUrls.has(e.url);\n })\n .sort((a, b) => a.url.localeCompare(b.url));\n\n return result.length > 0 ? result : undefined;\n}\n\nfunction transformFhirSchemaResource(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): TypeSchema[] {\n const identifier = mkIdentifier(fhirSchema);\n\n let base: Identifier | undefined;\n if (fhirSchema.base && fhirSchema.type !== \"Element\") {\n const baseFs = register.resolveFs(\n fhirSchema.package_meta,\n register.ensureSpecializationCanonicalUrl(fhirSchema.base),\n );\n if (!baseFs) {\n throw new Error(\n `Base resource not found '${fhirSchema.base}' for <${fhirSchema.url}> from ${packageMetaToFhir(fhirSchema.package_meta)}`,\n );\n }\n base = mkIdentifier(baseFs);\n }\n const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);\n const nested = mkNestedTypes(register, fhirSchema, logger);\n const dependencies = extractDependencies(identifier, base, fields, nested);\n\n const typeSchema: TypeSchema = {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies,\n };\n\n const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);\n\n return [typeSchema, ...bindingSchemas];\n}\n\nexport async function transformFhirSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): Promise<TypeSchema[]> {\n const schemas = transformFhirSchemaResource(register, fhirSchema, logger);\n if (isExtensionSchema(fhirSchema, mkIdentifier(fhirSchema))) {\n const schema = schemas[0];\n if (!schema) throw new Error(`Expected schema to be defined`);\n (schema as any).metadata = {\n isExtension: true, // Mark as extension for file organization\n };\n }\n return schemas;\n}\n","import * as afs from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport * as YAML from \"yaml\";\nimport { extractDependencies } from \"./core/transformer\";\nimport {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isBindingSchema,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type ProfileTypeSchema,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\n\n///////////////////////////////////////////////////////////\n// TypeSchema processing\n\nexport const groupByPackages = (typeSchemas: TypeSchema[]) => {\n const grouped = {} as Record<PackageName, TypeSchema[]>;\n for (const ts of typeSchemas) {\n const pkgName = ts.identifier.package;\n if (!grouped[pkgName]) grouped[pkgName] = [];\n grouped[pkgName].push(ts);\n }\n for (const [packageName, typeSchemas] of Object.entries(grouped)) {\n const dict: Record<string, TypeSchema> = {};\n for (const ts of typeSchemas) {\n dict[JSON.stringify(ts.identifier)] = ts;\n }\n const tmp = Object.values(dict);\n tmp.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n grouped[packageName] = tmp;\n }\n return grouped;\n};\n\nexport type TypeSchemaShakeRule = { ignoreFields?: string[] };\n\nexport type TreeShake = Record<string, Record<string, TypeSchemaShakeRule>>;\n\nexport const treeShakeTypeSchema = (\n schema: TypeSchema,\n rule: TypeSchemaShakeRule,\n _logger?: CodegenLogger,\n): TypeSchema => {\n schema = structuredClone(schema);\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n for (const fieldName of rule.ignoreFields ?? []) {\n if (schema.fields && !schema.fields[fieldName]) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n delete schema.fields[fieldName];\n }\n }\n\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n\n return schema;\n};\n\nexport const treeShake = (tsIndex: TypeSchemaIndex, treeShake: TreeShake, logger?: CodegenLogger): TypeSchemaIndex => {\n const focusedSchemas: TypeSchema[] = [];\n for (const [pkgId, requires] of Object.entries(treeShake)) {\n for (const [url, rule] of Object.entries(requires)) {\n const schema = tsIndex.resolveByUrl(pkgId, url as CanonicalUrl);\n if (!schema) throw new Error(`Schema not found for ${pkgId} ${url}`);\n const shaked = treeShakeTypeSchema(schema, rule);\n focusedSchemas.push(shaked);\n }\n }\n const collectDeps = (schemas: TypeSchema[], acc: Record<string, TypeSchema>): TypeSchema[] => {\n if (schemas.length === 0) return Object.values(acc);\n for (const schema of schemas) {\n acc[JSON.stringify(schema.identifier)] = schema;\n }\n\n const newSchemas: TypeSchema[] = [];\n\n for (const schema of schemas) {\n if (isSpecializationTypeSchema(schema)) {\n if (!schema.dependencies) continue;\n schema.dependencies.forEach((dep) => {\n const depSchema = tsIndex.resolve(dep);\n if (!depSchema) throw new Error(`Schema not found for ${dep}`);\n const id = JSON.stringify(depSchema.identifier);\n if (!acc[id]) newSchemas.push(depSchema);\n });\n if (schema.nested) {\n for (const nest of schema.nested) {\n if (isNestedIdentifier(nest.identifier)) continue;\n const id = JSON.stringify(nest.identifier);\n if (!acc[id]) newSchemas.push(nest);\n }\n }\n }\n }\n return collectDeps(newSchemas, acc);\n };\n\n const shaked = collectDeps(focusedSchemas, {});\n return mkTypeSchemaIndex(shaked, logger);\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Relations\n\ninterface TypeRelation {\n parent: Identifier;\n child: Identifier;\n}\n\nconst resourceRelatives = (schemas: TypeSchema[]): TypeRelation[] => {\n const regularSchemas = schemas.filter((e) => isResourceTypeSchema(e) || isLogicalTypeSchema(e));\n const directPairs: TypeRelation[] = [];\n\n for (const schema of regularSchemas) {\n if (schema.base) {\n directPairs.push({ parent: schema.base, child: schema.identifier });\n }\n }\n\n const allPairs: TypeRelation[] = [...directPairs];\n const findTransitiveRelatives = (parentRef: Identifier): Identifier[] => {\n const directChildren = directPairs\n .filter((pair) => pair.parent.name === parentRef.name)\n .map((pair) => pair.child);\n\n const transitiveChildren: Identifier[] = [];\n for (const child of directChildren) {\n transitiveChildren.push(...findTransitiveRelatives(child));\n }\n\n return [...directChildren, ...transitiveChildren];\n };\n\n for (const pair of directPairs) {\n const transitiveChildren = findTransitiveRelatives(pair.child);\n for (const transitiveChild of transitiveChildren) {\n if (\n !directPairs.some((dp) => dp.parent.name === pair.parent.name && dp.child.name === transitiveChild.name)\n ) {\n allPairs.push({ parent: pair.parent, child: transitiveChild });\n }\n }\n }\n\n return allPairs;\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Index\n\ntype PackageName = string;\nexport type TypeSchemaIndex = {\n _schemaIndex: Record<CanonicalUrl, Record<PackageName, TypeSchema>>;\n _relations: TypeRelation[];\n collectComplexTypes: () => RegularTypeSchema[];\n collectResources: () => RegularTypeSchema[];\n collectLogicalModels: () => RegularTypeSchema[];\n collectProfiles: () => ProfileTypeSchema[];\n resolve: (id: Identifier) => TypeSchema | undefined;\n resolveByUrl: (pkgName: PackageName, url: CanonicalUrl) => TypeSchema | undefined;\n resourceChildren: (id: Identifier) => Identifier[];\n tryHierarchy: (schema: TypeSchema) => TypeSchema[] | undefined;\n hierarchy: (schema: TypeSchema) => TypeSchema[];\n findLastSpecialization: (schema: TypeSchema) => TypeSchema;\n findLastSpecializationByIdentifier: (id: Identifier) => Identifier;\n flatProfile: (schema: ProfileTypeSchema) => ProfileTypeSchema;\n isWithMetaField: (profile: ProfileTypeSchema) => boolean;\n exportTree: (filename: string) => Promise<void>;\n};\n\nexport const mkTypeSchemaIndex = (schemas: TypeSchema[], logger?: CodegenLogger): TypeSchemaIndex => {\n const index = {} as Record<CanonicalUrl, Record<PackageName, TypeSchema>>;\n const append = (schema: TypeSchema) => {\n const url = schema.identifier.url;\n const pkg = schema.identifier.package;\n if (!index[url]) index[url] = {};\n\n if (index[url][schema.identifier.package] && pkg !== \"shared\") {\n const r1 = JSON.stringify(schema.identifier, undefined, 2);\n const r2 = JSON.stringify(index[url][pkg]?.identifier, undefined, 2);\n if (r1 !== r2) throw new Error(`Duplicate schema: ${r1} and ${r2}`);\n return;\n }\n index[url][pkg] = schema;\n };\n for (const schema of schemas) {\n append(schema);\n }\n const relations = resourceRelatives(schemas);\n\n const resolve = (id: Identifier) => index[id.url]?.[id.package];\n const resolveByUrl = (pkgName: PackageName, url: CanonicalUrl) => index[url]?.[pkgName];\n\n const resourceChildren = (id: Identifier): Identifier[] => {\n return relations.filter((relative) => relative.parent.name === id.name).map((relative) => relative.child);\n };\n\n const tryHierarchy = (schema: TypeSchema): TypeSchema[] | undefined => {\n const res: TypeSchema[] = [];\n let cur: TypeSchema | undefined = schema;\n while (cur) {\n res.push(cur);\n const base = (cur as RegularTypeSchema).base;\n if (base === undefined) break;\n const resolved = resolve(base);\n if (!resolved) {\n logger?.warn(\n `Failed to resolve base type: ${res.map((e) => `${e.identifier.url} (${e.identifier.kind})`).join(\", \")}`,\n );\n return undefined;\n }\n cur = resolved;\n }\n return res;\n };\n\n const hierarchy = (schema: TypeSchema): TypeSchema[] => {\n const genealogy = tryHierarchy(schema);\n if (genealogy === undefined) {\n throw new Error(`Failed to resolve base type: ${schema.identifier.url} (${schema.identifier.kind})`);\n }\n return genealogy;\n };\n\n const findLastSpecialization = (schema: TypeSchema): TypeSchema => {\n const nonConstraintSchema = hierarchy(schema).find((s) => s.identifier.kind !== \"profile\");\n if (!nonConstraintSchema) {\n throw new Error(`No non-constraint schema found in hierarchy for: ${schema.identifier.name}`);\n }\n return nonConstraintSchema;\n };\n\n const findLastSpecializationByIdentifier = (id: Identifier): Identifier => {\n const schema = resolve(id);\n if (!schema) return id;\n return findLastSpecialization(schema).identifier;\n };\n\n const flatProfile = (schema: ProfileTypeSchema): ProfileTypeSchema => {\n const hierarchySchemas = hierarchy(schema);\n const constraintSchemas = hierarchySchemas.filter((s) => s.identifier.kind === \"profile\");\n const nonConstraintSchema = hierarchySchemas.find((s) => s.identifier.kind !== \"profile\");\n\n if (!nonConstraintSchema)\n throw new Error(`No non-constraint schema found in hierarchy for ${schema.identifier.name}`);\n\n const mergedFields = {} as Record<string, Field>;\n for (const anySchema of constraintSchemas.slice().reverse()) {\n const schema = anySchema as RegularTypeSchema;\n if (!schema.fields) continue;\n\n for (const [fieldName, fieldConstraints] of Object.entries(schema.fields)) {\n if (mergedFields[fieldName]) {\n mergedFields[fieldName] = {\n ...mergedFields[fieldName],\n ...fieldConstraints,\n };\n } else {\n mergedFields[fieldName] = { ...fieldConstraints };\n }\n }\n }\n\n const deps: { [url: string]: Identifier } = {};\n for (const e of constraintSchemas.flatMap((e) => (e as RegularTypeSchema).dependencies ?? [])) {\n deps[e.url] = e;\n }\n\n const dependencies = Object.values(deps);\n\n return {\n ...schema,\n base: nonConstraintSchema.identifier,\n fields: mergedFields,\n dependencies: dependencies,\n };\n };\n\n const isWithMetaField = (profile: ProfileTypeSchema): boolean => {\n const genealogy = tryHierarchy(profile);\n if (!genealogy) return false;\n return genealogy.filter(isSpecializationTypeSchema).some((schema) => {\n return schema.fields?.meta !== undefined;\n });\n };\n\n const exportTree = async (filename: string) => {\n const tree: Record<PackageName, Record<Identifier[\"kind\"], any>> = {};\n for (const [pkgId, shemas] of Object.entries(groupByPackages(schemas))) {\n tree[pkgId] = {\n \"primitive-type\": {},\n \"complex-type\": {},\n resource: {},\n \"value-set\": {},\n nested: {},\n binding: {},\n profile: {},\n logical: {},\n };\n for (const schema of shemas) {\n tree[pkgId][schema.identifier.kind][schema.identifier.url] = {};\n }\n }\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n await afs.mkdir(Path.dirname(filename), { recursive: true });\n await afs.writeFile(filename, raw);\n };\n\n return {\n _schemaIndex: index,\n _relations: relations,\n collectComplexTypes: () => schemas.filter(isComplexTypeTypeSchema),\n collectResources: () => schemas.filter(isResourceTypeSchema),\n collectLogicalModels: () => schemas.filter(isLogicalTypeSchema),\n collectProfiles: () => schemas.filter(isProfileTypeSchema),\n resolve,\n resolveByUrl,\n resourceChildren,\n tryHierarchy,\n hierarchy,\n findLastSpecialization,\n findLastSpecializationByIdentifier,\n flatProfile,\n isWithMetaField,\n exportTree,\n };\n};\n","/**\n * CodeGen Logger\n *\n * Clean, colorful logging designed for code generation tools\n */\n\nimport pc from \"picocolors\";\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4,\n}\n\nexport interface LogOptions {\n prefix?: string;\n timestamp?: boolean;\n verbose?: boolean;\n suppressLoggingLevel?: LogLevel[] | \"all\";\n}\n\n/**\n * Simple code generation logger with pretty colors and clean formatting\n */\nexport class CodegenLogger {\n private options: LogOptions;\n private dryWarnSet: Set<string> = new Set();\n\n constructor(options: LogOptions = {}) {\n this.options = {\n timestamp: false,\n verbose: false,\n ...options,\n };\n }\n\n private static consoleLevelsMap: Record<LogLevel, (...data: any[]) => void> = {\n [LogLevel.INFO]: console.log,\n [LogLevel.WARN]: console.warn,\n [LogLevel.ERROR]: console.error,\n [LogLevel.DEBUG]: console.log,\n [LogLevel.SILENT]: () => {},\n };\n\n private formatMessage(level: string, message: string, color: (str: string) => string): string {\n const timestamp = this.options.timestamp ? `${pc.gray(new Date().toLocaleTimeString())} ` : \"\";\n const prefix = this.options.prefix ? `${pc.cyan(`[${this.options.prefix}]`)} ` : \"\";\n return `${timestamp}${color(level)} ${prefix}${message}`;\n }\n\n private isSuppressed(level: LogLevel): boolean {\n return (\n this.options.suppressLoggingLevel === \"all\" || this.options.suppressLoggingLevel?.includes(level) || false\n );\n }\n\n private tryWriteToConsole(level: LogLevel, formattedMessage: string): void {\n if (this.isSuppressed(level)) return;\n const logFn = CodegenLogger.consoleLevelsMap[level] || console.log;\n logFn(formattedMessage);\n }\n\n /**\n * Success message with checkmark\n */\n success(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"\", message, pc.green));\n }\n\n /**\n * Error message with X mark\n */\n error(message: string, error?: Error): void {\n if (this.isSuppressed(LogLevel.ERROR)) return;\n console.error(this.formatMessage(\"X\", message, pc.red));\n if (error && this.options.verbose) {\n console.error(pc.red(` ${error.message}`));\n if (error.stack) {\n console.error(pc.gray(error.stack));\n }\n }\n }\n\n /**\n * Warning message with warning sign\n */\n warn(message: string): void {\n this.tryWriteToConsole(LogLevel.WARN, this.formatMessage(\"!\", message, pc.yellow));\n }\n\n dry_warn(message: string): void {\n if (!this.dryWarnSet.has(message)) {\n this.warn(message);\n this.dryWarnSet.add(message);\n }\n }\n\n /**\n * Info message with info icon\n */\n info(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"i\", message, pc.blue));\n }\n\n /**\n * Debug message (only shows in verbose mode)\n */\n debug(message: string): void {\n if (this.options.verbose) {\n this.tryWriteToConsole(LogLevel.DEBUG, this.formatMessage(\"🐛\", message, pc.magenta));\n }\n }\n\n /**\n * Step message with rocket\n */\n step(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"🚀\", message, pc.cyan));\n }\n\n /**\n * Progress message with clock\n */\n progress(message: string): void {\n this.tryWriteToConsole(LogLevel.INFO, this.formatMessage(\"⏳\", message, pc.blue));\n }\n\n /**\n * Plain message (no icon, just colored text)\n */\n plain(message: string, color: (str: string) => string = (s) => s): void {\n const timestamp = this.options.timestamp ? `${pc.gray(new Date().toLocaleTimeString())} ` : \"\";\n const prefix = this.options.prefix ? `${pc.cyan(`[${this.options.prefix}]`)} ` : \"\";\n this.tryWriteToConsole(LogLevel.INFO, `${timestamp}${prefix}${color(message)}`);\n }\n\n /**\n * Dimmed/gray text for less important info\n */\n dim(message: string): void {\n this.plain(message, pc.gray);\n }\n\n /**\n * Create a child logger with a prefix\n */\n child(prefix: string): CodegenLogger {\n return new CodegenLogger({\n ...this.options,\n prefix: this.options.prefix ? `${this.options.prefix}:${prefix}` : prefix,\n });\n }\n\n /**\n * Update options\n */\n configure(options: Partial<LogOptions>): void {\n this.options = { ...this.options, ...options };\n }\n}\n\n/**\n * Quick logging functions for simple usage\n */\n\nconst defaultLogger = new CodegenLogger();\n\nexport function success(message: string): void {\n defaultLogger.success(message);\n}\n\nexport function error(message: string, err?: Error): void {\n defaultLogger.error(message, err);\n}\n\nexport function warn(message: string): void {\n defaultLogger.warn(message);\n}\n\nexport function info(message: string): void {\n defaultLogger.info(message);\n}\n\nfunction _debug(message: string): void {\n defaultLogger.debug(message);\n}\n\nexport function step(message: string): void {\n defaultLogger.step(message);\n}\n\nfunction _progress(message: string): void {\n defaultLogger.progress(message);\n}\n\nfunction _plain(message: string, color?: (str: string) => string): void {\n defaultLogger.plain(message, color);\n}\n\nexport function dim(message: string): void {\n defaultLogger.dim(message);\n}\n\n/**\n * Configure the default logger\n */\nexport function configure(options: Partial<LogOptions>): void {\n defaultLogger.configure(options);\n}\n\n/**\n * Create a new logger instance\n */\nexport function createLogger(options: LogOptions = {}): CodegenLogger {\n return new CodegenLogger(options);\n}\n\n/**\n * Convenience functions for common CLI patterns\n */\n\n/**\n * Show a command header with separator\n */\nexport function header(title: string): void {\n console.log();\n console.log(pc.cyan(pc.bold(`━━━ ${title} ━━━`)));\n}\n\n/**\n * Show a section break\n */\nfunction _section(title: string): void {\n console.log();\n console.log(pc.bold(title));\n}\n\n/**\n * Show completion message with stats\n */\nexport function complete(message: string, duration?: number, stats?: Record<string, number>): void {\n let msg = message;\n if (duration) {\n msg += ` ${pc.gray(`(${duration}ms)`)}`;\n }\n success(msg);\n\n if (stats) {\n Object.entries(stats).forEach(([key, value]) => {\n dim(` ${key}: ${value}`);\n });\n }\n}\n\n/**\n * Show a list of items\n */\nexport function list(items: string[], bullet = \"•\"): void {\n items.forEach((item) => {\n console.log(pc.gray(` ${bullet} ${item}`));\n });\n}\n\n/**\n * Show key-value pairs\n */\nfunction _table(data: Record<string, string | number>): void {\n const maxKeyLength = Math.max(...Object.keys(data).map((k) => k.length));\n Object.entries(data).forEach(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n console.log(` ${pc.blue(paddedKey)} ${pc.gray(\"─\")} ${value}`);\n });\n}\n","/**\n * TypeSchema Core Module\n *\n * Main entry point for the TypeSchema library providing core functions\n * for FHIR-to-TypeSchema generation, parsing, and validation.\n *\n * This module focuses on:\n * - Converting FHIR to TypeSchema format\n * - Reading TypeSchema documents\n * - Validating TypeSchema documents\n */\n\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { transformFhirSchema, transformValueSet } from \"./core/transformer\";\nimport type { Register } from \"./register\";\nimport { packageMetaToFhir, type TypeSchema } from \"./types\";\n\n// Re-export core dependencies\nexport { TypeSchemaGenerator } from \"./generator\";\nexport type { Identifier, TypeSchema } from \"./types\";\n\nconst codeableReferenceInR4 = \"Use CodeableReference which is not provided by FHIR R4.\";\nconst availabilityInR4 = \"Use Availability which is not provided by FHIR R4.\";\n\nconst skipMe: Record<string, Record<string, string>> = {\n \"hl7.fhir.uv.extensions.r4#1.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/extended-contact-availability\": availabilityInR4,\n \"http://hl7.org/fhir/StructureDefinition/immunization-procedure\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/specimen-additive\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-barrier\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-protectiveFactor\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-reason\": codeableReferenceInR4,\n },\n \"hl7.fhir.r5.core#5.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/shareablecodesystem\":\n \"FIXME: CodeSystem.concept.concept defined by ElementReference. FHIR Schema generator output broken value in it, so we just skip it for now.\",\n },\n};\n\nexport const generateTypeSchemas = async (register: Register, logger?: CodegenLogger): Promise<TypeSchema[]> => {\n const fhirSchemas = [] as TypeSchema[];\n for (const fhirSchema of register.allFs()) {\n const pkgId = packageMetaToFhir(fhirSchema.package_meta);\n if (skipMe[pkgId]?.[fhirSchema.url]) {\n logger?.dry_warn(`Skip ${fhirSchema.url} from ${pkgId}. Reason: ${skipMe[pkgId]?.[fhirSchema.url]}`);\n continue;\n }\n fhirSchemas.push(...(await transformFhirSchema(register, fhirSchema, logger)));\n }\n for (const vsSchema of register.allVs()) {\n fhirSchemas.push(await transformValueSet(register, vsSchema, logger));\n }\n return fhirSchemas;\n};\n","import {\n kebabCase,\n pascalCase,\n typeSchemaInfo,\n uppercaseFirstLetter,\n uppercaseFirstLetterOfEach,\n} from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer\";\nimport {\n type CanonicalUrl,\n extractNameFromCanonical,\n type Identifier,\n isChoiceDeclarationField,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type ProfileTypeSchema,\n type RegularField,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"@root/typeschema/types\";\nimport { groupByPackages, type TypeSchemaIndex } from \"@root/typeschema/utils\";\n\nconst primitiveType2tsType: Record<string, string> = {\n boolean: \"boolean\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n\n decimal: \"number\",\n integer: \"number\",\n unsignedInt: \"number\",\n positiveInt: \"number\",\n integer64: \"number\",\n base64Binary: \"string\",\n\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst resolvePrimitiveType = (name: string) => {\n const tsType = primitiveType2tsType[name];\n if (tsType === undefined) throw new Error(`Unknown primitive type ${name}`);\n return tsType;\n};\n\nconst tsFhirPackageDir = (name: string): string => {\n return kebabCase(name);\n};\n\nconst tsModuleName = (id: Identifier): string => {\n if (id.kind === \"profile\") return `${tsResourceName(id)}_profile`;\n return pascalCase(id.name);\n};\n\nconst tsModuleFileName = (id: Identifier): string => {\n return `${tsModuleName(id)}.ts`;\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n const localName = extractNameFromCanonical(canonical as CanonicalUrl, dropFragment);\n if (!localName) return undefined;\n return normalizeTsName(localName);\n};\n\nconst tsResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return normalizeTsName([resourceName, name].join(\"\"));\n }\n return normalizeTsName(id.name);\n};\n\n// biome-ignore format: too long\nconst tsKeywords = new Set([ \"class\", \"function\", \"return\", \"if\", \"for\", \"while\", \"const\", \"let\", \"var\", \"import\", \"export\", \"interface\" ]);\n\nconst tsFieldName = (n: string): string => {\n if (tsKeywords.has(n)) return `\"${n}\"`;\n if (n.includes(\" \") || n.includes(\"-\")) return `\"${n}\"`;\n return n;\n};\n\nconst normalizeTsName = (n: string): string => {\n if (tsKeywords.has(n)) n = `${n}_`;\n return n.replace(/[- ]/g, \"_\");\n};\n\nconst tsGet = (object: string, tsFieldName: string) => {\n if (tsFieldName.startsWith('\"')) return `${object}[${tsFieldName}]`;\n return `${object}.${tsFieldName}`;\n};\n\nconst tsEnumType = (enumValues: string[]) => {\n return `(${enumValues.map((e) => `\"${e}\"`).join(\" | \")})`;\n};\n\nexport type TypeScriptOptions = {\n /** openResourceTypeSet -- for resource families (Resource, DomainResource) use open set for resourceType field.\n *\n * - when openResourceTypeSet is false: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" }`\n * - when openResourceTypeSet is true: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" | string }`\n */\n openResourceTypeSet: boolean;\n} & WriterOptions;\n\nexport class TypeScript extends Writer<TypeScriptOptions> {\n tsImportType(tsPackageName: string, ...entities: string[]) {\n this.lineSM(`import type { ${entities.join(\", \")} } from \"${tsPackageName}\"`);\n }\n\n generateFhirPackageIndexFile(schemas: TypeSchema[]) {\n this.cat(\"index.ts\", () => {\n let exports = schemas\n .flatMap((schema) => [\n {\n identifier: schema.identifier,\n tsPackageName: tsModuleName(schema.identifier),\n resourceName: tsResourceName(schema.identifier),\n nestedTypes:\n (isResourceTypeSchema(schema) && schema.nested) ||\n (isLogicalTypeSchema(schema) && schema.nested)\n ? schema.nested.map((n) => tsResourceName(n.identifier))\n : [],\n helpers:\n isResourceTypeSchema(schema) || isLogicalTypeSchema(schema)\n ? [`is${tsResourceName(schema.identifier)}`]\n : [],\n },\n ])\n .sort((a, b) => a.resourceName.localeCompare(b.resourceName));\n\n // FIXME: actually, duplication may means internal error...\n exports = Array.from(new Map(exports.map((exp) => [exp.resourceName.toLowerCase(), exp])).values()).sort(\n (a, b) => a.resourceName.localeCompare(b.resourceName),\n );\n\n for (const exp of exports) {\n this.debugComment(exp.identifier);\n this.lineSM(\n `export type { ${[exp.resourceName, ...exp.nestedTypes].join(\", \")} } from \"./${exp.tsPackageName}\"`,\n );\n if (exp.helpers.length > 0)\n this.lineSM(`export { ${exp.helpers.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n });\n }\n\n generateDependenciesImports(schema: RegularTypeSchema) {\n if (schema.dependencies) {\n const imports = [];\n const skipped = [];\n for (const dep of schema.dependencies) {\n if ([\"complex-type\", \"resource\", \"logical\"].includes(dep.kind)) {\n imports.push({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(dep.name)}`,\n name: uppercaseFirstLetter(dep.name),\n dep: dep,\n });\n } else if (isNestedIdentifier(dep)) {\n imports.push({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(canonicalToName(dep.url) ?? \"\")}`,\n name: tsResourceName(dep),\n dep: dep,\n });\n } else {\n skipped.push(dep);\n }\n }\n imports.sort((a, b) => a.name.localeCompare(b.name));\n for (const dep of imports) {\n this.debugComment(dep.dep);\n this.tsImportType(dep.tsPackage, dep.name);\n }\n for (const dep of skipped) {\n this.debugComment(\"skip:\", dep);\n }\n this.line();\n // // NOTE: for primitive type extensions\n // const element = this.loader.complexTypes().find((e) => e.identifier.name === \"Element\");\n // if (\n // element &&\n // deps.find((e) => e.name === \"Element\") === undefined &&\n // // FIXME: don't import if fields and nested fields don't have primitive types\n // schema.identifier.name !== \"Element\"\n // ) {\n // this.tsImport(`../${kebabCase(element.identifier.package)}/Element`, \"Element\");\n // }\n }\n }\n\n generateComplexTypeReexports(schema: RegularTypeSchema) {\n const complexTypeDeps = schema.dependencies\n ?.filter((dep) => [\"complex-type\"].includes(dep.kind))\n .map((dep) => ({\n tsPackage: `../${kebabCase(dep.package)}/${pascalCase(dep.name)}`,\n name: uppercaseFirstLetter(dep.name),\n }));\n if (complexTypeDeps && complexTypeDeps.length > 0) {\n for (const dep of complexTypeDeps) {\n this.lineSM(`export type { ${dep.name} } from \"${dep.tsPackage}\"`);\n }\n this.line();\n }\n }\n\n addFieldExtension(fieldName: string, field: RegularField): void {\n if (field.type.kind === \"primitive-type\") {\n const extFieldName = tsFieldName(`_${fieldName}`);\n this.lineSM(`${extFieldName}?: Element`);\n }\n }\n\n generateType(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n let name: string;\n if (schema.identifier.name === \"Reference\") {\n name = \"Reference<T extends string = string>\";\n } else if (schema.identifier.kind === \"nested\") {\n name = tsResourceName(schema.identifier);\n } else {\n name = tsResourceName(schema.identifier);\n }\n\n let extendsClause: string | undefined;\n if (schema.base) extendsClause = `extends ${canonicalToName(schema.base.url)}`;\n\n this.debugComment(schema.identifier);\n if (!schema.fields && !extendsClause && !isResourceTypeSchema(schema)) {\n this.lineSM(`export type ${name} = object`);\n return;\n }\n this.curlyBlock([\"export\", \"interface\", name, extendsClause], () => {\n if (isResourceTypeSchema(schema) || isLogicalTypeSchema(schema)) {\n const possibleResourceTypes = [schema.identifier];\n possibleResourceTypes.push(...tsIndex.resourceChildren(schema.identifier));\n const openSetSuffix =\n this.opts.openResourceTypeSet && possibleResourceTypes.length > 1 ? \" | string\" : \"\";\n this.lineSM(\n `resourceType: ${possibleResourceTypes\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((e) => `\"${e.name}\"`)\n .join(\" | \")}${openSetSuffix}`,\n );\n this.line();\n }\n\n if (!schema.fields) return;\n const fields = Object.entries(schema.fields).sort((a, b) => a[0].localeCompare(b[0]));\n for (const [fieldName, field] of fields) {\n if (isChoiceDeclarationField(field)) continue;\n\n this.debugComment(fieldName, \":\", field);\n\n const tsName = tsFieldName(fieldName);\n\n let tsType: string;\n if (field.enum) {\n tsType = tsEnumType(field.enum);\n } else if (schema.identifier.name === \"Reference\" && tsName === \"reference\") {\n // biome-ignore lint: that is exactly string what we want\n tsType = \"`${T}/${string}`\";\n } else if (field.reference && field.reference.length > 0) {\n const references = field.reference.map((ref) => `\"${ref.name}\"`).join(\" | \");\n tsType = `Reference<${references}>`;\n } else if (isPrimitiveIdentifier(field.type)) {\n tsType = resolvePrimitiveType(field.type.name);\n } else if (isNestedIdentifier(field.type)) {\n tsType = tsResourceName(field.type);\n } else {\n tsType = field.type.name as string;\n }\n\n const optionalSymbol = field.required ? \"\" : \"?\";\n const arraySymbol = field.array ? \"[]\" : \"\";\n this.lineSM(`${tsName}${optionalSymbol}: ${tsType}${arraySymbol}`);\n\n if ([\"resource\", \"complex-type\"].includes(schema.identifier.kind)) {\n this.addFieldExtension(fieldName, field);\n }\n }\n });\n }\n\n generateResourceTypePredicate(schema: RegularTypeSchema) {\n if (!isResourceTypeSchema(schema) && !isLogicalTypeSchema(schema)) return;\n const name = tsResourceName(schema.identifier);\n this.curlyBlock([\"export\", \"const\", `is${name}`, \"=\", `(resource: unknown): resource is ${name}`, \"=>\"], () => {\n this.lineSM(\n `return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"${schema.identifier.name}\"`,\n );\n });\n }\n\n generateNestedTypes(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n if (schema.nested) {\n for (const subtype of schema.nested) {\n this.generateType(tsIndex, subtype);\n this.line();\n }\n }\n }\n\n generateProfileType(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n this.debugComment(\"flatProfile\", flatProfile);\n const tsName = tsResourceName(flatProfile.identifier);\n this.debugComment(\"identifier\", flatProfile.identifier);\n this.debugComment(\"base\", flatProfile.base);\n this.curlyBlock([\"export\", \"interface\", tsName], () => {\n this.lineSM(`__profileUrl: \"${flatProfile.identifier.url}\"`);\n this.line();\n\n for (const [fieldName, field] of Object.entries(flatProfile.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n this.debugComment(fieldName, field);\n\n const tsName = tsFieldName(fieldName);\n\n let tsType: string;\n if (field.enum) {\n tsType = tsEnumType(field.enum);\n } else if (field.reference && field.reference.length > 0) {\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization))\n throw new Error(`Invalid specialization for ${flatProfile.identifier}`);\n\n const sField = specialization.fields?.[fieldName];\n if (sField === undefined || isChoiceDeclarationField(sField) || sField.reference === undefined)\n throw new Error(`Invalid field declaration for ${fieldName}`);\n\n const sRefs = sField.reference.map((e) => e.name);\n const references = field.reference\n .map((ref) => {\n const resRef = tsIndex.findLastSpecializationByIdentifier(ref);\n if (resRef.name !== ref.name) {\n return `\"${resRef.name}\" /*${ref.name}*/`;\n }\n return `'${ref.name}'`;\n })\n .join(\" | \");\n if (sRefs.length === 1 && sRefs[0] === \"Resource\" && references !== '\"Resource\"') {\n // FIXME: should be generilized to type families\n tsType = `Reference<\"Resource\" /* ${references} */ >`;\n } else {\n tsType = `Reference<${references}>`;\n }\n } else if (isNestedIdentifier(field.type)) {\n tsType = tsResourceName(field.type);\n } else if (isPrimitiveIdentifier(field.type)) {\n tsType = resolvePrimitiveType(field.type.name);\n } else if (field.type === undefined) {\n throw new Error(`Undefined type for '${fieldName}' field at ${typeSchemaInfo(flatProfile)}`);\n } else {\n tsType = field.type.name;\n }\n\n this.lineSM(`${tsName}${!field.required ? \"?\" : \"\"}: ${tsType}${field.array ? \"[]\" : \"\"}`);\n }\n });\n\n this.line();\n }\n\n generateAttachProfile(flatProfile: ProfileTypeSchema) {\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const profileFields = Object.entries(flatProfile.fields || {})\n .filter(([_fieldName, field]) => {\n return field && isNotChoiceDeclarationField(field) && field.type !== undefined;\n })\n .map(([fieldName]) => tsFieldName(fieldName));\n\n this.curlyBlock(\n [\n `export const attach_${tsProfileName}_to_${tsBaseResourceName} =`,\n `(resource: ${tsBaseResourceName}, profile: ${tsProfileName}): ${tsBaseResourceName}`,\n \"=>\",\n ],\n () => {\n this.curlyBlock([\"return\"], () => {\n this.line(\"...resource,\");\n // FIXME: don't rewrite all profiles\n this.curlyBlock([\"meta:\"], () => {\n this.line(`profile: ['${flatProfile.identifier.url}']`);\n }, [\",\"]);\n profileFields.forEach((fieldName) => {\n this.line(`${fieldName}: ${tsGet(\"profile\", fieldName)},`);\n });\n });\n },\n );\n this.line();\n }\n\n generateExtractProfile(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n\n const profileFields = Object.entries(flatProfile.fields || {})\n .filter(([_fieldName, field]) => {\n return isNotChoiceDeclarationField(field) && field.type !== undefined;\n })\n .map(([fieldName]) => fieldName);\n\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization))\n throw new Error(`Specialization not found for ${flatProfile.identifier.url}`);\n\n const shouldCast: Record<string, boolean> = {};\n this.curlyBlock(\n [\n `export const extract_${tsProfileName}_from_${tsBaseResourceName} =`,\n `(resource: ${tsBaseResourceName}): ${tsProfileName}`,\n \"=>\",\n ],\n () => {\n profileFields.forEach((fieldName) => {\n const tsField = tsFieldName(fieldName);\n const pField = flatProfile.fields?.[fieldName];\n const rField = specialization.fields?.[fieldName];\n if (!isNotChoiceDeclarationField(pField) || !isNotChoiceDeclarationField(rField)) return;\n\n if (pField.required && !rField.required) {\n this.curlyBlock([`if (${tsGet(\"resource\", tsField)} === undefined)`], () =>\n this.lineSM(\n `throw new Error(\"'${tsField}' is required for ${flatProfile.identifier.url}\")`,\n ),\n );\n }\n\n const pRefs = pField?.reference?.map((ref) => ref.name);\n const rRefs = rField?.reference?.map((ref) => ref.name);\n if (pRefs && rRefs && pRefs.length !== rRefs.length) {\n const predName = `reference_is_valid_${tsField}`;\n this.curlyBlock([\"const\", predName, \"=\", \"(ref?: Reference)\", \"=>\"], () => {\n this.line(\"return !ref\");\n this.indentBlock(() => {\n rRefs.forEach((ref) => {\n this.line(`|| ref.reference?.startsWith('${ref}/')`);\n });\n this.line(\";\");\n });\n });\n let cond: string = !pField?.required ? `!${tsGet(\"resource\", tsField)} || ` : \"\";\n if (pField.array) {\n cond += `${tsGet(\"resource\", tsField)}.every( (ref) => ${predName}(ref) )`;\n } else {\n cond += `!${predName}(${tsGet(\"resource\", tsField)})`;\n }\n this.curlyBlock([\"if (\", cond, \")\"], () => {\n this.lineSM(\n `throw new Error(\"'${fieldName}' has different references in profile and specialization\")`,\n );\n });\n this.line();\n shouldCast[fieldName] = true;\n }\n });\n this.curlyBlock([\"return\"], () => {\n this.line(`__profileUrl: '${flatProfile.identifier.url}',`);\n profileFields.forEach((fieldName) => {\n const tsField = tsFieldName(fieldName);\n if (shouldCast[fieldName]) {\n this.line(\n `${tsField}:`,\n `${tsGet(\"resource\", tsField)} as ${tsProfileName}['${tsField}'],`,\n );\n } else {\n this.line(`${tsField}:`, `${tsGet(\"resource\", tsField)},`);\n }\n });\n });\n },\n );\n }\n\n generateResourceModule(tsIndex: TypeSchemaIndex, schema: TypeSchema) {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n if ([\"complex-type\", \"resource\", \"logical\"].includes(schema.identifier.kind)) {\n this.generateDependenciesImports(schema);\n this.generateComplexTypeReexports(schema);\n this.generateNestedTypes(tsIndex, schema);\n this.comment(\"CanonicalURL:\", schema.identifier.url);\n this.generateType(tsIndex, schema);\n this.generateResourceTypePredicate(schema);\n } else if (isProfileTypeSchema(schema)) {\n const flatProfile = tsIndex.flatProfile(schema);\n this.generateDependenciesImports(flatProfile);\n this.comment(\"CanonicalURL:\", schema.identifier.url);\n this.generateProfileType(tsIndex, flatProfile);\n this.generateAttachProfile(flatProfile);\n this.generateExtractProfile(tsIndex, flatProfile);\n } else throw new Error(`Profile generation not implemented for kind: ${schema.identifier.kind}`);\n });\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n const typesToGenerate = [\n ...tsIndex.collectComplexTypes(),\n ...tsIndex.collectResources(),\n ...tsIndex.collectLogicalModels(),\n ...(this.opts.generateProfile\n ? tsIndex\n .collectProfiles()\n // NOTE: because non Resource don't have `meta` field\n .filter((p) => tsIndex.isWithMetaField(p))\n : []),\n ];\n const grouped = groupByPackages(typesToGenerate);\n\n this.cd(\"/\", () => {\n for (const [packageName, packageSchemas] of Object.entries(grouped)) {\n const tsPackageDir = tsFhirPackageDir(packageName);\n this.cd(tsPackageDir, () => {\n for (const schema of packageSchemas) {\n this.generateResourceModule(tsIndex, schema);\n }\n this.generateFhirPackageIndexFile(packageSchemas);\n });\n }\n });\n }\n}\n","/**\n * High-Level API Builder\n *\n * Provides a fluent, chainable API for common codegen use cases with pre-built generators.\n * This builder pattern allows users to configure generation in a declarative way.\n */\n\nimport * as fs from \"node:fs\";\nimport * as afs from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport { CSharp } from \"@root/api/writer-generator/csharp/csharp\";\nimport { registerFromManager } from \"@root/typeschema/register\";\nimport { mkTypeSchemaIndex, type TreeShake, type TypeSchemaIndex, treeShake } from \"@root/typeschema/utils\";\nimport { generateTypeSchemas } from \"@typeschema/index\";\nimport { extractNameFromCanonical, packageMetaToFhir, packageMetaToNpm, type TypeSchema } from \"@typeschema/types\";\nimport type { TypeSchemaConfig } from \"../config\";\nimport { CodegenLogger, createLogger } from \"../utils/codegen-logger\";\nimport { TypeScript, type TypeScriptOptions } from \"./writer-generator/typescript\";\nimport type { FileBuffer, FileSystemWriter, WriterOptions } from \"./writer-generator/writer\";\n\n/**\n * Configuration options for the API builder\n */\nexport interface APIBuilderOptions {\n outputDir?: string;\n verbose?: boolean;\n overwrite?: boolean; // FIXME: remove\n cache?: boolean; // FIXME: remove\n cleanOutput?: boolean;\n typeSchemaConfig?: TypeSchemaConfig; // FIXME: remove\n logger?: CodegenLogger;\n manager?: ReturnType<typeof CanonicalManager> | null;\n typeSchemaOutputDir?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n throwException?: boolean;\n exportTypeTree?: string;\n treeShake?: TreeShake;\n}\n\n/**\n * Progress callback for long-running operations\n */\nexport type ProgressCallback = (phase: string, current: number, total: number, message?: string) => void;\n\n/**\n * Generation result information\n */\nexport interface GenerationResult {\n success: boolean;\n outputDir: string;\n filesGenerated: string[];\n errors: string[];\n warnings: string[];\n duration: number;\n}\n\nexport interface GeneratedFile {\n fullFileName: string;\n}\n\nexport type GeneratorInput = { schemas: TypeSchema[]; index: TypeSchemaIndex };\n\nconst normalizeFileName = (str: string): string => {\n const res = str.replace(/[^a-zA-Z0-9\\-_.@#()]/g, \"\");\n if (res.length === 0) return \"unknown\";\n return res;\n};\n\nexport type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\ntype APIBuilderConfig = PartialBy<\n Required<APIBuilderOptions>,\n \"logger\" | \"typeSchemaConfig\" | \"typeSchemaOutputDir\" | \"exportTypeTree\" | \"treeShake\"\n> & {\n cleanOutput: boolean;\n};\n\nconst cleanup = async (opts: APIBuilderConfig, logger: CodegenLogger): Promise<void> => {\n logger.info(`Cleaning outputs...`);\n try {\n logger.info(`Clean ${opts.outputDir}`);\n fs.rmSync(opts.outputDir, { recursive: true, force: true });\n if (opts.typeSchemaOutputDir) {\n logger.info(`Clean ${opts.typeSchemaOutputDir}`);\n fs.rmSync(opts.typeSchemaOutputDir, {\n recursive: true,\n force: true,\n });\n }\n if (opts.exportTypeTree) {\n logger.info(`Clean ${opts.exportTypeTree}`);\n fs.rmSync(opts.exportTypeTree, {\n recursive: true,\n force: true,\n });\n }\n } catch (error) {\n logger.warn(`Error cleaning output directory: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\nconst writeTypeSchemasToSeparateFiles = async (\n typeSchemas: TypeSchema[],\n outputDir: string,\n logger: CodegenLogger,\n): Promise<void> => {\n await afs.mkdir(outputDir, { recursive: true });\n logger.info(`Writing TypeSchema files to ${outputDir}/...`);\n\n const files: Record<string, string[]> = {};\n for (const ts of typeSchemas) {\n const pkg = {\n name: ts.identifier.package,\n version: ts.identifier.version,\n };\n const pkgPath = normalizeFileName(packageMetaToFhir(pkg));\n const name = normalizeFileName(`${ts.identifier.name}(${extractNameFromCanonical(ts.identifier.url)})`);\n const json = JSON.stringify(ts, null, 2);\n const baseName = Path.join(outputDir, pkgPath, name);\n if (!files[baseName]) files[baseName] = [];\n if (!files[baseName]?.some((e) => e === json)) {\n files[baseName].push(json);\n }\n }\n\n for (const [baseName, jsons] of Object.entries(files)) {\n await Promise.all(\n jsons.map(async (json, index) => {\n let fullName: string;\n if (index === 0) {\n fullName = `${baseName}.typeschema.json`;\n } else {\n fullName = `${baseName}-${index}.typeschema.json`;\n }\n await afs.mkdir(Path.dirname(fullName), { recursive: true });\n await afs.writeFile(fullName, json);\n }),\n );\n }\n};\n\nconst writeTypeSchemasToSingleFile = async (\n typeSchemas: TypeSchema[],\n outputFile: string,\n logger: CodegenLogger,\n): Promise<void> => {\n logger.info(`Writing TypeSchema files to: ${outputFile}`);\n await afs.mkdir(Path.dirname(outputFile), { recursive: true });\n\n logger.info(`Writing TypeSchemas to one file ${outputFile}...`);\n\n for (const ts of typeSchemas) {\n const json = JSON.stringify(ts, null, 2);\n await afs.appendFile(outputFile, `${json}\\n`);\n }\n};\n\nconst tryWriteTypeSchema = async (typeSchemas: TypeSchema[], opts: APIBuilderConfig, logger: CodegenLogger) => {\n if (!opts.typeSchemaOutputDir) return;\n try {\n if (Path.extname(opts.typeSchemaOutputDir) === \".ndjson\") {\n await writeTypeSchemasToSingleFile(typeSchemas, opts.typeSchemaOutputDir, logger);\n } else {\n await writeTypeSchemasToSeparateFiles(typeSchemas, opts.typeSchemaOutputDir, logger);\n }\n logger.info(`Writing TypeSchema - DONE`);\n } catch (error) {\n logger.error(\"Failed to write TypeSchema output\", error instanceof Error ? error : new Error(String(error)));\n if (opts.throwException) throw error;\n }\n};\n\n/**\n * High-Level API Builder class\n *\n * Provides a fluent interface for configuring and executing code generation\n * from FHIR packages or TypeSchema documents.\n */\nexport class APIBuilder {\n private schemas: TypeSchema[] = [];\n private options: APIBuilderConfig;\n private generators: Map<string, FileSystemWriter> = new Map();\n private logger: CodegenLogger;\n private packages: string[] = [];\n progressCallback: any;\n private typeSchemaConfig?: TypeSchemaConfig;\n\n constructor(options: APIBuilderOptions = {}) {\n this.options = {\n outputDir: options.outputDir || \"./generated\",\n verbose: options.verbose ?? false,\n overwrite: options.overwrite ?? true,\n cache: options.cache ?? true,\n cleanOutput: options.cleanOutput ?? true,\n typeSchemaConfig: options.typeSchemaConfig,\n manager: options.manager || null,\n throwException: options.throwException || false,\n typeSchemaOutputDir: options.typeSchemaOutputDir,\n exportTypeTree: options.exportTypeTree,\n treeShake: options.treeShake,\n };\n\n this.typeSchemaConfig = options.typeSchemaConfig;\n\n // Use provided logger or create a default one\n this.logger =\n options.logger ||\n createLogger({\n verbose: this.options.verbose,\n prefix: \"API\",\n });\n }\n\n fromPackage(packageName: string, version?: string): APIBuilder {\n const pkg = packageMetaToNpm({ name: packageName, version: version || \"latest\" });\n this.packages.push(pkg);\n return this;\n }\n\n fromPackageRef(packageRef: string): APIBuilder {\n this.packages.push(packageRef);\n return this;\n }\n\n fromSchemas(schemas: TypeSchema[]): APIBuilder {\n this.logger.debug(`Adding ${schemas.length} TypeSchemas to generation`);\n this.schemas = [...this.schemas, ...schemas];\n return this;\n }\n\n typescript(userOpts: Partial<TypeScriptOptions>) {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n generateProfile: true,\n };\n const defaultTsOpts: TypeScriptOptions = {\n ...defaultWriterOpts,\n openResourceTypeSet: false,\n };\n const opts: TypeScriptOptions = {\n ...defaultTsOpts,\n ...Object.fromEntries(Object.entries(userOpts).filter(([_, v]) => v !== undefined)),\n };\n const generator = new TypeScript(opts);\n this.generators.set(\"typescript\", generator);\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n csharp(namespace: string, staticSourceDir?: string | undefined): APIBuilder {\n const generator = new CSharp({\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n staticSourceDir: staticSourceDir ?? undefined,\n targetNamespace: namespace,\n logger: new CodegenLogger({\n prefix: \"C#\",\n timestamp: true,\n verbose: true,\n suppressLoggingLevel: [],\n }),\n });\n this.generators.set(\"C#\", generator);\n this.logger.debug(`Configured C# generator`);\n return this;\n }\n\n /**\n * Set a progress callback for monitoring generation\n */\n onProgress(callback: ProgressCallback): APIBuilder {\n this.progressCallback = callback;\n return this;\n }\n\n /**\n * Set the output directory for all generators\n */\n outputTo(directory: string): APIBuilder {\n this.logger.debug(`Setting output directory: ${directory}`);\n this.options.outputDir = directory;\n\n // Update all configured generators\n for (const generator of this.generators.values()) {\n generator.setOutputDir(directory);\n }\n\n return this;\n }\n\n verbose(enabled = true): APIBuilder {\n this.options.verbose = enabled;\n this.logger?.configure({ verbose: enabled });\n return this;\n }\n\n throwException(enabled = true): APIBuilder {\n this.options.throwException = enabled;\n return this;\n }\n\n cleanOutput(enabled = true): APIBuilder {\n this.options.cleanOutput = enabled;\n return this;\n }\n\n writeTypeTree(filename: string) {\n this.options.exportTypeTree = filename;\n return this;\n }\n\n treeShake(tree: TreeShake) {\n this.options.treeShake = tree;\n return this;\n }\n\n writeTypeSchemas(target: string) {\n this.options.typeSchemaOutputDir = target;\n return this;\n }\n\n async generate(): Promise<GenerationResult> {\n const startTime = performance.now();\n const result: GenerationResult = {\n success: false,\n outputDir: this.options.outputDir,\n filesGenerated: [],\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n this.logger.debug(`Starting generation with ${this.generators.size} generators`);\n try {\n if (this.options.cleanOutput) cleanup(this.options, this.logger);\n\n this.logger.info(\"Initialize Canonical Manager\");\n const manager = CanonicalManager({\n packages: this.packages,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n });\n const ref2meta = await manager.init();\n const packageMetas = Object.values(ref2meta);\n const register = await registerFromManager(manager, {\n logger: this.logger,\n focusedPackages: packageMetas,\n });\n\n const typeSchemas = await generateTypeSchemas(register, this.logger);\n await tryWriteTypeSchema(typeSchemas, this.options, this.logger);\n\n let tsIndex = mkTypeSchemaIndex(typeSchemas, this.logger);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake, this.logger);\n\n if (this.options.exportTypeTree) await tsIndex.exportTree(this.options.exportTypeTree);\n\n this.logger.debug(`Executing ${this.generators.size} generators`);\n\n await this.executeGenerators(result, tsIndex);\n\n this.logger.info(\"Generation completed successfully\");\n\n result.success = result.errors.length === 0;\n\n this.logger.debug(`Generation completed: ${result.filesGenerated.length} files`);\n } catch (error) {\n this.logger.error(\"Code generation failed\", error instanceof Error ? error : new Error(String(error)));\n result.errors.push(error instanceof Error ? error.message : String(error));\n if (this.options.throwException) throw error;\n }\n\n return {\n ...result,\n success: result.errors.length === 0,\n duration: performance.now() - startTime,\n };\n }\n\n /**\n * Clear all configuration and start fresh\n */\n reset(): APIBuilder {\n this.schemas = [];\n this.generators.clear();\n this.progressCallback = undefined;\n return this;\n }\n\n /**\n * Get loaded schemas (for inspection)\n */\n getSchemas(): TypeSchema[] {\n return [...this.schemas];\n }\n\n /**\n * Get configured generators (for inspection)\n */\n getGenerators(): string[] {\n return Array.from(this.generators.keys());\n }\n\n private async executeGenerators(result: GenerationResult, tsIndex: TypeSchemaIndex): Promise<void> {\n for (const [type, generator] of this.generators.entries()) {\n this.logger.info(`Generating ${type}...`);\n\n try {\n await generator.generate(tsIndex);\n const fileBuffer: FileBuffer[] = generator.writtenFiles();\n result.filesGenerated.push(...fileBuffer.map((e) => e.absPath));\n this.logger.info(`Generating ${type} finished successfully`);\n } catch (error) {\n result.errors.push(\n `${type} generator failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (this.options.throwException) throw error;\n }\n }\n }\n}\n","/**\n * New Config Schema for High-Level API\n *\n * Simple configuration system compatible ONLY with the new high-level APIBuilder.\n * All legacy config functionality has been removed.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\n/**\n * TypeScript generator configuration options\n */\nexport interface TypeScriptGeneratorConfig {\n moduleFormat?: \"esm\" | \"cjs\";\n generateIndex?: boolean;\n includeDocuments?: boolean;\n namingConvention?: \"PascalCase\" | \"camelCase\";\n strictMode?: boolean;\n includeProfiles?: boolean;\n includeExtensions?: boolean;\n includeCodeSystems?: boolean;\n includeOperations?: boolean;\n /** Generate individual TypeScript files for value sets (default: false) */\n generateValueSets?: boolean;\n /** Include helper validation functions in value set files (default: false) */\n includeValueSetHelpers?: boolean;\n /** Which binding strengths to generate value sets for (default: ['required']) */\n valueSetStrengths?: (\"required\" | \"preferred\" | \"extensible\" | \"example\")[];\n /** Directory name for value set files (relative to outputDir) (default: 'valuesets') */\n valueSetDirectory?: string;\n /** Value set generation mode (default: 'required-only') */\n valueSetMode?: \"all\" | \"required-only\" | \"custom\";\n fhirVersion?: \"R4\" | \"R5\";\n resourceTypes?: string[];\n maxDepth?: number;\n\n // Profile generation options\n profileOptions?: {\n generateKind?: \"interface\" | \"type\" | \"both\";\n includeConstraints?: boolean;\n includeDocumentation?: boolean;\n strictMode?: boolean;\n subfolder?: string;\n };\n\n // Builder generation options\n generateBuilders?: boolean;\n builderOptions?: {\n includeValidation?: boolean;\n includeFactoryMethods?: boolean;\n includeInterfaces?: boolean;\n generateNestedBuilders?: boolean;\n includeHelperMethods?: boolean;\n supportPartialBuild?: boolean;\n includeJSDoc?: boolean;\n generateFactories?: boolean;\n includeTypeGuards?: boolean;\n handleChoiceTypes?: boolean;\n generateArrayHelpers?: boolean;\n };\n\n // Validator generation options\n validatorOptions?: {\n includeCardinality?: boolean;\n includeTypes?: boolean;\n includeConstraints?: boolean;\n includeInvariants?: boolean;\n validateRequired?: boolean;\n allowAdditional?: boolean;\n strictValidation?: boolean;\n collectMetrics?: boolean;\n generateAssertions?: boolean;\n generatePartialValidators?: boolean;\n optimizePerformance?: boolean;\n includeJSDoc?: boolean;\n generateCompositeValidators?: boolean;\n };\n\n // Type guard generation options\n guardOptions?: {\n includeRuntimeValidation?: boolean;\n includeErrorMessages?: boolean;\n treeShakeable?: boolean;\n targetTSVersion?: \"3.8\" | \"4.0\" | \"4.5\" | \"5.0\";\n strictGuards?: boolean;\n includeNullChecks?: boolean;\n verbose?: boolean;\n };\n}\n\n/**\n * TypeSchema Configuration\n * Controls TypeSchema generation and caching behavior\n */\nexport interface TypeSchemaConfig {\n /** Enable persistent caching of generated TypeSchemas */\n enablePersistence?: boolean;\n /** Directory to store cached TypeSchemas (relative to outputDir) */\n cacheDir?: string;\n /** Maximum age of cached schemas in milliseconds before regeneration */\n maxAge?: number;\n /** Whether to validate cached schemas before reuse */\n validateCached?: boolean;\n /** Force regeneration of schemas even if cached */\n forceRegenerate?: boolean;\n /** Share cache across multiple codegen runs */\n shareCache?: boolean;\n /** Cache key prefix for namespacing */\n cacheKeyPrefix?: string;\n /** Only generate TypeSchemas for specific ResourceTypes (treeshaking) */\n treeshake?: string[];\n /** Generate single TypeSchema file instead of multiple files */\n singleFile?: boolean;\n /** Profile packages configuration */\n profiles?: {\n /** Auto-detect profiles in packages */\n autoDetect?: boolean;\n };\n}\n\n/**\n * Main configuration schema for the new high-level API\n */\nexport interface Config {\n // Core APIBuilder options\n outputDir?: string;\n verbose?: boolean;\n overwrite?: boolean;\n validate?: boolean;\n cache?: boolean;\n cleanOutput?: boolean;\n\n // Generator configurations\n typescript?: TypeScriptGeneratorConfig;\n typeSchema?: TypeSchemaConfig;\n\n // Input sources\n packages?: string[];\n files?: string[];\n\n // Schema validation\n $schema?: string;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<Config> = {\n outputDir: \"./generated\",\n verbose: false,\n overwrite: true,\n validate: true,\n cache: true,\n cleanOutput: true,\n typescript: {\n moduleFormat: \"esm\",\n generateIndex: true,\n includeDocuments: false,\n namingConvention: \"PascalCase\",\n strictMode: true,\n includeProfiles: true,\n includeExtensions: false,\n includeCodeSystems: false,\n includeOperations: false,\n generateValueSets: false,\n valueSetDirectory: \"valuesets\",\n valueSetMode: \"required-only\",\n valueSetStrengths: [\"required\"],\n includeValueSetHelpers: false,\n fhirVersion: \"R4\",\n resourceTypes: [],\n maxDepth: 10,\n\n // Profile generation defaults\n profileOptions: {\n generateKind: \"interface\",\n includeConstraints: true,\n includeDocumentation: true,\n strictMode: false,\n subfolder: \"profiles\",\n },\n\n // Builder generation defaults\n generateBuilders: false,\n builderOptions: {\n includeValidation: true,\n includeFactoryMethods: true,\n includeInterfaces: true,\n generateNestedBuilders: true,\n includeHelperMethods: true,\n supportPartialBuild: true,\n includeJSDoc: true,\n generateFactories: true,\n includeTypeGuards: true,\n handleChoiceTypes: true,\n generateArrayHelpers: true,\n },\n\n // Validator generation defaults\n validatorOptions: {\n includeCardinality: true,\n includeTypes: true,\n includeConstraints: true,\n includeInvariants: false,\n validateRequired: true,\n allowAdditional: false,\n strictValidation: false,\n collectMetrics: false,\n generateAssertions: true,\n generatePartialValidators: true,\n optimizePerformance: true,\n includeJSDoc: true,\n generateCompositeValidators: true,\n },\n\n // Type guard generation defaults\n guardOptions: {\n includeRuntimeValidation: true,\n includeErrorMessages: true,\n treeShakeable: true,\n targetTSVersion: \"5.0\",\n strictGuards: false,\n includeNullChecks: true,\n verbose: false,\n },\n },\n typeSchema: {\n enablePersistence: true,\n cacheDir: \".typeschema-cache\",\n maxAge: 24 * 60 * 60 * 1000, // 24 hours in milliseconds\n validateCached: true,\n forceRegenerate: false,\n shareCache: true,\n cacheKeyPrefix: \"\",\n treeshake: [],\n singleFile: false,\n profiles: {\n autoDetect: true,\n },\n },\n packages: [],\n files: [],\n $schema: \"\",\n};\n\n/**\n * Configuration file names to search for\n */\nexport const CONFIG_FILE_NAMES = [\n \"atomic-codegen.config.ts\",\n \"atomic-codegen.config\",\n \"atomic-codegen.config.json\",\n \".atomic-codegenrc\",\n \"atomic-codegen.json\",\n \".atomic-codegen.json\",\n \"codegen.config.json\",\n \"codegen.json\",\n];\n\n/**\n * Validation error interface\n */\nexport interface ConfigValidationError {\n path: string;\n message: string;\n value?: unknown;\n}\n\n/**\n * Configuration validation result\n */\nexport interface ConfigValidationResult {\n valid: boolean;\n errors: ConfigValidationError[];\n warnings: string[];\n config?: Config;\n}\n\n/**\n * Simple configuration validator\n */\nexport class ConfigValidator {\n /**\n * Validate a configuration object\n */\n validate(config: unknown): ConfigValidationResult {\n const result: ConfigValidationResult = {\n valid: true,\n errors: [],\n warnings: [],\n };\n\n if (!config || typeof config !== \"object\") {\n result.valid = false;\n result.errors.push({\n path: \"root\",\n message: \"Configuration must be an object\",\n value: config,\n });\n return result;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate outputDir\n if (cfg.outputDir !== undefined && typeof cfg.outputDir !== \"string\") {\n result.errors.push({\n path: \"outputDir\",\n message: \"outputDir must be a string\",\n value: cfg.outputDir,\n });\n }\n\n // Validate boolean fields\n const booleanFields = [\"verbose\", \"overwrite\", \"validate\", \"cache\"];\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n result.errors.push({\n path: field,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate typescript config\n if (cfg.typescript !== undefined) {\n const tsErrors = this.validateTypeScriptConfig(cfg.typescript);\n result.errors.push(...tsErrors);\n }\n\n // Validate typeSchema config\n if (cfg.typeSchema !== undefined) {\n const tsErrors = this.validateTypeSchemaConfig(cfg.typeSchema);\n result.errors.push(...tsErrors);\n }\n\n // Validate packages array\n if (cfg.packages !== undefined) {\n if (!Array.isArray(cfg.packages)) {\n result.errors.push({\n path: \"packages\",\n message: \"packages must be an array\",\n value: cfg.packages,\n });\n } else {\n cfg.packages.forEach((pkg, index) => {\n if (typeof pkg !== \"string\") {\n result.errors.push({\n path: `packages[${index}]`,\n message: \"package name must be a string\",\n value: pkg,\n });\n }\n });\n }\n }\n\n // Validate files array\n if (cfg.files !== undefined) {\n if (!Array.isArray(cfg.files)) {\n result.errors.push({\n path: \"files\",\n message: \"files must be an array\",\n value: cfg.files,\n });\n } else {\n cfg.files.forEach((file, index) => {\n if (typeof file !== \"string\") {\n result.errors.push({\n path: `files[${index}]`,\n message: \"file path must be a string\",\n value: file,\n });\n }\n });\n }\n }\n\n result.valid = result.errors.length === 0;\n if (result.valid) {\n result.config = cfg as Config;\n }\n\n return result;\n }\n\n private validateTypeScriptConfig(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript\",\n message: \"typescript config must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate moduleFormat\n if (cfg.moduleFormat !== undefined) {\n if (![\"esm\", \"cjs\"].includes(cfg.moduleFormat as string)) {\n errors.push({\n path: \"typescript.moduleFormat\",\n message: 'moduleFormat must be \"esm\" or \"cjs\"',\n value: cfg.moduleFormat,\n });\n }\n }\n\n // Validate namingConvention\n if (cfg.namingConvention !== undefined) {\n if (![\"PascalCase\", \"camelCase\"].includes(cfg.namingConvention as string)) {\n errors.push({\n path: \"typescript.namingConvention\",\n message: 'namingConvention must be \"PascalCase\" or \"camelCase\"',\n value: cfg.namingConvention,\n });\n }\n }\n\n // Validate boolean fields\n const booleanFields = [\n \"generateIndex\",\n \"includeDocuments\",\n \"strictMode\",\n \"includeProfiles\",\n \"includeExtensions\",\n \"includeCodeSystems\",\n \"includeOperations\",\n \"generateValueSets\",\n \"includeValueSetHelpers\",\n ];\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate validatorOptions\n if (cfg.validatorOptions !== undefined) {\n const validatorErrors = this.validateValidatorOptions(cfg.validatorOptions);\n errors.push(...validatorErrors);\n }\n\n // Validate guardOptions\n if (cfg.guardOptions !== undefined) {\n const guardErrors = this.validateGuardOptions(cfg.guardOptions);\n errors.push(...guardErrors);\n }\n\n // Validate profileOptions\n if (cfg.profileOptions !== undefined) {\n const profileErrors = this.validateProfileOptions(cfg.profileOptions);\n errors.push(...profileErrors);\n }\n\n return errors;\n }\n\n private validateValidatorOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.validatorOptions\",\n message: \"validatorOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate boolean fields\n const booleanFields = [\n \"includeCardinality\",\n \"includeTypes\",\n \"includeConstraints\",\n \"includeInvariants\",\n \"validateRequired\",\n \"allowAdditional\",\n \"strictValidation\",\n \"collectMetrics\",\n \"generateAssertions\",\n \"generatePartialValidators\",\n \"optimizePerformance\",\n \"includeJSDoc\",\n \"generateCompositeValidators\",\n ];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.validatorOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateGuardOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.guardOptions\",\n message: \"guardOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate targetTSVersion\n if (cfg.targetTSVersion !== undefined) {\n if (![\"3.8\", \"4.0\", \"4.5\", \"5.0\"].includes(cfg.targetTSVersion as string)) {\n errors.push({\n path: \"typescript.guardOptions.targetTSVersion\",\n message: 'targetTSVersion must be one of: \"3.8\", \"4.0\", \"4.5\", \"5.0\"',\n value: cfg.targetTSVersion,\n });\n }\n }\n\n // Validate boolean fields\n const booleanFields = [\n \"includeRuntimeValidation\",\n \"includeErrorMessages\",\n \"treeShakeable\",\n \"strictGuards\",\n \"includeNullChecks\",\n \"verbose\",\n ];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.guardOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateProfileOptions(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typescript.profileOptions\",\n message: \"profileOptions must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate generateKind\n if (cfg.generateKind !== undefined) {\n if (![\"interface\", \"type\", \"both\"].includes(cfg.generateKind as string)) {\n errors.push({\n path: \"typescript.profileOptions.generateKind\",\n message: 'generateKind must be \"interface\", \"type\", or \"both\"',\n value: cfg.generateKind,\n });\n }\n }\n\n // Validate subfolder\n if (cfg.subfolder !== undefined && typeof cfg.subfolder !== \"string\") {\n errors.push({\n path: \"typescript.profileOptions.subfolder\",\n message: \"subfolder must be a string\",\n value: cfg.subfolder,\n });\n }\n\n // Validate boolean fields\n const booleanFields = [\"includeConstraints\", \"includeDocumentation\", \"strictMode\"];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typescript.profileOptions.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n return errors;\n }\n\n private validateTypeSchemaConfig(config: unknown): ConfigValidationError[] {\n const errors: ConfigValidationError[] = [];\n\n if (typeof config !== \"object\" || config === null) {\n errors.push({\n path: \"typeSchema\",\n message: \"typeSchema config must be an object\",\n value: config,\n });\n return errors;\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Validate boolean fields\n const booleanFields = [\"enablePersistence\", \"validateCached\", \"forceRegenerate\", \"shareCache\"];\n\n for (const field of booleanFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"boolean\") {\n errors.push({\n path: `typeSchema.${field}`,\n message: `${field} must be a boolean`,\n value: cfg[field],\n });\n }\n }\n\n // Validate string fields\n const stringFields = [\"cacheDir\", \"cacheKeyPrefix\"];\n\n for (const field of stringFields) {\n if (cfg[field] !== undefined && typeof cfg[field] !== \"string\") {\n errors.push({\n path: `typeSchema.${field}`,\n message: `${field} must be a string`,\n value: cfg[field],\n });\n }\n }\n\n // Validate maxAge\n if (cfg.maxAge !== undefined) {\n if (typeof cfg.maxAge !== \"number\" || cfg.maxAge <= 0) {\n errors.push({\n path: \"typeSchema.maxAge\",\n message: \"maxAge must be a positive number\",\n value: cfg.maxAge,\n });\n }\n }\n\n // Validate profiles\n if (cfg.profiles !== undefined) {\n if (typeof cfg.profiles !== \"object\" || cfg.profiles === null) {\n errors.push({\n path: \"typeSchema.profiles\",\n message: \"profiles must be an object\",\n value: cfg.profiles,\n });\n } else {\n const profiles = cfg.profiles as Record<string, unknown>;\n\n // Validate autoDetect\n if (profiles.autoDetect !== undefined && typeof profiles.autoDetect !== \"boolean\") {\n errors.push({\n path: \"typeSchema.profiles.autoDetect\",\n message: \"autoDetect must be a boolean\",\n value: profiles.autoDetect,\n });\n }\n }\n }\n\n return errors;\n }\n}\n\n/**\n * Configuration loader with autoloading capabilities\n */\nexport class ConfigLoader {\n private validator = new ConfigValidator();\n\n /**\n * Auto-load configuration from the current working directory\n */\n async autoload(workingDir: string = process.cwd()): Promise<Config> {\n const configPath = await this.findConfigFile(workingDir);\n\n if (configPath) {\n return this.loadFromFile(configPath);\n }\n\n // Return default config if no file found\n return { ...DEFAULT_CONFIG };\n }\n\n /**\n * Load configuration from a specific file\n */\n async loadFromFile(filePath: string): Promise<Config> {\n try {\n let config: unknown;\n\n if (filePath.endsWith(\".ts\") || filePath.endsWith(\"\")) {\n // Use dynamic import for TypeScript/JavaScript files\n const absolutePath = resolve(filePath);\n const importResult = await import(absolutePath);\n config = importResult.default || importResult;\n } else {\n // JSON files\n const content = await readFile(filePath, \"utf-8\");\n config = JSON.parse(content);\n }\n\n const validation = this.validator.validate(config);\n\n if (!validation.valid) {\n const errorMessages = validation.errors.map((e) => `${e.path}: ${e.message}`).join(\"\\n\");\n throw new Error(`Configuration validation failed:\\n${errorMessages}`);\n }\n\n // Merge with defaults\n if (!validation.config) throw new Error(\"Invalid configuration\");\n return this.mergeWithDefaults(validation.config);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config from ${filePath}: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * Find configuration file in the given directory\n */\n private async findConfigFile(startDir: string): Promise<string | null> {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = resolve(startDir, fileName);\n if (existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n }\n\n /**\n * Merge user config with defaults\n */\n private mergeWithDefaults(userConfig: Config): Config {\n const merged: Config = {\n ...DEFAULT_CONFIG,\n ...userConfig,\n typescript: {\n ...DEFAULT_CONFIG.typescript,\n ...userConfig.typescript,\n },\n };\n\n return merged;\n }\n}\n\n/**\n * Global config loader instance\n */\nexport const configLoader = new ConfigLoader();\n\n/**\n * Convenience function to auto-load configuration\n */\nexport async function loadConfig(workingDir?: string): Promise<Config> {\n return configLoader.autoload(workingDir);\n}\n\n/**\n * Type guard to check if an object is a valid Config\n */\nexport function isConfig(obj: unknown): obj is Config {\n const validator = new ConfigValidator();\n const result = validator.validate(obj);\n return result.valid;\n}\n\n/**\n * Define configuration with type safety and IntelliSense support.\n * Similar to Vite's defineConfig function pattern.\n *\n * @example\n * ```typescript\n * import { defineConfig } from \"@atomic-ehr/codegen\";\n *\n * export default defineConfig({\n * outputDir: \"./generated\",\n * packages: [\n * \"hl7.fhir.r4.core@4.0.1\",\n * \"hl7.fhir.us.core@6.1.0\"\n * ],\n * typescript: {\n * generateIndex: true,\n * strictMode: true\n * }\n * });\n * ```\n */\nexport function defineConfig(config: Config): Config {\n return config;\n}\n"]}
|