@atomic-ehr/codegen 0.0.4-canary.20251218111944.d18e50d → 0.0.4-canary.20251223082214.2093b82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/codegen-logger.ts","../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/utils.ts","../src/api/writer-generator/python.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/fhir-types/hl7-fhir-r4-core/CodeSystem.ts","../src/fhir-types/hl7-fhir-r4-core/ValueSet.ts","../src/typeschema/register.ts","../src/typeschema/index.ts","../src/typeschema/tree-shake.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts","../src/config.ts"],"names":["LogLevel","s","Path","fs","typeSchemas","resolve","schema","e","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","assert","pkg","f","treeShake","shaked","tsFieldName","tsName","fs4","CanonicalManager","existsSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 suppressLoggingLevel?: LogLevel[] | \"all\";\n /** Minimum log level to display. Messages below this level are suppressed. Default: INFO */\n level?: LogLevel;\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 level: LogLevel.INFO,\n ...options,\n };\n }\n\n /**\n * Check if a message at the given level should be logged\n */\n private shouldLog(messageLevel: LogLevel): boolean {\n const currentLevel = this.options.level ?? LogLevel.INFO;\n return messageLevel >= currentLevel;\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 if (!this.shouldLog(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 if (!this.shouldLog(LogLevel.ERROR)) return;\n console.error(this.formatMessage(\"X\", message, pc.red));\n // Show error details if verbose or log level is DEBUG\n const showDetails = this.options.level === LogLevel.DEBUG;\n if (error && showDetails) {\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 when log level is DEBUG or verbose is true)\n */\n debug(message: string): void {\n // Debug shows if verbose is true OR log level allows DEBUG\n if (this.shouldLog(LogLevel.DEBUG)) {\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 getLevel(): LogLevel {\n return this.options.level ?? LogLevel.INFO;\n }\n\n setLevel(level: LogLevel): void {\n this.options.level = level;\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","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\";\nimport type { ValueSet, ValueSetCompose } from \"@root/fhir-types/hl7-fhir-r4-core\";\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 packageMeta = (schema: TypeSchema): PackageMeta => {\n return {\n name: schema.identifier.name,\n version: schema.identifier.version,\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 isComplexTypeIdentifier = (id: Identifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\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 const isChoiceInstanceField = (field: Field | undefined): field is ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldInstance).choiceOf !== 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 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 as RichValueSet).package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n\nexport interface TypeschemaGeneratorOptions {\n logger?: import(\"../utils/codegen-logger\").CodegenLogger;\n treeshake?: string[];\n manager: ReturnType<typeof CanonicalManager>;\n /** Custom FHIR package registry URL */\n registry?: string;\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 * 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 type { ResolutionTree } from \"./register\";\nimport {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\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\nconst buildDependencyGraph = (schemas: RegularTypeSchema[]): Record<string, string[]> => {\n const nameToMap: Record<string, RegularTypeSchema> = {};\n for (const schema of schemas) {\n nameToMap[schema.identifier.name] = schema;\n }\n\n const graph: Record<string, string[]> = {};\n for (const schema of schemas) {\n const name = schema.identifier.name;\n const base = schema.base?.name;\n if (!graph[name]) {\n graph[name] = [];\n }\n if (base && nameToMap[base]) {\n graph[name].push(base);\n }\n }\n return graph;\n};\n\nconst topologicalSort = (graph: Record<string, string[]>): string[] => {\n const sorted: string[] = [];\n const visited: Record<string, boolean> = {};\n const temp: Record<string, boolean> = {};\n\n const visit = (node: string) => {\n if (temp[node]) {\n throw new Error(`Graph has cycles ${node}`);\n }\n if (!visited[node]) {\n temp[node] = true;\n for (const neighbor of graph[node] ?? []) {\n visit(neighbor);\n }\n temp[node] = false;\n visited[node] = true;\n sorted.push(node);\n }\n };\n\n for (const node in graph) {\n if (!visited[node]) {\n visit(node);\n }\n }\n return sorted;\n};\n\nexport const sortAsDeclarationSequence = (schemas: RegularTypeSchema[]): RegularTypeSchema[] => {\n const graph = buildDependencyGraph(schemas);\n const sorted = topologicalSort(graph);\n return sorted\n .map((name) => schemas.find((schema) => schema.identifier.name === name))\n .filter(Boolean) as RegularTypeSchema[];\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 = (\n schemas: TypeSchema[],\n { resolutionTree, logger }: { resolutionTree?: ResolutionTree; logger?: CodegenLogger },\n): 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) => {\n if (resolutionTree) {\n const resolution = resolutionTree[pkgName]?.[url]?.[0];\n if (resolution) {\n return index[url]?.[resolution.pkg.name];\n }\n }\n return index[url]?.[pkgName];\n };\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","import assert from \"node:assert\";\nimport fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { camelCase, pascalCase, snakeCase, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport { groupByPackages, sortAsDeclarationSequence, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { Field, Identifier, RegularTypeSchema } from \"@typeschema/types.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"str\",\n time: \"str\",\n date: \"str\",\n dateTime: \"str\",\n decimal: \"float\",\n integer: \"int\",\n unsignedInt: \"int\",\n positiveInt: \"PositiveInt\",\n integer64: \"int\",\n base64Binary: \"str\",\n uri: \"str\",\n url: \"str\",\n canonical: \"str\",\n oid: \"str\",\n uuid: \"str\",\n string: \"str\",\n code: \"str\",\n markdown: \"str\",\n id: \"str\",\n xhtml: \"str\",\n};\n\ntype StringFormatKey = \"snake_case\" | \"PascalCase\" | \"camelCase\";\n\nconst AVAILABLE_STRING_FORMATS: Record<StringFormatKey, (str: string) => string> = {\n snake_case: snakeCase,\n PascalCase: pascalCase,\n camelCase: camelCase,\n};\n\nconst PYTHON_KEYWORDS = new Set([\n \"False\",\n \"None\",\n \"True\",\n \"and\",\n \"as\",\n \"assert\",\n \"async\",\n \"await\",\n \"break\",\n \"class\",\n \"continue\",\n \"def\",\n \"del\",\n \"elif\",\n \"else\",\n \"except\",\n \"finally\",\n \"for\",\n \"from\",\n \"global\",\n \"if\",\n \"import\",\n \"in\",\n \"is\",\n \"lambda\",\n \"nonlocal\",\n \"not\",\n \"or\",\n \"pass\",\n \"raise\",\n \"return\",\n \"try\",\n \"while\",\n \"with\",\n \"yield\",\n \"List\",\n]);\n\nconst MAX_IMPORT_LINE_LENGTH = 100;\n\nexport interface PythonGeneratorOptions extends WriterOptions {\n allowExtraFields?: boolean;\n staticDir?: string;\n rootPackageName: string; /// e.g. <rootPackageName>.hl7_fhir_r4_core.Patient.\n fieldFormat: StringFormatKey;\n}\n\ninterface ImportGroup {\n [packageName: string]: string[];\n}\n\ninterface FieldInfo {\n name: string;\n type: string;\n defaultValue: string;\n}\n\nconst fixReservedWords = (name: string): string => {\n return PYTHON_KEYWORDS.has(name) ? `${name}_` : name;\n};\n\nconst injectSuperClasses = (name: string): string[] => {\n return name === \"Resource\" || name === \"Element\" ? [\"BaseModel\"] : [];\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\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 snakeCase(localName);\n};\n\nconst deriveResourceName = (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 pascalCase([resourceName, name].join(\"\"));\n }\n return pascalCase(id.name);\n};\n\nconst resolvePyAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n } else {\n return Path.resolve(__dirname, \"../../..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n }\n};\n\ntype TypeSchemaPackageGroups = {\n groupedResources: Record<string, RegularTypeSchema[]>;\n groupedComplexTypes: Record<string, RegularTypeSchema[]>;\n};\n\nexport class Python extends Writer<PythonGeneratorOptions> {\n private readonly nameFormatFunction: (name: string) => string;\n private tsIndex: TypeSchemaIndex | undefined;\n\n constructor(options: PythonGeneratorOptions) {\n super(options);\n this.nameFormatFunction = this.getFieldFormatFunction(options.fieldFormat);\n }\n\n override async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.tsIndex = tsIndex;\n const groups: TypeSchemaPackageGroups = {\n groupedComplexTypes: groupByPackages(tsIndex.collectComplexTypes()),\n groupedResources: groupByPackages(tsIndex.collectResources()),\n };\n this.generateRootPackages(groups);\n this.generateSDKPackages(groups);\n }\n\n private generateRootPackages(groups: TypeSchemaPackageGroups): void {\n this.generateRootInitFile(groups);\n fs.cpSync(resolvePyAssets(\"requirements.txt\"), Path.resolve(this.opts.outputDir, \"requirements.txt\"));\n }\n\n private generateSDKPackages(groups: TypeSchemaPackageGroups): void {\n this.generateComplexTypesPackages(groups.groupedComplexTypes);\n this.generateResourcePackages(groups);\n }\n\n private generateComplexTypesPackages(groupedComplexTypes: Record<string, RegularTypeSchema[]>): void {\n for (const [packageName, packageComplexTypes] of Object.entries(groupedComplexTypes)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateBasePy(packageComplexTypes);\n });\n }\n }\n\n private generateResourcePackages(groups: TypeSchemaPackageGroups): void {\n for (const [packageName, packageResources] of Object.entries(groups.groupedResources)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateResourcePackageContent(\n packageName,\n packageResources,\n groups.groupedComplexTypes[packageName] || [],\n );\n });\n }\n }\n\n private generateResourcePackageContent(\n packageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes: RegularTypeSchema[],\n ): void {\n const pyPackageName = this.pyFhirPackageByName(packageName);\n\n this.generateResourcePackageInit(pyPackageName, packageResources, packageComplexTypes);\n this.generateResourceFamilies(packageResources);\n\n for (const schema of packageResources) {\n this.generateResourceModule(schema);\n }\n }\n\n private generateRootInitFile(groups: TypeSchemaPackageGroups): void {\n this.cd(\"/\", () => {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n const pydanticModels: string[] = this.collectAndImportAllModels(groups);\n this.generateModelRebuilds(pydanticModels);\n });\n });\n }\n\n private collectAndImportAllModels(groups: TypeSchemaPackageGroups): string[] {\n const models: string[] = [];\n\n for (const packageName of Object.keys(groups.groupedResources)) {\n const fullPyPackageName = this.pyFhirPackageByName(packageName);\n models.push(...this.importComplexTypes(fullPyPackageName, groups.groupedComplexTypes[packageName]));\n models.push(...this.importResources(fullPyPackageName, false, groups.groupedResources[packageName]));\n }\n this.line();\n\n return models;\n }\n\n private generateModelRebuilds(models: string[]): void {\n for (const modelName of models.sort()) {\n this.line(`${modelName}.model_rebuild()`);\n }\n }\n\n private generateBasePy(packageComplexTypes: RegularTypeSchema[]): void {\n this.cat(\"base.py\", () => {\n this.generateDisclaimer();\n this.generateDefaultImports();\n this.line();\n this.generateComplexTypes(packageComplexTypes);\n this.line();\n });\n }\n\n private generateComplexTypes(complexTypes: RegularTypeSchema[]): void {\n for (const schema of sortAsDeclarationSequence(complexTypes)) {\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n }\n }\n\n private generateResourcePackageInit(\n fullPyPackageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes?: RegularTypeSchema[],\n ): void {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n this.importComplexTypes(fullPyPackageName, packageComplexTypes);\n const allResourceNames = this.importResources(fullPyPackageName, true, packageResources);\n this.line();\n this.generateExportsDeclaration(packageComplexTypes, allResourceNames);\n });\n }\n\n private importComplexTypes(fullPyPackageName: string, packageComplexTypes?: RegularTypeSchema[]): string[] {\n if (!packageComplexTypes || packageComplexTypes.length === 0) return [];\n\n const baseTypes = packageComplexTypes.map((t) => t.identifier.name).sort();\n this.pyImportFrom(`${fullPyPackageName}.base`, ...baseTypes);\n this.line();\n\n return baseTypes;\n }\n\n private buildImportLine(remaining: string[], maxImportLineLength: number): string {\n let line = \"\";\n while (remaining.length > 0 && line.length < maxImportLineLength) {\n const entity = remaining.shift();\n if (!entity) throw new Error(\"Unexpected empty entity\");\n if (line.length > 0) {\n line += \", \";\n }\n line += entity;\n }\n\n if (remaining.length > 0) {\n line += \", \\\\\";\n }\n\n return line;\n }\n\n private importResources(\n fullPyPackageName: string,\n importEmptyResources: boolean,\n packageResources?: RegularTypeSchema[],\n ): string[] {\n if (!packageResources || packageResources.length === 0) return [];\n const allResourceNames: string[] = [];\n\n for (const resource of packageResources) {\n const names = this.importOneResource(resource, fullPyPackageName);\n if (!importEmptyResources && !resource.fields) continue;\n allResourceNames.push(...names);\n }\n\n return allResourceNames;\n }\n\n private importOneResource(resource: RegularTypeSchema, fullPyPackageName: string): string[] {\n const moduleName = `${fullPyPackageName}.${snakeCase(resource.identifier.name)}`;\n const importNames = this.collectResourceImportNames(resource);\n\n this.pyImportFrom(moduleName, ...importNames);\n\n const names = [...importNames];\n\n if (this.shouldImportResourceFamily(resource)) {\n const familyName = `${resource.identifier.name}Family`;\n this.pyImportFrom(`${fullPyPackageName}.resource_families`, familyName);\n }\n\n return names;\n }\n\n private collectResourceImportNames(resource: RegularTypeSchema): string[] {\n const names = [deriveResourceName(resource.identifier)];\n\n for (const nested of resource.nested ?? []) {\n const nestedName = deriveResourceName(nested.identifier);\n names.push(nestedName);\n }\n\n return names;\n }\n\n private shouldImportResourceFamily(resource: RegularTypeSchema): boolean {\n assert(this.tsIndex !== undefined);\n return resource.identifier.kind === \"resource\" && this.tsIndex.resourceChildren(resource.identifier).length > 0;\n }\n\n private generateExportsDeclaration(\n packageComplexTypes: RegularTypeSchema[] | undefined,\n allResourceNames: string[],\n ): void {\n this.squareBlock([\"__all__\", \"=\"], () => {\n const allExports = [\n ...(packageComplexTypes || []).map((t) => t.identifier.name),\n ...allResourceNames,\n ].sort();\n\n for (const schemaName of allExports) {\n this.line(`'${schemaName}',`);\n }\n });\n }\n\n private generateResourceModule(schema: RegularTypeSchema): void {\n this.cat(`${snakeCase(schema.identifier.name)}.py`, () => {\n this.generateDisclaimer();\n this.generateDefaultImports();\n this.line();\n this.generateDependenciesImports(schema);\n this.line();\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n });\n }\n\n generateType(schema: RegularTypeSchema): void {\n const className = deriveResourceName(schema.identifier);\n const superClasses = this.getSuperClasses(schema);\n\n this.line(`class ${className}(${superClasses.join(\", \")}):`);\n this.indentBlock(() => {\n this.generateClassBody(schema);\n });\n this.line();\n }\n\n private getSuperClasses(schema: RegularTypeSchema): string[] {\n return [...(schema.base ? [schema.base.name] : []), ...injectSuperClasses(schema.identifier.name)];\n }\n\n private generateClassBody(schema: RegularTypeSchema): void {\n this.generateModelConfig();\n\n if (!schema.fields) {\n this.line(\"pass\");\n return;\n }\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceTypeField(schema);\n }\n\n this.generateFields(schema);\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceMethods(schema);\n }\n }\n\n private generateModelConfig(): void {\n const extraMode = this.opts.allowExtraFields ? \"allow\" : \"forbid\";\n this.line(`model_config = ConfigDict(validate_by_name=True, serialize_by_alias=True, extra=\"${extraMode}\")`);\n }\n\n private generateResourceTypeField(schema: RegularTypeSchema): void {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: str = Field(`);\n this.indentBlock(() => {\n this.line(`default='${schema.identifier.name}',`);\n this.line(`alias='resourceType',`);\n this.line(`serialization_alias='resourceType',`);\n this.line(\"frozen=True,\");\n this.line(`pattern='${schema.identifier.name}'`);\n });\n this.line(\")\");\n }\n\n private generateFields(schema: RegularTypeSchema): void {\n const sortedFields = Object.entries(schema.fields ?? []).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n if (\"choices\" in field && field.choices) continue;\n\n const fieldInfo = this.buildFieldInfo(fieldName, field);\n this.line(`${fieldInfo.name}: ${fieldInfo.type}${fieldInfo.defaultValue}`);\n }\n }\n\n private buildFieldInfo(fieldName: string, field: Field): FieldInfo {\n const pyFieldName = fixReservedWords(this.nameFormatFunction(fieldName));\n const fieldType = this.determineFieldType(field);\n const defaultValue = this.getFieldDefaultValue(field, fieldName);\n\n return {\n name: pyFieldName,\n type: fieldType,\n defaultValue: defaultValue,\n };\n }\n\n private determineFieldType(field: Field): string {\n let fieldType = field ? this.getBaseFieldType(field) : \"\";\n\n if (\"enum\" in field && field.enum) {\n const s: string = field.enum.map((e: string) => `\"${e}\"`).join(\", \");\n fieldType = `Literal[${s}]`;\n }\n\n if (field.array) {\n fieldType = `PyList[${fieldType}]`;\n }\n\n if (!field.required) {\n fieldType = `${fieldType} | None`;\n }\n\n return fieldType;\n }\n\n private getBaseFieldType(field: Field): string {\n if (\"type\" in field && field.type.kind === \"resource\") return `${field.type.name}Family`;\n\n if (\"type\" in field && field.type.kind === \"nested\") return deriveResourceName(field.type);\n\n if (\"type\" in field && field.type.kind === \"primitive-type\")\n return PRIMITIVE_TYPE_MAP[field.type.name] ?? \"str\";\n\n return \"type\" in field ? field.type.name : \"\";\n }\n\n private getFieldDefaultValue(field: any, fieldName: string): string {\n const aliasSpec = `alias=\"${fieldName}\", serialization_alias=\"${fieldName}\"`;\n\n if (!field.required) {\n return ` = Field(None, ${aliasSpec})`;\n }\n\n return ` = Field(${aliasSpec})`;\n }\n\n private generateResourceMethods(schema: RegularTypeSchema): void {\n const className = schema.identifier.name.toString();\n\n this.line();\n this.line(\"def to_json(self, indent: int | None = None) -> str:\");\n this.line(\" return self.model_dump_json(exclude_unset=True, exclude_none=True, indent=indent)\");\n this.line();\n this.line(\"@classmethod\");\n this.line(`def from_json(cls, json: str) -> ${className}:`);\n this.line(\" return cls.model_validate_json(json)\");\n }\n\n generateNestedTypes(schema: RegularTypeSchema): void {\n if (!schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype);\n }\n }\n\n private generateDefaultImports(): void {\n this.pyImportFrom(\"__future__\", \"annotations\");\n this.pyImportFrom(\"pydantic\", \"BaseModel\", \"ConfigDict\", \"Field\", \"PositiveInt\");\n this.pyImportFrom(\"typing\", \"List as PyList\", \"Literal\");\n }\n\n private generateDependenciesImports(schema: RegularTypeSchema): void {\n if (!schema.dependencies || schema.dependencies.length === 0) return;\n\n this.importComplexTypeDependencies(schema.dependencies);\n this.importResourceDependencies(schema.dependencies);\n }\n\n private importComplexTypeDependencies(dependencies: Identifier[]): void {\n const complexTypeDeps = dependencies.filter((dep) => dep.kind === \"complex-type\");\n const depsByPackage = this.groupDependenciesByPackage(complexTypeDeps);\n\n for (const [pyPackage, names] of Object.entries(depsByPackage)) {\n this.pyImportFrom(pyPackage, ...names.sort());\n }\n }\n\n private importResourceDependencies(dependencies: Identifier[]): void {\n const resourceDeps = dependencies.filter((dep) => dep.kind === \"resource\");\n\n for (const dep of resourceDeps) {\n this.pyImportType(dep);\n\n const familyName = `${pascalCase(dep.name)}Family`;\n const familyPackage = `${this.pyFhirPackage(dep)}.resource_families`;\n this.pyImportFrom(familyPackage, familyName);\n }\n }\n\n private groupDependenciesByPackage(dependencies: Identifier[]): ImportGroup {\n const grouped: ImportGroup = {};\n\n for (const dep of dependencies) {\n const pyPackage = this.pyPackage(dep);\n if (!grouped[pyPackage]) {\n grouped[pyPackage] = [];\n }\n grouped[pyPackage].push(dep.name);\n }\n\n return grouped;\n }\n\n pyImportFrom(pyPackage: string, ...entities: string[]): void {\n const oneLine = `from ${pyPackage} import ${entities.join(\", \")}`;\n\n if (this.shouldUseSingleLineImport(oneLine, entities)) {\n this.line(oneLine);\n } else {\n this.writeMultiLineImport(pyPackage, entities);\n }\n }\n\n private shouldUseSingleLineImport(oneLine: string, entities: string[]): boolean {\n return oneLine.length <= MAX_IMPORT_LINE_LENGTH || entities.length === 1;\n }\n\n private writeMultiLineImport(pyPackage: string, entities: string[]): void {\n this.line(`from ${pyPackage} import (\\\\`);\n this.indentBlock(() => {\n const remaining = [...entities];\n while (remaining.length > 0) {\n const line = this.buildImportLine(remaining, MAX_IMPORT_LINE_LENGTH);\n this.line(line);\n }\n });\n this.line(\")\");\n }\n\n private pyImportType(identifier: Identifier): void {\n this.pyImportFrom(this.pyPackage(identifier), pascalCase(identifier.name));\n }\n\n private generateResourceFamilies(packageResources: RegularTypeSchema[]): void {\n assert(this.tsIndex !== undefined);\n const packages = //this.helper.getPackages(packageResources, this.opts.rootPackageName);\n Object.keys(groupByPackages(packageResources)).map(\n (pkgName) => `${this.opts.rootPackageName}.${pkgName.replaceAll(\".\", \"_\")}`,\n );\n const families: Record<string, string[]> = {};\n for (const resource of this.tsIndex.collectResources()) {\n const children: string[] = this.tsIndex.resourceChildren(resource.identifier).map((c) => c.name);\n if (children.length > 0) {\n const familyName = `${resource.identifier.name}Family`;\n families[familyName] = children;\n }\n }\n const exportList = Object.keys(families);\n\n if (exportList.length === 0) return;\n\n this.buildResourceFamiliesFile(packages, families, exportList);\n }\n\n private buildResourceFamiliesFile(\n packages: string[],\n families: Record<string, string[]>,\n exportList: string[],\n ): void {\n this.cat(\"resource_families.py\", () => {\n this.generateDisclaimer();\n this.includeResourceFamilyValidator();\n this.line();\n this.generateFamilyDefinitions(packages, families);\n this.generateFamilyExports(exportList);\n });\n }\n\n private includeResourceFamilyValidator(): void {\n const content = fs.readFileSync(resolvePyAssets(\"resource_family_validator.py\"), \"utf-8\");\n this.line(content);\n }\n\n private generateFamilyDefinitions(packages: string[], families: Record<string, string[]>): void {\n this.line(`packages = [${packages.map((p) => `'${p}'`).join(\", \")}]`);\n this.line();\n\n for (const [familyName, resources] of Object.entries(families)) {\n this.generateFamilyDefinition(familyName, resources);\n }\n }\n\n private generateFamilyDefinition(familyName: string, resources: string[]): void {\n const listName = `${familyName}_resources`;\n\n this.line(`${listName} = [${resources.map((r) => `'${r}'`).join(\", \")}]`);\n this.line();\n\n this.line(`def validate_and_downcast_${familyName}(v: Any) -> Any:`);\n this.line(` return validate_and_downcast(v, packages, ${listName})`);\n this.line();\n\n this.line(`type ${familyName} = Annotated[Any, BeforeValidator(validate_and_downcast_${familyName})]`);\n this.line();\n }\n\n private generateFamilyExports(exportList: string[]): void {\n this.line(`__all__ = [${exportList.map((e) => `'${e}'`).join(\", \")}]`);\n }\n\n private buildPyPackageName(packageName: string): string {\n const parts = packageName ? [snakeCase(packageName)] : [\"\"];\n return parts.join(\".\");\n }\n\n private pyFhirPackage(identifier: Identifier): string {\n return this.pyFhirPackageByName(identifier.package);\n }\n\n private pyFhirPackageByName(name: string): string {\n return [this.opts.rootPackageName, this.buildPyPackageName(name)].join(\".\");\n }\n\n private pyPackage(identifier: Identifier): string {\n if (identifier.kind === \"complex-type\") {\n return `${this.pyFhirPackage(identifier)}.base`;\n }\n if (identifier.kind === \"resource\") {\n return [this.pyFhirPackage(identifier), snakeCase(identifier.name)].join(\".\");\n }\n return this.pyFhirPackage(identifier);\n }\n\n getFieldFormatFunction(format: StringFormatKey): (name: string) => string {\n if (!AVAILABLE_STRING_FORMATS[format]) {\n this.logger()?.warn(`Unknown field format '${format}'. Defaulting to SnakeCase.`);\n this.logger()?.warn(`Supported formats: ${Object.keys(AVAILABLE_STRING_FORMATS).join(\", \")}`);\n return snakeCase;\n }\n return AVAILABLE_STRING_FORMATS[format];\n }\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 status: \"active\",\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 assert from \"node:assert\";\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodeSystem, CodeSystemConcept } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\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) {\n return valueSet.expansion.contains\n .filter((item) => item.code !== undefined)\n .map((item) => {\n assert(item.code);\n return {\n code: item.code,\n display: item.display,\n system: item.system,\n };\n });\n }\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","// 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\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface CodeSystemConcept extends BackboneElement {\n code: string;\n concept?: CodeSystemConcept[];\n definition?: string;\n designation?: CodeSystemConceptDesignation[];\n display?: string;\n property?: CodeSystemConceptProperty[];\n}\n\nexport interface CodeSystemConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface CodeSystemConceptProperty extends BackboneElement {\n code: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueCoding?: Coding;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n}\n\nexport interface CodeSystemFilter extends BackboneElement {\n code: string;\n description?: string;\n operator: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\")[];\n value: string;\n}\n\nexport interface CodeSystemProperty extends BackboneElement {\n code: string;\n description?: string;\n type: (\"code\" | \"Coding\" | \"string\" | \"integer\" | \"boolean\" | \"dateTime\" | \"decimal\");\n uri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/CodeSystem\nexport interface CodeSystem extends DomainResource {\n resourceType: \"CodeSystem\";\n\n caseSensitive?: boolean;\n compositional?: boolean;\n concept?: CodeSystemConcept[];\n contact?: ContactDetail[];\n content: (\"not-present\" | \"example\" | \"fragment\" | \"complete\" | \"supplement\");\n copyright?: string;\n count?: number;\n date?: string;\n description?: string;\n experimental?: boolean;\n filter?: CodeSystemFilter[];\n hierarchyMeaning?: (\"grouped-by\" | \"is-a\" | \"part-of\" | \"classified-with\");\n identifier?: Identifier[];\n jurisdiction?: CodeableConcept[];\n name?: string;\n property?: CodeSystemProperty[];\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n supplements?: string;\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n valueSet?: string;\n version?: string;\n versionNeeded?: boolean;\n}\nexport const isCodeSystem = (resource: unknown): resource is CodeSystem => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"CodeSystem\";\n}\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\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface ValueSetCompose extends BackboneElement {\n exclude?: ValueSetComposeInclude[];\n inactive?: boolean;\n include: ValueSetComposeInclude[];\n lockedDate?: string;\n}\n\nexport interface ValueSetComposeInclude extends BackboneElement {\n concept?: ValueSetComposeIncludeConcept[];\n filter?: ValueSetComposeIncludeFilter[];\n system?: string;\n valueSet?: string[];\n version?: string;\n}\n\nexport interface ValueSetComposeIncludeConcept extends BackboneElement {\n code: string;\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n}\n\nexport interface ValueSetComposeIncludeConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface ValueSetComposeIncludeFilter extends BackboneElement {\n op: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\");\n property: string;\n value: string;\n}\n\nexport interface ValueSetExpansion extends BackboneElement {\n contains?: ValueSetExpansionContains[];\n identifier?: string;\n offset?: number;\n parameter?: ValueSetExpansionParameter[];\n timestamp: string;\n total?: number;\n}\n\nexport interface ValueSetExpansionContains extends BackboneElement {\n abstract?: boolean;\n code?: string;\n contains?: ValueSetExpansionContains[];\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n inactive?: boolean;\n system?: string;\n version?: string;\n}\n\nexport interface ValueSetExpansionParameter extends BackboneElement {\n name: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n valueUri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/ValueSet\nexport interface ValueSet extends DomainResource {\n resourceType: \"ValueSet\";\n\n compose?: ValueSetCompose;\n contact?: ContactDetail[];\n copyright?: string;\n date?: string;\n description?: string;\n expansion?: ValueSetExpansion;\n experimental?: boolean;\n identifier?: Identifier[];\n immutable?: boolean;\n jurisdiction?: CodeableConcept[];\n name?: string;\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n version?: string;\n}\nexport const isValueSet = (resource: unknown): resource is ValueSet => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"ValueSet\";\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 CodeSystem, isCodeSystem, isValueSet, type ValueSet } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { CanonicalUrl, Name, PackageMeta, RichFHIRSchema, RichValueSet } from \"@typeschema/types\";\nimport { enrichFHIRSchema, enrichValueSet, packageMetaToFhir, packageMetaToNpm } 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 resolutionTree: () => ResolutionTree;\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\n// FIXME: Tiding: PackageName, PkgId, PkgName\ntype PkgId = string;\ntype PkgName = 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>;\nexport type ResolutionTree = Record<PkgName, Record<CanonicalUrl, { deep: number; pkg: PackageMeta }[]>>;\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 /** Custom FHIR package registry URL */\n registry?: string;\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 resolutionTree: () => {\n const res: ResolutionTree = {};\n for (const [_pkgId, pkgIndex] of Object.entries(resolver)) {\n const pkgName = pkgIndex.pkg.name;\n res[pkgName] = {};\n for (const [surl, resolutions] of Object.entries(pkgIndex.canonicalResolution)) {\n const url = surl as CanonicalUrl;\n res[pkgName][url] = [];\n for (const resolution of resolutions) {\n res[pkgName][url].push({ deep: resolution.deep, pkg: resolution.pkg });\n }\n }\n }\n return res;\n },\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 registry: conf.registry || undefined,\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 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 assert from \"node:assert\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { extractDependencies } from \"./core/transformer\";\nimport type { ResolutionTree } from \"./register\";\nimport {\n type CanonicalUrl,\n type Field,\n isBindingSchema,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"./utils\";\n\nexport type TreeShake = Record<string, Record<string, TreeShakeRule>>;\n\nexport type TreeShakeRule = { ignoreFields?: string[]; selectFields?: string[] };\n\nconst mutableSelectFields = (schema: RegularTypeSchema, selectFields: string[]) => {\n const selectedFields: Record<string, Field> = {};\n\n const selectPolimorphic: Record<string, { declaration?: string[]; instances?: string[] }> = {};\n for (const fieldName of selectFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n\n if (isChoiceDeclarationField(field)) {\n if (!selectPolimorphic[fieldName]) selectPolimorphic[fieldName] = {};\n selectPolimorphic[fieldName].declaration = field.choices;\n } else if (isChoiceInstanceField(field)) {\n const choiceName = field.choiceOf;\n if (!selectPolimorphic[choiceName]) selectPolimorphic[choiceName] = {};\n selectPolimorphic[choiceName].instances = [...(selectPolimorphic[choiceName].instances ?? []), fieldName];\n } else {\n selectedFields[fieldName] = field;\n }\n }\n\n for (const [choiceName, { declaration, instances }] of Object.entries(selectPolimorphic)) {\n const choices = instances ?? declaration;\n assert(choices);\n for (const choiceInstanceName of choices) {\n const field = schema.fields?.[choiceInstanceName];\n assert(field);\n selectedFields[choiceInstanceName] = field;\n }\n const decl = schema.fields?.[choiceName];\n assert(decl);\n selectedFields[choiceName] = { ...decl, choices: choices };\n }\n schema.fields = selectedFields;\n};\n\nconst mutableIgnoreFields = (schema: RegularTypeSchema, ignoreFields: string[]) => {\n for (const fieldName of ignoreFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n if (isChoiceDeclarationField(field)) {\n for (const choiceName of field.choices) {\n delete schema.fields[choiceName];\n }\n }\n\n if (isChoiceInstanceField(field)) {\n const choiceDeclaration = schema.fields[field.choiceOf];\n assert(isChoiceDeclarationField(choiceDeclaration));\n choiceDeclaration.choices = choiceDeclaration.choices.filter((c) => c !== fieldName);\n if (choiceDeclaration.choices.length === 0) {\n delete schema.fields[field.choiceOf];\n }\n }\n\n delete schema.fields[fieldName];\n }\n }\n};\n\nexport const treeShakeTypeSchema = (schema: TypeSchema, rule: TreeShakeRule, _logger?: CodegenLogger): TypeSchema => {\n schema = structuredClone(schema);\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n if (rule.selectFields) {\n if (rule.ignoreFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableSelectFields(schema, rule.selectFields);\n }\n\n if (rule.ignoreFields) {\n if (rule.selectFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableIgnoreFields(schema, rule.ignoreFields);\n }\n\n if (schema.nested) {\n const usedTypes = new Set<CanonicalUrl>();\n const collectUsedNestedTypes = (s: RegularTypeSchema | NestedType) => {\n Object.values(s.fields ?? {})\n .filter(isNotChoiceDeclarationField)\n .filter((f) => isNestedIdentifier(f.type))\n .forEach((f) => {\n const url = f.type.url;\n if (!usedTypes.has(url)) {\n usedTypes.add(url);\n const nestedTypeDef = schema.nested?.find((f) => f.identifier.url === url);\n assert(nestedTypeDef);\n collectUsedNestedTypes(nestedTypeDef);\n }\n });\n };\n collectUsedNestedTypes(schema);\n schema.nested = schema.nested.filter((n) => usedTypes.has(n.identifier.url));\n }\n\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n return schema;\n};\n\nexport const treeShake = (\n tsIndex: TypeSchemaIndex,\n treeShake: TreeShake,\n { resolutionTree, logger }: { resolutionTree?: ResolutionTree; logger?: CodegenLogger },\n): 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)\n throw new Error(\n `Dependent schema ${JSON.stringify(dep)} not found for ${JSON.stringify(schema.identifier)}`,\n );\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, { resolutionTree, logger });\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 isComplexTypeIdentifier,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type Name,\n type ProfileTypeSchema,\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 tsModulePath = (id: Identifier): string => {\n return `${tsFhirPackageDir(id.package)}/${tsModuleName(id)}`;\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 primitiveTypeExtension: 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(tsIndex: TypeSchemaIndex, 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: `../${tsModulePath(dep)}`,\n name: uppercaseFirstLetter(dep.name),\n dep: dep,\n });\n } else if (isNestedIdentifier(dep)) {\n const ndep = { ...dep };\n ndep.name = canonicalToName(dep.url) as Name;\n imports.push({\n tsPackage: `../${tsModulePath(ndep)}`,\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 if (\n this.withPrimitiveTypeExtension(schema) &&\n schema.identifier.name !== \"Element\" &&\n schema.dependencies.find((e) => e.name === \"Element\") === undefined\n ) {\n const elementUrl = \"http://hl7.org/fhir/StructureDefinition/Element\" as CanonicalUrl;\n const element = tsIndex.resolveByUrl(schema.identifier.package, elementUrl);\n if (!element) throw new Error(`'${elementUrl}' not found for ${schema.identifier.package}.`);\n\n this.tsImportType(`../${tsModulePath(element.identifier)}`, \"Element\");\n }\n }\n }\n\n generateComplexTypeReexports(schema: RegularTypeSchema) {\n const complexTypeDeps = schema.dependencies?.filter(isComplexTypeIdentifier).map((dep) => ({\n tsPackage: `../${tsModulePath(dep)}`,\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): void {\n const extFieldName = tsFieldName(`_${fieldName}`);\n this.lineSM(`${extFieldName}?: Element`);\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 (this.withPrimitiveTypeExtension(schema)) {\n if (isPrimitiveIdentifier(field.type)) {\n this.addFieldExtension(fieldName);\n }\n }\n }\n });\n }\n\n withPrimitiveTypeExtension(schema: TypeSchema): boolean {\n if (!this.opts.primitiveTypeExtension) return false;\n if (!isSpecializationTypeSchema(schema)) return false;\n for (const field of Object.values(schema.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n if (isPrimitiveIdentifier(field.type)) return true;\n }\n return false;\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(tsIndex, 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(tsIndex, 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.ts\";\nimport { Python, type PythonGeneratorOptions } from \"@root/api/writer-generator/python\";\nimport { generateTypeSchemas } from \"@root/typeschema\";\nimport { registerFromManager } from \"@root/typeschema/register\";\nimport { type TreeShake, treeShake } from \"@root/typeschema/tree-shake\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n extractNameFromCanonical,\n type PackageMeta,\n packageMetaToFhir,\n packageMetaToNpm,\n type TypeSchema,\n} from \"@typeschema/types\";\nimport type { TypeSchemaConfig } from \"../config\";\nimport { CodegenLogger, createLogger, type LogLevel } 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 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 /** Log level for the logger. Default: INFO */\n logLevel?: LogLevel;\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry?: string;\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\nexport interface LocalStructureDefinitionConfig {\n package: PackageMeta;\n path: string;\n dependencies?: PackageMeta[];\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\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\" | \"logLevel\" | \"registry\"\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 private localStructurePackages: LocalStructureDefinitionConfig[] = [];\n private localTgzArchives: string[] = [];\n progressCallback: any;\n private typeSchemaConfig?: TypeSchemaConfig;\n\n constructor(options: APIBuilderOptions = {}) {\n this.options = {\n outputDir: options.outputDir || \"./generated\",\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 registry: options.registry,\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 prefix: \"API\",\n level: options.logLevel,\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 /**\n * Set a custom FHIR package registry URL\n * @param url The registry URL (default: https://fs.get-ig.org/pkgs/)\n */\n registry(url: string): APIBuilder {\n this.options.registry = url;\n return this;\n }\n\n localStructureDefinitions(config: LocalStructureDefinitionConfig): APIBuilder {\n this.localStructurePackages.push(config);\n return this;\n }\n\n localTgzPackage(archivePath: string): APIBuilder {\n this.localTgzArchives.push(Path.resolve(archivePath));\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 primitiveTypeExtension: true,\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 python(userOptions: Partial<PythonGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"#\",\n };\n\n const defaultPyOpts: PythonGeneratorOptions = {\n ...defaultWriterOpts,\n rootPackageName: \"fhir_types\",\n fieldFormat: \"snake_case\",\n };\n\n const opts: PythonGeneratorOptions = {\n ...defaultPyOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new Python(opts);\n this.generators.set(\"python\", generator);\n this.logger.debug(`Configured python generator`);\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 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 setLogLevel(level: LogLevel): APIBuilder {\n this.logger?.setLevel(level);\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 =\n this.options.manager ||\n CanonicalManager({\n packages: this.packages,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: this.options.registry || undefined,\n });\n\n if (this.localStructurePackages.length > 0) {\n for (const config of this.localStructurePackages) {\n this.logger.info(\n `Registering local StructureDefinitions for ${config.package.name}@${config.package.version}`,\n );\n await manager.addLocalPackage({\n name: config.package.name,\n version: config.package.version,\n path: config.path,\n dependencies: config.dependencies?.map((dep) => packageMetaToNpm(dep)),\n });\n }\n }\n\n for (const archivePath of this.localTgzArchives) {\n this.logger.info(`Registering local tgz package: ${archivePath}`);\n await manager.addTgzPackage({ archivePath });\n }\n\n const ref2meta = await manager.init();\n\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 const tsIndexOpts = {\n resolutionTree: register.resolutionTree(),\n logger: this.logger,\n };\n let tsIndex = mkTypeSchemaIndex(typeSchemas, tsIndexOpts);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake, tsIndexOpts);\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 this.packages = [];\n this.localStructurePackages = [];\n this.localTgzArchives = [];\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 // Package registry\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry?: 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 registry: \"\",\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"]}
1
+ {"version":3,"sources":["../src/utils/codegen-logger.ts","../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/utils.ts","../src/api/writer-generator/python.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/fhir-types/hl7-fhir-r4-core/CodeSystem.ts","../src/fhir-types/hl7-fhir-r4-core/ValueSet.ts","../src/typeschema/register.ts","../src/typeschema/index.ts","../src/typeschema/tree-shake.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts","../src/config.ts"],"names":["LogLevel","s","Path","__filename","fs","typeSchemas","resolve","schema","e","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","fileURLToPath","assert","pkg","f","treeShake","shaked","tsFieldName","tsName","fs4","CanonicalManager","existsSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 type LogLevelString = keyof typeof LogLevel;\n\nexport const parseLogLevel = (level: LogLevelString): LogLevel => {\n switch (level.toUpperCase()) {\n case \"DEBUG\":\n return LogLevel.DEBUG;\n case \"INFO\":\n return LogLevel.INFO;\n case \"WARN\":\n return LogLevel.WARN;\n case \"ERROR\":\n return LogLevel.ERROR;\n case \"SILENT\":\n return LogLevel.SILENT;\n default:\n throw new Error(`Invalid log level: ${level}`);\n }\n};\n\nexport interface LogOptions {\n prefix?: string;\n timestamp?: boolean;\n suppressLoggingLevel?: LogLevel[] | \"all\";\n /** Minimum log level to display. Messages below this level are suppressed. Default: INFO */\n level?: LogLevel;\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 level: LogLevel.INFO,\n ...options,\n };\n }\n\n /**\n * Check if a message at the given level should be logged\n */\n private shouldLog(messageLevel: LogLevel): boolean {\n const currentLevel = this.options.level ?? LogLevel.INFO;\n return messageLevel >= currentLevel;\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 if (!this.shouldLog(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 if (!this.shouldLog(LogLevel.ERROR)) return;\n console.error(this.formatMessage(\"X\", message, pc.red));\n // Show error details if verbose or log level is DEBUG\n const showDetails = this.options.level === LogLevel.DEBUG;\n if (error && showDetails) {\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 when log level is DEBUG or verbose is true)\n */\n debug(message: string): void {\n // Debug shows if verbose is true OR log level allows DEBUG\n if (this.shouldLog(LogLevel.DEBUG)) {\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 getLevel(): LogLevel {\n return this.options.level ?? LogLevel.INFO;\n }\n\n setLevel(level: LogLevel): void {\n this.options.level = level;\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","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\";\nimport type { ValueSet, ValueSetCompose } from \"@root/fhir-types/hl7-fhir-r4-core\";\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 packageMeta = (schema: TypeSchema): PackageMeta => {\n return {\n name: schema.identifier.name,\n version: schema.identifier.version,\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 isComplexTypeIdentifier = (id: Identifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\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 const isChoiceInstanceField = (field: Field | undefined): field is ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldInstance).choiceOf !== 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 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 as RichValueSet).package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n\nexport interface TypeschemaGeneratorOptions {\n logger?: import(\"../utils/codegen-logger\").CodegenLogger;\n treeshake?: string[];\n manager: ReturnType<typeof CanonicalManager>;\n /** Custom FHIR package registry URL */\n registry?: string;\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 { fileURLToPath } from \"node:url\";\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 resolveCSharpAssets = (fn: string) => {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = Path.dirname(__filename);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n } else {\n return Path.resolve(__dirname, \"../../../..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n }\n};\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 rootNamespace: 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.rootNamespace,\n ...packages.map((pkg) => `${this.opts.rootNamespace}.${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.rootNamespace);\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.rootNamespace}.${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.rootNamespace}.${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.rootNamespace}`);\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.inMemoryOnly) return;\n const sourceDir = resolveCSharpAssets(\"\");\n fs.cpSync(sourceDir, this.opts.outputDir, { recursive: true });\n }\n\n private generateHelperFile(): void {\n if (this.opts.inMemoryOnly) return;\n const sourceFile = resolveCSharpAssets(\"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 * as Path from \"node:path\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport * as YAML from \"yaml\";\nimport type { ResolutionTree } from \"./register\";\nimport {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\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\nconst buildDependencyGraph = (schemas: RegularTypeSchema[]): Record<string, string[]> => {\n const nameToMap: Record<string, RegularTypeSchema> = {};\n for (const schema of schemas) {\n nameToMap[schema.identifier.name] = schema;\n }\n\n const graph: Record<string, string[]> = {};\n for (const schema of schemas) {\n const name = schema.identifier.name;\n const base = schema.base?.name;\n if (!graph[name]) {\n graph[name] = [];\n }\n if (base && nameToMap[base]) {\n graph[name].push(base);\n }\n }\n return graph;\n};\n\nconst topologicalSort = (graph: Record<string, string[]>): string[] => {\n const sorted: string[] = [];\n const visited: Record<string, boolean> = {};\n const temp: Record<string, boolean> = {};\n\n const visit = (node: string) => {\n if (temp[node]) {\n throw new Error(`Graph has cycles ${node}`);\n }\n if (!visited[node]) {\n temp[node] = true;\n for (const neighbor of graph[node] ?? []) {\n visit(neighbor);\n }\n temp[node] = false;\n visited[node] = true;\n sorted.push(node);\n }\n };\n\n for (const node in graph) {\n if (!visited[node]) {\n visit(node);\n }\n }\n return sorted;\n};\n\nexport const sortAsDeclarationSequence = (schemas: RegularTypeSchema[]): RegularTypeSchema[] => {\n const graph = buildDependencyGraph(schemas);\n const sorted = topologicalSort(graph);\n return sorted\n .map((name) => schemas.find((schema) => schema.identifier.name === name))\n .filter(Boolean) as RegularTypeSchema[];\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 = (\n schemas: TypeSchema[],\n { resolutionTree, logger }: { resolutionTree?: ResolutionTree; logger?: CodegenLogger },\n): 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) => {\n if (resolutionTree) {\n const resolution = resolutionTree[pkgName]?.[url]?.[0];\n if (resolution) {\n return index[url]?.[resolution.pkg.name];\n }\n }\n return index[url]?.[pkgName];\n };\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","import assert from \"node:assert\";\nimport fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { camelCase, pascalCase, snakeCase, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport { groupByPackages, sortAsDeclarationSequence, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { Field, Identifier, RegularTypeSchema } from \"@typeschema/types.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"str\",\n time: \"str\",\n date: \"str\",\n dateTime: \"str\",\n decimal: \"float\",\n integer: \"int\",\n unsignedInt: \"int\",\n positiveInt: \"PositiveInt\",\n integer64: \"int\",\n base64Binary: \"str\",\n uri: \"str\",\n url: \"str\",\n canonical: \"str\",\n oid: \"str\",\n uuid: \"str\",\n string: \"str\",\n code: \"str\",\n markdown: \"str\",\n id: \"str\",\n xhtml: \"str\",\n};\n\ntype StringFormatKey = \"snake_case\" | \"PascalCase\" | \"camelCase\";\n\nconst AVAILABLE_STRING_FORMATS: Record<StringFormatKey, (str: string) => string> = {\n snake_case: snakeCase,\n PascalCase: pascalCase,\n camelCase: camelCase,\n};\n\nconst PYTHON_KEYWORDS = new Set([\n \"False\",\n \"None\",\n \"True\",\n \"and\",\n \"as\",\n \"assert\",\n \"async\",\n \"await\",\n \"break\",\n \"class\",\n \"continue\",\n \"def\",\n \"del\",\n \"elif\",\n \"else\",\n \"except\",\n \"finally\",\n \"for\",\n \"from\",\n \"global\",\n \"if\",\n \"import\",\n \"in\",\n \"is\",\n \"lambda\",\n \"nonlocal\",\n \"not\",\n \"or\",\n \"pass\",\n \"raise\",\n \"return\",\n \"try\",\n \"while\",\n \"with\",\n \"yield\",\n \"List\",\n]);\n\nconst MAX_IMPORT_LINE_LENGTH = 100;\n\nexport interface PythonGeneratorOptions extends WriterOptions {\n allowExtraFields?: boolean;\n staticDir?: string;\n rootPackageName: string; /// e.g. <rootPackageName>.hl7_fhir_r4_core.Patient.\n fieldFormat: StringFormatKey;\n}\n\ninterface ImportGroup {\n [packageName: string]: string[];\n}\n\ninterface FieldInfo {\n name: string;\n type: string;\n defaultValue: string;\n}\n\nconst fixReservedWords = (name: string): string => {\n return PYTHON_KEYWORDS.has(name) ? `${name}_` : name;\n};\n\nconst injectSuperClasses = (name: string): string[] => {\n return name === \"Resource\" || name === \"Element\" ? [\"BaseModel\"] : [];\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\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 snakeCase(localName);\n};\n\nconst deriveResourceName = (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 pascalCase([resourceName, name].join(\"\"));\n }\n return pascalCase(id.name);\n};\n\nconst resolvePyAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n } else {\n return Path.resolve(__dirname, \"../../..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n }\n};\n\ntype TypeSchemaPackageGroups = {\n groupedResources: Record<string, RegularTypeSchema[]>;\n groupedComplexTypes: Record<string, RegularTypeSchema[]>;\n};\n\nexport class Python extends Writer<PythonGeneratorOptions> {\n private readonly nameFormatFunction: (name: string) => string;\n private tsIndex: TypeSchemaIndex | undefined;\n\n constructor(options: PythonGeneratorOptions) {\n super(options);\n this.nameFormatFunction = this.getFieldFormatFunction(options.fieldFormat);\n }\n\n override async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.tsIndex = tsIndex;\n const groups: TypeSchemaPackageGroups = {\n groupedComplexTypes: groupByPackages(tsIndex.collectComplexTypes()),\n groupedResources: groupByPackages(tsIndex.collectResources()),\n };\n this.generateRootPackages(groups);\n this.generateSDKPackages(groups);\n }\n\n private generateRootPackages(groups: TypeSchemaPackageGroups): void {\n this.generateRootInitFile(groups);\n fs.cpSync(resolvePyAssets(\"requirements.txt\"), Path.resolve(this.opts.outputDir, \"requirements.txt\"));\n }\n\n private generateSDKPackages(groups: TypeSchemaPackageGroups): void {\n this.generateComplexTypesPackages(groups.groupedComplexTypes);\n this.generateResourcePackages(groups);\n }\n\n private generateComplexTypesPackages(groupedComplexTypes: Record<string, RegularTypeSchema[]>): void {\n for (const [packageName, packageComplexTypes] of Object.entries(groupedComplexTypes)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateBasePy(packageComplexTypes);\n });\n }\n }\n\n private generateResourcePackages(groups: TypeSchemaPackageGroups): void {\n for (const [packageName, packageResources] of Object.entries(groups.groupedResources)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateResourcePackageContent(\n packageName,\n packageResources,\n groups.groupedComplexTypes[packageName] || [],\n );\n });\n }\n }\n\n private generateResourcePackageContent(\n packageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes: RegularTypeSchema[],\n ): void {\n const pyPackageName = this.pyFhirPackageByName(packageName);\n\n this.generateResourcePackageInit(pyPackageName, packageResources, packageComplexTypes);\n this.generateResourceFamilies(packageResources);\n\n for (const schema of packageResources) {\n this.generateResourceModule(schema);\n }\n }\n\n private generateRootInitFile(groups: TypeSchemaPackageGroups): void {\n this.cd(\"/\", () => {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n const pydanticModels: string[] = this.collectAndImportAllModels(groups);\n this.generateModelRebuilds(pydanticModels);\n });\n });\n }\n\n private collectAndImportAllModels(groups: TypeSchemaPackageGroups): string[] {\n const models: string[] = [];\n\n for (const packageName of Object.keys(groups.groupedResources)) {\n const fullPyPackageName = this.pyFhirPackageByName(packageName);\n models.push(...this.importComplexTypes(fullPyPackageName, groups.groupedComplexTypes[packageName]));\n models.push(...this.importResources(fullPyPackageName, false, groups.groupedResources[packageName]));\n }\n this.line();\n\n return models;\n }\n\n private generateModelRebuilds(models: string[]): void {\n for (const modelName of models.sort()) {\n this.line(`${modelName}.model_rebuild()`);\n }\n }\n\n private generateBasePy(packageComplexTypes: RegularTypeSchema[]): void {\n this.cat(\"base.py\", () => {\n this.generateDisclaimer();\n this.generateDefaultImports();\n this.line();\n this.generateComplexTypes(packageComplexTypes);\n this.line();\n });\n }\n\n private generateComplexTypes(complexTypes: RegularTypeSchema[]): void {\n for (const schema of sortAsDeclarationSequence(complexTypes)) {\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n }\n }\n\n private generateResourcePackageInit(\n fullPyPackageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes?: RegularTypeSchema[],\n ): void {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n this.importComplexTypes(fullPyPackageName, packageComplexTypes);\n const allResourceNames = this.importResources(fullPyPackageName, true, packageResources);\n this.line();\n this.generateExportsDeclaration(packageComplexTypes, allResourceNames);\n });\n }\n\n private importComplexTypes(fullPyPackageName: string, packageComplexTypes?: RegularTypeSchema[]): string[] {\n if (!packageComplexTypes || packageComplexTypes.length === 0) return [];\n\n const baseTypes = packageComplexTypes.map((t) => t.identifier.name).sort();\n this.pyImportFrom(`${fullPyPackageName}.base`, ...baseTypes);\n this.line();\n\n return baseTypes;\n }\n\n private buildImportLine(remaining: string[], maxImportLineLength: number): string {\n let line = \"\";\n while (remaining.length > 0 && line.length < maxImportLineLength) {\n const entity = remaining.shift();\n if (!entity) throw new Error(\"Unexpected empty entity\");\n if (line.length > 0) {\n line += \", \";\n }\n line += entity;\n }\n\n if (remaining.length > 0) {\n line += \", \\\\\";\n }\n\n return line;\n }\n\n private importResources(\n fullPyPackageName: string,\n importEmptyResources: boolean,\n packageResources?: RegularTypeSchema[],\n ): string[] {\n if (!packageResources || packageResources.length === 0) return [];\n const allResourceNames: string[] = [];\n\n for (const resource of packageResources) {\n const names = this.importOneResource(resource, fullPyPackageName);\n if (!importEmptyResources && !resource.fields) continue;\n allResourceNames.push(...names);\n }\n\n return allResourceNames;\n }\n\n private importOneResource(resource: RegularTypeSchema, fullPyPackageName: string): string[] {\n const moduleName = `${fullPyPackageName}.${snakeCase(resource.identifier.name)}`;\n const importNames = this.collectResourceImportNames(resource);\n\n this.pyImportFrom(moduleName, ...importNames);\n\n const names = [...importNames];\n\n if (this.shouldImportResourceFamily(resource)) {\n const familyName = `${resource.identifier.name}Family`;\n this.pyImportFrom(`${fullPyPackageName}.resource_families`, familyName);\n }\n\n return names;\n }\n\n private collectResourceImportNames(resource: RegularTypeSchema): string[] {\n const names = [deriveResourceName(resource.identifier)];\n\n for (const nested of resource.nested ?? []) {\n const nestedName = deriveResourceName(nested.identifier);\n names.push(nestedName);\n }\n\n return names;\n }\n\n private shouldImportResourceFamily(resource: RegularTypeSchema): boolean {\n assert(this.tsIndex !== undefined);\n return resource.identifier.kind === \"resource\" && this.tsIndex.resourceChildren(resource.identifier).length > 0;\n }\n\n private generateExportsDeclaration(\n packageComplexTypes: RegularTypeSchema[] | undefined,\n allResourceNames: string[],\n ): void {\n this.squareBlock([\"__all__\", \"=\"], () => {\n const allExports = [\n ...(packageComplexTypes || []).map((t) => t.identifier.name),\n ...allResourceNames,\n ].sort();\n\n for (const schemaName of allExports) {\n this.line(`'${schemaName}',`);\n }\n });\n }\n\n private generateResourceModule(schema: RegularTypeSchema): void {\n this.cat(`${snakeCase(schema.identifier.name)}.py`, () => {\n this.generateDisclaimer();\n this.generateDefaultImports();\n this.line();\n this.generateDependenciesImports(schema);\n this.line();\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n });\n }\n\n generateType(schema: RegularTypeSchema): void {\n const className = deriveResourceName(schema.identifier);\n const superClasses = this.getSuperClasses(schema);\n\n this.line(`class ${className}(${superClasses.join(\", \")}):`);\n this.indentBlock(() => {\n this.generateClassBody(schema);\n });\n this.line();\n }\n\n private getSuperClasses(schema: RegularTypeSchema): string[] {\n return [...(schema.base ? [schema.base.name] : []), ...injectSuperClasses(schema.identifier.name)];\n }\n\n private generateClassBody(schema: RegularTypeSchema): void {\n this.generateModelConfig();\n\n if (!schema.fields) {\n this.line(\"pass\");\n return;\n }\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceTypeField(schema);\n }\n\n this.generateFields(schema);\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceMethods(schema);\n }\n }\n\n private generateModelConfig(): void {\n const extraMode = this.opts.allowExtraFields ? \"allow\" : \"forbid\";\n this.line(`model_config = ConfigDict(validate_by_name=True, serialize_by_alias=True, extra=\"${extraMode}\")`);\n }\n\n private generateResourceTypeField(schema: RegularTypeSchema): void {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: str = Field(`);\n this.indentBlock(() => {\n this.line(`default='${schema.identifier.name}',`);\n this.line(`alias='resourceType',`);\n this.line(`serialization_alias='resourceType',`);\n this.line(\"frozen=True,\");\n this.line(`pattern='${schema.identifier.name}'`);\n });\n this.line(\")\");\n }\n\n private generateFields(schema: RegularTypeSchema): void {\n const sortedFields = Object.entries(schema.fields ?? []).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n if (\"choices\" in field && field.choices) continue;\n\n const fieldInfo = this.buildFieldInfo(fieldName, field);\n this.line(`${fieldInfo.name}: ${fieldInfo.type}${fieldInfo.defaultValue}`);\n }\n }\n\n private buildFieldInfo(fieldName: string, field: Field): FieldInfo {\n const pyFieldName = fixReservedWords(this.nameFormatFunction(fieldName));\n const fieldType = this.determineFieldType(field);\n const defaultValue = this.getFieldDefaultValue(field, fieldName);\n\n return {\n name: pyFieldName,\n type: fieldType,\n defaultValue: defaultValue,\n };\n }\n\n private determineFieldType(field: Field): string {\n let fieldType = field ? this.getBaseFieldType(field) : \"\";\n\n if (\"enum\" in field && field.enum) {\n const s: string = field.enum.map((e: string) => `\"${e}\"`).join(\", \");\n fieldType = `Literal[${s}]`;\n }\n\n if (field.array) {\n fieldType = `PyList[${fieldType}]`;\n }\n\n if (!field.required) {\n fieldType = `${fieldType} | None`;\n }\n\n return fieldType;\n }\n\n private getBaseFieldType(field: Field): string {\n if (\"type\" in field && field.type.kind === \"resource\") return `${field.type.name}Family`;\n\n if (\"type\" in field && field.type.kind === \"nested\") return deriveResourceName(field.type);\n\n if (\"type\" in field && field.type.kind === \"primitive-type\")\n return PRIMITIVE_TYPE_MAP[field.type.name] ?? \"str\";\n\n return \"type\" in field ? field.type.name : \"\";\n }\n\n private getFieldDefaultValue(field: any, fieldName: string): string {\n const aliasSpec = `alias=\"${fieldName}\", serialization_alias=\"${fieldName}\"`;\n\n if (!field.required) {\n return ` = Field(None, ${aliasSpec})`;\n }\n\n return ` = Field(${aliasSpec})`;\n }\n\n private generateResourceMethods(schema: RegularTypeSchema): void {\n const className = schema.identifier.name.toString();\n\n this.line();\n this.line(\"def to_json(self, indent: int | None = None) -> str:\");\n this.line(\" return self.model_dump_json(exclude_unset=True, exclude_none=True, indent=indent)\");\n this.line();\n this.line(\"@classmethod\");\n this.line(`def from_json(cls, json: str) -> ${className}:`);\n this.line(\" return cls.model_validate_json(json)\");\n }\n\n generateNestedTypes(schema: RegularTypeSchema): void {\n if (!schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype);\n }\n }\n\n private generateDefaultImports(): void {\n this.pyImportFrom(\"__future__\", \"annotations\");\n this.pyImportFrom(\"pydantic\", \"BaseModel\", \"ConfigDict\", \"Field\", \"PositiveInt\");\n this.pyImportFrom(\"typing\", \"List as PyList\", \"Literal\");\n }\n\n private generateDependenciesImports(schema: RegularTypeSchema): void {\n if (!schema.dependencies || schema.dependencies.length === 0) return;\n\n this.importComplexTypeDependencies(schema.dependencies);\n this.importResourceDependencies(schema.dependencies);\n }\n\n private importComplexTypeDependencies(dependencies: Identifier[]): void {\n const complexTypeDeps = dependencies.filter((dep) => dep.kind === \"complex-type\");\n const depsByPackage = this.groupDependenciesByPackage(complexTypeDeps);\n\n for (const [pyPackage, names] of Object.entries(depsByPackage)) {\n this.pyImportFrom(pyPackage, ...names.sort());\n }\n }\n\n private importResourceDependencies(dependencies: Identifier[]): void {\n const resourceDeps = dependencies.filter((dep) => dep.kind === \"resource\");\n\n for (const dep of resourceDeps) {\n this.pyImportType(dep);\n\n const familyName = `${pascalCase(dep.name)}Family`;\n const familyPackage = `${this.pyFhirPackage(dep)}.resource_families`;\n this.pyImportFrom(familyPackage, familyName);\n }\n }\n\n private groupDependenciesByPackage(dependencies: Identifier[]): ImportGroup {\n const grouped: ImportGroup = {};\n\n for (const dep of dependencies) {\n const pyPackage = this.pyPackage(dep);\n if (!grouped[pyPackage]) {\n grouped[pyPackage] = [];\n }\n grouped[pyPackage].push(dep.name);\n }\n\n return grouped;\n }\n\n pyImportFrom(pyPackage: string, ...entities: string[]): void {\n const oneLine = `from ${pyPackage} import ${entities.join(\", \")}`;\n\n if (this.shouldUseSingleLineImport(oneLine, entities)) {\n this.line(oneLine);\n } else {\n this.writeMultiLineImport(pyPackage, entities);\n }\n }\n\n private shouldUseSingleLineImport(oneLine: string, entities: string[]): boolean {\n return oneLine.length <= MAX_IMPORT_LINE_LENGTH || entities.length === 1;\n }\n\n private writeMultiLineImport(pyPackage: string, entities: string[]): void {\n this.line(`from ${pyPackage} import (\\\\`);\n this.indentBlock(() => {\n const remaining = [...entities];\n while (remaining.length > 0) {\n const line = this.buildImportLine(remaining, MAX_IMPORT_LINE_LENGTH);\n this.line(line);\n }\n });\n this.line(\")\");\n }\n\n private pyImportType(identifier: Identifier): void {\n this.pyImportFrom(this.pyPackage(identifier), pascalCase(identifier.name));\n }\n\n private generateResourceFamilies(packageResources: RegularTypeSchema[]): void {\n assert(this.tsIndex !== undefined);\n const packages = //this.helper.getPackages(packageResources, this.opts.rootPackageName);\n Object.keys(groupByPackages(packageResources)).map(\n (pkgName) => `${this.opts.rootPackageName}.${pkgName.replaceAll(\".\", \"_\")}`,\n );\n const families: Record<string, string[]> = {};\n for (const resource of this.tsIndex.collectResources()) {\n const children: string[] = this.tsIndex.resourceChildren(resource.identifier).map((c) => c.name);\n if (children.length > 0) {\n const familyName = `${resource.identifier.name}Family`;\n families[familyName] = children;\n }\n }\n const exportList = Object.keys(families);\n\n if (exportList.length === 0) return;\n\n this.buildResourceFamiliesFile(packages, families, exportList);\n }\n\n private buildResourceFamiliesFile(\n packages: string[],\n families: Record<string, string[]>,\n exportList: string[],\n ): void {\n this.cat(\"resource_families.py\", () => {\n this.generateDisclaimer();\n this.includeResourceFamilyValidator();\n this.line();\n this.generateFamilyDefinitions(packages, families);\n this.generateFamilyExports(exportList);\n });\n }\n\n private includeResourceFamilyValidator(): void {\n const content = fs.readFileSync(resolvePyAssets(\"resource_family_validator.py\"), \"utf-8\");\n this.line(content);\n }\n\n private generateFamilyDefinitions(packages: string[], families: Record<string, string[]>): void {\n this.line(`packages = [${packages.map((p) => `'${p}'`).join(\", \")}]`);\n this.line();\n\n for (const [familyName, resources] of Object.entries(families)) {\n this.generateFamilyDefinition(familyName, resources);\n }\n }\n\n private generateFamilyDefinition(familyName: string, resources: string[]): void {\n const listName = `${familyName}_resources`;\n\n this.line(`${listName} = [${resources.map((r) => `'${r}'`).join(\", \")}]`);\n this.line();\n\n this.line(`def validate_and_downcast_${familyName}(v: Any) -> Any:`);\n this.line(` return validate_and_downcast(v, packages, ${listName})`);\n this.line();\n\n this.line(`type ${familyName} = Annotated[Any, BeforeValidator(validate_and_downcast_${familyName})]`);\n this.line();\n }\n\n private generateFamilyExports(exportList: string[]): void {\n this.line(`__all__ = [${exportList.map((e) => `'${e}'`).join(\", \")}]`);\n }\n\n private buildPyPackageName(packageName: string): string {\n const parts = packageName ? [snakeCase(packageName)] : [\"\"];\n return parts.join(\".\");\n }\n\n private pyFhirPackage(identifier: Identifier): string {\n return this.pyFhirPackageByName(identifier.package);\n }\n\n private pyFhirPackageByName(name: string): string {\n return [this.opts.rootPackageName, this.buildPyPackageName(name)].join(\".\");\n }\n\n private pyPackage(identifier: Identifier): string {\n if (identifier.kind === \"complex-type\") {\n return `${this.pyFhirPackage(identifier)}.base`;\n }\n if (identifier.kind === \"resource\") {\n return [this.pyFhirPackage(identifier), snakeCase(identifier.name)].join(\".\");\n }\n return this.pyFhirPackage(identifier);\n }\n\n getFieldFormatFunction(format: StringFormatKey): (name: string) => string {\n if (!AVAILABLE_STRING_FORMATS[format]) {\n this.logger()?.warn(`Unknown field format '${format}'. Defaulting to SnakeCase.`);\n this.logger()?.warn(`Supported formats: ${Object.keys(AVAILABLE_STRING_FORMATS).join(\", \")}`);\n return snakeCase;\n }\n return AVAILABLE_STRING_FORMATS[format];\n }\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 status: \"active\",\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 assert from \"node:assert\";\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodeSystem, CodeSystemConcept } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\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) {\n return valueSet.expansion.contains\n .filter((item) => item.code !== undefined)\n .map((item) => {\n assert(item.code);\n return {\n code: item.code,\n display: item.display,\n system: item.system,\n };\n });\n }\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","// 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\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface CodeSystemConcept extends BackboneElement {\n code: string;\n concept?: CodeSystemConcept[];\n definition?: string;\n designation?: CodeSystemConceptDesignation[];\n display?: string;\n property?: CodeSystemConceptProperty[];\n}\n\nexport interface CodeSystemConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface CodeSystemConceptProperty extends BackboneElement {\n code: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueCoding?: Coding;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n}\n\nexport interface CodeSystemFilter extends BackboneElement {\n code: string;\n description?: string;\n operator: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\")[];\n value: string;\n}\n\nexport interface CodeSystemProperty extends BackboneElement {\n code: string;\n description?: string;\n type: (\"code\" | \"Coding\" | \"string\" | \"integer\" | \"boolean\" | \"dateTime\" | \"decimal\");\n uri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/CodeSystem\nexport interface CodeSystem extends DomainResource {\n resourceType: \"CodeSystem\";\n\n caseSensitive?: boolean;\n compositional?: boolean;\n concept?: CodeSystemConcept[];\n contact?: ContactDetail[];\n content: (\"not-present\" | \"example\" | \"fragment\" | \"complete\" | \"supplement\");\n copyright?: string;\n count?: number;\n date?: string;\n description?: string;\n experimental?: boolean;\n filter?: CodeSystemFilter[];\n hierarchyMeaning?: (\"grouped-by\" | \"is-a\" | \"part-of\" | \"classified-with\");\n identifier?: Identifier[];\n jurisdiction?: CodeableConcept[];\n name?: string;\n property?: CodeSystemProperty[];\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n supplements?: string;\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n valueSet?: string;\n version?: string;\n versionNeeded?: boolean;\n}\nexport const isCodeSystem = (resource: unknown): resource is CodeSystem => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"CodeSystem\";\n}\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\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface ValueSetCompose extends BackboneElement {\n exclude?: ValueSetComposeInclude[];\n inactive?: boolean;\n include: ValueSetComposeInclude[];\n lockedDate?: string;\n}\n\nexport interface ValueSetComposeInclude extends BackboneElement {\n concept?: ValueSetComposeIncludeConcept[];\n filter?: ValueSetComposeIncludeFilter[];\n system?: string;\n valueSet?: string[];\n version?: string;\n}\n\nexport interface ValueSetComposeIncludeConcept extends BackboneElement {\n code: string;\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n}\n\nexport interface ValueSetComposeIncludeConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface ValueSetComposeIncludeFilter extends BackboneElement {\n op: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\");\n property: string;\n value: string;\n}\n\nexport interface ValueSetExpansion extends BackboneElement {\n contains?: ValueSetExpansionContains[];\n identifier?: string;\n offset?: number;\n parameter?: ValueSetExpansionParameter[];\n timestamp: string;\n total?: number;\n}\n\nexport interface ValueSetExpansionContains extends BackboneElement {\n abstract?: boolean;\n code?: string;\n contains?: ValueSetExpansionContains[];\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n inactive?: boolean;\n system?: string;\n version?: string;\n}\n\nexport interface ValueSetExpansionParameter extends BackboneElement {\n name: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n valueUri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/ValueSet\nexport interface ValueSet extends DomainResource {\n resourceType: \"ValueSet\";\n\n compose?: ValueSetCompose;\n contact?: ContactDetail[];\n copyright?: string;\n date?: string;\n description?: string;\n expansion?: ValueSetExpansion;\n experimental?: boolean;\n identifier?: Identifier[];\n immutable?: boolean;\n jurisdiction?: CodeableConcept[];\n name?: string;\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n version?: string;\n}\nexport const isValueSet = (resource: unknown): resource is ValueSet => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"ValueSet\";\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 CodeSystem, isCodeSystem, isValueSet, type ValueSet } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { CanonicalUrl, Name, PackageMeta, RichFHIRSchema, RichValueSet } from \"@typeschema/types\";\nimport { enrichFHIRSchema, enrichValueSet, packageMetaToFhir, packageMetaToNpm } 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 resolutionTree: () => ResolutionTree;\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\n// FIXME: Tiding: PackageName, PkgId, PkgName\ntype PkgId = string;\ntype PkgName = 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>;\nexport type ResolutionTree = Record<PkgName, Record<CanonicalUrl, { deep: number; pkg: PackageMeta }[]>>;\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 /** Custom FHIR package registry URL */\n registry?: string;\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 resolutionTree: () => {\n const res: ResolutionTree = {};\n for (const [_pkgId, pkgIndex] of Object.entries(resolver)) {\n const pkgName = pkgIndex.pkg.name;\n res[pkgName] = {};\n for (const [surl, resolutions] of Object.entries(pkgIndex.canonicalResolution)) {\n const url = surl as CanonicalUrl;\n res[pkgName][url] = [];\n for (const resolution of resolutions) {\n res[pkgName][url].push({ deep: resolution.deep, pkg: resolution.pkg });\n }\n }\n }\n return res;\n },\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 registry: conf.registry || undefined,\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 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 assert from \"node:assert\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { extractDependencies } from \"./core/transformer\";\nimport type { ResolutionTree } from \"./register\";\nimport {\n type CanonicalUrl,\n type Field,\n isBindingSchema,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"./utils\";\n\nexport type TreeShake = Record<string, Record<string, TreeShakeRule>>;\n\nexport type TreeShakeRule = { ignoreFields?: string[]; selectFields?: string[] };\n\nconst mutableSelectFields = (schema: RegularTypeSchema, selectFields: string[]) => {\n const selectedFields: Record<string, Field> = {};\n\n const selectPolimorphic: Record<string, { declaration?: string[]; instances?: string[] }> = {};\n for (const fieldName of selectFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n\n if (isChoiceDeclarationField(field)) {\n if (!selectPolimorphic[fieldName]) selectPolimorphic[fieldName] = {};\n selectPolimorphic[fieldName].declaration = field.choices;\n } else if (isChoiceInstanceField(field)) {\n const choiceName = field.choiceOf;\n if (!selectPolimorphic[choiceName]) selectPolimorphic[choiceName] = {};\n selectPolimorphic[choiceName].instances = [...(selectPolimorphic[choiceName].instances ?? []), fieldName];\n } else {\n selectedFields[fieldName] = field;\n }\n }\n\n for (const [choiceName, { declaration, instances }] of Object.entries(selectPolimorphic)) {\n const choices = instances ?? declaration;\n assert(choices);\n for (const choiceInstanceName of choices) {\n const field = schema.fields?.[choiceInstanceName];\n assert(field);\n selectedFields[choiceInstanceName] = field;\n }\n const decl = schema.fields?.[choiceName];\n assert(decl);\n selectedFields[choiceName] = { ...decl, choices: choices };\n }\n schema.fields = selectedFields;\n};\n\nconst mutableIgnoreFields = (schema: RegularTypeSchema, ignoreFields: string[]) => {\n for (const fieldName of ignoreFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n if (isChoiceDeclarationField(field)) {\n for (const choiceName of field.choices) {\n delete schema.fields[choiceName];\n }\n }\n\n if (isChoiceInstanceField(field)) {\n const choiceDeclaration = schema.fields[field.choiceOf];\n assert(isChoiceDeclarationField(choiceDeclaration));\n choiceDeclaration.choices = choiceDeclaration.choices.filter((c) => c !== fieldName);\n if (choiceDeclaration.choices.length === 0) {\n delete schema.fields[field.choiceOf];\n }\n }\n\n delete schema.fields[fieldName];\n }\n }\n};\n\nexport const treeShakeTypeSchema = (schema: TypeSchema, rule: TreeShakeRule, _logger?: CodegenLogger): TypeSchema => {\n schema = structuredClone(schema);\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n if (rule.selectFields) {\n if (rule.ignoreFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableSelectFields(schema, rule.selectFields);\n }\n\n if (rule.ignoreFields) {\n if (rule.selectFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableIgnoreFields(schema, rule.ignoreFields);\n }\n\n if (schema.nested) {\n const usedTypes = new Set<CanonicalUrl>();\n const collectUsedNestedTypes = (s: RegularTypeSchema | NestedType) => {\n Object.values(s.fields ?? {})\n .filter(isNotChoiceDeclarationField)\n .filter((f) => isNestedIdentifier(f.type))\n .forEach((f) => {\n const url = f.type.url;\n if (!usedTypes.has(url)) {\n usedTypes.add(url);\n const nestedTypeDef = schema.nested?.find((f) => f.identifier.url === url);\n assert(nestedTypeDef);\n collectUsedNestedTypes(nestedTypeDef);\n }\n });\n };\n collectUsedNestedTypes(schema);\n schema.nested = schema.nested.filter((n) => usedTypes.has(n.identifier.url));\n }\n\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n return schema;\n};\n\nexport const treeShake = (\n tsIndex: TypeSchemaIndex,\n treeShake: TreeShake,\n { resolutionTree, logger }: { resolutionTree?: ResolutionTree; logger?: CodegenLogger },\n): 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)\n throw new Error(\n `Dependent schema ${JSON.stringify(dep)} not found for ${JSON.stringify(schema.identifier)}`,\n );\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, { resolutionTree, logger });\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 isComplexTypeIdentifier,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type Name,\n type ProfileTypeSchema,\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 tsModulePath = (id: Identifier): string => {\n return `${tsFhirPackageDir(id.package)}/${tsModuleName(id)}`;\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 primitiveTypeExtension: 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(tsIndex: TypeSchemaIndex, 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: `../${tsModulePath(dep)}`,\n name: uppercaseFirstLetter(dep.name),\n dep: dep,\n });\n } else if (isNestedIdentifier(dep)) {\n const ndep = { ...dep };\n ndep.name = canonicalToName(dep.url) as Name;\n imports.push({\n tsPackage: `../${tsModulePath(ndep)}`,\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 if (\n this.withPrimitiveTypeExtension(schema) &&\n schema.identifier.name !== \"Element\" &&\n schema.dependencies.find((e) => e.name === \"Element\") === undefined\n ) {\n const elementUrl = \"http://hl7.org/fhir/StructureDefinition/Element\" as CanonicalUrl;\n const element = tsIndex.resolveByUrl(schema.identifier.package, elementUrl);\n if (!element) throw new Error(`'${elementUrl}' not found for ${schema.identifier.package}.`);\n\n this.tsImportType(`../${tsModulePath(element.identifier)}`, \"Element\");\n }\n }\n }\n\n generateComplexTypeReexports(schema: RegularTypeSchema) {\n const complexTypeDeps = schema.dependencies?.filter(isComplexTypeIdentifier).map((dep) => ({\n tsPackage: `../${tsModulePath(dep)}`,\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): void {\n const extFieldName = tsFieldName(`_${fieldName}`);\n this.lineSM(`${extFieldName}?: Element`);\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 (this.withPrimitiveTypeExtension(schema)) {\n if (isPrimitiveIdentifier(field.type)) {\n this.addFieldExtension(fieldName);\n }\n }\n }\n });\n }\n\n withPrimitiveTypeExtension(schema: TypeSchema): boolean {\n if (!this.opts.primitiveTypeExtension) return false;\n if (!isSpecializationTypeSchema(schema)) return false;\n for (const field of Object.values(schema.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n if (isPrimitiveIdentifier(field.type)) return true;\n }\n return false;\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(tsIndex, 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(tsIndex, 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, type CSharpGeneratorOptions } from \"@root/api/writer-generator/csharp/csharp.ts\";\nimport { Python, type PythonGeneratorOptions } from \"@root/api/writer-generator/python\";\nimport { generateTypeSchemas } from \"@root/typeschema\";\nimport { registerFromManager } from \"@root/typeschema/register\";\nimport { type TreeShake, treeShake } from \"@root/typeschema/tree-shake\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n type CodegenLogger,\n createLogger,\n type LogLevel,\n type LogLevelString,\n parseLogLevel,\n} from \"@root/utils/codegen-logger\";\nimport {\n extractNameFromCanonical,\n type PackageMeta,\n packageMetaToFhir,\n packageMetaToNpm,\n type TypeSchema,\n} from \"@typeschema/types\";\nimport type { TypeSchemaConfig } from \"../config\";\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 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 /** Log level for the logger. Default: INFO */\n logLevel?: LogLevel;\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry?: string;\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\nexport interface LocalStructureDefinitionConfig {\n package: PackageMeta;\n path: string;\n dependencies?: PackageMeta[];\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\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\" | \"logLevel\" | \"registry\"\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 private localStructurePackages: LocalStructureDefinitionConfig[] = [];\n private localTgzArchives: string[] = [];\n progressCallback: any;\n private typeSchemaConfig?: TypeSchemaConfig;\n\n constructor(options: APIBuilderOptions = {}) {\n this.options = {\n outputDir: options.outputDir || \"./generated\",\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 registry: options.registry,\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 prefix: \"API\",\n level: options.logLevel,\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 /**\n * Set a custom FHIR package registry URL\n * @param url The registry URL (default: https://fs.get-ig.org/pkgs/)\n */\n registry(url: string): APIBuilder {\n this.options.registry = url;\n return this;\n }\n\n localStructureDefinitions(config: LocalStructureDefinitionConfig): APIBuilder {\n this.localStructurePackages.push(config);\n return this;\n }\n\n localTgzPackage(archivePath: string): APIBuilder {\n this.localTgzArchives.push(Path.resolve(archivePath));\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 primitiveTypeExtension: true,\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 python(userOptions: Partial<PythonGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"#\",\n };\n\n const defaultPyOpts: PythonGeneratorOptions = {\n ...defaultWriterOpts,\n rootPackageName: \"fhir_types\",\n fieldFormat: \"snake_case\",\n };\n\n const opts: PythonGeneratorOptions = {\n ...defaultPyOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new Python(opts);\n this.generators.set(\"python\", generator);\n this.logger.debug(`Configured python generator`);\n return this;\n }\n\n csharp(userOptions: Partial<CSharpGeneratorOptions>): APIBuilder {\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 };\n\n const defaultCSharpOpts: CSharpGeneratorOptions = {\n ...defaultWriterOpts,\n rootNamespace: \"Fhir.Types\",\n };\n\n const opts: CSharpGeneratorOptions = {\n ...defaultCSharpOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new CSharp(opts);\n this.generators.set(\"csharp\", 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 setLogLevel(level: LogLevel | LogLevelString): APIBuilder {\n this.logger?.setLevel(typeof level === \"string\" ? parseLogLevel(level) : level);\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 =\n this.options.manager ||\n CanonicalManager({\n packages: this.packages,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: this.options.registry || undefined,\n });\n\n if (this.localStructurePackages.length > 0) {\n for (const config of this.localStructurePackages) {\n this.logger.info(\n `Registering local StructureDefinitions for ${config.package.name}@${config.package.version}`,\n );\n await manager.addLocalPackage({\n name: config.package.name,\n version: config.package.version,\n path: config.path,\n dependencies: config.dependencies?.map((dep) => packageMetaToNpm(dep)),\n });\n }\n }\n\n for (const archivePath of this.localTgzArchives) {\n this.logger.info(`Registering local tgz package: ${archivePath}`);\n await manager.addTgzPackage({ archivePath });\n }\n\n const ref2meta = await manager.init();\n\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 const tsIndexOpts = {\n resolutionTree: register.resolutionTree(),\n logger: this.logger,\n };\n let tsIndex = mkTypeSchemaIndex(typeSchemas, tsIndexOpts);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake, tsIndexOpts);\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 this.packages = [];\n this.localStructurePackages = [];\n this.localTgzArchives = [];\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 // Package registry\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry?: 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 registry: \"\",\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"]}