@atomic-ehr/codegen 0.0.5 → 0.0.6

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/mustache/generator/DebugMixinProvider.ts","../src/api/mustache/generator/LambdaMixinProvider.ts","../src/api/mustache/generator/NameGenerator.ts","../src/api/mustache/generator/TemplateFileCache.ts","../src/api/mustache/generator/ListElementInformationMixinProvider.ts","../src/api/mustache/types.ts","../src/api/mustache/generator/ViewModelFactory.ts","../src/api/writer-generator/mustache.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts","../src/config.ts"],"names":["LogLevel","s","__filename","Path","fs","typeSchemas","resolve","schema","e","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","fileURLToPath","assert","format","pkg","f","treeShake","shaked","nested","Path6","fs5","tsFieldName","tsName","fs6","Path7","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 resolveAssets?: (fn: string) => string;\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] = {\n relPath,\n absPath: Path.resolve(relPath),\n tokens: [],\n };\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 cp(source: string, destination: string) {\n if (!this.opts.resolveAssets) throw new Error(\"resolveAssets is not defined\");\n source = Path.resolve(this.opts.resolveAssets(source));\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\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 isResourceIdentifier = (id: Identifier | undefined): id is ResourceIdentifier => {\n return id?.kind === \"resource\";\n};\n\nexport const isLogicalIdentifier = (id: Identifier | undefined): id is LogicalIdentifier => {\n return id?.kind === \"logical\";\n};\n\nexport const isComplexTypeIdentifier = (id: Identifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\n};\n\nexport const isPrimitiveIdentifier = (id: Identifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: Identifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: Identifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport type TypeSchema =\n | RegularTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\nexport const isFhirSchemaBased = (\n schema: TypeSchema | undefined,\n): schema is RegularTypeSchema | PrimitiveTypeSchema | BindingTypeSchema | ProfileTypeSchema => {\n return schema?.identifier.kind !== \"value-set\";\n};\n\nexport const isSpecializationTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return (\n schema?.identifier.kind === \"resource\" ||\n schema?.identifier.kind === \"complex-type\" ||\n schema?.identifier.kind === \"logical\"\n );\n};\n\nexport const isComplexTypeTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"complex-type\";\n};\n\nexport const isResourceTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"resource\";\n};\n\nexport const isPrimitiveTypeSchema = (schema: TypeSchema | undefined): schema is PrimitiveTypeSchema => {\n return schema?.identifier.kind === \"primitive-type\";\n};\n\nexport const isLogicalTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"logical\";\n};\n\nexport const isProfileTypeSchema = (schema: TypeSchema | undefined): schema is ProfileTypeSchema => {\n return schema?.identifier.kind === \"profile\";\n};\n\nexport function isBindingSchema(schema: TypeSchema | undefined): schema is BindingTypeSchema {\n return schema?.identifier.kind === \"binding\";\n}\n\nexport function isValueSetTypeSchema(schema: TypeSchema | undefined): schema is ValueSetTypeSchema {\n return schema?.identifier.kind === \"value-set\";\n}\n\ninterface PrimitiveTypeSchema {\n identifier: PrimitiveIdentifier;\n description?: string;\n base: Identifier;\n dependencies?: Identifier[];\n}\n\nexport interface NestedType {\n identifier: NestedIdentifier;\n base: Identifier;\n fields: Record<string, Field>;\n}\n\nexport interface ProfileTypeSchema {\n identifier: ProfileIdentifier;\n base: Identifier;\n description?: string;\n fields?: Record<string, Field>;\n constraints?: Record<string, ProfileConstraint>;\n extensions?: ProfileExtension[];\n validation?: ValidationRule[];\n dependencies?: Identifier[];\n metadata?: ProfileMetadata;\n nested?: NestedType[];\n}\n\nexport interface ProfileConstraint {\n min?: number;\n max?: string;\n mustSupport?: boolean;\n fixedValue?: any;\n patternValue?: any;\n binding?: {\n strength: \"required\" | \"extensible\" | \"preferred\" | \"example\";\n valueSet: string;\n };\n types?: Array<{\n code: string;\n profile?: string[];\n targetProfile?: string[];\n }>;\n slicing?: {\n discriminator: any[];\n rules: string;\n ordered?: boolean;\n };\n}\n\nexport interface ProfileExtension {\n path: string;\n profile: string | string[];\n min?: number;\n max?: string;\n mustSupport?: boolean;\n}\n\nexport interface ValidationRule {\n path: string;\n key: string;\n severity: \"error\" | \"warning\" | \"information\";\n human: string;\n expression?: string;\n}\n\nexport interface ProfileMetadata {\n publisher?: string;\n contact?: any[];\n copyright?: string;\n purpose?: string;\n experimental?: boolean;\n date?: string;\n jurisdiction?: any[];\n package?: string;\n}\n\nexport interface RegularTypeSchema {\n // TODO: restrict to ResourceIdentifier | ComplexTypeIdentifier | LogicalIdentifier\n identifier: Identifier;\n base?: Identifier;\n description?: string;\n fields?: { [k: string]: Field };\n nested?: NestedType[];\n dependencies?: Identifier[];\n}\n\nexport interface RegularField {\n type: Identifier;\n reference?: Identifier[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldDeclaration {\n choices: string[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldInstance {\n choiceOf: string;\n type: Identifier;\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n reference?: Identifier[];\n binding?: BindingIdentifier;\n enum?: string[];\n min?: number;\n max?: number;\n}\n\nexport type Concept = {\n code: string;\n display?: string;\n system?: string;\n};\n\nexport interface ValueSetTypeSchema {\n identifier: ValueSetIdentifier;\n description?: string;\n concept?: Concept[];\n compose?: ValueSetCompose;\n}\n\nexport interface BindingTypeSchema {\n identifier: BindingIdentifier;\n description?: string;\n type?: Identifier;\n strength?: string;\n enum?: string[];\n valueset?: ValueSetIdentifier;\n dependencies?: Identifier[];\n}\n\nexport type Field = RegularField | ChoiceFieldDeclaration | ChoiceFieldInstance;\n\nexport const isNotChoiceDeclarationField = (field: Field | undefined): field is RegularField | ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices === undefined;\n};\n\nexport const isChoiceDeclarationField = (field: Field | undefined): field is ChoiceFieldDeclaration => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices !== undefined;\n};\n\nexport 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 { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport type { PartialBy } from \"@root/utils/types.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 resolveAssets: options.resolveAssets ?? resolveCSharpAssets,\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 this.cp(\"Client.cs\", \"Client.cs\");\n this.cp(\"Helper.cs\", \"Helper.cs\");\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(\n (e) => isResourceTypeSchema(e) || isLogicalTypeSchema(e) || isComplexTypeTypeSchema(e),\n );\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, resolveAssets: options.resolveAssets ?? resolvePyAssets });\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 this.cp(resolvePyAssets(\"requirements.txt\"), \"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 type { DebugMixin } from \"@mustache/types\";\n\nexport class DebugMixinProvider {\n constructor(private readonly mode: \"FORMATTED\" | \"COMPACT\") {}\n\n public apply<T extends Record<string, unknown>>(target: T): T & DebugMixin {\n return this._addDebug(target) as T & DebugMixin;\n }\n\n private _addDebug(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this._addDebug(v));\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const debugString = JSON.stringify(obj, null, this.mode === \"FORMATTED\" ? 2 : undefined);\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addDebug(val);\n }\n result.debug = debugString;\n return result;\n }\n\n return value;\n }\n}\n","import type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type { LambdaMixin } from \"@mustache/types\";\nimport { camelCase, kebabCase, pascalCase, snakeCase } from \"@root/api/writer-generator/utils\";\n\nexport class LambdaMixinProvider {\n private readonly lambda: LambdaMixin[\"lambda\"];\n constructor(private readonly nameGenerator: NameGenerator) {\n this.lambda = {\n saveTypeName: () => (text, render) => this.nameGenerator.generateType(render(text)),\n saveEnumValueName: () => (text, render) => this.nameGenerator.generateEnumValue(render(text)),\n saveFieldName: () => (text, render) => this.nameGenerator.generateField(render(text)),\n\n camelCase: () => (text, render) => camelCase(render(text)),\n snakeCase: () => (text, render) => snakeCase(render(text)),\n pascalCase: () => (text, render) => pascalCase(render(text)),\n kebabCase: () => (text, render) => kebabCase(render(text)),\n lowerCase: () => (text, render) => render(text).toLowerCase(),\n upperCase: () => (text, render) => render(text).toUpperCase(),\n };\n }\n\n public apply<T extends Record<string, unknown>>(target: T): T & LambdaMixin {\n return {\n ...target,\n lambda: this.lambda,\n };\n }\n}\n","import type { Field, Identifier, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type NameTransformation = {\n pattern: RegExp | string;\n format: string;\n};\nexport type DistinctNameConfigurationType<T> = {\n common: T;\n enumValue: T;\n type: T;\n field: T;\n};\n\nexport class NameGenerator {\n constructor(\n private readonly keywords: Set<string>,\n private readonly typeMap: Record<string, string>,\n private readonly nameTransformations: DistinctNameConfigurationType<NameTransformation[]>,\n private readonly unsaveCharacterPattern: string | RegExp,\n ) {}\n\n private _replaceUnsaveChars(name: string): string {\n const pattern =\n this.unsaveCharacterPattern instanceof RegExp\n ? this.unsaveCharacterPattern\n : new RegExp(this.unsaveCharacterPattern, \"g\");\n return name.replace(pattern, \"_\");\n }\n\n private _applyNameTransformations(name: string, transformations: NameTransformation[]): string {\n for (const transformation of this.nameTransformations.common) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n for (const transformation of transformations) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n return name;\n }\n\n private _generateTypeName(name: string): string {\n if (this.typeMap[name]) {\n name = this.typeMap[name] as any;\n } else {\n name = this._applyNameTransformations(name, this.nameTransformations.type);\n name = name.charAt(0).toUpperCase() + name.slice(1);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n }\n return name;\n }\n\n public generateEnumType(name: string): string {\n return this._generateTypeName(name);\n }\n\n private _generateTypeFromTypeRef(typeRef: Identifier): string {\n if (typeRef.kind === \"primitive-type\") {\n return this._generateTypeName(typeRef.name);\n }\n return this._generateTypeName(\n typeRef.url\n .split(\"/\")\n .pop()\n ?.split(\"#\")\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join(\"\") ?? \"<UNKNOWN>\",\n );\n }\n\n public generateFieldType(schema: Field): string {\n if ((schema as any).enum) {\n return this.generateEnumType((schema as any).binding?.name ?? (schema as any).type.name);\n }\n return this._generateTypeFromTypeRef((schema as any).type);\n }\n\n public generateType(schemaOrRefOrString: TypeSchema | NestedType | Identifier | string): string {\n if (typeof schemaOrRefOrString === \"string\") {\n return this._generateTypeName(schemaOrRefOrString);\n }\n if (\"url\" in schemaOrRefOrString) {\n return this._generateTypeFromTypeRef(schemaOrRefOrString);\n }\n return this._generateTypeFromTypeRef(schemaOrRefOrString.identifier);\n }\n\n public generateField(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.field);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n return name;\n }\n public generateEnumValue(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.enumValue);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name).toUpperCase();\n return name;\n }\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport type { Rendering } from \"@mustache/types\";\n\nexport class TemplateFileCache {\n private readonly templateBaseDir: string;\n private readonly templateCache: Record<string, string> = {};\n constructor(templateBaseDir: string) {\n this.templateBaseDir = Path.resolve(templateBaseDir);\n }\n\n private _normalizeName(name: string): string {\n if (name.endsWith(\".mustache\")) {\n return name;\n }\n return `${name}.mustache`;\n }\n\n public read(template: Pick<Rendering, \"source\">): string {\n return this.readTemplate(template.source);\n }\n public readTemplate(name: string): string {\n const normalizedName = this._normalizeName(name);\n if (!this.templateCache[normalizedName]) {\n this.templateCache[normalizedName] = fs.readFileSync(\n Path.join(this.templateBaseDir, normalizedName),\n \"utf-8\",\n );\n }\n return this.templateCache[normalizedName];\n }\n}\n","import type { ListElementInformationMixin } from \"@mustache/types\";\n\nexport class ListElementInformationMixinProvider {\n private static _array<T>(value: T[] | Set<T>): T[] {\n return Array.isArray(value) ? value : Array.from(value);\n }\n\n public apply<T extends Record<string, unknown>>(source: T): T {\n return this._addListElementInformation(source) as T;\n }\n\n private _addListElementInformation(value: unknown): unknown {\n if (Array.isArray(value) || value instanceof Set) {\n return ListElementInformationMixinProvider._array(value).map((v, index, array) => {\n if (typeof v === \"object\" && v !== null) {\n return {\n ...(this._addListElementInformation(v) as Record<string, unknown>),\n \"-index\": index,\n \"-length\": array.length,\n \"-first\": index === 0,\n \"-last\": index === array.length - 1,\n } satisfies ListElementInformationMixin;\n }\n return v;\n });\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addListElementInformation(val);\n }\n return result;\n }\n\n return value;\n }\n}\n","import type { IsPrefixed } from \"@root/utils/types\";\nimport type { Field, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type DebugMixin = {\n debug: string;\n};\n\nexport type EnumValueViewModel = {\n name: string;\n saveName: string;\n};\n\nexport type EnumViewModel = NamedViewModel & {\n values: EnumValueViewModel[];\n};\n\nexport type FieldViewModel = {\n owner: NamedViewModel;\n\n schema: Field;\n name: string;\n saveName: string;\n\n typeName: string;\n\n isSizeConstrained: boolean;\n min?: number;\n max?: number;\n\n isArray: boolean;\n isRequired: boolean;\n isEnum: boolean;\n\n isPrimitive: Record<IsPrefixed<PrimitiveType>, boolean> | false;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n isCode: boolean;\n isIdentifier: boolean;\n isReference: boolean;\n};\n\nexport type FilterType = {\n whitelist?: (string | RegExp)[];\n blacklist?: (string | RegExp)[];\n};\n\nexport type HookType = {\n cmd: string;\n args?: string[];\n};\n\nexport type LambdaMixin = {\n lambda: {\n saveEnumValueName: () => (text: string, render: (input: string) => string) => string;\n saveFieldName: () => (text: string, render: (input: string) => string) => string;\n saveTypeName: () => (text: string, render: (input: string) => string) => string;\n\n camelCase: () => (text: string, render: (input: string) => string) => string;\n snakeCase: () => (text: string, render: (input: string) => string) => string;\n pascalCase: () => (text: string, render: (input: string) => string) => string;\n kebabCase: () => (text: string, render: (input: string) => string) => string;\n lowerCase: () => (text: string, render: (input: string) => string) => string;\n upperCase: () => (text: string, render: (input: string) => string) => string;\n };\n};\n\nexport type ListElementInformationMixin = {\n \"-index\": number;\n \"-length\": number;\n \"-last\": boolean;\n \"-first\": boolean;\n};\n\nexport type NamedViewModel = {\n name: string;\n saveName: string;\n};\n\nexport const PRIMITIVE_TYPES = [\n \"boolean\",\n \"instant\",\n \"time\",\n \"date\",\n \"dateTime\",\n\n \"decimal\",\n \"integer\",\n \"unsignedInt\",\n \"positiveInt\",\n \"integer64\",\n \"base64Binary\",\n\n \"uri\",\n \"url\",\n \"canonical\",\n \"oid\",\n \"uuid\",\n\n \"string\",\n \"code\",\n \"markdown\",\n \"id\",\n \"xhtml\",\n] as const;\n\nexport type PrimitiveType = (typeof PRIMITIVE_TYPES)[number];\n\nexport type Rendering = {\n source: string;\n fileNameFormat: string;\n path: string;\n filter?: FilterType;\n properties?: Record<string, any>;\n};\n\nexport type ResolvedTypeViewModel = TypeViewModel & {\n allFields: FieldViewModel[];\n inheritedFields: FieldViewModel[];\n parents: TypeViewModel[];\n children: TypeViewModel[];\n\n hasChildren: boolean;\n hasParents: boolean;\n hasInheritedFields: boolean;\n};\n\nexport type RootViewModel<T> = T & {\n resources: { name: string; saveName: string }[];\n complexTypes: { name: string; saveName: string }[];\n};\n\nexport type TypeViewModel = NamedViewModel & {\n schema: TypeSchema | NestedType;\n fields: FieldViewModel[];\n\n dependencies: {\n resources: NamedViewModel[];\n complexTypes: NamedViewModel[];\n };\n\n hasFields: boolean;\n hasNestedComplexTypes: boolean;\n hasNestedEnums: boolean;\n\n isNested: boolean;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n nestedComplexTypes: ResolvedTypeViewModel[];\n nestedEnums: EnumViewModel[];\n};\n\nexport type View<T extends ViewModel> = LambdaMixin & {\n model: T;\n meta: {\n timestamp: string;\n generator: string;\n };\n properties: Record<string, unknown>;\n};\n\nexport type ViewModel = Record<string, unknown>;\n","import { ListElementInformationMixinProvider } from \"@mustache/generator/ListElementInformationMixinProvider\";\nimport type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type {\n EnumViewModel,\n FieldViewModel,\n NamedViewModel,\n ResolvedTypeViewModel,\n RootViewModel,\n TypeViewModel,\n ViewModel,\n} from \"@mustache/types\";\nimport { PRIMITIVE_TYPES } from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { IsPrefixed } from \"@root/utils/types\";\nimport {\n type Field,\n type Identifier,\n isComplexTypeIdentifier,\n isResourceIdentifier,\n type NestedType,\n type TypeSchema,\n} from \"@typeschema/types\";\n\nexport type ViewModelCache = {\n resourcesByUri: Record<string, TypeViewModel>;\n complexTypesByUri: Record<string, TypeViewModel>;\n};\n\nexport class ViewModelFactory {\n private arrayMixinProvider: ListElementInformationMixinProvider = new ListElementInformationMixinProvider();\n\n constructor(\n private readonly tsIndex: TypeSchemaIndex,\n private readonly nameGenerator: NameGenerator,\n private readonly filterPred: (id: Identifier) => boolean,\n ) {}\n\n public createUtility(): RootViewModel<ViewModel> {\n return this._createForRoot();\n }\n\n public createComplexType(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForComplexType(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...parents.flatMap((p) => p.fields)],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n public createResource(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForResource(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n\n private _createFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n if (typeRef.kind === \"complex-type\") {\n return this._createForComplexType(typeRef, cache, nestedIn);\n }\n if (typeRef.kind === \"resource\") {\n return this._createForResource(typeRef, cache, nestedIn);\n }\n throw new Error(`Unknown type ${typeRef.kind}`);\n }\n\n private _createForComplexType(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`ComplexType ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.complexTypesByUri, type.identifier.url)) {\n cache.complexTypesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.complexTypesByUri[type.identifier.url];\n if (!res) throw new Error(`ComplexType ${typeRef.name} not found`);\n return res;\n }\n\n private _createForResource(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`Resource ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.resourcesByUri, type.identifier.url)) {\n cache.resourcesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.resourcesByUri[type.identifier.url];\n if (!res) throw new Error(`Resource ${typeRef.name} not found`);\n return res;\n }\n\n private _createChildrenFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel[] {\n if (isComplexTypeIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isComplexTypeIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n if (isResourceIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isResourceIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n return [];\n }\n\n private _createParentsFor(base: TypeSchema | NestedType, cache: ViewModelCache) {\n const parents: TypeViewModel[] = [];\n let parentRef: Identifier | undefined = \"base\" in base ? base.base : undefined;\n while (parentRef) {\n parents.push(this._createFor(parentRef, cache, undefined));\n const parent = this.tsIndex.resolve(parentRef);\n parentRef = parent && \"base\" in parent ? parent.base : undefined;\n }\n return parents;\n }\n\n private _createForNestedType(\n nested: NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): ResolvedTypeViewModel {\n const base = this._createTypeViewModel(nested, cache, nestedIn);\n const parents = this._createParentsFor(nested, cache);\n const children = this._createChildrenFor(nested.identifier, cache, nestedIn);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return {\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n };\n }\n\n private _createTypeViewModel(\n schema: TypeSchema | NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): TypeViewModel {\n const fields = Object.entries((\"fields\" in schema ? schema.fields : {}) ?? {});\n const nestedComplexTypes = this._collectNestedComplex(schema, cache);\n const nestedEnums = this._collectNestedEnums(fields as [string, Field][]);\n const dependencies = this._collectDependencies(schema);\n const name: NamedViewModel = {\n name: schema.identifier.name,\n saveName: this.nameGenerator.generateType(schema),\n };\n return {\n nestedComplexTypes,\n nestedEnums,\n dependencies,\n isNested: !!nestedIn,\n schema: schema,\n ...name,\n isResource: this._createIsResource(schema.identifier),\n isComplexType: this._createIsComplexType(schema.identifier),\n\n hasFields: fields.length > 0,\n hasNestedComplexTypes: nestedComplexTypes.length > 0,\n hasNestedEnums: nestedEnums.length > 0,\n fields: fields\n .filter(([_fieldName, fieldSchema]) => !!(fieldSchema as any).type)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([fieldName, fieldSchema]) => {\n return {\n owner: name,\n schema: fieldSchema,\n name: fieldName,\n saveName: this.nameGenerator.generateField(fieldName),\n typeName: this.nameGenerator.generateFieldType(fieldSchema as Field),\n\n isArray: (fieldSchema as any).array,\n isRequired: (fieldSchema as any).required,\n isEnum: !!(fieldSchema as any).enum,\n\n isSizeConstrained:\n (fieldSchema as any).min !== undefined || (fieldSchema as any).max !== undefined,\n min: (fieldSchema as any).min,\n max: (fieldSchema as any).max,\n\n isResource: this._createIsResource((fieldSchema as any).type),\n isComplexType: this._createIsComplexType((fieldSchema as any).type),\n isPrimitive: this._createIsPrimitiveType((fieldSchema as any).type),\n\n isCode: (fieldSchema as any).type?.name === \"code\",\n isIdentifier: (fieldSchema as any).type?.name === \"Identifier\",\n isReference: (fieldSchema as any).type?.name === \"Reference\",\n };\n }),\n };\n }\n\n private _collectDependencies(schema: TypeSchema | NestedType): TypeViewModel[\"dependencies\"] {\n const dependencies: TypeViewModel[\"dependencies\"] = {\n resources: [],\n complexTypes: [],\n };\n if (\"dependencies\" in schema && schema.dependencies) {\n schema.dependencies\n .filter((dependency) => dependency.kind === \"complex-type\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.complexTypes.push(dependency);\n });\n schema.dependencies\n .filter((dependency) => dependency.kind === \"resource\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.resources.push(dependency);\n });\n }\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._collectDependencies(nested))\n .forEach((d) => {\n d.complexTypes\n .filter(\n (complexType) =>\n !dependencies.complexTypes.some((dependency) => dependency.name === complexType.name),\n )\n .forEach((complexType) => {\n dependencies.complexTypes.push(complexType);\n });\n d.resources\n .filter(\n (resource) =>\n !dependencies.resources.some((dependency) => dependency.name === resource.name),\n )\n .forEach((resource) => {\n dependencies.resources.push(resource);\n });\n });\n }\n return dependencies;\n }\n\n private _createIsResource(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"resource\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((resourceRef: Identifier) => [\n `is${resourceRef.name.charAt(0).toUpperCase() + resourceRef.name.slice(1)}`,\n resourceRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsComplexType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"complex-type\" && typeRef.kind !== \"nested\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((complexTypeRef: Identifier) => [\n `is${complexTypeRef.name.charAt(0).toUpperCase() + complexTypeRef.name.slice(1)}`,\n complexTypeRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsPrimitiveType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"primitive-type\") {\n return false;\n }\n return Object.fromEntries(\n PRIMITIVE_TYPES.map((type) => [`is${type.charAt(0).toUpperCase()}${type.slice(1)}`, typeRef.name === type]),\n ) as FieldViewModel[\"isPrimitive\"];\n }\n\n private _collectNestedComplex(schema: TypeSchema | NestedType, cache: ViewModelCache): ResolvedTypeViewModel[] {\n const nested: ResolvedTypeViewModel[] = [];\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._createForNestedType(nested, cache, schema))\n .forEach((n) => {\n nested.push(n);\n });\n }\n return nested;\n }\n private _collectNestedEnums(fields: [string, Field][]): EnumViewModel[] {\n const nestedEnumValues: Record<string, Set<string>> = {};\n fields.forEach(([fieldName, fieldSchema]) => {\n if (\"enum\" in fieldSchema && fieldSchema.enum) {\n const name = (\"binding\" in fieldSchema && fieldSchema.binding?.name) ?? fieldName;\n if (typeof name === \"string\") {\n nestedEnumValues[name] = nestedEnumValues[name] ?? new Set<string>();\n fieldSchema.enum?.forEach(nestedEnumValues[name].add.bind(nestedEnumValues[name]));\n }\n }\n });\n return Object.entries(nestedEnumValues).map(([name, values]) => ({\n name: name,\n saveName: this.nameGenerator.generateEnumType(name),\n values: Array.from(values).map((value) => ({\n name: value,\n saveName: this.nameGenerator.generateEnumValue(value),\n })),\n }));\n }\n\n private _createForRoot(): Pick<RootViewModel<unknown>, \"resources\" | \"complexTypes\"> {\n return this.arrayMixinProvider.apply({\n complexTypes: this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n resources: this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport * as util from \"node:util\";\nimport { DebugMixinProvider } from \"@mustache/generator/DebugMixinProvider\";\nimport { LambdaMixinProvider } from \"@mustache/generator/LambdaMixinProvider\";\nimport {\n type DistinctNameConfigurationType,\n NameGenerator,\n type NameTransformation,\n} from \"@mustache/generator/NameGenerator\";\nimport { TemplateFileCache } from \"@mustache/generator/TemplateFileCache\";\nimport type { ViewModelCache } from \"@mustache/generator/ViewModelFactory\";\nimport { ViewModelFactory } from \"@mustache/generator/ViewModelFactory\";\nimport type {\n HookType,\n NamedViewModel,\n PrimitiveType,\n Rendering,\n TypeViewModel,\n View,\n ViewModel,\n} from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { default as Mustache } from \"mustache\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport type FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\" | \"FORMATTED\" | \"COMPACT\";\n meta: {\n timestamp?: string;\n generator?: string;\n };\n renderings: {\n utility: Rendering[];\n resource: Rendering[];\n complexType: Rendering[];\n };\n keywords: string[];\n primitiveTypeMap: Partial<Record<PrimitiveType, string>>;\n nameTransformations: DistinctNameConfigurationType<NameTransformation[]>;\n unsaveCharacterPattern: string | RegExp;\n shouldRunHooks: boolean;\n hooks: {\n afterGenerate?: HookType[];\n };\n};\n\nexport type MustacheGeneratorOptions = FileSystemWriterOptions &\n FileBasedMustacheGeneratorOptions & {\n sources: {\n templateSource: string;\n staticSource: string;\n };\n };\n\nexport function loadMustacheGeneratorConfig(\n templatePath: string,\n logger?: CodegenLogger,\n): Partial<FileBasedMustacheGeneratorOptions> {\n const filePath = Path.resolve(templatePath, \"config.json\");\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Partial<FileBasedMustacheGeneratorOptions>;\n }\n } catch (_e) {}\n logger?.warn(`Failed to load JSON file with mustache generator config: ${filePath}`);\n return {};\n}\n\nexport const createGenerator = (\n templatePath: string,\n apiOpts: FileSystemWriterOptions & Partial<FileBasedMustacheGeneratorOptions>,\n): MustacheGenerator => {\n const defaultFileOpts: FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\",\n hooks: {},\n meta: {},\n keywords: [],\n unsaveCharacterPattern: /[^a-zA-Z0-9]/g,\n nameTransformations: {\n common: [],\n enumValue: [],\n type: [],\n field: [],\n },\n renderings: {\n utility: [],\n resource: [],\n complexType: [],\n },\n shouldRunHooks: true,\n primitiveTypeMap: {},\n };\n const actualFileOpts = loadMustacheGeneratorConfig(templatePath);\n\n const mustacheOptions: MustacheGeneratorOptions = {\n ...defaultFileOpts,\n ...apiOpts,\n ...actualFileOpts,\n sources: {\n staticSource: Path.resolve(templatePath, \"static\"),\n templateSource: Path.resolve(templatePath, \"templates\"),\n },\n };\n return new MustacheGenerator(mustacheOptions);\n};\n\nfunction runCommand(cmd: string, args: string[] = [], options = {}) {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n ...options,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve(code);\n else reject(new Error(`Prozess beendet mit Fehlercode ${code}`));\n });\n });\n}\n\nexport class MustacheGenerator extends FileSystemWriter<MustacheGeneratorOptions> {\n private readonly templateFileCache: TemplateFileCache;\n private readonly nameGenerator: NameGenerator;\n private readonly lambdaMixinProvider: LambdaMixinProvider;\n private readonly debugMixinProvider?: DebugMixinProvider;\n\n constructor(opts: MustacheGeneratorOptions) {\n super(opts);\n this.nameGenerator = new NameGenerator(\n new Set<string>(opts.keywords),\n opts.primitiveTypeMap,\n opts.nameTransformations,\n opts.unsaveCharacterPattern,\n );\n this.templateFileCache = new TemplateFileCache(opts.sources.templateSource);\n this.lambdaMixinProvider = new LambdaMixinProvider(this.nameGenerator);\n this.debugMixinProvider = opts.debug !== \"OFF\" ? new DebugMixinProvider(opts.debug) : undefined;\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n const modelFactory = new ViewModelFactory(tsIndex, this.nameGenerator, () => true);\n const cache: ViewModelCache = {\n resourcesByUri: {},\n complexTypesByUri: {},\n };\n tsIndex\n .collectComplexTypes()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createComplexType(typeRef, cache))\n .forEach(this._renderComplexType.bind(this));\n\n tsIndex\n .collectResources()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createResource(typeRef, cache))\n .forEach(this._renderResource.bind(this));\n\n this._renderUtility(modelFactory.createUtility());\n this.copyStaticFiles();\n\n if (this.opts.shouldRunHooks) {\n await this._runHooks(this.opts.hooks.afterGenerate);\n }\n return;\n }\n\n copyStaticFiles() {\n const staticDir = Path.resolve(this.opts.sources.staticSource);\n if (!staticDir) {\n throw new Error(\"staticDir must be set in subclass.\");\n }\n fs.cpSync(staticDir, this.opts.outputDir, { recursive: true });\n }\n\n private async _runHooks(hooks?: HookType[]) {\n for (const hook of hooks ?? []) {\n console.info(`Running hook (${this.opts.outputDir}): ${hook.cmd} ${hook.args?.join(\" \")}`);\n await runCommand(hook.cmd, hook.args ?? [], {\n cwd: this.opts.outputDir,\n });\n console.info(`Completed hook: ${hook.cmd} ${hook.args?.join(\" \")}`);\n }\n }\n\n private _checkRenderingFilter(model: TypeViewModel, rendering: Rendering): boolean {\n if (!rendering.filter?.whitelist?.length && !rendering.filter?.blacklist?.length) {\n return true;\n }\n if ((rendering.filter?.blacklist ?? []).find((v) => model.name.match(v))) {\n return false;\n }\n if ((rendering.filter?.whitelist ?? []).find((v) => model.name.match(v))) {\n return true;\n }\n return !rendering.filter.whitelist?.length;\n }\n\n private _renderUtility(model: ViewModel) {\n this.opts.renderings.utility.forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(rendering.fileNameFormat, () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderResource(model: TypeViewModel) {\n this.opts.renderings.resource\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderComplexType(model: TypeViewModel) {\n this.opts.renderings.complexType\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _calculateFilename(model: NamedViewModel, rendering: Rendering): string {\n return util.format(rendering.fileNameFormat, model.saveName);\n }\n\n private _render<T extends ViewModel>(model: T, rendering: Rendering): string {\n let view: View<T> = this.lambdaMixinProvider.apply({\n meta: {\n timestamp: this.opts.meta.timestamp ?? new Date().toISOString(),\n generator: this.opts.meta.generator ?? \"@atomic-ehr/codegen mustache generator\",\n },\n model: model,\n properties: rendering.properties ?? {},\n });\n if (this.debugMixinProvider) {\n view = this.debugMixinProvider.apply(view);\n }\n return Mustache.render(this.templateFileCache.read(rendering), view, (partialName: string) =>\n this.templateFileCache.readTemplate(partialName),\n );\n }\n}\n","import {\n kebabCase,\n pascalCase,\n typeSchemaInfo,\n uppercaseFirstLetter,\n uppercaseFirstLetterOfEach,\n} from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer\";\nimport {\n 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 {\n extractNameFromCanonical,\n type PackageMeta,\n packageMetaToFhir,\n packageMetaToNpm,\n type TypeSchema,\n} from \"@root/typeschema/types\";\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 type { PartialBy } from \"@root/utils/types\";\nimport type { TypeSchemaConfig } from \"../config\";\nimport type { FileBasedMustacheGeneratorOptions } from \"./writer-generator/mustache\";\nimport * as Mustache from \"./writer-generator/mustache\";\nimport { TypeScript, type TypeScriptOptions } from \"./writer-generator/typescript\";\nimport type { FileBuffer, FileSystemWriter, FileSystemWriterOptions, 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\nexport type GenerationReport = {\n success: boolean;\n outputDir: string;\n filesGenerated: Record<string, string>;\n errors: string[];\n warnings: string[];\n duration: number;\n};\n\nexport const prettyReport = (report: GenerationReport): string => {\n const { success, filesGenerated, errors, warnings, duration } = report;\n const errorsStr = errors.length > 0 ? `Errors: ${errors.join(\", \")}` : undefined;\n const warningsStr = warnings.length > 0 ? `Warnings: ${warnings.join(\", \")}` : undefined;\n let allLoc = 0;\n const files = Object.entries(filesGenerated)\n .map(([path, content]) => {\n const loc = content.split(\"\\n\").length;\n allLoc += loc;\n return ` - ${path} (${loc} loc)`;\n })\n .join(\"\\n\");\n return [\n `Generated files (${Math.round(allLoc / 1000)} kloc):`,\n files,\n errorsStr,\n warningsStr,\n `Duration: ${Math.round(duration)}ms`,\n `Status: ${success ? \"🟩 Success\" : \"🟥 Failure\"}`,\n ]\n .filter((e) => e)\n .join(\"\\n\");\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\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 mustache(templatePath: string, userOpts: Partial<FileSystemWriterOptions & FileBasedMustacheGeneratorOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n };\n const defaultMustacheOpts: Partial<FileBasedMustacheGeneratorOptions> = {\n meta: {\n timestamp: new Date().toISOString(),\n generator: \"atomic-codegen\",\n },\n };\n const opts = {\n ...defaultWriterOpts,\n ...defaultMustacheOpts,\n ...userOpts,\n };\n const generator = Mustache.createGenerator(templatePath, opts);\n this.generators.set(`mustache[${templatePath}]`, generator);\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\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<GenerationReport> {\n const startTime = performance.now();\n const result: GenerationReport = {\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: GenerationReport, 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 fileBuffer.forEach((buf) => {\n result.filesGenerated[buf.relPath] = buf.content;\n });\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/skip-hack.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/ir/logic-promotion.ts","../src/typeschema/ir/tree-shake.ts","../src/api/writer-generator/introspection.ts","../src/typeschema/ir/report.ts","../src/api/writer-generator/ir-report.ts","../src/api/mustache/generator/DebugMixinProvider.ts","../src/api/mustache/generator/LambdaMixinProvider.ts","../src/api/mustache/generator/NameGenerator.ts","../src/api/mustache/generator/TemplateFileCache.ts","../src/api/mustache/generator/ListElementInformationMixinProvider.ts","../src/api/mustache/types.ts","../src/api/mustache/generator/ViewModelFactory.ts","../src/api/writer-generator/mustache.ts","../src/api/writer-generator/typescript.ts","../src/api/builder.ts"],"names":["LogLevel","s","Path","packageMeta","fs","typeSchemas","resolve","schema","e","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","fileURLToPath","assert","format","isStructureDefinition","pkg","f","treeShake","shaked","YAML","nested","Path7","fs5","tsFieldName","tsName","isRequired","fs6","CanonicalManager","Path8"],"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 fsPromises from \"node:fs/promises\";\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 resolveAssets?: (fn: string) => string;\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.currentDir) throw new Error(\"Should be in a directory (`cd`)\");\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] = {\n relPath,\n absPath: Path.resolve(relPath),\n tokens: [],\n };\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 copyAssets(source: string, destination: string) {\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\n }\n\n cp(source: string, destination: string) {\n if (!this.opts.resolveAssets) throw new Error(\"resolveAssets is not defined\");\n source = Path.resolve(this.opts.resolveAssets(source));\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\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 async flushAsync(): Promise<void> {\n const files = this.writtenFiles();\n const dirs = new Set<string>();\n\n for (const file of files) {\n dirs.add(Path.dirname(file.absPath));\n }\n\n await Promise.all(Array.from(dirs).map((dir) => fsPromises.mkdir(dir, { recursive: true })));\n\n await Promise.all(files.map((file) => fsPromises.writeFile(file.absPath, file.content)));\n }\n\n async generateAsync(tsIndex: TypeSchemaIndex): Promise<void> {\n const originalInMemoryOnly = this.opts.inMemoryOnly;\n this.opts.inMemoryOnly = true;\n\n try {\n await this.generate(tsIndex);\n } finally {\n this.opts.inMemoryOnly = originalInMemoryOnly;\n }\n\n await this.flushAsync();\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 { StructureDefinition, 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 type PkgName = string;\nexport type PkgVersion = string;\n\nexport interface PackageMeta {\n name: PkgName;\n version: PkgVersion;\n}\n\nexport const packageMeta = (schema: TypeSchema): PackageMeta => {\n return {\n name: schema.identifier.package,\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 RichStructureDefinition = Omit<StructureDefinition, \"url\"> & {\n package_name: PkgName;\n package_version: PkgVersion;\n url: CanonicalUrl;\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: PkgName;\n version: PkgVersion;\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 isResourceIdentifier = (id: Identifier | undefined): id is ResourceIdentifier => {\n return id?.kind === \"resource\";\n};\n\nexport const isLogicalIdentifier = (id: Identifier | undefined): id is LogicalIdentifier => {\n return id?.kind === \"logical\";\n};\n\nexport const isComplexTypeIdentifier = (id: Identifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\n};\n\nexport const isPrimitiveIdentifier = (id: Identifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: Identifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: Identifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport type TypeSchema =\n | RegularTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\nexport const 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 FieldSlicing {\n discriminator?: Array<{ type?: string; path: string }>;\n rules?: string;\n ordered?: boolean;\n slices?: Record<string, FieldSlice>;\n}\n\nexport interface FieldSlice {\n min?: number;\n max?: number;\n match?: Record<string, unknown>;\n required?: string[];\n excluded?: string[];\n}\n\nexport interface ExtensionSubField {\n name: string;\n url: string;\n valueType?: Identifier;\n min?: number;\n max?: string;\n}\n\nexport interface ProfileExtension {\n name: string;\n path: string;\n url?: string;\n min?: number;\n max?: string;\n mustSupport?: boolean;\n valueTypes?: Identifier[];\n subExtensions?: ExtensionSubField[];\n isComplex?: 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 slicing?: FieldSlicing;\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 slicing?: FieldSlicing;\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\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 { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport type { PartialBy } from \"@root/utils/types.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 resolveAssets: options.resolveAssets ?? resolveCSharpAssets,\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 this.cp(\"Client.cs\", \"Client.cs\");\n this.cp(\"Helper.cs\", \"Helper.cs\");\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 { IrReport } from \"./ir/types\";\nimport type { Register } from \"./register\";\nimport {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type PkgName,\n type ProfileExtension,\n type ProfileTypeSchema,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\n\n///////////////////////////////////////////////////////////\n// TypeSchema processing\n\nexport const groupByPackages = (typeSchemas: TypeSchema[]): Record<PkgName, TypeSchema[]> => {\n const grouped = {} as Record<PkgName, 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(\n (e) => isResourceTypeSchema(e) || isLogicalTypeSchema(e) || isComplexTypeTypeSchema(e),\n );\n\n const directPairs: TypeRelation[] = [];\n const childrenByParent = new Map<string, Identifier[]>();\n\n for (const schema of regularSchemas) {\n if (schema.base) {\n directPairs.push({ parent: schema.base, child: schema.identifier });\n const parentName = schema.base.name;\n let children = childrenByParent.get(parentName);\n if (!children) {\n children = [];\n childrenByParent.set(parentName, children);\n }\n children.push(schema.identifier);\n }\n }\n\n const transitiveCache = new Map<string, Identifier[]>();\n const getTransitiveChildren = (parentName: string): Identifier[] => {\n const cached = transitiveCache.get(parentName);\n if (cached) return cached;\n\n const directChildren = childrenByParent.get(parentName) ?? [];\n const result: Identifier[] = [...directChildren];\n for (const child of directChildren) {\n result.push(...getTransitiveChildren(child.name));\n }\n transitiveCache.set(parentName, result);\n return result;\n };\n\n const seen = new Set<string>();\n const allPairs: TypeRelation[] = [];\n\n for (const pair of directPairs) {\n const key = `${pair.parent.name}|${pair.child.name}`;\n seen.add(key);\n allPairs.push(pair);\n\n for (const transitiveChild of getTransitiveChildren(pair.child.name)) {\n const transitiveKey = `${pair.parent.name}|${transitiveChild.name}`;\n if (!seen.has(transitiveKey)) {\n seen.add(transitiveKey);\n allPairs.push({ parent: pair.parent, child: transitiveChild });\n }\n }\n }\n\n return allPairs;\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Index\n\nexport type TypeSchemaIndex = {\n _schemaIndex: Record<CanonicalUrl, Record<PkgName, TypeSchema>>;\n _relations: TypeRelation[];\n schemas: TypeSchema[];\n schemasByPackage: Record<PkgName, TypeSchema[]>;\n register?: Register;\n collectComplexTypes: () => RegularTypeSchema[];\n collectResources: () => RegularTypeSchema[];\n collectLogicalModels: () => RegularTypeSchema[];\n collectProfiles: () => ProfileTypeSchema[];\n resolve: (id: Identifier) => TypeSchema | undefined;\n resolveByUrl: (pkgName: PkgName, 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 entityTree: () => EntityTree;\n exportTree: (filename: string) => Promise<void>;\n irReport: () => IrReport;\n replaceSchemas: (schemas: TypeSchema[]) => TypeSchemaIndex;\n};\n\ntype EntityTree = Record<PkgName, Record<Identifier[\"kind\"], Record<CanonicalUrl, object>>>;\n\nexport const mkTypeSchemaIndex = (\n schemas: TypeSchema[],\n {\n register,\n logger,\n irReport = {},\n }: {\n register?: Register;\n logger?: CodegenLogger;\n irReport?: IrReport;\n },\n): TypeSchemaIndex => {\n const index: Record<CanonicalUrl, Record<PkgName, TypeSchema>> = {};\n const nestedIndex: Record<CanonicalUrl, Record<PkgName, 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][pkg] && 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 if (isSpecializationTypeSchema(schema) || isProfileTypeSchema(schema)) {\n if (schema.nested) {\n schema.nested.forEach((nschema) => {\n const nurl = nschema.identifier.url;\n const npkg = nschema.identifier.package;\n nestedIndex[nurl] ??= {};\n nestedIndex[nurl][npkg] = nschema;\n });\n }\n }\n };\n for (const schema of schemas) {\n append(schema);\n }\n const relations = resourceRelatives(schemas);\n\n const resolve = (id: Identifier) => {\n if (id.kind === \"nested\") return nestedIndex[id.url]?.[id.package];\n return index[id.url]?.[id.package];\n };\n const resolveByUrl = (pkgName: PkgName, url: CanonicalUrl) => {\n if (register) {\n const resolutionTree = register.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 const extensionMap = new Map<string, ProfileExtension>();\n for (const anySchema of constraintSchemas.slice().reverse()) {\n const extensions = (anySchema as ProfileTypeSchema).extensions ?? [];\n for (const ext of extensions) {\n const key = `${ext.path}|${ext.name}|${ext.url ?? \"\"}`;\n extensionMap.set(key, ext);\n }\n }\n const mergedExtensions = Array.from(extensionMap.values());\n\n return {\n ...schema,\n base: nonConstraintSchema.identifier,\n fields: mergedFields,\n dependencies: dependencies,\n extensions: mergedExtensions.length > 0 ? mergedExtensions : undefined,\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 entityTree = () => {\n const tree: EntityTree = {};\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 return tree;\n };\n\n const exportTree = async (filename: string) => {\n const tree = entityTree();\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 schemas,\n schemasByPackage: groupByPackages(schemas),\n register,\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 entityTree,\n exportTree,\n irReport: () => irReport,\n replaceSchemas: (newSchemas) => mkTypeSchemaIndex(newSchemas, { register, logger, irReport: { ...irReport } }),\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 rootPackageName: string; /// e.g. <rootPackageName>.hl7_fhir_r4_core.Patient.\n fieldFormat: StringFormatKey;\n fhirpyClient?: boolean;\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 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 const __filename = 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 private readonly forFhirpyClient: boolean;\n\n constructor(options: PythonGeneratorOptions) {\n super({ ...options, resolveAssets: options.resolveAssets ?? resolvePyAssets });\n this.nameFormatFunction = this.getFieldFormatFunction(options.fieldFormat);\n this.forFhirpyClient = options.fhirpyClient ?? false;\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 if (this.forFhirpyClient)\n this.copyAssets(\n resolvePyAssets(\"fhirpy_base_model.py\"),\n Path.resolve(this.opts.outputDir, \"fhirpy_base_model.py\"),\n );\n this.copyAssets(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.generateFhirBaseModelImport();\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 private generateFhirBaseModelImport(): void {\n if (this.forFhirpyClient)\n this.pyImportFrom(`${this.opts.rootPackageName}.fhirpy_base_model`, \"FhirpyBaseModel\");\n }\n\n private 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] : []), ...this.injectSuperClasses(schema.identifier.url)];\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 private 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 private 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(\n `${listName} = [${resources\n .map((r) => `'${r}'`)\n .sort()\n .join(\", \")}]`,\n );\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 private 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 private injectSuperClasses(url: string): string[] {\n const name = canonicalToName(url);\n if (name === \"resource\") return this.forFhirpyClient ? [\"FhirpyBaseModel\"] : [\"BaseModel\"];\n if (name === \"element\") return [\"BaseModel\"];\n return [];\n }\n}\n","import type { CanonicalUrl, PackageMeta } 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\nexport const skipList: Record<string, Record<CanonicalUrl, string>> = {\n \"hl7.fhir.uv.extensions.r4\": {\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 } as Record<CanonicalUrl, string>,\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 \"http://hl7.org/fhir/StructureDefinition/publishablecodesystem\":\n \"Uses R5-only base types not available in R4 generation.\",\n } as Record<CanonicalUrl, string>,\n};\n\nexport interface SkipCheckResult {\n shouldSkip: boolean;\n reason?: string;\n}\n\nexport function shouldSkipCanonical(packageMeta: PackageMeta, canonicalUrl: CanonicalUrl): SkipCheckResult {\n const pkgId = `${packageMeta.name}#${packageMeta.version}`;\n\n const reasonByPkgId = skipList[pkgId]?.[canonicalUrl];\n if (reasonByPkgId) {\n return { shouldSkip: true, reason: reasonByPkgId };\n }\n\n const reasonByName = skipList[packageMeta.name]?.[canonicalUrl];\n if (reasonByName) {\n return { shouldSkip: true, reason: reasonByName };\n }\n\n return { shouldSkip: false };\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 const baseUrl = url.split(\"#\")[0] as CanonicalUrl;\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n const packageMeta = baseFs?.package_meta ?? fhirSchema.package_meta;\n return {\n kind: \"nested\",\n package: packageMeta.name,\n version: packageMeta.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 {\n BindingIdentifier,\n Field,\n FieldSlice,\n FieldSlicing,\n Identifier,\n Name,\n RegularField,\n RichFHIRSchema,\n} 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\nconst extractSliceFieldNames = (schema: FHIRSchemaElement): Pick<FieldSlice, \"required\" | \"excluded\"> => {\n const required = new Set<string>();\n const excluded = new Set<string>();\n\n if (schema.required) {\n for (const name of schema.required) required.add(name);\n }\n if (schema.excluded) {\n for (const name of schema.excluded) excluded.add(name);\n }\n if (schema.elements) {\n for (const [name, element] of Object.entries(schema.elements)) {\n if (element.min !== undefined && element.min > 0) {\n required.add(name);\n }\n }\n }\n\n return {\n required: required.size > 0 ? Array.from(required) : undefined,\n excluded: excluded.size > 0 ? Array.from(excluded) : undefined,\n };\n};\n\nconst buildSlicing = (element: FHIRSchemaElement): FieldSlicing | undefined => {\n const slicing = element.slicing;\n if (!slicing) return undefined;\n\n const slices: Record<string, FieldSlice> = {};\n for (const [name, slice] of Object.entries(slicing.slices ?? {})) {\n if (!slice) continue;\n const { required, excluded } = slice.schema ? extractSliceFieldNames(slice.schema) : {};\n slices[name] = {\n min: slice.min,\n max: slice.max,\n match: slice.match as Record<string, unknown> | undefined,\n required,\n excluded,\n };\n }\n\n return {\n discriminator: slicing.discriminator,\n rules: slicing.rules,\n ordered: slicing.ordered,\n slices: Object.keys(slices).length > 0 ? slices : undefined,\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: <${fhirSchema.url}>.${path.join(\".\")}: <${element.type}> (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'))`,\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}>.${path.join(\".\")} (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'): ${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?.dry_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 slicing: buildSlicing(element),\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 slicing: buildSlicing(element),\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 const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (processedPaths.has(pathKey)) continue;\n processedPaths.add(pathKey);\n\n if (elemSnapshot.binding) {\n const binding = generateBindingSchema(register, fhirSchema, path, elemSnapshot, 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 { shouldSkipCanonical } from \"@root/typeschema/skip-hack\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport type { Register } from \"@typeschema/register\";\nimport {\n type CanonicalUrl,\n type ExtensionSubField,\n type Field,\n type Identifier,\n isNestedIdentifier,\n isProfileIdentifier,\n type NestedType,\n type ProfileExtension,\n packageMetaToFhir,\n type RichFHIRSchema,\n type RichValueSet,\n type TypeSchema,\n type ValueSetTypeSchema,\n} from \"@typeschema/types\";\nimport { collectBindingSchemas, extractValueSetConceptsByUrl } from \"./binding\";\nimport { buildFieldType, 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 const fcurl = elemSnapshot.type ? register.ensureSpecializationCanonicalUrl(elemSnapshot.type) : undefined;\n if (fcurl && shouldSkipCanonical(fhirSchema.package_meta, fcurl).shouldSkip) {\n logger?.warn(\n `Skipping field ${path} for ${fcurl} due to skip hack ${shouldSkipCanonical(fhirSchema.package_meta, fcurl).reason}`,\n );\n continue;\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\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 extensions =\n fhirSchema.derivation === \"constraint\" ? extractProfileExtensions(register, fhirSchema, logger) : undefined;\n const dependencies = extractDependencies(identifier, base, fields, nested);\n const extensionDeps = extensions?.flatMap((ext) => ext.valueTypes ?? []) ?? [];\n const mergedDeps = (() => {\n if (!dependencies && extensionDeps.length === 0) return dependencies;\n const depMap: Record<string, Identifier> = {};\n for (const dep of dependencies ?? []) depMap[dep.url] = dep;\n for (const dep of extensionDeps) depMap[dep.url] = dep;\n return Object.values(depMap);\n })();\n\n const typeSchema: TypeSchema = {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies: mergedDeps,\n ...(extensions && extensions.length > 0 ? { extensions } : {}),\n };\n\n const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);\n\n return [typeSchema, ...bindingSchemas];\n}\n\nfunction extractExtensionValueTypes(\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLogger,\n): Identifier[] | undefined {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const valueTypes: Identifier[] = [];\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (element.choiceOf !== \"value\" && !key.startsWith(\"value\")) continue;\n const fieldType = buildFieldType(register, extensionSchema, [key], element, logger);\n if (fieldType) valueTypes.push(fieldType);\n }\n\n if (valueTypes.length === 0) return undefined;\n const uniq = new Map(valueTypes.map((type) => [type.url, type]));\n return Array.from(uniq.values());\n}\n\nfunction extractSubExtensions(\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLogger,\n): ExtensionSubField[] | undefined {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const subExtensions: ExtensionSubField[] = [];\n\n // Check for extension:sliceName pattern in elements (legacy format)\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (!key.startsWith(\"extension:\")) continue;\n\n const sliceName = key.split(\":\")[1];\n if (!sliceName) continue;\n\n const sliceUrl = element.url ?? sliceName;\n\n let valueType: Identifier | undefined;\n for (const [elemKey, elemValue] of Object.entries(element.elements ?? {})) {\n if (elemValue.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n valueType = buildFieldType(register, extensionSchema, [key, elemKey], elemValue, logger);\n if (valueType) break;\n }\n\n subExtensions.push({\n name: sliceName,\n url: sliceUrl,\n valueType,\n min: element.min,\n max: element.max !== undefined ? String(element.max) : undefined,\n });\n }\n\n // Check for slices in extension.slicing.slices (new format)\n const extensionElement = extensionSchema.elements.extension as any;\n const slices = extensionElement?.slicing?.slices;\n if (slices && typeof slices === \"object\") {\n for (const [sliceName, sliceData] of Object.entries(slices)) {\n const slice = sliceData as any;\n const schema = slice.schema;\n if (!schema) continue;\n\n const sliceUrl = slice.match?.url ?? sliceName;\n\n let valueType: Identifier | undefined;\n const schemaElements = schema.elements ?? {};\n for (const [elemKey, elemValue] of Object.entries(schemaElements)) {\n const elem = elemValue as any;\n if (elem.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n if (elem.type) {\n valueType = {\n kind: \"complex-type\" as const,\n package: extensionSchema.package_meta.name,\n version: extensionSchema.package_meta.version,\n name: elem.type as any,\n url: `http://hl7.org/fhir/StructureDefinition/${elem.type}` as CanonicalUrl,\n };\n break;\n }\n }\n\n subExtensions.push({\n name: sliceName,\n url: sliceUrl,\n valueType,\n min: schema._required ? 1 : (schema.min ?? 0),\n // biome-ignore lint/style/noNestedTernary : okay here\n max: schema.max !== undefined ? String(schema.max) : schema.array ? \"*\" : \"1\",\n });\n }\n }\n\n return subExtensions.length > 0 ? subExtensions : undefined;\n}\n\nfunction extractProfileExtensions(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLogger,\n): ProfileExtension[] {\n const extensions: ProfileExtension[] = [];\n\n const addExtensionEntry = (path: string[], name: string, schema: FHIRSchemaElement) => {\n const url = schema.url as CanonicalUrl | undefined;\n const valueTypes = url ? extractExtensionValueTypes(register, fhirSchema, url, logger) : undefined;\n const subExtensions = url ? extractSubExtensions(register, fhirSchema, url, logger) : undefined;\n const isComplex = subExtensions !== undefined && subExtensions.length > 0;\n extensions.push({\n name,\n path: [...path, \"extension\"].join(\".\"),\n url,\n min: schema.min,\n max: schema.max !== undefined ? String(schema.max) : undefined,\n mustSupport: schema.mustSupport,\n valueTypes,\n subExtensions,\n isComplex,\n });\n };\n\n const walkElement = (path: string[], element: FHIRSchemaElement) => {\n if (element.extensions) {\n for (const [name, schema] of Object.entries(element.extensions)) {\n addExtensionEntry(path, name, schema);\n }\n }\n if (element.elements) {\n for (const [key, child] of Object.entries(element.elements)) {\n walkElement([...path, key], child);\n }\n }\n };\n\n if (fhirSchema.extensions) {\n for (const [name, schema] of Object.entries(fhirSchema.extensions)) {\n addExtensionEntry([], name, schema);\n }\n }\n\n if (fhirSchema.elements) {\n for (const [key, element] of Object.entries(fhirSchema.elements)) {\n walkElement([key], element);\n }\n }\n\n return extensions;\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 (pkg: hl7.fhir.r4.core#4.0.1)\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 (pkg: hl7.fhir.r4.core#4.0.1)\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 {\n CanonicalUrl,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichStructureDefinition,\n RichValueSet,\n} 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 allSd(): RichStructureDefinition[];\n patchSd(fn: (pkg: PackageMeta, sd: StructureDefinition) => StructureDefinition): void;\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};\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 enrichResolver = (resolver: PackageAwareResolver, logger?: CodegenLogger) => {\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 fs = fhirschema.translate(resource as StructureDefinition) as FHIRSchema;\n const rfs = enrichFHIRSchema(fs, resourcePkg);\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\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 enrichResolver(resolver);\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): CanonicalUrl => {\n // Strip version suffix from canonical URL (e.g., \"Extension|4.0.1\" -> \"Extension\")\n if (name.includes(\"|\")) name = name.split(\"|\")[0] as CanonicalUrl;\n if (name.match(/^[a-zA-Z0-9]+$/)) {\n return `http://hl7.org/fhir/StructureDefinition/${name}` as CanonicalUrl;\n }\n return name as CanonicalUrl;\n };\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 let cachedResolutionTree: ResolutionTree | undefined;\n\n return {\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 cachedResolutionTree = undefined;\n },\n resolveFs,\n resolveFsGenealogy: resolveFsGenealogy,\n resolveFsSpecializations: resolveFsSpecializations,\n ensureSpecializationCanonicalUrl,\n resolveSd: (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const res = resolver[packageMetaToFhir(pkg)]?.canonicalResolution[canonicalUrl]?.[0]?.resource;\n if (isStructureDefinition(res)) return res as StructureDefinition;\n return undefined;\n },\n allSd: () =>\n Object.values(resolver)\n .flatMap((pkgIndex) =>\n Object.values(pkgIndex.canonicalResolution).flatMap((resolutions) =>\n resolutions.map((r) => {\n const sd = r.resource as RichStructureDefinition;\n if (!sd.package_name) {\n return {\n ...sd,\n package_name: pkgIndex.pkg.name,\n package_version: pkgIndex.pkg.version,\n };\n }\n return sd;\n }),\n ),\n )\n .filter((r): r is RichStructureDefinition => isStructureDefinition(r))\n .sort((sd1, sd2) => sd1.url.localeCompare(sd2.url)),\n patchSd: (fn: (pkg: PackageMeta, sd: StructureDefinition) => StructureDefinition) => {\n Object.values(resolver).flatMap((pkgIndex) =>\n Object.values(pkgIndex.canonicalResolution).forEach((resolutions) => {\n resolutions.forEach((e) => {\n if (isStructureDefinition(e.resource)) {\n const sd = e.resource as StructureDefinition;\n const newSd = fn(pkgIndex.pkg, sd);\n if (sd.url !== newSd.url)\n throw new Error(`Patch update StructureDefinition URL: ${sd.url} !== ${newSd.url}`);\n e.resource = newSd;\n }\n });\n }),\n );\n enrichResolver(resolver);\n cachedResolutionTree = 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 if (cachedResolutionTree) return cachedResolutionTree;\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 cachedResolutionTree = res;\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 { shouldSkipCanonical } from \"./skip-hack\";\nimport { packageMetaToFhir, type TypeSchema } from \"./types\";\n\n// Re-export core dependencies\nexport { TypeSchemaGenerator } from \"./generator\";\nexport { shouldSkipCanonical, skipList } from \"./skip-hack\";\nexport type { Identifier, TypeSchema } from \"./types\";\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 const skipCheck = shouldSkipCanonical(fhirSchema.package_meta, fhirSchema.url);\n if (skipCheck.shouldSkip) {\n logger?.dry_warn(`Skip ${fhirSchema.url} from ${pkgId}. Reason: ${skipCheck.reason}`);\n continue;\n }\n fhirSchemas.push(...(await transformFhirSchema(register, fhirSchema, logger)));\n }\n for (const vsSchema of register.allVs()) {\n fhirSchemas.push(await transformValueSet(register, vsSchema, logger));\n }\n return fhirSchemas;\n};\n","import {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type PkgName,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { LogicalPromotionConf } from \"./types\";\n\nexport const promoteLogical = (tsIndex: TypeSchemaIndex, promotes: LogicalPromotionConf): TypeSchemaIndex => {\n const promoteSets: Record<PkgName, Set<CanonicalUrl>> = Object.fromEntries(\n Object.entries(promotes).map(([pkg, urls]) => [pkg, new Set(urls)]),\n );\n\n const identifierToString = (i: Identifier): string => `${i.package}-${i.version}-${i.kind}-${i.url}`;\n const renames: Record<string, Identifier> = Object.fromEntries(\n tsIndex.schemas\n .map((schema) => {\n const promo = promoteSets[schema.identifier.package]?.has(schema.identifier.url);\n if (!promo) return undefined;\n if (schema.identifier.kind !== \"logical\")\n throw new Error(`Unexpected schema kind: ${JSON.stringify(schema.identifier)}`);\n return [identifierToString(schema.identifier), { ...schema.identifier, kind: \"resource\" }] as const;\n })\n .filter((e) => e !== undefined),\n );\n const replace = (i: Identifier): Identifier => renames[identifierToString(i)] || i;\n const replaceInFields = (fields: Record<string, Field> | undefined) => {\n if (!fields) return undefined;\n return Object.fromEntries(\n Object.entries(fields).map(([k, f]) => {\n if (isChoiceDeclarationField(f)) return [k, f];\n return [k, { ...f, type: f.type ? replace(f.type) : undefined }];\n }),\n );\n };\n\n const schemas = tsIndex.schemas.map((schema) => {\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema)) return schema;\n\n const cloned = JSON.parse(JSON.stringify(schema));\n cloned.identifier = replace(cloned.identifier);\n cloned.dependencies = cloned.dependencies?.map(replace);\n if (isSpecializationTypeSchema(cloned) || isProfileTypeSchema(cloned)) {\n cloned.fields = replaceInFields(cloned.fields);\n cloned.nested = cloned.nested?.map((n: NestedType) => {\n return {\n ...n,\n base: replace(n.base),\n nested: replaceInFields(n.fields),\n };\n });\n }\n return cloned;\n });\n\n const promotedIndex = tsIndex.replaceSchemas(schemas);\n promotedIndex.irReport().logicalPromotion = {\n packages: Object.fromEntries(\n Object.entries(promotes).map(([pkgName, urls]) => [pkgName, { promotedCanonicals: [...urls].sort() }]),\n ),\n };\n return promotedIndex;\n};\n","import assert from \"node:assert\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { extractDependencies } from \"../core/transformer\";\nimport {\n type CanonicalUrl,\n type Field,\n isBindingSchema,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type PkgName,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"../types\";\nimport type { TypeSchemaIndex } from \"../utils\";\nimport type { IrReport, TreeShakeConf, TreeShakeReport, TreeShakeRule } from \"./types\";\n\nconst ensureIrReport = (indexOrReport: TypeSchemaIndex | IrReport): IrReport => {\n if (\"irReport\" in indexOrReport && typeof indexOrReport.irReport === \"function\") {\n return indexOrReport.irReport();\n } else {\n return indexOrReport as IrReport;\n }\n};\n\nexport const rootTreeShakeReadme = (report: TypeSchemaIndex | IrReport) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [\"# Tree Shake Report\", \"\"];\n if (treeShakeReport.skippedPackages.length === 0) lines.push(\"All packages are included.\");\n else lines.push(\"Skipped packages:\", \"\");\n for (const pkgName of treeShakeReport.skippedPackages) {\n lines.push(`- ${pkgName}`);\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n};\n\nexport const packageTreeShakeReadme = (report: TypeSchemaIndex | IrReport, pkgName: PkgName) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [`# Package: ${pkgName}`, \"\"];\n assert(treeShakeReport.packages[pkgName]);\n lines.push(\"## Canonical Fields Changes\", \"\");\n if (Object.keys(treeShakeReport.packages[pkgName].canonicals).length === 0) {\n lines.push(\"All canonicals translated as is.\", \"\");\n } else {\n for (const [canonicalUrl, { skippedFields }] of Object.entries(treeShakeReport.packages[pkgName].canonicals)) {\n lines.push(`- <${canonicalUrl}>`);\n if (skippedFields.length === 0) {\n lines.push(\" - All fields translated as is.\", \"\");\n } else {\n lines.push(` - Skipped fields: ${skippedFields.map((f: string) => `\\`${f}\\``).join(\", \")}`);\n lines.push(\"\");\n }\n }\n lines.push(\"\");\n }\n lines.push(\"## Skipped Canonicals\", \"\");\n if (treeShakeReport.packages[pkgName].skippedCanonicals.length === 0) {\n lines.push(\"No skipped canonicals\");\n } else {\n lines.push(\"Skipped canonicals:\", \"\");\n for (const canonicalUrl of treeShakeReport.packages[pkgName].skippedCanonicals) {\n lines.push(`- <${canonicalUrl}>`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n};\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\nconst mutableFillReport = (report: TreeShakeReport, tsIndex: TypeSchemaIndex, shakedIndex: TypeSchemaIndex) => {\n const packages = Object.keys(tsIndex.schemasByPackage);\n const shakedPackages = Object.keys(shakedIndex.schemasByPackage);\n const skippedPackages = packages.filter((pkg) => !shakedPackages.includes(pkg));\n report.skippedPackages = skippedPackages;\n\n for (const [pkgName, shakedSchemas] of Object.entries(shakedIndex.schemasByPackage)) {\n if (skippedPackages.includes(pkgName)) continue;\n const tsSchemas = tsIndex.schemasByPackage[pkgName];\n assert(tsSchemas);\n report.packages[pkgName] = {\n skippedCanonicals: tsSchemas\n .filter((schema) => !shakedSchemas.includes(schema))\n .map((schema) => schema.identifier.url)\n .sort(),\n canonicals: Object.fromEntries(\n shakedSchemas\n .map((shakedSchema) => {\n const schema = tsIndex.resolve(shakedSchema.identifier);\n assert(schema);\n if (!isSpecializationTypeSchema(schema)) return undefined;\n assert(isSpecializationTypeSchema(shakedSchema));\n if (!schema.fields) return undefined;\n if (!shakedSchema.fields) {\n return [shakedSchema.identifier.url, Object.keys(schema.fields)];\n }\n const shakedFieldNames = Object.keys(shakedSchema.fields);\n const skippedFields = Object.keys(schema.fields)\n .filter((field) => !shakedFieldNames.includes(field))\n .sort();\n if (skippedFields.length === 0) return undefined;\n return [shakedSchema.identifier.url, { skippedFields }] as const;\n })\n .filter((e): e is readonly [CanonicalUrl, { skippedFields: string[] }] => e !== undefined),\n ),\n };\n }\n};\n\nexport const treeShakeTypeSchema = (schema: TypeSchema, rule: TreeShakeRule, _logger?: CodegenLogger): TypeSchema => {\n schema = JSON.parse(JSON.stringify(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 = (tsIndex: TypeSchemaIndex, treeShake: TreeShakeConf): 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) || isProfileTypeSchema(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\n const shakedIndex = tsIndex.replaceSchemas(shaked);\n const treeShakeReport: TreeShakeReport = { skippedPackages: [], packages: {} };\n const irReport = shakedIndex.irReport();\n irReport.treeShake = treeShakeReport;\n mutableFillReport(treeShakeReport, tsIndex, shakedIndex);\n return shakedIndex;\n};\n","import * as Path from \"node:path\";\nimport type { RichFHIRSchema, RichStructureDefinition } from \"@root/typeschema/types\";\nimport { type CanonicalUrl, extractNameFromCanonical, type TypeSchema } from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport YAML from \"yaml\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IntrospectionWriterOptions extends FileSystemWriterOptions {\n typeSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n typeTree?: string /** .json or .yaml file */;\n fhirSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n structureDefinitions?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\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\nconst typeSchemaToJson = (ts: TypeSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(ts.identifier.package);\n const name = normalizeFileName(`${ts.identifier.name}(${extractNameFromCanonical(ts.identifier.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(ts, null, pretty ? 2 : undefined),\n };\n};\n\nconst fhirSchemaToJson = (fs: RichFHIRSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(fs.package_meta.name);\n const name = normalizeFileName(`${fs.name}(${extractNameFromCanonical(fs.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(fs, null, pretty ? 2 : undefined),\n };\n};\n\nconst structureDefinitionToJson = (\n sd: RichStructureDefinition,\n pretty: boolean,\n): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(sd.package_name ?? \"unknown\");\n const name = normalizeFileName(`${sd.name}(${extractNameFromCanonical(sd.url as CanonicalUrl)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n // HACK: for some reason ID may change between CI and local install\n genContent: () => JSON.stringify({ ...sd, id: undefined }, null, pretty ? 2 : undefined),\n };\n};\n\nexport class IntrospectionWriter extends FileSystemWriter<IntrospectionWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.logger()?.info(`IntrospectionWriter: Begin`);\n if (this.opts.typeTree) {\n await this.writeTypeTree(tsIndex);\n this.logger()?.info(`IntrospectionWriter: Type tree written to ${this.opts.typeTree}`);\n }\n\n if (this.opts.typeSchemas) {\n const outputPath = this.opts.typeSchemas;\n const typeSchemas = tsIndex.schemas;\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(typeSchemas, outputPath, typeSchemaToJson);\n } else {\n this.writeJsonFiles(\n typeSchemas.map((ts) => typeSchemaToJson(ts, true)),\n outputPath,\n );\n }\n this.logger()?.info(\n `IntrospectionWriter: ${typeSchemas.length} TypeSchema written to ${this.opts.typeSchemas}`,\n );\n }\n\n if (this.opts.fhirSchemas && tsIndex.register) {\n const outputPath = this.opts.fhirSchemas;\n const fhirSchemas = tsIndex.register.allFs();\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(fhirSchemas, outputPath, fhirSchemaToJson);\n } else {\n this.writeJsonFiles(\n fhirSchemas.map((fs) => fhirSchemaToJson(fs, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(`IntrospectionWriter: ${fhirSchemas.length} FHIR schema written to ${outputPath}`);\n }\n\n if (this.opts.structureDefinitions && tsIndex.register) {\n const outputPath = this.opts.structureDefinitions;\n const structureDefinitions = tsIndex.register.allSd();\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(structureDefinitions, outputPath, structureDefinitionToJson);\n } else {\n this.writeJsonFiles(\n structureDefinitions.map((sd) => structureDefinitionToJson(sd, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(\n `IntrospectionWriter: ${structureDefinitions.length} StructureDefinitions written to ${outputPath}`,\n );\n }\n }\n\n private async writeNdjson<T>(\n items: T[],\n outputFile: string,\n toJson: (item: T, pretty: boolean) => { filename: string; genContent: () => string },\n ): Promise<void> {\n this.cd(Path.dirname(outputFile), () => {\n this.cat(Path.basename(outputFile), () => {\n for (const item of items) {\n const { genContent } = toJson(item, false);\n this.write(`${genContent()}\\n`);\n }\n });\n });\n }\n\n private async writeJsonFiles(\n items: { filename: string; genContent: () => string }[],\n outputDir: string,\n ): Promise<void> {\n this.cd(outputDir, () => {\n for (const { filename, genContent } of items) {\n const fileName = `${filename}.json`;\n this.cd(Path.dirname(fileName), () => {\n this.cat(Path.basename(fileName), () => {\n this.write(genContent());\n });\n });\n }\n });\n }\n\n private async writeTypeTree(tsIndex: TypeSchemaIndex): Promise<void> {\n const filename = this.opts.typeTree;\n if (!filename) return;\n\n const tree = tsIndex.entityTree();\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n\n const dir = Path.dirname(filename);\n const file = Path.basename(filename);\n\n this.cd(dir, () => {\n this.cat(file, () => {\n this.write(raw);\n });\n });\n }\n}\n","import type { PkgName } from \"@root/typeschema/types\";\nimport type { IrReport } from \"./types\";\n\nexport const generateIrReportReadme = (report: IrReport): string => {\n const lines: string[] = [\"# IR Report\", \"\"];\n\n const allPackages = new Set<PkgName>([\n ...Object.keys(report.treeShake?.packages ?? {}),\n ...Object.keys(report.logicalPromotion?.packages ?? {}),\n ]);\n\n if (allPackages.size === 0) {\n lines.push(\"No IR modifications applied.\");\n return lines.join(\"\\n\");\n }\n\n if (report.treeShake?.skippedPackages.length) {\n lines.push(\"## Skipped Packages\", \"\");\n for (const pkg of report.treeShake.skippedPackages) {\n lines.push(`- ${pkg}`);\n }\n lines.push(\"\");\n }\n\n for (const pkgName of [...allPackages].sort()) {\n lines.push(`## Package: \\`${pkgName}\\``, \"\");\n\n const treeShakePkg = report.treeShake?.packages[pkgName];\n const logicalPromotionPkg = report.logicalPromotion?.packages[pkgName];\n\n if (logicalPromotionPkg?.promotedCanonicals.length) {\n lines.push(\"### Promoted Logical Models\", \"\");\n for (const canonical of logicalPromotionPkg.promotedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n\n if (treeShakePkg) {\n const canonicalsWithChanges = Object.entries(treeShakePkg.canonicals).filter(\n ([_, data]) => data.skippedFields.length > 0,\n );\n\n if (canonicalsWithChanges.length > 0) {\n lines.push(\"### Modified Canonicals\", \"\");\n for (const [canonical, data] of canonicalsWithChanges) {\n lines.push(`#### \\`${canonical}\\``, \"\");\n lines.push(\"Skipped fields:\", \"\");\n for (const field of data.skippedFields) {\n lines.push(`- \\`${field}\\``);\n }\n lines.push(\"\");\n }\n }\n\n if (treeShakePkg.skippedCanonicals.length > 0) {\n lines.push(\"### Skipped Canonicals\", \"\");\n for (const canonical of treeShakePkg.skippedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n }\n }\n\n return lines.join(\"\\n\");\n};\n","import { generateIrReportReadme } from \"@root/typeschema/ir/report\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IrReportWriterWriterOptions extends FileSystemWriterOptions {\n rootReadmeFileName: string;\n}\n\nexport class IrReportWriterWriter extends FileSystemWriter<IrReportWriterWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n const report = tsIndex.irReport();\n const md = generateIrReportReadme(report);\n this.cd(\"/\", () => {\n this.cat(this.opts.rootReadmeFileName, () => {\n this.write(md);\n });\n });\n }\n}\n","import type { DebugMixin } from \"@mustache/types\";\n\nexport class DebugMixinProvider {\n constructor(private readonly mode: \"FORMATTED\" | \"COMPACT\") {}\n\n public apply<T extends Record<string, unknown>>(target: T): T & DebugMixin {\n return this._addDebug(target) as T & DebugMixin;\n }\n\n private _addDebug(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this._addDebug(v));\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const debugString = JSON.stringify(obj, null, this.mode === \"FORMATTED\" ? 2 : undefined);\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addDebug(val);\n }\n result.debug = debugString;\n return result;\n }\n\n return value;\n }\n}\n","import type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type { LambdaMixin } from \"@mustache/types\";\nimport { camelCase, kebabCase, pascalCase, snakeCase } from \"@root/api/writer-generator/utils\";\n\nexport class LambdaMixinProvider {\n private readonly lambda: LambdaMixin[\"lambda\"];\n constructor(private readonly nameGenerator: NameGenerator) {\n this.lambda = {\n saveTypeName: () => (text, render) => this.nameGenerator.generateType(render(text)),\n saveEnumValueName: () => (text, render) => this.nameGenerator.generateEnumValue(render(text)),\n saveFieldName: () => (text, render) => this.nameGenerator.generateField(render(text)),\n\n camelCase: () => (text, render) => camelCase(render(text)),\n snakeCase: () => (text, render) => snakeCase(render(text)),\n pascalCase: () => (text, render) => pascalCase(render(text)),\n kebabCase: () => (text, render) => kebabCase(render(text)),\n lowerCase: () => (text, render) => render(text).toLowerCase(),\n upperCase: () => (text, render) => render(text).toUpperCase(),\n };\n }\n\n public apply<T extends Record<string, unknown>>(target: T): T & LambdaMixin {\n return {\n ...target,\n lambda: this.lambda,\n };\n }\n}\n","import type { Field, Identifier, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type NameTransformation = {\n pattern: RegExp | string;\n format: string;\n};\nexport type DistinctNameConfigurationType<T> = {\n common: T;\n enumValue: T;\n type: T;\n field: T;\n};\n\nexport class NameGenerator {\n constructor(\n private readonly keywords: Set<string>,\n private readonly typeMap: Record<string, string>,\n private readonly nameTransformations: DistinctNameConfigurationType<NameTransformation[]>,\n private readonly unsaveCharacterPattern: string | RegExp,\n ) {}\n\n private _replaceUnsaveChars(name: string): string {\n const pattern =\n this.unsaveCharacterPattern instanceof RegExp\n ? this.unsaveCharacterPattern\n : new RegExp(this.unsaveCharacterPattern, \"g\");\n return name.replace(pattern, \"_\");\n }\n\n private _applyNameTransformations(name: string, transformations: NameTransformation[]): string {\n for (const transformation of this.nameTransformations.common) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n for (const transformation of transformations) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n return name;\n }\n\n private _generateTypeName(name: string): string {\n if (this.typeMap[name]) {\n name = this.typeMap[name] as any;\n } else {\n name = this._applyNameTransformations(name, this.nameTransformations.type);\n name = name.charAt(0).toUpperCase() + name.slice(1);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n }\n return name;\n }\n\n public generateEnumType(name: string): string {\n return this._generateTypeName(name);\n }\n\n private _generateTypeFromTypeRef(typeRef: Identifier): string {\n if (typeRef.kind === \"primitive-type\") {\n return this._generateTypeName(typeRef.name);\n }\n return this._generateTypeName(\n typeRef.url\n .split(\"/\")\n .pop()\n ?.split(\"#\")\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join(\"\") ?? \"<UNKNOWN>\",\n );\n }\n\n public generateFieldType(schema: Field): string {\n if ((schema as any).enum) {\n return this.generateEnumType((schema as any).binding?.name ?? (schema as any).type.name);\n }\n return this._generateTypeFromTypeRef((schema as any).type);\n }\n\n public generateType(schemaOrRefOrString: TypeSchema | NestedType | Identifier | string): string {\n if (typeof schemaOrRefOrString === \"string\") {\n return this._generateTypeName(schemaOrRefOrString);\n }\n if (\"url\" in schemaOrRefOrString) {\n return this._generateTypeFromTypeRef(schemaOrRefOrString);\n }\n return this._generateTypeFromTypeRef(schemaOrRefOrString.identifier);\n }\n\n public generateField(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.field);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n return name;\n }\n public generateEnumValue(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.enumValue);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name).toUpperCase();\n return name;\n }\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport type { Rendering } from \"@mustache/types\";\n\nexport class TemplateFileCache {\n private readonly templateBaseDir: string;\n private readonly templateCache: Record<string, string> = {};\n constructor(templateBaseDir: string) {\n this.templateBaseDir = Path.resolve(templateBaseDir);\n }\n\n private _normalizeName(name: string): string {\n if (name.endsWith(\".mustache\")) {\n return name;\n }\n return `${name}.mustache`;\n }\n\n public read(template: Pick<Rendering, \"source\">): string {\n return this.readTemplate(template.source);\n }\n public readTemplate(name: string): string {\n const normalizedName = this._normalizeName(name);\n if (!this.templateCache[normalizedName]) {\n this.templateCache[normalizedName] = fs.readFileSync(\n Path.join(this.templateBaseDir, normalizedName),\n \"utf-8\",\n );\n }\n return this.templateCache[normalizedName];\n }\n}\n","import type { ListElementInformationMixin } from \"@mustache/types\";\n\nexport class ListElementInformationMixinProvider {\n private static _array<T>(value: T[] | Set<T>): T[] {\n return Array.isArray(value) ? value : Array.from(value);\n }\n\n public apply<T extends Record<string, unknown>>(source: T): T {\n return this._addListElementInformation(source) as T;\n }\n\n private _addListElementInformation(value: unknown): unknown {\n if (Array.isArray(value) || value instanceof Set) {\n return ListElementInformationMixinProvider._array(value).map((v, index, array) => {\n if (typeof v === \"object\" && v !== null) {\n return {\n ...(this._addListElementInformation(v) as Record<string, unknown>),\n \"-index\": index,\n \"-length\": array.length,\n \"-first\": index === 0,\n \"-last\": index === array.length - 1,\n } satisfies ListElementInformationMixin;\n }\n return v;\n });\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addListElementInformation(val);\n }\n return result;\n }\n\n return value;\n }\n}\n","import type { IsPrefixed } from \"@root/utils/types\";\nimport type { Field, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type DebugMixin = {\n debug: string;\n};\n\nexport type EnumValueViewModel = {\n name: string;\n saveName: string;\n};\n\nexport type EnumViewModel = NamedViewModel & {\n values: EnumValueViewModel[];\n};\n\nexport type FieldViewModel = {\n owner: NamedViewModel;\n\n schema: Field;\n name: string;\n saveName: string;\n\n typeName: string;\n\n isSizeConstrained: boolean;\n min?: number;\n max?: number;\n\n isArray: boolean;\n isRequired: boolean;\n isEnum: boolean;\n\n isPrimitive: Record<IsPrefixed<PrimitiveType>, boolean> | false;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n isCode: boolean;\n isIdentifier: boolean;\n isReference: boolean;\n};\n\nexport type FilterType = {\n whitelist?: (string | RegExp)[];\n blacklist?: (string | RegExp)[];\n};\n\nexport type HookType = {\n cmd: string;\n args?: string[];\n};\n\nexport type LambdaMixin = {\n lambda: {\n saveEnumValueName: () => (text: string, render: (input: string) => string) => string;\n saveFieldName: () => (text: string, render: (input: string) => string) => string;\n saveTypeName: () => (text: string, render: (input: string) => string) => string;\n\n camelCase: () => (text: string, render: (input: string) => string) => string;\n snakeCase: () => (text: string, render: (input: string) => string) => string;\n pascalCase: () => (text: string, render: (input: string) => string) => string;\n kebabCase: () => (text: string, render: (input: string) => string) => string;\n lowerCase: () => (text: string, render: (input: string) => string) => string;\n upperCase: () => (text: string, render: (input: string) => string) => string;\n };\n};\n\nexport type ListElementInformationMixin = {\n \"-index\": number;\n \"-length\": number;\n \"-last\": boolean;\n \"-first\": boolean;\n};\n\nexport type NamedViewModel = {\n name: string;\n saveName: string;\n};\n\nexport const PRIMITIVE_TYPES = [\n \"boolean\",\n \"instant\",\n \"time\",\n \"date\",\n \"dateTime\",\n\n \"decimal\",\n \"integer\",\n \"unsignedInt\",\n \"positiveInt\",\n \"integer64\",\n \"base64Binary\",\n\n \"uri\",\n \"url\",\n \"canonical\",\n \"oid\",\n \"uuid\",\n\n \"string\",\n \"code\",\n \"markdown\",\n \"id\",\n \"xhtml\",\n] as const;\n\nexport type PrimitiveType = (typeof PRIMITIVE_TYPES)[number];\n\nexport type Rendering = {\n source: string;\n fileNameFormat: string;\n path: string;\n filter?: FilterType;\n properties?: Record<string, any>;\n};\n\nexport type ResolvedTypeViewModel = TypeViewModel & {\n allFields: FieldViewModel[];\n inheritedFields: FieldViewModel[];\n parents: TypeViewModel[];\n children: TypeViewModel[];\n\n hasChildren: boolean;\n hasParents: boolean;\n hasInheritedFields: boolean;\n};\n\nexport type RootViewModel<T> = T & {\n resources: { name: string; saveName: string }[];\n complexTypes: { name: string; saveName: string }[];\n};\n\nexport type TypeViewModel = NamedViewModel & {\n schema: TypeSchema | NestedType;\n fields: FieldViewModel[];\n\n dependencies: {\n resources: NamedViewModel[];\n complexTypes: NamedViewModel[];\n };\n\n hasFields: boolean;\n hasNestedComplexTypes: boolean;\n hasNestedEnums: boolean;\n\n isNested: boolean;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n nestedComplexTypes: ResolvedTypeViewModel[];\n nestedEnums: EnumViewModel[];\n};\n\nexport type View<T extends ViewModel> = LambdaMixin & {\n model: T;\n meta: {\n timestamp: string;\n generator: string;\n };\n properties: Record<string, unknown>;\n};\n\nexport type ViewModel = Record<string, unknown>;\n","import { ListElementInformationMixinProvider } from \"@mustache/generator/ListElementInformationMixinProvider\";\nimport type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type {\n EnumViewModel,\n FieldViewModel,\n NamedViewModel,\n ResolvedTypeViewModel,\n RootViewModel,\n TypeViewModel,\n ViewModel,\n} from \"@mustache/types\";\nimport { PRIMITIVE_TYPES } from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { IsPrefixed } from \"@root/utils/types\";\nimport {\n type Field,\n type Identifier,\n isComplexTypeIdentifier,\n isResourceIdentifier,\n type NestedType,\n type TypeSchema,\n} from \"@typeschema/types\";\n\nexport type ViewModelCache = {\n resourcesByUri: Record<string, TypeViewModel>;\n complexTypesByUri: Record<string, TypeViewModel>;\n};\n\nexport class ViewModelFactory {\n private arrayMixinProvider: ListElementInformationMixinProvider = new ListElementInformationMixinProvider();\n\n constructor(\n private readonly tsIndex: TypeSchemaIndex,\n private readonly nameGenerator: NameGenerator,\n private readonly filterPred: (id: Identifier) => boolean,\n ) {}\n\n public createUtility(): RootViewModel<ViewModel> {\n return this._createForRoot();\n }\n\n public createComplexType(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForComplexType(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...parents.flatMap((p) => p.fields)],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n public createResource(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForResource(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n\n private _createFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n if (typeRef.kind === \"complex-type\") {\n return this._createForComplexType(typeRef, cache, nestedIn);\n }\n if (typeRef.kind === \"resource\") {\n return this._createForResource(typeRef, cache, nestedIn);\n }\n throw new Error(`Unknown type ${typeRef.kind}`);\n }\n\n private _createForComplexType(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`ComplexType ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.complexTypesByUri, type.identifier.url)) {\n cache.complexTypesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.complexTypesByUri[type.identifier.url];\n if (!res) throw new Error(`ComplexType ${typeRef.name} not found`);\n return res;\n }\n\n private _createForResource(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`Resource ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.resourcesByUri, type.identifier.url)) {\n cache.resourcesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.resourcesByUri[type.identifier.url];\n if (!res) throw new Error(`Resource ${typeRef.name} not found`);\n return res;\n }\n\n private _createChildrenFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel[] {\n if (isComplexTypeIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isComplexTypeIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n if (isResourceIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isResourceIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n return [];\n }\n\n private _createParentsFor(base: TypeSchema | NestedType, cache: ViewModelCache) {\n const parents: TypeViewModel[] = [];\n let parentRef: Identifier | undefined = \"base\" in base ? base.base : undefined;\n while (parentRef) {\n parents.push(this._createFor(parentRef, cache, undefined));\n const parent = this.tsIndex.resolve(parentRef);\n parentRef = parent && \"base\" in parent ? parent.base : undefined;\n }\n return parents;\n }\n\n private _createForNestedType(\n nested: NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): ResolvedTypeViewModel {\n const base = this._createTypeViewModel(nested, cache, nestedIn);\n const parents = this._createParentsFor(nested, cache);\n const children = this._createChildrenFor(nested.identifier, cache, nestedIn);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return {\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n };\n }\n\n private _createTypeViewModel(\n schema: TypeSchema | NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): TypeViewModel {\n const fields = Object.entries((\"fields\" in schema ? schema.fields : {}) ?? {});\n const nestedComplexTypes = this._collectNestedComplex(schema, cache);\n const nestedEnums = this._collectNestedEnums(fields as [string, Field][]);\n const dependencies = this._collectDependencies(schema);\n const name: NamedViewModel = {\n name: schema.identifier.name,\n saveName: this.nameGenerator.generateType(schema),\n };\n return {\n nestedComplexTypes,\n nestedEnums,\n dependencies,\n isNested: !!nestedIn,\n schema: schema,\n ...name,\n isResource: this._createIsResource(schema.identifier),\n isComplexType: this._createIsComplexType(schema.identifier),\n\n hasFields: fields.length > 0,\n hasNestedComplexTypes: nestedComplexTypes.length > 0,\n hasNestedEnums: nestedEnums.length > 0,\n fields: fields\n .filter(([_fieldName, fieldSchema]) => !!(fieldSchema as any).type)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([fieldName, fieldSchema]) => {\n return {\n owner: name,\n schema: fieldSchema,\n name: fieldName,\n saveName: this.nameGenerator.generateField(fieldName),\n typeName: this.nameGenerator.generateFieldType(fieldSchema as Field),\n\n isArray: (fieldSchema as any).array,\n isRequired: (fieldSchema as any).required,\n isEnum: !!(fieldSchema as any).enum,\n\n isSizeConstrained:\n (fieldSchema as any).min !== undefined || (fieldSchema as any).max !== undefined,\n min: (fieldSchema as any).min,\n max: (fieldSchema as any).max,\n\n isResource: this._createIsResource((fieldSchema as any).type),\n isComplexType: this._createIsComplexType((fieldSchema as any).type),\n isPrimitive: this._createIsPrimitiveType((fieldSchema as any).type),\n\n isCode: (fieldSchema as any).type?.name === \"code\",\n isIdentifier: (fieldSchema as any).type?.name === \"Identifier\",\n isReference: (fieldSchema as any).type?.name === \"Reference\",\n };\n }),\n };\n }\n\n private _collectDependencies(schema: TypeSchema | NestedType): TypeViewModel[\"dependencies\"] {\n const dependencies: TypeViewModel[\"dependencies\"] = {\n resources: [],\n complexTypes: [],\n };\n if (\"dependencies\" in schema && schema.dependencies) {\n schema.dependencies\n .filter((dependency) => dependency.kind === \"complex-type\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.complexTypes.push(dependency);\n });\n schema.dependencies\n .filter((dependency) => dependency.kind === \"resource\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.resources.push(dependency);\n });\n }\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._collectDependencies(nested))\n .forEach((d) => {\n d.complexTypes\n .filter(\n (complexType) =>\n !dependencies.complexTypes.some((dependency) => dependency.name === complexType.name),\n )\n .forEach((complexType) => {\n dependencies.complexTypes.push(complexType);\n });\n d.resources\n .filter(\n (resource) =>\n !dependencies.resources.some((dependency) => dependency.name === resource.name),\n )\n .forEach((resource) => {\n dependencies.resources.push(resource);\n });\n });\n }\n return dependencies;\n }\n\n private _createIsResource(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"resource\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((resourceRef: Identifier) => [\n `is${resourceRef.name.charAt(0).toUpperCase() + resourceRef.name.slice(1)}`,\n resourceRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsComplexType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"complex-type\" && typeRef.kind !== \"nested\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((complexTypeRef: Identifier) => [\n `is${complexTypeRef.name.charAt(0).toUpperCase() + complexTypeRef.name.slice(1)}`,\n complexTypeRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsPrimitiveType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"primitive-type\") {\n return false;\n }\n return Object.fromEntries(\n PRIMITIVE_TYPES.map((type) => [`is${type.charAt(0).toUpperCase()}${type.slice(1)}`, typeRef.name === type]),\n ) as FieldViewModel[\"isPrimitive\"];\n }\n\n private _collectNestedComplex(schema: TypeSchema | NestedType, cache: ViewModelCache): ResolvedTypeViewModel[] {\n const nested: ResolvedTypeViewModel[] = [];\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._createForNestedType(nested, cache, schema))\n .forEach((n) => {\n nested.push(n);\n });\n }\n return nested;\n }\n private _collectNestedEnums(fields: [string, Field][]): EnumViewModel[] {\n const nestedEnumValues: Record<string, Set<string>> = {};\n fields.forEach(([fieldName, fieldSchema]) => {\n if (\"enum\" in fieldSchema && fieldSchema.enum) {\n const name = (\"binding\" in fieldSchema && fieldSchema.binding?.name) ?? fieldName;\n if (typeof name === \"string\") {\n nestedEnumValues[name] = nestedEnumValues[name] ?? new Set<string>();\n fieldSchema.enum?.forEach(nestedEnumValues[name].add.bind(nestedEnumValues[name]));\n }\n }\n });\n return Object.entries(nestedEnumValues).map(([name, values]) => ({\n name: name,\n saveName: this.nameGenerator.generateEnumType(name),\n values: Array.from(values).map((value) => ({\n name: value,\n saveName: this.nameGenerator.generateEnumValue(value),\n })),\n }));\n }\n\n private _createForRoot(): Pick<RootViewModel<unknown>, \"resources\" | \"complexTypes\"> {\n return this.arrayMixinProvider.apply({\n complexTypes: this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n resources: this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport * as util from \"node:util\";\nimport { DebugMixinProvider } from \"@mustache/generator/DebugMixinProvider\";\nimport { LambdaMixinProvider } from \"@mustache/generator/LambdaMixinProvider\";\nimport {\n type DistinctNameConfigurationType,\n NameGenerator,\n type NameTransformation,\n} from \"@mustache/generator/NameGenerator\";\nimport { TemplateFileCache } from \"@mustache/generator/TemplateFileCache\";\nimport type { ViewModelCache } from \"@mustache/generator/ViewModelFactory\";\nimport { ViewModelFactory } from \"@mustache/generator/ViewModelFactory\";\nimport type {\n HookType,\n NamedViewModel,\n PrimitiveType,\n Rendering,\n TypeViewModel,\n View,\n ViewModel,\n} from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogger } from \"@root/utils/codegen-logger\";\nimport { default as Mustache } from \"mustache\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport type FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\" | \"FORMATTED\" | \"COMPACT\";\n meta: {\n timestamp?: string;\n generator?: string;\n };\n renderings: {\n utility: Rendering[];\n resource: Rendering[];\n complexType: Rendering[];\n };\n keywords: string[];\n primitiveTypeMap: Partial<Record<PrimitiveType, string>>;\n nameTransformations: DistinctNameConfigurationType<NameTransformation[]>;\n unsaveCharacterPattern: string | RegExp;\n shouldRunHooks: boolean;\n hooks: {\n afterGenerate?: HookType[];\n };\n};\n\nexport type MustacheGeneratorOptions = FileSystemWriterOptions &\n FileBasedMustacheGeneratorOptions & {\n sources: {\n templateSource: string;\n staticSource: string;\n };\n };\n\nexport function loadMustacheGeneratorConfig(\n templatePath: string,\n logger?: CodegenLogger,\n): Partial<FileBasedMustacheGeneratorOptions> {\n const filePath = Path.resolve(templatePath, \"config.json\");\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Partial<FileBasedMustacheGeneratorOptions>;\n }\n } catch (_e) {}\n logger?.warn(`Failed to load JSON file with mustache generator config: ${filePath}`);\n return {};\n}\n\nexport const createGenerator = (\n templatePath: string,\n apiOpts: FileSystemWriterOptions & Partial<FileBasedMustacheGeneratorOptions>,\n): MustacheGenerator => {\n const defaultFileOpts: FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\",\n hooks: {},\n meta: {},\n keywords: [],\n unsaveCharacterPattern: /[^a-zA-Z0-9]/g,\n nameTransformations: {\n common: [],\n enumValue: [],\n type: [],\n field: [],\n },\n renderings: {\n utility: [],\n resource: [],\n complexType: [],\n },\n shouldRunHooks: true,\n primitiveTypeMap: {},\n };\n const actualFileOpts = loadMustacheGeneratorConfig(templatePath);\n\n const mustacheOptions: MustacheGeneratorOptions = {\n ...defaultFileOpts,\n ...apiOpts,\n ...actualFileOpts,\n sources: {\n staticSource: Path.resolve(templatePath, \"static\"),\n templateSource: Path.resolve(templatePath, \"templates\"),\n },\n };\n return new MustacheGenerator(mustacheOptions);\n};\n\nfunction runCommand(cmd: string, args: string[] = [], options = {}) {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n ...options,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve(code);\n else reject(new Error(`Prozess beendet mit Fehlercode ${code}`));\n });\n });\n}\n\nexport class MustacheGenerator extends FileSystemWriter<MustacheGeneratorOptions> {\n private readonly templateFileCache: TemplateFileCache;\n private readonly nameGenerator: NameGenerator;\n private readonly lambdaMixinProvider: LambdaMixinProvider;\n private readonly debugMixinProvider?: DebugMixinProvider;\n\n constructor(opts: MustacheGeneratorOptions) {\n super(opts);\n this.nameGenerator = new NameGenerator(\n new Set<string>(opts.keywords),\n opts.primitiveTypeMap,\n opts.nameTransformations,\n opts.unsaveCharacterPattern,\n );\n this.templateFileCache = new TemplateFileCache(opts.sources.templateSource);\n this.lambdaMixinProvider = new LambdaMixinProvider(this.nameGenerator);\n this.debugMixinProvider = opts.debug !== \"OFF\" ? new DebugMixinProvider(opts.debug) : undefined;\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n const modelFactory = new ViewModelFactory(tsIndex, this.nameGenerator, () => true);\n const cache: ViewModelCache = {\n resourcesByUri: {},\n complexTypesByUri: {},\n };\n tsIndex\n .collectComplexTypes()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createComplexType(typeRef, cache))\n .forEach(this._renderComplexType.bind(this));\n\n tsIndex\n .collectResources()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createResource(typeRef, cache))\n .forEach(this._renderResource.bind(this));\n\n this._renderUtility(modelFactory.createUtility());\n this.copyStaticFiles();\n\n if (this.opts.shouldRunHooks) {\n await this._runHooks(this.opts.hooks.afterGenerate);\n }\n return;\n }\n\n copyStaticFiles() {\n const staticDir = Path.resolve(this.opts.sources.staticSource);\n if (!staticDir) {\n throw new Error(\"staticDir must be set in subclass.\");\n }\n fs.cpSync(staticDir, this.opts.outputDir, { recursive: true });\n }\n\n private async _runHooks(hooks?: HookType[]) {\n for (const hook of hooks ?? []) {\n console.info(`Running hook (${this.opts.outputDir}): ${hook.cmd} ${hook.args?.join(\" \")}`);\n await runCommand(hook.cmd, hook.args ?? [], {\n cwd: this.opts.outputDir,\n });\n console.info(`Completed hook: ${hook.cmd} ${hook.args?.join(\" \")}`);\n }\n }\n\n private _checkRenderingFilter(model: TypeViewModel, rendering: Rendering): boolean {\n if (!rendering.filter?.whitelist?.length && !rendering.filter?.blacklist?.length) {\n return true;\n }\n if ((rendering.filter?.blacklist ?? []).find((v) => model.name.match(v))) {\n return false;\n }\n if ((rendering.filter?.whitelist ?? []).find((v) => model.name.match(v))) {\n return true;\n }\n return !rendering.filter.whitelist?.length;\n }\n\n private _renderUtility(model: ViewModel) {\n this.opts.renderings.utility.forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(rendering.fileNameFormat, () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderResource(model: TypeViewModel) {\n this.opts.renderings.resource\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderComplexType(model: TypeViewModel) {\n this.opts.renderings.complexType\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _calculateFilename(model: NamedViewModel, rendering: Rendering): string {\n return util.format(rendering.fileNameFormat, model.saveName);\n }\n\n private _render<T extends ViewModel>(model: T, rendering: Rendering): string {\n let view: View<T> = this.lambdaMixinProvider.apply({\n meta: {\n timestamp: this.opts.meta.timestamp ?? new Date().toISOString(),\n generator: this.opts.meta.generator ?? \"@atomic-ehr/codegen mustache generator\",\n },\n model: model,\n properties: rendering.properties ?? {},\n });\n if (this.debugMixinProvider) {\n view = this.debugMixinProvider.apply(view);\n }\n return Mustache.render(this.templateFileCache.read(rendering), view, (partialName: string) =>\n this.templateFileCache.readTemplate(partialName),\n );\n }\n}\n","import {\n camelCase,\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 isProfileIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type Name,\n type ProfileTypeSchema,\n packageMeta,\n packageMetaToFhir,\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 // NOTE: Why not pascal case?\n // In hl7-fhir-uv-xver-r5-r4 we have:\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-Subscription.topic (subscription_topic)\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic (SubscriptionTopic)\n // And they should not clash the names.\n return uppercaseFirstLetter(normalizeTsName(id.name));\n};\n\nconst tsModuleFileName = (id: Identifier): string => {\n return `${tsModuleName(id)}.ts`;\n};\n\nconst tsModulePath = (id: Identifier): string => {\n if (isProfileIdentifier(id)) {\n return `${tsFhirPackageDir(id.package)}/profiles/${tsModuleName(id)}`;\n }\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(/\\[x\\]/g, \"_x_\").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\nconst tsTypeFromIdentifier = (id: Identifier): string => {\n if (isNestedIdentifier(id)) return tsResourceName(id);\n if (isPrimitiveIdentifier(id)) return resolvePrimitiveType(id.name);\n // Fallback: check if id.name is a known primitive type even if kind isn't set\n const primitiveType = primitiveType2tsType[id.name];\n if (primitiveType !== undefined) return primitiveType;\n return id.name;\n};\n\nconst tsProfileClassName = (id: Identifier): string => {\n return `${uppercaseFirstLetter(normalizeTsName(id.name))}Profile`;\n};\n\nconst tsSliceInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceInput`;\n};\n\nconst tsExtensionInputTypeName = (profileName: string, extensionName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(extensionName))}Input`;\n};\n\nconst safeCamelCase = (name: string): string => {\n if (!name) return \"\";\n // Remove [x] suffix and normalize special characters before camelCase\n const normalized = name.replace(/\\[x\\]/g, \"\").replace(/:/g, \"_\");\n return camelCase(normalized);\n};\n\nconst tsSliceMethodName = (sliceName: string): string => {\n const normalized = safeCamelCase(sliceName);\n return `set${uppercaseFirstLetter(normalized || \"Slice\")}`;\n};\n\nconst tsExtensionMethodName = (name: string): string => {\n const normalized = safeCamelCase(name);\n return `set${uppercaseFirstLetter(normalized || \"Extension\")}`;\n};\n\nconst tsExtensionMethodFallback = (name: string, path?: string): string => {\n const rawPath =\n path\n ?.split(\".\")\n .filter((p) => p && p !== \"extension\")\n .join(\"_\") ?? \"\";\n const pathPart = rawPath ? uppercaseFirstLetter(safeCamelCase(rawPath)) : \"\";\n const normalized = safeCamelCase(name);\n return `setExtension${pathPart}${uppercaseFirstLetter(normalized || \"Extension\")}`;\n};\n\nconst tsSliceMethodFallback = (fieldName: string, sliceName: string): string => {\n const fieldPart = uppercaseFirstLetter(safeCamelCase(fieldName) || \"Field\");\n const slicePart = uppercaseFirstLetter(safeCamelCase(sliceName) || \"Slice\");\n return `setSlice${fieldPart}${slicePart}`;\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 private generateProfileIndexFile(profiles: TypeSchema[]) {\n if (profiles.length === 0) return;\n this.cd(\"profiles\", () => {\n this.cat(\"index.ts\", () => {\n // Deduplicate by class name to avoid duplicate exports\n const seen = new Set<string>();\n const uniqueProfiles = profiles.filter((profile) => {\n const className = tsProfileClassName(profile.identifier);\n if (seen.has(className)) return false;\n seen.add(className);\n return true;\n });\n if (uniqueProfiles.length === 0) return;\n for (const profile of uniqueProfiles) {\n const className = tsProfileClassName(profile.identifier);\n this.lineSM(`export { ${className} } from \"./${tsModuleName(profile.identifier)}\"`);\n }\n });\n });\n }\n\n generateFhirPackageIndexFile(schemas: TypeSchema[]) {\n this.cat(\"index.ts\", () => {\n const profiles = schemas.filter(isProfileTypeSchema);\n if (profiles.length > 0) {\n this.lineSM(`export * from \"./profiles\"`);\n }\n\n let exports = schemas\n .flatMap((schema) => {\n const resourceName = tsResourceName(schema.identifier);\n const typeExports = isProfileTypeSchema(schema)\n ? []\n : [\n resourceName,\n ...((isResourceTypeSchema(schema) && schema.nested) ||\n (isLogicalTypeSchema(schema) && schema.nested)\n ? schema.nested.map((n) => tsResourceName(n.identifier))\n : []),\n ];\n const valueExports = isResourceTypeSchema(schema) ? [`is${resourceName}`] : [];\n\n return [\n {\n identifier: schema.identifier,\n tsPackageName: tsModuleName(schema.identifier),\n resourceName,\n typeExports,\n valueExports,\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 if (exp.typeExports.length > 0) {\n this.lineSM(`export type { ${exp.typeExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n if (exp.valueExports.length > 0) {\n this.lineSM(`export { ${exp.valueExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n }\n });\n }\n\n generateDependenciesImports(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema, importPrefix = \"../\") {\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: `${importPrefix}${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: `${importPrefix}${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(`${importPrefix}${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)) {\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)) 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 private tsTypeForProfileField(\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n fieldName: string,\n field: NonNullable<ProfileTypeSchema[\"fields\"]>[string],\n ): string {\n if (!isNotChoiceDeclarationField(field)) {\n throw new Error(`Choice declaration fields not supported for '${fieldName}'`);\n }\n if (field.enum) {\n return tsEnumType(field.enum);\n }\n 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 // Strip inner comments to avoid nested /* */ which is invalid\n const cleanRefs = references.replace(/\\/\\*[^*]*\\*\\//g, \"\").trim();\n return `Reference<\"Resource\" /* ${cleanRefs} */ >`;\n }\n return `Reference<${references}>`;\n }\n if (isNestedIdentifier(field.type)) {\n return tsResourceName(field.type);\n }\n if (isPrimitiveIdentifier(field.type)) {\n return resolvePrimitiveType(field.type.name);\n }\n if (field.type === undefined) {\n throw new Error(`Undefined type for '${fieldName}' field at ${typeSchemaInfo(flatProfile)}`);\n }\n return field.type.name;\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 const tsType = this.tsTypeForProfileField(tsIndex, flatProfile, fieldName, field);\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 generateProfileHelpersModule() {\n this.cat(\"profile-helpers.ts\", () => {\n this.generateDisclaimer();\n this.curlyBlock(\n [\"export const\", \"isRecord\", \"=\", \"(value: unknown): value is Record<string, unknown>\", \"=>\"],\n () => {\n this.lineSM('return value !== null && typeof value === \"object\" && !Array.isArray(value)');\n },\n );\n this.line();\n this.curlyBlock(\n [\n \"export const\",\n \"getOrCreateObjectAtPath\",\n \"=\",\n \"(root: Record<string, unknown>, path: string[]): Record<string, unknown>\",\n \"=>\",\n ],\n () => {\n this.lineSM(\"let current: Record<string, unknown> = root\");\n this.curlyBlock([\"for (const\", \"segment\", \"of\", \"path)\"], () => {\n this.curlyBlock([\"if\", \"(Array.isArray(current[segment]))\"], () => {\n this.lineSM(\"const list = current[segment] as unknown[]\");\n this.curlyBlock([\"if\", \"(list.length === 0)\"], () => {\n this.lineSM(\"list.push({})\");\n });\n this.lineSM(\"current = list[0] as Record<string, unknown>\");\n });\n this.curlyBlock([\"else\"], () => {\n this.curlyBlock([\"if\", \"(!isRecord(current[segment]))\"], () => {\n this.lineSM(\"current[segment] = {}\");\n });\n this.lineSM(\"current = current[segment] as Record<string, unknown>\");\n });\n });\n this.lineSM(\"return current\");\n },\n );\n this.line();\n this.curlyBlock(\n [\n \"export const\",\n \"mergeMatch\",\n \"=\",\n \"(target: Record<string, unknown>, match: Record<string, unknown>): void\",\n \"=>\",\n ],\n () => {\n this.curlyBlock([\"for (const\", \"[key, matchValue]\", \"of\", \"Object.entries(match))\"], () => {\n this.curlyBlock(\n [\"if\", '(key === \"__proto__\" || key === \"constructor\" || key === \"prototype\")'],\n () => {\n this.lineSM(\"continue\");\n },\n );\n this.curlyBlock([\"if\", \"(isRecord(matchValue))\"], () => {\n this.curlyBlock([\"if\", \"(isRecord(target[key]))\"], () => {\n this.lineSM(\"mergeMatch(target[key] as Record<string, unknown>, matchValue)\");\n });\n this.curlyBlock([\"else\"], () => {\n this.lineSM(\"target[key] = { ...matchValue }\");\n });\n });\n this.curlyBlock([\"else\"], () => {\n this.lineSM(\"target[key] = matchValue\");\n });\n });\n },\n );\n this.line();\n this.curlyBlock(\n [\n \"export const\",\n \"applySliceMatch\",\n \"=\",\n \"<T extends Record<string, unknown>>(input: T, match: Record<string, unknown>): T\",\n \"=>\",\n ],\n () => {\n this.lineSM(\"const result = { ...input } as Record<string, unknown>\");\n this.lineSM(\"mergeMatch(result, match)\");\n this.lineSM(\"return result as T\");\n },\n );\n this.line();\n this.curlyBlock(\n [\"export const\", \"matchesValue\", \"=\", \"(value: unknown, match: unknown): boolean\", \"=>\"],\n () => {\n this.curlyBlock([\"if\", \"(Array.isArray(match))\"], () => {\n this.curlyBlock([\"if\", \"(!Array.isArray(value))\"], () => this.lineSM(\"return false\"));\n this.lineSM(\n \"return match.every((matchItem) => value.some((item) => matchesValue(item, matchItem)))\",\n );\n });\n this.curlyBlock([\"if\", \"(isRecord(match))\"], () => {\n this.curlyBlock([\"if\", \"(!isRecord(value))\"], () => this.lineSM(\"return false\"));\n this.curlyBlock([\"for (const\", \"[key, matchValue]\", \"of\", \"Object.entries(match))\"], () => {\n this.curlyBlock(\n [\"if\", \"(!matchesValue((value as Record<string, unknown>)[key], matchValue))\"],\n () => {\n this.lineSM(\"return false\");\n },\n );\n });\n this.lineSM(\"return true\");\n });\n this.lineSM(\"return value === match\");\n },\n );\n this.line();\n this.curlyBlock(\n [\n \"export const\",\n \"matchesSlice\",\n \"=\",\n \"(value: unknown, match: Record<string, unknown>): boolean\",\n \"=>\",\n ],\n () => {\n this.lineSM(\"return matchesValue(value, match)\");\n },\n );\n this.line();\n // extractComplexExtension - extract sub-extension values from complex extension\n this.curlyBlock(\n [\n \"export const\",\n \"extractComplexExtension\",\n \"=\",\n \"(extension: { extension?: Array<{ url?: string; [key: string]: unknown }> } | undefined, config: Array<{ name: string; valueField: string; isArray: boolean }>): Record<string, unknown> | undefined\",\n \"=>\",\n ],\n () => {\n this.lineSM(\"if (!extension?.extension) return undefined\");\n this.lineSM(\"const result: Record<string, unknown> = {}\");\n this.curlyBlock([\"for (const\", \"{ name, valueField, isArray }\", \"of\", \"config)\"], () => {\n this.lineSM(\"const subExts = extension.extension.filter(e => e.url === name)\");\n this.curlyBlock([\"if\", \"(isArray)\"], () => {\n this.lineSM(\"result[name] = subExts.map(e => (e as Record<string, unknown>)[valueField])\");\n });\n this.curlyBlock([\"else if\", \"(subExts[0])\"], () => {\n this.lineSM(\"result[name] = (subExts[0] as Record<string, unknown>)[valueField]\");\n });\n });\n this.lineSM(\"return result\");\n },\n );\n this.line();\n // extractSliceSimplified - remove match keys from slice (reverse of applySliceMatch)\n this.curlyBlock(\n [\n \"export const\",\n \"extractSliceSimplified\",\n \"=\",\n \"<T extends Record<string, unknown>>(slice: T, matchKeys: string[]): Partial<T>\",\n \"=>\",\n ],\n () => {\n this.lineSM(\"const result = { ...slice } as Record<string, unknown>\");\n this.curlyBlock([\"for (const\", \"key\", \"of\", \"matchKeys)\"], () => {\n this.lineSM(\"delete result[key]\");\n });\n this.lineSM(\"return result as Partial<T>\");\n },\n );\n });\n }\n\n private generateProfileHelpersImport(options: {\n needsGetOrCreateObjectAtPath: boolean;\n needsSliceHelpers: boolean;\n needsExtensionExtraction: boolean;\n needsSliceExtraction: boolean;\n }) {\n const imports: string[] = [];\n if (options.needsSliceHelpers) {\n imports.push(\"applySliceMatch\", \"matchesSlice\");\n }\n if (options.needsGetOrCreateObjectAtPath) {\n imports.push(\"getOrCreateObjectAtPath\");\n }\n if (options.needsExtensionExtraction) {\n imports.push(\"extractComplexExtension\");\n }\n if (options.needsSliceExtraction) {\n imports.push(\"extractSliceSimplified\");\n }\n if (imports.length > 0) {\n this.lineSM(`import { ${imports.join(\", \")} } from \"../../profile-helpers\"`);\n }\n }\n\n private generateProfileImports(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n const usedTypes = new Map<string, { importPath: string; tsName: string }>();\n\n // Helper to get the module path for a type, handling nested types\n const getModulePath = (typeId: Identifier): string => {\n if (isNestedIdentifier(typeId)) {\n // For nested types, extract the parent resource name from the URL\n const url = typeId.url;\n const path = canonicalToName(url, true); // true to drop fragment\n if (path) {\n return `../../${tsFhirPackageDir(typeId.package)}/${pascalCase(path)}`;\n }\n }\n return `../../${tsModulePath(typeId)}`;\n };\n\n // Helper to add a type if not primitive and not already added\n const addType = (typeId: Identifier) => {\n // Skip primitive types - they use TypeScript native types\n if (typeId.kind === \"primitive-type\") return;\n\n const tsName = tsResourceName(typeId);\n if (!usedTypes.has(tsName)) {\n usedTypes.set(tsName, {\n importPath: getModulePath(typeId),\n tsName,\n });\n }\n };\n\n // Always import the base resource type\n addType(flatProfile.base);\n\n // Collect types from slice definitions\n const fields = flatProfile.fields ?? {};\n for (const [_fieldName, field] of Object.entries(fields)) {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) continue;\n\n for (const [_sliceName, slice] of Object.entries(field.slicing.slices)) {\n const match = slice.match ?? {};\n if (Object.keys(match).length === 0) continue;\n\n // Add the type for slices (handles both regular and nested types)\n addType(field.type);\n }\n }\n\n // Collect types from extensions\n const extensions = flatProfile.extensions ?? [];\n let needsExtensionType = false;\n\n for (const ext of extensions) {\n if (ext.isComplex && ext.subExtensions) {\n // Complex extensions need Extension type and sub-extension value types\n needsExtensionType = true;\n for (const sub of ext.subExtensions) {\n if (sub.valueType) {\n // Resolve the type properly from the FHIR schema index\n const resolvedType = tsIndex.resolveByUrl(\n flatProfile.identifier.package,\n sub.valueType.url as CanonicalUrl,\n );\n if (resolvedType) {\n addType(resolvedType.identifier);\n } else {\n addType(sub.valueType);\n }\n }\n }\n } else if (ext.valueTypes && ext.valueTypes.length === 1) {\n // Simple extensions with single value type\n // Also need Extension type for getter overloads\n needsExtensionType = true;\n const valueType = ext.valueTypes[0];\n if (valueType) {\n addType(valueType);\n }\n } else {\n // Generic extensions need Extension type\n needsExtensionType = true;\n }\n }\n\n // Add Extension type if needed\n if (needsExtensionType) {\n const extensionUrl = \"http://hl7.org/fhir/StructureDefinition/Extension\" as CanonicalUrl;\n const extensionSchema = tsIndex.resolveByUrl(flatProfile.identifier.package, extensionUrl);\n if (extensionSchema) {\n addType(extensionSchema.identifier);\n }\n }\n\n // Add Reference type if used in override interface\n const referenceUrl = \"http://hl7.org/fhir/StructureDefinition/Reference\" as CanonicalUrl;\n const referenceSchema = tsIndex.resolveByUrl(flatProfile.identifier.package, referenceUrl);\n\n // Collect types from fields that will be in the override interface\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (isSpecializationTypeSchema(specialization)) {\n for (const [fieldName, pField] of Object.entries(flatProfile.fields ?? {})) {\n if (!isNotChoiceDeclarationField(pField)) continue;\n const sField = specialization.fields?.[fieldName];\n if (!sField || isChoiceDeclarationField(sField)) continue;\n\n // Check for Reference narrowing - needs Reference type\n if (pField.reference && sField.reference && pField.reference.length < sField.reference.length) {\n if (referenceSchema) {\n addType(referenceSchema.identifier);\n }\n }\n // Check for cardinality change - needs field's type\n else if (pField.required && !sField.required) {\n if (pField.type) {\n addType(pField.type);\n }\n }\n }\n }\n\n // Generate imports sorted by name\n const sortedImports = Array.from(usedTypes.values()).sort((a, b) => a.tsName.localeCompare(b.tsName));\n\n for (const { importPath, tsName } of sortedImports) {\n this.tsImportType(importPath, tsName);\n }\n\n if (sortedImports.length > 0) {\n this.line();\n }\n }\n\n generateProfileClass(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n const tsBaseResourceName = tsTypeFromIdentifier(flatProfile.base);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const profileClassName = tsProfileClassName(flatProfile.identifier);\n\n // Known polymorphic field base names in FHIR (value[x], effective[x], etc.)\n // These don't exist as direct properties on TypeScript types\n const polymorphicBaseNames = new Set([\n \"value\",\n \"effective\",\n \"onset\",\n \"abatement\",\n \"occurrence\",\n \"timing\",\n \"deceased\",\n \"born\",\n \"age\",\n \"medication\",\n \"performed\",\n \"serviced\",\n \"collected\",\n \"item\",\n \"subject\",\n \"bounds\",\n \"amount\",\n \"content\",\n \"product\",\n \"rate\",\n \"dose\",\n \"asNeeded\",\n ]);\n\n const sliceDefs = Object.entries(flatProfile.fields ?? {})\n .filter(([_fieldName, field]) => isNotChoiceDeclarationField(field) && field.slicing?.slices)\n .flatMap(([fieldName, field]) => {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) return [];\n const baseType = tsTypeFromIdentifier(field.type);\n return Object.entries(field.slicing.slices)\n .filter(([_sliceName, slice]) => {\n const match = slice.match ?? {};\n return Object.keys(match).length > 0;\n })\n .map(([sliceName, slice]) => {\n const matchFields = Object.keys(slice.match ?? {});\n const required = slice.required ?? [];\n // Filter out fields that are in match or polymorphic base names\n const filteredRequired = required.filter(\n (name) => !matchFields.includes(name) && !polymorphicBaseNames.has(name),\n );\n return {\n fieldName,\n baseType,\n sliceName,\n match: slice.match ?? {},\n required,\n excluded: slice.excluded ?? [],\n array: Boolean(field.array),\n // Input is optional when there are no required fields after filtering\n inputOptional: filteredRequired.length === 0,\n };\n });\n });\n\n const extensions = flatProfile.extensions ?? [];\n const complexExtensions = extensions.filter((ext) => ext.isComplex && ext.subExtensions);\n\n for (const ext of complexExtensions) {\n const typeName = tsExtensionInputTypeName(tsProfileName, ext.name);\n this.curlyBlock([\"export\", \"type\", typeName, \"=\"], () => {\n for (const sub of ext.subExtensions ?? []) {\n const tsType = sub.valueType ? tsTypeFromIdentifier(sub.valueType) : \"unknown\";\n const isArray = sub.max === \"*\";\n const isRequired = sub.min !== undefined && sub.min > 0;\n this.lineSM(`${sub.name}${isRequired ? \"\" : \"?\"}: ${tsType}${isArray ? \"[]\" : \"\"}`);\n }\n });\n this.line();\n }\n\n if (sliceDefs.length > 0) {\n for (const sliceDef of sliceDefs) {\n const typeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchFields = Object.keys(sliceDef.match);\n const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])];\n const excludedNames = allExcluded.map((name) => JSON.stringify(name));\n // Filter out polymorphic base names that don't exist as direct TS properties\n const filteredRequired = sliceDef.required.filter(\n (name) => !matchFields.includes(name) && !polymorphicBaseNames.has(name),\n );\n const requiredNames = filteredRequired.map((name) => JSON.stringify(name));\n let typeExpr = sliceDef.baseType;\n if (excludedNames.length > 0) {\n typeExpr = `Omit<${typeExpr}, ${excludedNames.join(\" | \")}>`;\n }\n if (requiredNames.length > 0) {\n typeExpr = `${typeExpr} & Required<Pick<${sliceDef.baseType}, ${requiredNames.join(\" | \")}>>`;\n }\n this.lineSM(`export type ${typeName} = ${typeExpr}`);\n }\n this.line();\n }\n\n // Determine which helpers are actually needed\n const needsSliceHelpers = sliceDefs.length > 0;\n const extensionsWithNestedPath = extensions.filter((ext) => {\n const targetPath = ext.path.split(\".\").filter((segment) => segment !== \"extension\");\n return targetPath.length > 0;\n });\n const needsGetOrCreateObjectAtPath = extensionsWithNestedPath.length > 0;\n const needsExtensionExtraction = complexExtensions.length > 0;\n const needsSliceExtraction = sliceDefs.length > 0;\n\n if (needsSliceHelpers || needsGetOrCreateObjectAtPath || needsExtensionExtraction || needsSliceExtraction) {\n this.generateProfileHelpersImport({\n needsGetOrCreateObjectAtPath,\n needsSliceHelpers,\n needsExtensionExtraction,\n needsSliceExtraction,\n });\n this.line();\n }\n\n // Check if we have an override interface (narrowed types)\n const hasOverrideInterface = this.detectFieldOverrides(tsIndex, flatProfile).size > 0;\n\n this.curlyBlock([\"export\", \"class\", profileClassName], () => {\n this.line(`private resource: ${tsBaseResourceName}`);\n this.line();\n this.curlyBlock([\"constructor\", `(resource: ${tsBaseResourceName})`], () => {\n this.line(\"this.resource = resource\");\n });\n this.line();\n // toResource() returns base type (e.g., Patient)\n this.curlyBlock([\"toResource\", \"()\", `: ${tsBaseResourceName}`], () => {\n this.line(\"return this.resource\");\n });\n this.line();\n // toProfile() returns casted profile type if override interface exists\n if (hasOverrideInterface) {\n this.curlyBlock([\"toProfile\", \"()\", `: ${tsProfileName}`], () => {\n this.line(`return this.resource as ${tsProfileName}`);\n });\n this.line();\n }\n\n const extensionMethods = extensions\n .filter((ext) => ext.url)\n .map((ext) => ({\n ext,\n baseName: tsExtensionMethodName(ext.name),\n fallbackName: tsExtensionMethodFallback(ext.name, ext.path),\n }));\n const sliceMethodBases = sliceDefs.map((slice) => tsSliceMethodName(slice.sliceName));\n const methodCounts = new Map<string, number>();\n for (const name of [...sliceMethodBases, ...extensionMethods.map((m) => m.baseName)]) {\n methodCounts.set(name, (methodCounts.get(name) ?? 0) + 1);\n }\n const extensionMethodNames = new Map(\n extensionMethods.map((entry) => [\n entry.ext,\n (methodCounts.get(entry.baseName) ?? 0) > 1 ? entry.fallbackName : entry.baseName,\n ]),\n );\n const sliceMethodNames = new Map(\n sliceDefs.map((slice) => {\n const baseName = tsSliceMethodName(slice.sliceName);\n const needsFallback = (methodCounts.get(baseName) ?? 0) > 1;\n const fallback = tsSliceMethodFallback(slice.fieldName, slice.sliceName);\n return [slice, needsFallback ? fallback : baseName];\n }),\n );\n\n for (const ext of extensions) {\n if (!ext.url) continue;\n const methodName = extensionMethodNames.get(ext) ?? tsExtensionMethodFallback(ext.name, ext.path);\n const valueTypes = ext.valueTypes ?? [];\n const targetPath = ext.path.split(\".\").filter((segment) => segment !== \"extension\");\n\n if (ext.isComplex && ext.subExtensions) {\n const inputTypeName = tsExtensionInputTypeName(tsProfileName, ext.name);\n this.curlyBlock([\"public\", methodName, `(input: ${inputTypeName}): this`], () => {\n this.line(\"const subExtensions: Extension[] = []\");\n for (const sub of ext.subExtensions ?? []) {\n const valueField = sub.valueType\n ? `value${uppercaseFirstLetter(sub.valueType.name)}`\n : \"value\";\n // When value type is unknown, cast to Extension to avoid TS error\n const needsCast = !sub.valueType;\n const pushSuffix = needsCast ? \" as Extension\" : \"\";\n if (sub.max === \"*\") {\n this.curlyBlock([\"if\", `(input.${sub.name})`], () => {\n this.curlyBlock([\"for\", `(const item of input.${sub.name})`], () => {\n this.line(\n `subExtensions.push({ url: \"${sub.url}\", ${valueField}: item }${pushSuffix})`,\n );\n });\n });\n } else {\n this.curlyBlock([\"if\", `(input.${sub.name} !== undefined)`], () => {\n this.line(\n `subExtensions.push({ url: \"${sub.url}\", ${valueField}: input.${sub.name} }${pushSuffix})`,\n );\n });\n }\n }\n if (targetPath.length === 0) {\n this.line(\"const list = (this.resource.extension ??= [])\");\n this.line(`list.push({ url: \"${ext.url}\", extension: subExtensions })`);\n } else {\n this.line(\n `const target = getOrCreateObjectAtPath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n this.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n this.line(\n `(target.extension as Extension[]).push({ url: \"${ext.url}\", extension: subExtensions })`,\n );\n }\n this.line(\"return this\");\n });\n } else if (valueTypes.length === 1 && valueTypes[0]) {\n const firstValueType = valueTypes[0];\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = `value${uppercaseFirstLetter(firstValueType.name)}`;\n this.curlyBlock([\"public\", methodName, `(value: ${valueType}): this`], () => {\n if (targetPath.length === 0) {\n this.line(\"const list = (this.resource.extension ??= [])\");\n this.line(`list.push({ url: \"${ext.url}\", ${valueField}: value })`);\n } else {\n this.line(\n `const target = getOrCreateObjectAtPath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(\n targetPath,\n )})`,\n );\n this.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n this.line(\n `(target.extension as Extension[]).push({ url: \"${ext.url}\", ${valueField}: value })`,\n );\n }\n this.line(\"return this\");\n });\n } else {\n this.curlyBlock([\"public\", methodName, `(value: Omit<Extension, \"url\">): this`], () => {\n if (targetPath.length === 0) {\n this.line(\"const list = (this.resource.extension ??= [])\");\n this.line(`list.push({ url: \"${ext.url}\", ...value })`);\n } else {\n this.line(\n `const target = getOrCreateObjectAtPath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(\n targetPath,\n )})`,\n );\n this.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n this.line(`(target.extension as Extension[]).push({ url: \"${ext.url}\", ...value })`);\n }\n this.line(\"return this\");\n });\n }\n this.line();\n }\n\n for (const sliceDef of sliceDefs) {\n const methodName =\n sliceMethodNames.get(sliceDef) ?? tsSliceMethodFallback(sliceDef.fieldName, sliceDef.sliceName);\n const typeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchLiteral = JSON.stringify(sliceDef.match);\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n // Make input optional when there are no required fields (input can be empty object)\n const paramSignature = sliceDef.inputOptional\n ? `(input?: ${typeName}): this`\n : `(input: ${typeName}): this`;\n this.curlyBlock([\"public\", methodName, paramSignature], () => {\n this.line(`const match = ${matchLiteral} as Record<string, unknown>`);\n // Use empty object as default when input is optional\n const inputExpr = sliceDef.inputOptional\n ? \"(input ?? {}) as Record<string, unknown>\"\n : \"input as Record<string, unknown>\";\n this.line(`const value = applySliceMatch(${inputExpr}, match) as unknown as ${sliceDef.baseType}`);\n if (sliceDef.array) {\n this.line(`const list = (${fieldAccess} ??= [])`);\n this.line(\"const index = list.findIndex((item) => matchesSlice(item, match))\");\n this.line(\"if (index === -1) {\");\n this.indentBlock(() => {\n this.line(\"list.push(value)\");\n });\n this.line(\"} else {\");\n this.indentBlock(() => {\n this.line(\"list[index] = value\");\n });\n this.line(\"}\");\n } else {\n this.line(`${fieldAccess} = value`);\n }\n this.line(\"return this\");\n });\n this.line();\n }\n\n // Generate extension getters - two methods per extension:\n // 1. get{Name}() - returns flat API (simplified)\n // 2. get{Name}Extension() - returns raw FHIR Extension\n const generatedGetMethods = new Set<string>();\n\n for (const ext of extensions) {\n if (!ext.url) continue;\n const baseName = uppercaseFirstLetter(safeCamelCase(ext.name));\n const getMethodName = `get${baseName}`;\n const getExtensionMethodName = `get${baseName}Extension`;\n if (generatedGetMethods.has(getMethodName)) continue;\n generatedGetMethods.add(getMethodName);\n const valueTypes = ext.valueTypes ?? [];\n const targetPath = ext.path.split(\".\").filter((segment) => segment !== \"extension\");\n\n // Helper to generate the extension lookup code\n const generateExtLookup = () => {\n if (targetPath.length === 0) {\n this.line(`const ext = this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n this.line(\n `const target = getOrCreateObjectAtPath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n this.line(\n `const ext = (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`,\n );\n }\n };\n\n if (ext.isComplex && ext.subExtensions) {\n const inputTypeName = tsExtensionInputTypeName(tsProfileName, ext.name);\n // Flat API getter\n this.curlyBlock([\"public\", getMethodName, `(): ${inputTypeName} | undefined`], () => {\n generateExtLookup();\n this.line(\"if (!ext) return undefined\");\n // Build extraction config\n const configItems = (ext.subExtensions ?? []).map((sub) => {\n const valueField = sub.valueType\n ? `value${uppercaseFirstLetter(sub.valueType.name)}`\n : \"value\";\n const isArray = sub.max === \"*\";\n return `{ name: \"${sub.url}\", valueField: \"${valueField}\", isArray: ${isArray} }`;\n });\n this.line(`const config = [${configItems.join(\", \")}]`);\n this.line(\n `return extractComplexExtension(ext as unknown as { extension?: Array<{ url?: string; [key: string]: unknown }> }, config) as ${inputTypeName}`,\n );\n });\n this.line();\n // Raw Extension getter\n this.curlyBlock([\"public\", getExtensionMethodName, \"(): Extension | undefined\"], () => {\n generateExtLookup();\n this.line(\"return ext\");\n });\n } else if (valueTypes.length === 1 && valueTypes[0]) {\n const firstValueType = valueTypes[0];\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = `value${uppercaseFirstLetter(firstValueType.name)}`;\n // Flat API getter\n this.curlyBlock([\"public\", getMethodName, `(): ${valueType} | undefined`], () => {\n generateExtLookup();\n this.line(`return ext?.${valueField}`);\n });\n this.line();\n // Raw Extension getter\n this.curlyBlock([\"public\", getExtensionMethodName, \"(): Extension | undefined\"], () => {\n generateExtLookup();\n this.line(\"return ext\");\n });\n } else {\n // Generic extension - only raw getter makes sense\n this.curlyBlock([\"public\", getMethodName, \"(): Extension | undefined\"], () => {\n if (targetPath.length === 0) {\n this.line(`return this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n this.line(\n `const target = getOrCreateObjectAtPath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n this.line(\n `return (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`,\n );\n }\n });\n }\n this.line();\n }\n\n // Generate slice getters - two methods per slice:\n // 1. get{SliceName}() - returns simplified (without discriminator fields)\n // 2. get{SliceName}Raw() - returns full FHIR type with all fields\n for (const sliceDef of sliceDefs) {\n const baseName = uppercaseFirstLetter(safeCamelCase(sliceDef.sliceName));\n const getMethodName = `get${baseName}`;\n const getRawMethodName = `get${baseName}Raw`;\n if (generatedGetMethods.has(getMethodName)) continue;\n generatedGetMethods.add(getMethodName);\n const typeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchLiteral = JSON.stringify(sliceDef.match);\n const matchKeys = JSON.stringify(Object.keys(sliceDef.match));\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n const baseType = sliceDef.baseType;\n\n // Helper to find the slice item\n const generateSliceLookup = () => {\n this.line(`const match = ${matchLiteral} as Record<string, unknown>`);\n if (sliceDef.array) {\n this.line(`const list = ${fieldAccess}`);\n this.line(\"if (!list) return undefined\");\n this.line(\"const item = list.find((item) => matchesSlice(item, match))\");\n } else {\n this.line(`const item = ${fieldAccess}`);\n this.line(\"if (!item || !matchesSlice(item, match)) return undefined\");\n }\n };\n\n // Flat API getter (simplified)\n this.curlyBlock([\"public\", getMethodName, `(): ${typeName} | undefined`], () => {\n generateSliceLookup();\n if (sliceDef.array) {\n this.line(\"if (!item) return undefined\");\n }\n this.line(\n `return extractSliceSimplified(item as unknown as Record<string, unknown>, ${matchKeys}) as ${typeName}`,\n );\n });\n this.line();\n\n // Raw getter (full FHIR type)\n this.curlyBlock([\"public\", getRawMethodName, `(): ${baseType} | undefined`], () => {\n generateSliceLookup();\n if (sliceDef.array) {\n this.line(\"return item\");\n } else {\n this.line(\"return item\");\n }\n });\n this.line();\n }\n });\n this.line();\n }\n\n /**\n * Detects fields where the profile changes cardinality or narrows Reference types\n * compared to the base resource type.\n */\n private detectFieldOverrides(\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n ): Map<string, { profileType: string; required: boolean; array: boolean }> {\n const overrides = new Map<string, { profileType: string; required: boolean; array: boolean }>();\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization)) return overrides;\n\n for (const [fieldName, pField] of Object.entries(flatProfile.fields ?? {})) {\n if (!isNotChoiceDeclarationField(pField)) continue;\n const sField = specialization.fields?.[fieldName];\n if (!sField || isChoiceDeclarationField(sField)) continue;\n\n // Check for Reference narrowing\n if (pField.reference && sField.reference && pField.reference.length < sField.reference.length) {\n const references = pField.reference\n .map((ref) => {\n const resRef = tsIndex.findLastSpecializationByIdentifier(ref);\n if (resRef.name !== ref.name) {\n return `\"${resRef.name}\"`;\n }\n return `\"${ref.name}\"`;\n })\n .join(\" | \");\n overrides.set(fieldName, {\n profileType: `Reference<${references}>`,\n required: pField.required ?? false,\n array: pField.array ?? false,\n });\n }\n // Check for cardinality change (optional -> required)\n else if (pField.required && !sField.required) {\n const tsType = this.tsTypeForProfileField(tsIndex, flatProfile, fieldName, pField);\n overrides.set(fieldName, {\n profileType: tsType,\n required: true,\n array: pField.array ?? false,\n });\n }\n }\n return overrides;\n }\n\n /**\n * Generates an override interface for profiles that narrow cardinality or Reference types.\n * Example: export interface USCorePatient extends Patient { subject: Reference<\"Patient\"> }\n */\n generateProfileOverrideInterface(tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) {\n const overrides = this.detectFieldOverrides(tsIndex, flatProfile);\n if (overrides.size === 0) return;\n\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n\n this.curlyBlock([\"export\", \"interface\", tsProfileName, \"extends\", tsBaseResourceName], () => {\n for (const [fieldName, override] of overrides) {\n const tsField = tsFieldName(fieldName);\n const optionalSymbol = override.required ? \"\" : \"?\";\n const arraySymbol = override.array ? \"[]\" : \"\";\n this.lineSM(`${tsField}${optionalSymbol}: ${override.profileType}${arraySymbol}`);\n }\n });\n this.line();\n }\n\n generateResourceModule(tsIndex: TypeSchemaIndex, schema: TypeSchema) {\n if (isProfileTypeSchema(schema)) {\n this.cd(\"profiles\", () => {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n const flatProfile = tsIndex.flatProfile(schema);\n this.generateProfileImports(tsIndex, flatProfile);\n this.comment(\n \"CanonicalURL:\",\n schema.identifier.url,\n `(pkg: ${packageMetaToFhir(packageMeta(schema))})`,\n );\n this.generateProfileOverrideInterface(tsIndex, flatProfile);\n this.generateProfileClass(tsIndex, flatProfile);\n });\n });\n } else if ([\"complex-type\", \"resource\", \"logical\"].includes(schema.identifier.kind)) {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n this.generateDependenciesImports(tsIndex, schema);\n this.generateComplexTypeReexports(schema);\n this.generateNestedTypes(tsIndex, schema);\n this.comment(\n \"CanonicalURL:\",\n schema.identifier.url,\n `(pkg: ${packageMetaToFhir(packageMeta(schema))})`,\n );\n this.generateType(tsIndex, schema);\n this.generateResourceTypePredicate(schema);\n });\n } else {\n 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 ? tsIndex.collectProfiles() : []),\n ];\n const grouped = groupByPackages(typesToGenerate);\n\n const hasProfiles = this.opts.generateProfile && typesToGenerate.some(isProfileTypeSchema);\n\n this.cd(\"/\", () => {\n if (hasProfiles) {\n this.generateProfileHelpersModule();\n }\n\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.generateProfileIndexFile(packageSchemas.filter(isProfileTypeSchema));\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 assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport { CanonicalManager, type LocalPackageConfig, type TgzPackageConfig } from \"@atomic-ehr/fhir-canonical-manager\";\nimport { CSharp, type CSharpGeneratorOptions } from \"@root/api/writer-generator/csharp/csharp\";\nimport { Python, type PythonGeneratorOptions } from \"@root/api/writer-generator/python\";\nimport { generateTypeSchemas } from \"@root/typeschema\";\nimport { promoteLogical } from \"@root/typeschema/ir/logic-promotion\";\nimport { treeShake } from \"@root/typeschema/ir/tree-shake\";\nimport type { IrConf, LogicalPromotionConf, TreeShakeConf } from \"@root/typeschema/ir/types\";\nimport { type Register, registerFromManager } from \"@root/typeschema/register\";\nimport { type PackageMeta, packageMetaToNpm } from \"@root/typeschema/types\";\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 { IntrospectionWriter, type IntrospectionWriterOptions } from \"./writer-generator/introspection\";\nimport { IrReportWriterWriter, type IrReportWriterWriterOptions } from \"./writer-generator/ir-report\";\nimport type { FileBasedMustacheGeneratorOptions } from \"./writer-generator/mustache\";\nimport * as Mustache from \"./writer-generator/mustache\";\nimport { TypeScript, type TypeScriptOptions } from \"./writer-generator/typescript\";\nimport type { FileBuffer, FileSystemWriter, FileSystemWriterOptions, WriterOptions } from \"./writer-generator/writer\";\n\n/**\n * Configuration options for the API builder\n */\nexport interface APIBuilderOptions {\n outputDir: string;\n cleanOutput: boolean;\n throwException: boolean;\n treeShake: TreeShakeConf | undefined;\n promoteLogical: LogicalPromotionConf | undefined;\n\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 | undefined;\n}\n\nexport type GenerationReport = {\n success: boolean;\n outputDir: string;\n filesGenerated: Record<string, string>;\n errors: string[];\n warnings: string[];\n duration: number;\n};\n\nfunction countLinesByMatches(text: string): number {\n if (text === \"\") return 0;\n const m = text.match(/\\n/g);\n return m ? m.length + 1 : 1;\n}\n\nexport const prettyReport = (report: GenerationReport): string => {\n const { success, filesGenerated, errors, warnings, duration } = report;\n const errorsStr = errors.length > 0 ? `Errors: ${errors.join(\", \")}` : undefined;\n const warningsStr = warnings.length > 0 ? `Warnings: ${warnings.join(\", \")}` : undefined;\n let allLoc = 0;\n const files = Object.entries(filesGenerated)\n .map(([path, content]) => {\n const loc = countLinesByMatches(content);\n allLoc += loc;\n return ` - ${path} (${loc} loc)`;\n })\n .join(\"\\n\");\n return [\n `Generated files (${Math.round(allLoc / 1000)} kloc):`,\n files,\n errorsStr,\n warningsStr,\n `Duration: ${Math.round(duration)}ms`,\n `Status: ${success ? \"🟩 Success\" : \"🟥 Failure\"}`,\n ]\n .filter((e) => e)\n .join(\"\\n\");\n};\n\nexport interface LocalStructureDefinitionConfig {\n package: PackageMeta;\n path: string;\n dependencies?: PackageMeta[];\n}\n\nconst cleanup = async (opts: APIBuilderOptions, 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 } catch (error) {\n logger.warn(`Error cleaning output directory: ${error instanceof Error ? error.message : String(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 options: APIBuilderOptions;\n private manager: ReturnType<typeof CanonicalManager>;\n private prebuiltRegister: Register | undefined;\n private managerInput: {\n npmPackages: string[];\n localSDs: LocalPackageConfig[];\n localTgzPackages: TgzPackageConfig[];\n };\n private logger: CodegenLogger;\n private generators: { name: string; writer: FileSystemWriter }[] = [];\n\n constructor(\n userOpts: Partial<APIBuilderOptions> & {\n manager?: ReturnType<typeof CanonicalManager>;\n register?: Register;\n logger?: CodegenLogger;\n } = {},\n ) {\n const defaultOpts: APIBuilderOptions = {\n outputDir: \"./generated\",\n cleanOutput: true,\n throwException: false,\n treeShake: undefined,\n promoteLogical: undefined,\n registry: undefined,\n logLevel: parseLogLevel(\"INFO\"),\n };\n const opts: APIBuilderOptions = {\n ...defaultOpts,\n ...Object.fromEntries(\n Object.entries(userOpts).filter(\n ([k, v]) => v !== undefined && k !== \"manager\" && k !== \"register\" && k !== \"logger\",\n ),\n ),\n };\n\n if (userOpts.manager && userOpts.register) {\n throw new Error(\"Cannot provide both 'manager' and 'register' options. Use one or the other.\");\n }\n\n this.managerInput = {\n npmPackages: [],\n localSDs: [],\n localTgzPackages: [],\n };\n this.prebuiltRegister = userOpts.register;\n this.manager =\n userOpts.manager ??\n CanonicalManager({\n packages: [],\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: userOpts.registry,\n });\n this.logger = userOpts.logger ?? createLogger({ prefix: \"API\", level: opts.logLevel });\n this.options = opts;\n }\n\n fromPackage(packageName: string, version?: string): APIBuilder {\n const pkg = packageMetaToNpm({ name: packageName, version: version || \"latest\" });\n this.managerInput.npmPackages.push(pkg);\n return this;\n }\n\n fromPackageRef(packageRef: string): APIBuilder {\n this.managerInput.npmPackages.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.logger.info(`Registering local StructureDefinitions for ${config.package.name}@${config.package.version}`);\n this.managerInput.localSDs.push({\n name: config.package.name,\n version: config.package.version,\n path: config.path,\n dependencies: config.dependencies?.map((dep) => packageMetaToNpm(dep)),\n });\n return this;\n }\n\n localTgzPackage(archivePath: string): APIBuilder {\n this.logger.info(`Registering local tgz package: ${archivePath}`);\n this.managerInput.localTgzPackages.push({ archivePath: Path.resolve(archivePath) });\n return this;\n }\n\n introspection(userOpts?: Partial<IntrospectionWriterOptions>): APIBuilder {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IntrospectionWriterOptions = {\n ...defaultWriterOpts,\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IntrospectionWriter(opts);\n this.generators.push({ name: \"introspection\", writer });\n this.logger.debug(`Configured introspection generator (${JSON.stringify(opts, undefined, 2)})`);\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.push({ name: \"typescript\", writer: 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.push({ name: \"python\", writer: generator });\n this.logger.debug(`Configured python generator`);\n return this;\n }\n\n mustache(templatePath: string, userOpts: Partial<FileSystemWriterOptions & FileBasedMustacheGeneratorOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n };\n const defaultMustacheOpts: Partial<FileBasedMustacheGeneratorOptions> = {\n meta: {\n timestamp: new Date().toISOString(),\n generator: \"atomic-codegen\",\n },\n };\n const opts = {\n ...defaultWriterOpts,\n ...defaultMustacheOpts,\n ...userOpts,\n };\n const generator = Mustache.createGenerator(templatePath, opts);\n this.generators.push({ name: `mustache[${templatePath}]`, writer: generator });\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\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.push({ name: \"csharp\", writer: generator });\n this.logger.debug(`Configured C# generator`);\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 gen of this.generators) {\n gen.writer.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 typeSchema(cfg: IrConf) {\n if (cfg.treeShake) {\n assert(this.options.treeShake === undefined, \"treeShake option is already set\");\n this.options.treeShake = cfg.treeShake;\n }\n if (cfg.promoteLogical) {\n assert(this.options.promoteLogical === undefined, \"promoteLogical option is already set\");\n this.options.promoteLogical = cfg.promoteLogical;\n }\n this.irReport({});\n return this;\n }\n\n irReport(userOpts: Partial<IrReportWriterWriterOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IrReportWriterWriterOptions = {\n ...defaultWriterOpts,\n rootReadmeFileName: \"README.md\",\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IrReportWriterWriter(opts);\n this.generators.push({ name: \"ir-report\", writer });\n this.logger.debug(`Configured ir-report generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n async generate(): Promise<GenerationReport> {\n const startTime = performance.now();\n const result: GenerationReport = {\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.length} generators`);\n try {\n if (this.options.cleanOutput) cleanup(this.options, this.logger);\n\n let register: Register;\n if (this.prebuiltRegister) {\n this.logger.info(\"Using prebuilt register\");\n register = this.prebuiltRegister;\n } else {\n this.logger.info(\"Initialize Canonical Manager\");\n // Add all packages before initialization\n if (this.managerInput.npmPackages.length > 0) {\n await this.manager.addPackages(...this.managerInput.npmPackages.sort());\n }\n // Add local packages and archives\n for (const config of this.managerInput.localSDs) {\n await this.manager.addLocalPackage(config);\n }\n for (const tgzArchive of this.managerInput.localTgzPackages) {\n await this.manager.addTgzPackage(tgzArchive);\n }\n // Initialize after all packages are registered\n const ref2meta = await this.manager.init();\n\n const packageMetas = Object.values(ref2meta);\n register = await registerFromManager(this.manager, {\n logger: this.logger,\n focusedPackages: packageMetas,\n });\n }\n\n const typeSchemas = await generateTypeSchemas(register, this.logger);\n\n const tsIndexOpts = {\n register,\n logger: this.logger,\n };\n let tsIndex = mkTypeSchemaIndex(typeSchemas, tsIndexOpts);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake);\n if (this.options.promoteLogical) tsIndex = promoteLogical(tsIndex, this.options.promoteLogical);\n\n this.logger.debug(`Executing ${this.generators.length} 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.generators = [];\n return this;\n }\n\n /**\n * Get configured generators (for inspection)\n */\n getGenerators(): string[] {\n return this.generators.map((g) => g.name);\n }\n\n private async executeGenerators(result: GenerationReport, tsIndex: TypeSchemaIndex): Promise<void> {\n for (const gen of this.generators) {\n this.logger.info(`Generating ${gen.name}...`);\n\n try {\n await gen.writer.generateAsync(tsIndex);\n const fileBuffer: FileBuffer[] = gen.writer.writtenFiles();\n fileBuffer.forEach((buf) => {\n result.filesGenerated[buf.relPath] = buf.content;\n });\n this.logger.info(`Generating ${gen.name} finished successfully`);\n } catch (error) {\n result.errors.push(\n `${gen.name} generator failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (this.options.throwException) throw error;\n }\n }\n }\n}\n"]}